diff options
author | chriseth <chris@ethereum.org> | 2018-12-12 07:37:20 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-12 07:37:20 +0800 |
commit | e74d9df20d1d1e8253cf51ef8d4191e9a0f51e14 (patch) | |
tree | 72a8593bf822032ecf50dbc8e1c78e899a5befd4 /libyul/backends/evm/EVMObjectCompiler.cpp | |
parent | 9f86ede32d4aa3e53bf82d0e4c64dbea3661791b (diff) | |
parent | fb3a0ac1c7d2c4624df6ae62d290a2de7768d036 (diff) | |
download | dexon-solidity-e74d9df20d1d1e8253cf51ef8d4191e9a0f51e14.tar dexon-solidity-e74d9df20d1d1e8253cf51ef8d4191e9a0f51e14.tar.gz dexon-solidity-e74d9df20d1d1e8253cf51ef8d4191e9a0f51e14.tar.bz2 dexon-solidity-e74d9df20d1d1e8253cf51ef8d4191e9a0f51e14.tar.lz dexon-solidity-e74d9df20d1d1e8253cf51ef8d4191e9a0f51e14.tar.xz dexon-solidity-e74d9df20d1d1e8253cf51ef8d4191e9a0f51e14.tar.zst dexon-solidity-e74d9df20d1d1e8253cf51ef8d4191e9a0f51e14.zip |
Merge pull request #5616 from ethereum/codegenForObjectsAccess
[Yul] Codegen for objects access
Diffstat (limited to 'libyul/backends/evm/EVMObjectCompiler.cpp')
-rw-r--r-- | libyul/backends/evm/EVMObjectCompiler.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/libyul/backends/evm/EVMObjectCompiler.cpp b/libyul/backends/evm/EVMObjectCompiler.cpp index 13d4b756..3f7634b2 100644 --- a/libyul/backends/evm/EVMObjectCompiler.cpp +++ b/libyul/backends/evm/EVMObjectCompiler.cpp @@ -21,15 +21,17 @@ #include <libyul/backends/evm/EVMObjectCompiler.h> #include <libyul/backends/evm/EVMCodeTransform.h> +#include <libyul/backends/evm/EVMDialect.h> + #include <libyul/Object.h> #include <libyul/Exceptions.h> using namespace yul; using namespace std; -void EVMObjectCompiler::compile(Object& _object, AbstractAssembly& _assembly, bool _yul, bool _evm15, bool _optimize) +void EVMObjectCompiler::compile(Object& _object, AbstractAssembly& _assembly, EVMDialect& _dialect, bool _evm15, bool _optimize) { - EVMObjectCompiler compiler(_assembly, _yul, _evm15); + EVMObjectCompiler compiler(_assembly, _dialect, _evm15); compiler.run(_object, _optimize); } @@ -42,7 +44,7 @@ void EVMObjectCompiler::run(Object& _object, bool _optimize) { auto subAssemblyAndID = m_assembly.createSubAssembly(); subIDs[subObject->name] = subAssemblyAndID.second; - compile(*subObject, *subAssemblyAndID.first, m_yul, m_evm15, _optimize); + compile(*subObject, *subAssemblyAndID.first, m_dialect, m_evm15, _optimize); } else { @@ -50,7 +52,13 @@ void EVMObjectCompiler::run(Object& _object, bool _optimize) subIDs[data.name] = m_assembly.appendData(data.data); } + if (m_dialect.providesObjectAccess()) + { + m_dialect.setSubIDs(std::move(subIDs)); + m_dialect.setCurrentObject(&_object); + } + yulAssert(_object.analysisInfo, "No analysis info."); yulAssert(_object.code, "No code."); - CodeTransform{m_assembly, *_object.analysisInfo, *_object.code, _optimize, m_yul, m_evm15}(*_object.code); + CodeTransform{m_assembly, *_object.analysisInfo, *_object.code, m_dialect, _optimize, m_evm15}(*_object.code); } |