mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Note function entry points.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user