diff options
34 files changed, 76 insertions, 74 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml index 6c5f3e85..c13bef35 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -68,7 +68,7 @@ jobs: - version.txt test_emscripten_solcjs: docker: - - image: trzeci/emscripten:sdk-tag-1.37.21-64bit + - image: circleci/node:10 environment: TERM: xterm steps: @@ -78,23 +78,15 @@ jobs: - run: name: Install external tests deps command: | - apt-get -qq update - apt-get -qy install netcat curl - curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.4/install.sh | NVM_DIR=/usr/local/nvm bash - export NVM_DIR="/usr/local/nvm" - [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm - nvm --version - nvm install 8 node --version npm --version - run: name: Test solcjs command: | - . /usr/local/nvm/nvm.sh test/solcjsTests.sh /tmp/workspace/soljson.js $(cat /tmp/workspace/version.txt) test_emscripten_external: docker: - - image: trzeci/emscripten:sdk-tag-1.37.21-64bit + - image: circleci/node:10 environment: TERM: xterm steps: @@ -104,19 +96,11 @@ jobs: - run: name: Install external tests deps command: | - apt-get -qq update - apt-get -qy install netcat curl - curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.4/install.sh | NVM_DIR=/usr/local/nvm bash - export NVM_DIR="/usr/local/nvm" - [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm - nvm --version - nvm install 8 node --version npm --version - run: name: External tests command: | - . /usr/local/nvm/nvm.sh test/externalTests.sh /tmp/workspace/soljson.js || test/externalTests.sh /tmp/workspace/soljson.js build_x86_linux: docker: diff --git a/docs/introduction-to-smart-contracts.rst b/docs/introduction-to-smart-contracts.rst index 34ef012e..7daae06a 100644 --- a/docs/introduction-to-smart-contracts.rst +++ b/docs/introduction-to-smart-contracts.rst @@ -41,7 +41,7 @@ source code (e.g. `pragma once <https://en.wikipedia.org/wiki/Pragma_once>`_). A contract in the sense of Solidity is a collection of code (its *functions*) and data (its *state*) that resides at a specific address on the Ethereum blockchain. The line ``uint storedData;`` declares a state variable called ``storedData`` of -type ``uint`` (*u*nsigned *int*eger of *256* bits). You can think of it as a single slot +type ``uint`` (*u*\nsigned *int*\eger of *256* bits). You can think of it as a single slot in a database that can be queried and altered by calling functions of the code that manages the database. In the case of Ethereum, this is always the owning contract. And in this case, the functions ``set`` and ``get`` can be used to modify diff --git a/docs/types.rst b/docs/types.rst index f67a6d1a..b6003fd5 100644 --- a/docs/types.rst +++ b/docs/types.rst @@ -1189,7 +1189,14 @@ If ``a`` is an LValue (i.e. a variable or something that can be assigned to), th delete ------ -``delete a`` assigns the initial value for the type to ``a``. I.e. for integers it is equivalent to ``a = 0``, but it can also be used on arrays, where it assigns a dynamic array of length zero or a static array of the same length with all elements reset. For structs, it assigns a struct with all members reset. In other words, the value of ``a`` after ``delete a`` is the same as if ``a`` would be declared without assignment, with the following caveat: +``delete a`` assigns the initial value for the type to ``a``. I.e. for integers it is +equivalent to ``a = 0``, but it can also be used on arrays, where it assigns a dynamic +array of length zero or a static array of the same length with all elements set to their +initial value. ``delete a[x]`` deletes the item at index ``x`` of the array and leaves +all other elements and the length of the array untouched. This especially means that it leaves +a gap in the array. If you plan to remove items, a mapping is probably a better choice. + +For structs, it assigns a struct with all members reset. In other words, the value of ``a`` after ``delete a`` is the same as if ``a`` would be declared without assignment, with the following caveat: ``delete`` has no effect on mappings (as the keys of mappings may be arbitrary and are generally unknown). So if you delete a struct, it will reset all members that are not mappings and also recurse into the members unless they are mappings. However, individual keys and what they map to can be deleted: If ``a`` is a mapping, then ``delete a[x]`` will delete the value stored at ``x``. diff --git a/libsolidity/analysis/ConstantEvaluator.cpp b/libsolidity/analysis/ConstantEvaluator.cpp index 26d9584b..e637795a 100644 --- a/libsolidity/analysis/ConstantEvaluator.cpp +++ b/libsolidity/analysis/ConstantEvaluator.cpp @@ -21,6 +21,7 @@ */ #include <libsolidity/analysis/ConstantEvaluator.h> + #include <libsolidity/ast/AST.h> #include <liblangutil/ErrorReporter.h> diff --git a/libsolidity/analysis/ContractLevelChecker.cpp b/libsolidity/analysis/ContractLevelChecker.cpp index 526caff9..96b9611e 100644 --- a/libsolidity/analysis/ContractLevelChecker.cpp +++ b/libsolidity/analysis/ContractLevelChecker.cpp @@ -20,10 +20,9 @@ */ #include <libsolidity/analysis/ContractLevelChecker.h> -#include <libsolidity/ast/AST.h> +#include <libsolidity/ast/AST.h> #include <liblangutil/ErrorReporter.h> - #include <boost/range/adaptor/reversed.hpp> diff --git a/libsolidity/analysis/ContractLevelChecker.h b/libsolidity/analysis/ContractLevelChecker.h index 15cbf45d..d754687a 100644 --- a/libsolidity/analysis/ContractLevelChecker.h +++ b/libsolidity/analysis/ContractLevelChecker.h @@ -22,7 +22,6 @@ #pragma once #include <libsolidity/ast/ASTForward.h> - #include <map> namespace langutil diff --git a/libsolidity/analysis/ControlFlowAnalyzer.cpp b/libsolidity/analysis/ControlFlowAnalyzer.cpp index a7e1ed97..3adf6318 100644 --- a/libsolidity/analysis/ControlFlowAnalyzer.cpp +++ b/libsolidity/analysis/ControlFlowAnalyzer.cpp @@ -16,6 +16,7 @@ */ #include <libsolidity/analysis/ControlFlowAnalyzer.h> + #include <liblangutil/SourceLocation.h> #include <boost/range/algorithm/sort.hpp> diff --git a/libsolidity/analysis/ControlFlowAnalyzer.h b/libsolidity/analysis/ControlFlowAnalyzer.h index 859d826a..7761817a 100644 --- a/libsolidity/analysis/ControlFlowAnalyzer.h +++ b/libsolidity/analysis/ControlFlowAnalyzer.h @@ -18,7 +18,6 @@ #pragma once #include <libsolidity/analysis/ControlFlowGraph.h> - #include <set> namespace dev diff --git a/libsolidity/analysis/ControlFlowGraph.cpp b/libsolidity/analysis/ControlFlowGraph.cpp index a7cc9508..8960166a 100644 --- a/libsolidity/analysis/ControlFlowGraph.cpp +++ b/libsolidity/analysis/ControlFlowGraph.cpp @@ -16,10 +16,9 @@ */ #include <libsolidity/analysis/ControlFlowGraph.h> -#include <libsolidity/analysis/ControlFlowBuilder.h> +#include <libsolidity/analysis/ControlFlowBuilder.h> #include <boost/range/adaptor/reversed.hpp> - #include <algorithm> using namespace std; diff --git a/libsolidity/analysis/DeclarationContainer.cpp b/libsolidity/analysis/DeclarationContainer.cpp index cf12a49d..d0657898 100644 --- a/libsolidity/analysis/DeclarationContainer.cpp +++ b/libsolidity/analysis/DeclarationContainer.cpp @@ -21,6 +21,7 @@ */ #include <libsolidity/analysis/DeclarationContainer.h> + #include <libsolidity/ast/AST.h> #include <libsolidity/ast/Types.h> #include <libdevcore/StringUtils.h> diff --git a/libsolidity/analysis/DeclarationContainer.h b/libsolidity/analysis/DeclarationContainer.h index 9d7a17a3..e26f5891 100644 --- a/libsolidity/analysis/DeclarationContainer.h +++ b/libsolidity/analysis/DeclarationContainer.h @@ -22,11 +22,10 @@ #pragma once +#include <libsolidity/ast/ASTForward.h> +#include <boost/noncopyable.hpp> #include <map> #include <set> -#include <boost/noncopyable.hpp> - -#include <libsolidity/ast/ASTForward.h> namespace dev { diff --git a/libsolidity/analysis/DocStringAnalyser.cpp b/libsolidity/analysis/DocStringAnalyser.cpp index 69a7a43c..0878b550 100644 --- a/libsolidity/analysis/DocStringAnalyser.cpp +++ b/libsolidity/analysis/DocStringAnalyser.cpp @@ -22,9 +22,10 @@ */ #include <libsolidity/analysis/DocStringAnalyser.h> + #include <libsolidity/ast/AST.h> -#include <liblangutil/ErrorReporter.h> #include <libsolidity/parsing/DocStringParser.h> +#include <liblangutil/ErrorReporter.h> using namespace std; using namespace dev; diff --git a/libsolidity/analysis/GlobalContext.cpp b/libsolidity/analysis/GlobalContext.cpp index cba2655c..cd5fe07d 100644 --- a/libsolidity/analysis/GlobalContext.cpp +++ b/libsolidity/analysis/GlobalContext.cpp @@ -21,10 +21,11 @@ * Container of the (implicit and explicit) global objects. */ -#include <memory> #include <libsolidity/analysis/GlobalContext.h> + #include <libsolidity/ast/AST.h> #include <libsolidity/ast/Types.h> +#include <memory> using namespace std; diff --git a/libsolidity/analysis/GlobalContext.h b/libsolidity/analysis/GlobalContext.h index 4ed08711..09611c41 100644 --- a/libsolidity/analysis/GlobalContext.h +++ b/libsolidity/analysis/GlobalContext.h @@ -22,12 +22,12 @@ #pragma once -#include <string> -#include <vector> +#include <libsolidity/ast/ASTForward.h> +#include <boost/noncopyable.hpp> #include <map> #include <memory> -#include <boost/noncopyable.hpp> -#include <libsolidity/ast/ASTForward.h> +#include <string> +#include <vector> namespace dev { diff --git a/libsolidity/analysis/NameAndTypeResolver.cpp b/libsolidity/analysis/NameAndTypeResolver.cpp index 0528a200..95bc69fe 100644 --- a/libsolidity/analysis/NameAndTypeResolver.cpp +++ b/libsolidity/analysis/NameAndTypeResolver.cpp @@ -22,11 +22,10 @@ #include <libsolidity/analysis/NameAndTypeResolver.h> -#include <libsolidity/ast/AST.h> #include <libsolidity/analysis/TypeChecker.h> +#include <libsolidity/ast/AST.h> #include <liblangutil/ErrorReporter.h> #include <libdevcore/StringUtils.h> - #include <boost/algorithm/string.hpp> using namespace std; diff --git a/libsolidity/analysis/NameAndTypeResolver.h b/libsolidity/analysis/NameAndTypeResolver.h index 1b034ef4..89c53932 100644 --- a/libsolidity/analysis/NameAndTypeResolver.h +++ b/libsolidity/analysis/NameAndTypeResolver.h @@ -22,13 +22,15 @@ #pragma once -#include <map> -#include <list> -#include <boost/noncopyable.hpp> #include <libsolidity/analysis/DeclarationContainer.h> #include <libsolidity/analysis/ReferencesResolver.h> -#include <libsolidity/ast/ASTVisitor.h> #include <libsolidity/ast/ASTAnnotations.h> +#include <libsolidity/ast/ASTVisitor.h> + +#include <boost/noncopyable.hpp> + +#include <list> +#include <map> namespace langutil { diff --git a/libsolidity/analysis/PostTypeChecker.cpp b/libsolidity/analysis/PostTypeChecker.cpp index 27cbcd45..6a7e5c7e 100644 --- a/libsolidity/analysis/PostTypeChecker.cpp +++ b/libsolidity/analysis/PostTypeChecker.cpp @@ -16,15 +16,14 @@ */ #include <libsolidity/analysis/PostTypeChecker.h> -#include <libsolidity/ast/AST.h> + #include <libsolidity/analysis/SemVerHandler.h> -#include <liblangutil/ErrorReporter.h> +#include <libsolidity/ast/AST.h> #include <libsolidity/interface/Version.h> - +#include <liblangutil/ErrorReporter.h> #include <libdevcore/Algorithms.h> #include <boost/range/adaptor/map.hpp> - #include <memory> using namespace std; diff --git a/libsolidity/analysis/ReferencesResolver.cpp b/libsolidity/analysis/ReferencesResolver.cpp index 76641c04..4e6d7f59 100644 --- a/libsolidity/analysis/ReferencesResolver.cpp +++ b/libsolidity/analysis/ReferencesResolver.cpp @@ -21,13 +21,15 @@ */ #include <libsolidity/analysis/ReferencesResolver.h> -#include <libsolidity/ast/AST.h> #include <libsolidity/analysis/NameAndTypeResolver.h> #include <libsolidity/analysis/ConstantEvaluator.h> +#include <libsolidity/ast/AST.h> + #include <libyul/AsmAnalysis.h> #include <libyul/AsmAnalysisInfo.h> #include <libyul/AsmData.h> #include <libyul/backends/evm/EVMDialect.h> + #include <liblangutil/ErrorReporter.h> #include <liblangutil/Exceptions.h> diff --git a/libsolidity/analysis/ReferencesResolver.h b/libsolidity/analysis/ReferencesResolver.h index 32c0553f..b3de9458 100644 --- a/libsolidity/analysis/ReferencesResolver.h +++ b/libsolidity/analysis/ReferencesResolver.h @@ -22,12 +22,13 @@ #pragma once -#include <map> -#include <list> -#include <boost/noncopyable.hpp> #include <libsolidity/ast/ASTVisitor.h> #include <libsolidity/ast/ASTAnnotations.h> +#include <boost/noncopyable.hpp> +#include <list> +#include <map> + namespace langutil { class ErrorReporter; diff --git a/libsolidity/analysis/SemVerHandler.cpp b/libsolidity/analysis/SemVerHandler.cpp index 64fa17b3..7c6ba91f 100644 --- a/libsolidity/analysis/SemVerHandler.cpp +++ b/libsolidity/analysis/SemVerHandler.cpp @@ -21,6 +21,7 @@ */ #include <libsolidity/analysis/SemVerHandler.h> + #include <functional> using namespace std; diff --git a/libsolidity/analysis/StaticAnalyzer.cpp b/libsolidity/analysis/StaticAnalyzer.cpp index 4d0f3461..aaaa4f9f 100644 --- a/libsolidity/analysis/StaticAnalyzer.cpp +++ b/libsolidity/analysis/StaticAnalyzer.cpp @@ -21,6 +21,7 @@ */ #include <libsolidity/analysis/StaticAnalyzer.h> + #include <libsolidity/analysis/ConstantEvaluator.h> #include <libsolidity/ast/AST.h> #include <liblangutil/ErrorReporter.h> diff --git a/libsolidity/analysis/SyntaxChecker.cpp b/libsolidity/analysis/SyntaxChecker.cpp index a73d7e5c..12e14864 100644 --- a/libsolidity/analysis/SyntaxChecker.cpp +++ b/libsolidity/analysis/SyntaxChecker.cpp @@ -16,15 +16,18 @@ */ #include <libsolidity/analysis/SyntaxChecker.h> -#include <memory> + +#include <libsolidity/analysis/SemVerHandler.h> #include <libsolidity/ast/AST.h> #include <libsolidity/ast/ExperimentalFeatures.h> -#include <libsolidity/analysis/SemVerHandler.h> -#include <liblangutil/ErrorReporter.h> #include <libsolidity/interface/Version.h> -#include <boost/algorithm/cxx11/all_of.hpp> +#include <liblangutil/ErrorReporter.h> + +#include <boost/algorithm/cxx11/all_of.hpp> #include <boost/algorithm/string.hpp> + +#include <memory> #include <string> using namespace std; diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp index 5bd96f8d..507a2c94 100644 --- a/libsolidity/analysis/TypeChecker.cpp +++ b/libsolidity/analysis/TypeChecker.cpp @@ -26,7 +26,6 @@ #include <libyul/AsmAnalysis.h> #include <libyul/AsmAnalysisInfo.h> #include <libyul/AsmData.h> - #include <libyul/backends/evm/EVMDialect.h> #include <liblangutil/ErrorReporter.h> @@ -35,8 +34,8 @@ #include <libdevcore/StringUtils.h> #include <boost/algorithm/cxx11/all_of.hpp> -#include <boost/algorithm/string/predicate.hpp> #include <boost/algorithm/string/join.hpp> +#include <boost/algorithm/string/predicate.hpp> #include <memory> #include <vector> diff --git a/libsolidity/analysis/TypeChecker.h b/libsolidity/analysis/TypeChecker.h index ebfcdadc..b60c571a 100644 --- a/libsolidity/analysis/TypeChecker.h +++ b/libsolidity/analysis/TypeChecker.h @@ -24,10 +24,10 @@ #include <liblangutil/EVMVersion.h> -#include <libsolidity/ast/Types.h> #include <libsolidity/ast/ASTAnnotations.h> #include <libsolidity/ast/ASTForward.h> #include <libsolidity/ast/ASTVisitor.h> +#include <libsolidity/ast/Types.h> namespace langutil { diff --git a/libsolidity/analysis/ViewPureChecker.cpp b/libsolidity/analysis/ViewPureChecker.cpp index bd3071b3..eb019481 100644 --- a/libsolidity/analysis/ViewPureChecker.cpp +++ b/libsolidity/analysis/ViewPureChecker.cpp @@ -16,14 +16,10 @@ */ #include <libsolidity/analysis/ViewPureChecker.h> - -#include <libevmasm/SemanticInformation.h> - #include <libsolidity/ast/ExperimentalFeatures.h> #include <libyul/AsmData.h> - #include <liblangutil/ErrorReporter.h> - +#include <libevmasm/SemanticInformation.h> #include <functional> using namespace std; diff --git a/libyul/AsmAnalysis.cpp b/libyul/AsmAnalysis.cpp index 821da005..0ecc5a30 100644 --- a/libyul/AsmAnalysis.cpp +++ b/libyul/AsmAnalysis.cpp @@ -102,7 +102,7 @@ bool AsmAnalyzer::operator()(Literal const& _literal) else if (_literal.kind == LiteralKind::Boolean) { solAssert(m_dialect->flavour == AsmFlavour::Yul, ""); - solAssert(_literal.value == YulString{string("true")} || _literal.value == YulString{string("false")}, ""); + solAssert(_literal.value == "true"_yulstring || _literal.value == "false"_yulstring, ""); } m_info.stackHeightInfo[&_literal] = m_stackHeight; return true; diff --git a/libyul/AsmParser.cpp b/libyul/AsmParser.cpp index c7302063..f3ca6cd0 100644 --- a/libyul/AsmParser.cpp +++ b/libyul/AsmParser.cpp @@ -354,11 +354,11 @@ Parser::ElementaryOperation Parser::parseElementaryOperation() { YulString literal; if (currentToken() == Token::Return) - literal = YulString{"return"}; + literal = "return"_yulstring; else if (currentToken() == Token::Byte) - literal = YulString{"byte"}; + literal = "byte"_yulstring; else if (currentToken() == Token::Address) - literal = YulString{"address"}; + literal = "address"_yulstring; else literal = YulString{currentLiteral()}; // first search the set of builtins, then the instructions. diff --git a/libyul/AsmPrinter.cpp b/libyul/AsmPrinter.cpp index a5b14953..b7af4778 100644 --- a/libyul/AsmPrinter.cpp +++ b/libyul/AsmPrinter.cpp @@ -55,8 +55,8 @@ string AsmPrinter::operator()(Literal const& _literal) const solAssert(isValidDecimal(_literal.value.str()) || isValidHex(_literal.value.str()), "Invalid number literal"); return _literal.value.str() + appendTypeName(_literal.type); case LiteralKind::Boolean: - solAssert(_literal.value.str() == "true" || _literal.value.str() == "false", "Invalid bool literal."); - return ((_literal.value.str() == "true") ? "true" : "false") + appendTypeName(_literal.type); + solAssert(_literal.value == "true"_yulstring || _literal.value == "false"_yulstring, "Invalid bool literal."); + return ((_literal.value == "true"_yulstring) ? "true" : "false") + appendTypeName(_literal.type); case LiteralKind::String: break; } diff --git a/libyul/ObjectParser.cpp b/libyul/ObjectParser.cpp index ba19e099..5f1eadef 100644 --- a/libyul/ObjectParser.cpp +++ b/libyul/ObjectParser.cpp @@ -42,7 +42,7 @@ shared_ptr<Object> ObjectParser::parse(shared_ptr<Scanner> const& _scanner, bool { // Special case: Code-only form. object = make_shared<Object>(); - object->name = YulString{"object"}; + object->name = "object"_yulstring; object->code = parseBlock(); if (!object->code) return nullptr; diff --git a/libyul/YulString.h b/libyul/YulString.h index 2179c23b..35c1d92d 100644 --- a/libyul/YulString.h +++ b/libyul/YulString.h @@ -127,4 +127,9 @@ private: YulStringRepository::Handle m_handle{ 0, YulStringRepository::emptyHash() }; }; +inline YulString operator "" _yulstring(const char *_string, std::size_t _size) +{ + return YulString(std::string(_string, _size)); +} + } diff --git a/libyul/backends/evm/EVMCodeTransform.cpp b/libyul/backends/evm/EVMCodeTransform.cpp index bd18985c..04dc5040 100644 --- a/libyul/backends/evm/EVMCodeTransform.cpp +++ b/libyul/backends/evm/EVMCodeTransform.cpp @@ -387,7 +387,7 @@ void CodeTransform::operator()(Literal const& _literal) m_assembly.appendConstant(u256(_literal.value.str())); else if (_literal.kind == LiteralKind::Boolean) { - if (_literal.value.str() == "true") + if (_literal.value == "true"_yulstring) m_assembly.appendConstant(u256(1)); else m_assembly.appendConstant(u256(0)); diff --git a/libyul/optimiser/MainFunction.cpp b/libyul/optimiser/MainFunction.cpp index 63eea2db..fabbf66f 100644 --- a/libyul/optimiser/MainFunction.cpp +++ b/libyul/optimiser/MainFunction.cpp @@ -40,12 +40,12 @@ void MainFunction::operator()(Block& _block) for (size_t i = 1; i < _block.statements.size(); ++i) assertThrow(_block.statements.at(i).type() == typeid(FunctionDefinition), OptimizerException, ""); /// @todo this should handle scopes properly and instead of an assertion it should rename the conflicting function - assertThrow(NameCollector(_block).names().count(YulString{"main"}) == 0, OptimizerException, ""); + assertThrow(NameCollector(_block).names().count("main"_yulstring) == 0, OptimizerException, ""); Block& block = boost::get<Block>(_block.statements[0]); FunctionDefinition main{ block.location, - YulString{"main"}, + "main"_yulstring, {}, {}, std::move(block) diff --git a/test/externalTests.sh b/test/externalTests.sh index 93581925..16f9e55a 100755 --- a/test/externalTests.sh +++ b/test/externalTests.sh @@ -79,6 +79,7 @@ function test_truffle fi # Change "compileStandard" to "compile" sed -i s/solc.compileStandard/solc.compile/ "node_modules/truffle/build/cli.bundled.js" + npx truffle compile npm run test ) rm -rf "$DIR" @@ -89,3 +90,5 @@ test_truffle Zeppelin https://github.com/axic/openzeppelin-solidity.git solidity # Disabled temporarily as it needs to be updated to latest Truffle first. #test_truffle Gnosis https://github.com/axic/pm-contracts.git solidity-050 + +test_truffle GnosisSafe https://github.com/gnosis/safe-contracts.git development diff --git a/test/libyul/Parser.cpp b/test/libyul/Parser.cpp index 5e9fba86..df7e32a1 100644 --- a/test/libyul/Parser.cpp +++ b/test/libyul/Parser.cpp @@ -311,7 +311,7 @@ BOOST_AUTO_TEST_CASE(builtins_parser) SimpleDialect(): Dialect(AsmFlavour::Strict) {} BuiltinFunction const* builtin(YulString _name) const override { - return _name == YulString{"builtin"} ? &f : nullptr; + return _name == "builtin"_yulstring ? &f : nullptr; } BuiltinFunction f; }; @@ -329,9 +329,9 @@ BOOST_AUTO_TEST_CASE(builtins_analysis) SimpleDialect(): Dialect(AsmFlavour::Strict) {} BuiltinFunction const* builtin(YulString _name) const override { - return _name == YulString{"builtin"} ? &f : nullptr; + return _name == "builtin"_yulstring ? &f : nullptr; } - BuiltinFunction f{YulString{"builtin"}, vector<Type>(2), vector<Type>(3), false}; + BuiltinFunction f{"builtin"_yulstring, vector<Type>(2), vector<Type>(3), false}; }; shared_ptr<Dialect> dialect = make_shared<SimpleDialect>(); |