Support metadata via IR.

This commit is contained in:
chriseth
2021-06-21 18:20:31 +02:00
parent ff3eca4ccc
commit 0df8a38e55
55 changed files with 211 additions and 29 deletions
+3
View File
@@ -110,6 +110,9 @@ public:
/// Appends an assignment to an immutable variable.
virtual void appendImmutableAssignment(std::string const& _identifier) = 0;
/// Appends data to the very end of the bytecode. Repeated calls concatenate.
virtual void appendToAuxiliaryData(bytes const& _data) = 0;
/// Mark this assembly as invalid. Any attempt to request bytecode from it should throw.
virtual void markAsInvalid() = 0;
};
+5 -1
View File
@@ -53,7 +53,11 @@ void EVMObjectCompiler::run(Object& _object, bool _optimize)
else
{
Data const& data = dynamic_cast<Data const&>(*subNode);
context.subIDs[data.name] = m_assembly.appendData(data.data);
// Special handling of metadata.
if (data.name.str() == Object::metadataName())
m_assembly.appendToAuxiliaryData(data.data);
else
context.subIDs[data.name] = m_assembly.appendData(data.data);
}
yulAssert(_object.analysisInfo, "No analysis info.");
@@ -161,6 +161,11 @@ AbstractAssembly::SubID EthAssemblyAdapter::appendData(bytes const& _data)
return subID;
}
void EthAssemblyAdapter::appendToAuxiliaryData(bytes const& _data)
{
m_assembly.appendToAuxiliaryData(_data);
}
void EthAssemblyAdapter::appendImmutable(std::string const& _identifier)
{
m_assembly.appendImmutable(_identifier);
+2
View File
@@ -58,6 +58,8 @@ public:
void appendDataSize(std::vector<SubID> const& _subPath) override;
SubID appendData(bytes const& _data) override;
void appendToAuxiliaryData(bytes const& _data) override;
void appendImmutable(std::string const& _identifier) override;
void appendImmutableAssignment(std::string const& _identifier) override;
+2
View File
@@ -70,6 +70,8 @@ public:
void appendDataSize(std::vector<SubID> const& _subPath) override;
SubID appendData(bytes const& _data) override;
void appendToAuxiliaryData(bytes const&) override {}
void appendImmutable(std::string const& _identifier) override;
void appendImmutableAssignment(std::string const& _identifier) override;