Note function entry points.

This commit is contained in:
chriseth
2021-05-04 17:15:13 +02:00
parent faca036837
commit f9c94d7c42
33 changed files with 252 additions and 26 deletions
+2 -1
View File
@@ -30,6 +30,7 @@
#include <functional>
#include <memory>
#include <optional>
namespace solidity::langutil
{
@@ -74,7 +75,7 @@ public:
/// Generate a new unique label.
virtual LabelID newLabelId() = 0;
/// Returns a label identified by the given name. Creates it if it does not yet exist.
virtual LabelID namedLabel(std::string const& _name) = 0;
virtual LabelID namedLabel(std::string const& _name, size_t _params, size_t _returns, std::optional<size_t> _sourceID) = 0;
/// Append a reference to a to-be-linked symbol.
/// Currently, we assume that the value is always a 20 byte number.
virtual void appendLinkerSymbol(std::string const& _name) = 0;
+1 -1
View File
@@ -78,7 +78,7 @@ EVMAssembly::LabelID EVMAssembly::newLabelId()
return m_nextLabelId++;
}
AbstractAssembly::LabelID EVMAssembly::namedLabel(string const& _name)
AbstractAssembly::LabelID EVMAssembly::namedLabel(string const& _name, size_t, size_t, std::optional<size_t>)
{
yulAssert(!_name.empty(), "");
if (!m_namedLabels.count(_name))
+1 -1
View File
@@ -58,7 +58,7 @@ public:
/// Generate a new unique label.
LabelID newLabelId() override;
/// Returns a label identified by the given name. Creates it if it does not yet exist.
LabelID namedLabel(std::string const& _name) override;
LabelID namedLabel(std::string const& _name, size_t _params, size_t _returns, std::optional<size_t> _sourceID) override;
/// Append a reference to a to-be-linked symbol.
/// Currently, we assume that the value is always a 20 byte number.
void appendLinkerSymbol(std::string const& _name) override;
+1 -1
View File
@@ -578,7 +578,7 @@ AbstractAssembly::LabelID CodeTransform::functionEntryID(YulString _name, Scope:
{
AbstractAssembly::LabelID id =
m_useNamedLabelsForFunctions ?
m_assembly.namedLabel(_name.str()) :
m_assembly.namedLabel(_name.str(), _function.arguments.size(), _function.returns.size(), {}) :
m_assembly.newLabelId();
m_context->functionEntryIDs[&_function] = id;
}
+2 -2
View File
@@ -84,9 +84,9 @@ size_t EthAssemblyAdapter::newLabelId()
return assemblyTagToIdentifier(m_assembly.newTag());
}
size_t EthAssemblyAdapter::namedLabel(std::string const& _name)
size_t EthAssemblyAdapter::namedLabel(std::string const& _name, size_t _params, size_t _returns, std::optional<size_t> _sourceID)
{
return assemblyTagToIdentifier(m_assembly.namedTag(_name));
return assemblyTagToIdentifier(m_assembly.namedTag(_name, _params, _returns, _sourceID));
}
void EthAssemblyAdapter::appendLinkerSymbol(std::string const& _linkerSymbol)
+1 -1
View File
@@ -46,7 +46,7 @@ public:
void appendLabel(LabelID _labelId) override;
void appendLabelReference(LabelID _labelId) override;
size_t newLabelId() override;
size_t namedLabel(std::string const& _name) override;
size_t namedLabel(std::string const& _name, size_t _params, size_t _returns, std::optional<size_t> _sourceID) override;
void appendLinkerSymbol(std::string const& _linkerSymbol) override;
void appendVerbatim(bytes _data, size_t _arguments, size_t _returnVariables) override;
void appendJump(int _stackDiffAfter, JumpType _jumpType) override;
+1 -1
View File
@@ -59,7 +59,7 @@ NoOutputAssembly::LabelID NoOutputAssembly::newLabelId()
return 1;
}
AbstractAssembly::LabelID NoOutputAssembly::namedLabel(string const&)
AbstractAssembly::LabelID NoOutputAssembly::namedLabel(string const&, size_t, size_t, optional<size_t>)
{
return 1;
}
+1 -1
View File
@@ -56,7 +56,7 @@ public:
void appendLabel(LabelID _labelId) override;
void appendLabelReference(LabelID _labelId) override;
LabelID newLabelId() override;
LabelID namedLabel(std::string const& _name) override;
LabelID namedLabel(std::string const& _name, size_t _params, size_t _returns, std::optional<size_t> _sourceID) override;
void appendLinkerSymbol(std::string const& _name) override;
void appendVerbatim(bytes _data, size_t _arguments, size_t _returnVariables) override;