mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
[ewasm] Add support for hera debugging module.
This commit is contained in:
@@ -118,28 +118,35 @@ wasm::Expression WasmCodeTransform::operator()(yul::ExpressionStatement const& _
|
||||
return visitReturnByValue(_statement.expression);
|
||||
}
|
||||
|
||||
void WasmCodeTransform::importBuiltinFunction(BuiltinFunction const* _builtin, string const& _module, string const& _externalName, string const& _internalName)
|
||||
{
|
||||
yulAssert(_builtin, "");
|
||||
yulAssert(_builtin->returns.size() <= 1, "");
|
||||
// Imported function, use regular call, but mark for import.
|
||||
YulString internalName(_internalName);
|
||||
if (!m_functionsToImport.count(internalName))
|
||||
{
|
||||
wasm::FunctionImport imp{
|
||||
_module,
|
||||
_externalName,
|
||||
_internalName,
|
||||
{},
|
||||
_builtin->returns.empty() ? nullopt : make_optional<wasm::Type>(translatedType(_builtin->returns.front()))
|
||||
};
|
||||
for (auto const& param: _builtin->parameters)
|
||||
imp.paramTypes.emplace_back(translatedType(param));
|
||||
m_functionsToImport[internalName] = move(imp);
|
||||
}
|
||||
}
|
||||
|
||||
wasm::Expression WasmCodeTransform::operator()(yul::FunctionCall const& _call)
|
||||
{
|
||||
if (BuiltinFunction const* builtin = m_dialect.builtin(_call.functionName.name))
|
||||
{
|
||||
if (_call.functionName.name.str().substr(0, 4) == "eth.")
|
||||
{
|
||||
yulAssert(builtin->returns.size() <= 1, "");
|
||||
// Imported function, use regular call, but mark for import.
|
||||
if (!m_functionsToImport.count(builtin->name))
|
||||
{
|
||||
wasm::FunctionImport imp{
|
||||
"ethereum",
|
||||
builtin->name.str().substr(4),
|
||||
builtin->name.str(),
|
||||
{},
|
||||
builtin->returns.empty() ? nullopt : make_optional<wasm::Type>(translatedType(builtin->returns.front()))
|
||||
};
|
||||
for (auto const& param: builtin->parameters)
|
||||
imp.paramTypes.emplace_back(translatedType(param));
|
||||
m_functionsToImport[builtin->name] = std::move(imp);
|
||||
}
|
||||
}
|
||||
if (_call.functionName.name.str().substr(0, 6) == "debug.")
|
||||
importBuiltinFunction(builtin, "debug", builtin->name.str().substr(6), builtin->name.str());
|
||||
else if (_call.functionName.name.str().substr(0, 4) == "eth.")
|
||||
importBuiltinFunction(builtin, "ethereum", builtin->name.str().substr(4), builtin->name.str());
|
||||
else
|
||||
{
|
||||
vector<wasm::Expression> arguments;
|
||||
|
||||
Reference in New Issue
Block a user