Merge pull request #11273 from ethereum/fmtlib

Adds fmtlib as 3rdparty dependency for easier string composition.
This commit is contained in:
chriseth 2021-10-11 14:33:48 +02:00 committed by GitHub
commit c29cff6f75
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 64 additions and 24 deletions

View File

@ -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
View 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()

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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())
)
);
};

View File

@ -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)

View File

@ -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>

View File

@ -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

View File

@ -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).

View File

@ -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".

View File

@ -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".