aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/codegen/AsmCodeGen.h
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-12-06 23:47:18 +0800
committerGitHub <noreply@github.com>2018-12-06 23:47:18 +0800
commite1e578d71e22577dc7313214143b81aa24f5ebab (patch)
treeb008fb966c8371a47d6610aa4c40ac8afe87ff19 /libsolidity/codegen/AsmCodeGen.h
parent0e8841005ca7bf93545a1bc76bd8fa0ed67cb32d (diff)
parentb7cfa499b0bd674b59284821e33349726cbc4299 (diff)
downloaddexon-solidity-e1e578d71e22577dc7313214143b81aa24f5ebab.tar
dexon-solidity-e1e578d71e22577dc7313214143b81aa24f5ebab.tar.gz
dexon-solidity-e1e578d71e22577dc7313214143b81aa24f5ebab.tar.bz2
dexon-solidity-e1e578d71e22577dc7313214143b81aa24f5ebab.tar.lz
dexon-solidity-e1e578d71e22577dc7313214143b81aa24f5ebab.tar.xz
dexon-solidity-e1e578d71e22577dc7313214143b81aa24f5ebab.tar.zst
dexon-solidity-e1e578d71e22577dc7313214143b81aa24f5ebab.zip
Merge pull request #5589 from ethereum/yulObjectCodegen
Yul object codegen
Diffstat (limited to 'libsolidity/codegen/AsmCodeGen.h')
-rw-r--r--libsolidity/codegen/AsmCodeGen.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/libsolidity/codegen/AsmCodeGen.h b/libsolidity/codegen/AsmCodeGen.h
index dc529e10..4c6d97f4 100644
--- a/libsolidity/codegen/AsmCodeGen.h
+++ b/libsolidity/codegen/AsmCodeGen.h
@@ -21,6 +21,9 @@
#pragma once
#include <libyul/AsmAnalysis.h>
+#include <libyul/backends/evm/AbstractAssembly.h>
+
+#include <liblangutil/SourceLocation.h>
#include <functional>
@@ -34,11 +37,45 @@ namespace dev
namespace eth
{
class Assembly;
+class AssemblyItem;
}
namespace solidity
{
+class EthAssemblyAdapter: public yul::AbstractAssembly
+{
+public:
+ explicit EthAssemblyAdapter(eth::Assembly& _assembly);
+ void setSourceLocation(langutil::SourceLocation const& _location) override;
+ int stackHeight() const override;
+ void appendInstruction(solidity::Instruction _instruction) override;
+ void appendConstant(u256 const& _constant) override;
+ void appendLabel(LabelID _labelId) override;
+ void appendLabelReference(LabelID _labelId) override;
+ size_t newLabelId() override;
+ size_t namedLabel(std::string const& _name) override;
+ void appendLinkerSymbol(std::string const& _linkerSymbol) override;
+ void appendJump(int _stackDiffAfter) override;
+ void appendJumpTo(LabelID _labelId, int _stackDiffAfter) override;
+ void appendJumpToIf(LabelID _labelId) override;
+ void appendBeginsub(LabelID, int) override;
+ void appendJumpsub(LabelID, int, int) override;
+ void appendReturnsub(int, int) override;
+ void appendAssemblySize() override;
+ std::pair<std::shared_ptr<AbstractAssembly>, SubID> createSubAssembly() override;
+ void appendDataOffset(SubID _sub) override;
+ void appendDataSize(SubID _sub) override;
+ SubID appendData(dev::bytes const& _data) override;
+
+private:
+ static LabelID assemblyTagToIdentifier(eth::AssemblyItem const& _tag);
+
+ eth::Assembly& m_assembly;
+ std::map<SubID, dev::u256> m_dataHashBySubId;
+ size_t m_nextDataCounter = std::numeric_limits<size_t>::max() / 2;
+};
+
class CodeGenerator
{
public: