mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #11273 from ethereum/fmtlib
Adds fmtlib as 3rdparty dependency for easier string composition.
This commit is contained in:
commit
c29cff6f75
@ -41,6 +41,7 @@ include(EthCcache)
|
||||
|
||||
# Let's find our dependencies
|
||||
include(EthDependencies)
|
||||
include(fmtlib)
|
||||
include(jsoncpp)
|
||||
include(range-v3)
|
||||
include_directories(SYSTEM ${JSONCPP_INCLUDE_DIR})
|
||||
|
20
cmake/fmtlib.cmake
Normal file
20
cmake/fmtlib.cmake
Normal file
@ -0,0 +1,20 @@
|
||||
include(FetchContent)
|
||||
|
||||
FetchContent_Declare(
|
||||
fmtlib
|
||||
PREFIX "${CMAKE_BINARY_DIR}/deps"
|
||||
DOWNLOAD_DIR "${CMAKE_SOURCE_DIR}/deps/downloads"
|
||||
DOWNLOAD_NAME fmt-8.0.1.tar.gz
|
||||
URL https://github.com/fmtlib/fmt/archive/8.0.1.tar.gz
|
||||
URL_HASH SHA256=b06ca3130158c625848f3fb7418f235155a4d389b2abc3a6245fb01cb0eb1e01
|
||||
)
|
||||
|
||||
if (CMAKE_VERSION VERSION_LESS "3.14.0")
|
||||
FetchContent_GetProperties(fmtlib)
|
||||
if (NOT fmtlib_POPULATED)
|
||||
FetchContent_Populate(fmtlib)
|
||||
add_subdirectory(${fmtlib_SOURCE_DIR} ${fmtlib_BINARY_DIR})
|
||||
endif()
|
||||
else()
|
||||
FetchContent_MakeAvailable(fmtlib)
|
||||
endif()
|
@ -38,4 +38,4 @@ set(sources
|
||||
)
|
||||
|
||||
add_library(evmasm ${sources})
|
||||
target_link_libraries(evmasm PUBLIC solutil)
|
||||
target_link_libraries(evmasm PUBLIC solutil fmt::fmt-header-only)
|
||||
|
@ -29,4 +29,4 @@ set(sources
|
||||
)
|
||||
|
||||
add_library(langutil ${sources})
|
||||
target_link_libraries(langutil PUBLIC solutil)
|
||||
target_link_libraries(langutil PUBLIC solutil fmt::fmt-header-only)
|
||||
|
@ -159,4 +159,4 @@ set(sources
|
||||
)
|
||||
|
||||
add_library(solidity ${sources})
|
||||
target_link_libraries(solidity PUBLIC yul evmasm langutil smtutil solutil Boost::boost)
|
||||
target_link_libraries(solidity PUBLIC yul evmasm langutil smtutil solutil Boost::boost fmt::fmt-header-only)
|
||||
|
@ -37,6 +37,8 @@
|
||||
|
||||
#include <boost/algorithm/string.hpp>
|
||||
|
||||
#include <fmt/format.h>
|
||||
|
||||
#include <memory>
|
||||
#include <functional>
|
||||
|
||||
@ -643,7 +645,7 @@ void AsmAnalyzer::expectValidType(YulString _type, SourceLocation const& _locati
|
||||
m_errorReporter.typeError(
|
||||
5473_error,
|
||||
_location,
|
||||
"\"" + _type.str() + "\" is not a valid type (user defined types are not yet supported)."
|
||||
fmt::format("\"{}\" is not a valid type (user defined types are not yet supported).", _type)
|
||||
);
|
||||
}
|
||||
|
||||
@ -653,11 +655,7 @@ void AsmAnalyzer::expectType(YulString _expectedType, YulString _givenType, Sour
|
||||
m_errorReporter.typeError(
|
||||
3781_error,
|
||||
_location,
|
||||
"Expected a value of type \"" +
|
||||
_expectedType.str() +
|
||||
"\" but got \"" +
|
||||
_givenType.str() +
|
||||
"\""
|
||||
fmt::format("Expected a value of type \"{}\" but got \"{}\".", _expectedType, _givenType)
|
||||
);
|
||||
}
|
||||
|
||||
@ -689,14 +687,12 @@ bool AsmAnalyzer::validateInstructions(evmasm::Instruction _instr, SourceLocatio
|
||||
m_errorReporter.typeError(
|
||||
_errorId,
|
||||
_location,
|
||||
"The \"" +
|
||||
boost::to_lower_copy(instructionInfo(_instr).name)
|
||||
+ "\" instruction is " +
|
||||
vmKindMessage +
|
||||
" VMs " +
|
||||
"(you are currently compiling for \"" +
|
||||
m_evmVersion.name() +
|
||||
"\")."
|
||||
fmt::format(
|
||||
"The \"{instruction}\" instruction is {kind} VMs (you are currently compiling for \"{version}\").",
|
||||
fmt::arg("instruction", boost::to_lower_copy(instructionInfo(_instr).name)),
|
||||
fmt::arg("kind", vmKindMessage),
|
||||
fmt::arg("version", m_evmVersion.name())
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
|
@ -216,4 +216,4 @@ add_library(yul
|
||||
optimiser/VarNameCleaner.h
|
||||
)
|
||||
|
||||
target_link_libraries(yul PUBLIC evmasm solutil langutil smtutil)
|
||||
target_link_libraries(yul PUBLIC evmasm solutil langutil smtutil fmt::fmt-header-only)
|
||||
|
@ -21,6 +21,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <fmt/format.h>
|
||||
|
||||
#include <unordered_map>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
@ -166,6 +168,26 @@ inline YulString operator "" _yulstring(char const* _string, std::size_t _size)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace fmt
|
||||
{
|
||||
template <>
|
||||
struct formatter<solidity::yul::YulString>
|
||||
{
|
||||
template <typename ParseContext>
|
||||
constexpr auto parse(ParseContext& _context)
|
||||
{
|
||||
return _context.begin();
|
||||
}
|
||||
|
||||
template <typename FormatContext>
|
||||
auto format(solidity::yul::YulString _value, FormatContext& _context)
|
||||
{
|
||||
return format_to(_context.out(), "{}", _value.str());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
namespace std
|
||||
{
|
||||
template<> struct hash<solidity::yul::YulString>
|
||||
|
@ -105,10 +105,11 @@ ppafilesurl=https://launchpad.net/~ethereum/+archive/ubuntu/${pparepo}/+files
|
||||
git clone --depth 2 --recursive https://github.com/ethereum/solidity.git -b "$branch"
|
||||
mv solidity solc
|
||||
|
||||
# Fetch jsoncpp dependency
|
||||
# Fetch dependencies
|
||||
mkdir -p ./solc/deps/downloads/ 2>/dev/null || true
|
||||
wget -O ./solc/deps/downloads/jsoncpp-1.9.3.tar.gz https://github.com/open-source-parsers/jsoncpp/archive/1.9.3.tar.gz
|
||||
wget -O ./solc/deps/downloads/range-v3-0.11.0.tar.gz https://github.com/ericniebler/range-v3/archive/0.11.0.tar.gz
|
||||
wget -O ./solc/deps/downloads/fmt-7.1.3.tar.gz https://github.com/fmtlib/fmt/archive/7.1.3.tar.gz
|
||||
|
||||
# Determine version
|
||||
cd solc
|
||||
|
@ -5,5 +5,5 @@
|
||||
// ====
|
||||
// dialect: evmTyped
|
||||
// ----
|
||||
// TypeError 3781: (24-38): Expected a value of type "u256" but got "invalidType"
|
||||
// TypeError 3781: (24-38): Expected a value of type "u256" but got "invalidType".
|
||||
// TypeError 5473: (24-38): "invalidType" is not a valid type (user defined types are not yet supported).
|
||||
|
@ -6,5 +6,5 @@
|
||||
// ====
|
||||
// dialect: ewasm
|
||||
// ----
|
||||
// TypeError 3781: (28-33): Expected a value of type "i32" but got "i64"
|
||||
// TypeError 3781: (46-51): Expected a value of type "i32" but got "i64"
|
||||
// TypeError 3781: (28-33): Expected a value of type "i32" but got "i64".
|
||||
// TypeError 3781: (46-51): Expected a value of type "i32" but got "i64".
|
||||
|
@ -6,5 +6,5 @@
|
||||
// ====
|
||||
// dialect: evmTyped
|
||||
// ----
|
||||
// TypeError 3781: (24-33): Expected a value of type "u256" but got "bool"
|
||||
// TypeError 3781: (46-55): Expected a value of type "u256" but got "bool"
|
||||
// TypeError 3781: (24-33): Expected a value of type "u256" but got "bool".
|
||||
// TypeError 3781: (46-55): Expected a value of type "u256" but got "bool".
|
||||
|
Loading…
Reference in New Issue
Block a user