diff --git a/libyul/AsmScopeFiller.cpp b/libyul/AsmScopeFiller.cpp index 3a8e548b8..4c37bf5ec 100644 --- a/libyul/AsmScopeFiller.cpp +++ b/libyul/AsmScopeFiller.cpp @@ -151,13 +151,13 @@ bool ScopeFiller::registerVariable(TypedName const& _name, SourceLocation const& bool ScopeFiller::registerFunction(FunctionDefinition const& _funDef) { - vector arguments; - for (auto const& _argument: _funDef.parameters) - arguments.emplace_back(_argument.type.str()); + vector parameters; + for (auto const& parameter: _funDef.parameters) + parameters.emplace_back(parameter.type); vector returns; - for (auto const& _return: _funDef.returnVariables) - returns.emplace_back(_return.type.str()); - if (!m_currentScope->registerFunction(_funDef.name, std::move(arguments), std::move(returns))) + for (auto const& returnVariable: _funDef.returnVariables) + returns.emplace_back(returnVariable.type); + if (!m_currentScope->registerFunction(_funDef.name, std::move(parameters), std::move(returns))) { //@TODO secondary location m_errorReporter.declarationError( diff --git a/libyul/backends/evm/EVMDialect.cpp b/libyul/backends/evm/EVMDialect.cpp index 3274f440f..39fc65632 100644 --- a/libyul/backends/evm/EVMDialect.cpp +++ b/libyul/backends/evm/EVMDialect.cpp @@ -221,6 +221,15 @@ EVMDialectTyped::EVMDialectTyped(langutil::EVMVersion _evmVersion, bool _objectA boolType = "bool"_yulstring; types = {defaultType, boolType}; + // Set all types to ``defaultType`` + for (auto& fun: m_functions) + { + for (auto& p: fun.second.parameters) + p = defaultType; + for (auto& r: fun.second.returns) + r = defaultType; + } + m_functions["lt"_yulstring].returns = {"bool"_yulstring}; m_functions["gt"_yulstring].returns = {"bool"_yulstring}; m_functions["slt"_yulstring].returns = {"bool"_yulstring}; @@ -260,6 +269,7 @@ EVMDialectTyped::EVMDialectTyped(langutil::EVMVersion _evmVersion, bool _objectA _visitArguments(); })); m_functions["bool_to_u256"_yulstring].parameters = {"bool"_yulstring}; + m_functions["bool_to_u256"_yulstring].returns = {"u256"_yulstring}; m_functions.insert(createFunction("u256_to_bool", 1, 1, {}, false, []( FunctionCall const&, AbstractAssembly& _assembly, @@ -276,6 +286,7 @@ EVMDialectTyped::EVMDialectTyped(langutil::EVMVersion _evmVersion, bool _objectA _assembly.appendInstruction(evmasm::Instruction::INVALID); _assembly.appendLabel(inRange); })); + m_functions["u256_to_bool"_yulstring].parameters = {"u256"_yulstring}; m_functions["u256_to_bool"_yulstring].returns = {"bool"_yulstring}; }