diff options
author | chriseth <chris@ethereum.org> | 2017-04-13 00:32:25 +0800 |
---|---|---|
committer | chriseth <chris@ethereum.org> | 2017-04-25 22:49:04 +0800 |
commit | dfb7d5ebd955d390142241a2abcb95995ef1ba04 (patch) | |
tree | 6a6c4bf8091fd8d6e60272f9fb94b9b38fda4530 /libsolidity/inlineasm/AsmCodeGen.cpp | |
parent | 4afd54b23594563036498943087bcd06ef021f94 (diff) | |
download | dexon-solidity-dfb7d5ebd955d390142241a2abcb95995ef1ba04.tar dexon-solidity-dfb7d5ebd955d390142241a2abcb95995ef1ba04.tar.gz dexon-solidity-dfb7d5ebd955d390142241a2abcb95995ef1ba04.tar.bz2 dexon-solidity-dfb7d5ebd955d390142241a2abcb95995ef1ba04.tar.lz dexon-solidity-dfb7d5ebd955d390142241a2abcb95995ef1ba04.tar.xz dexon-solidity-dfb7d5ebd955d390142241a2abcb95995ef1ba04.tar.zst dexon-solidity-dfb7d5ebd955d390142241a2abcb95995ef1ba04.zip |
Move analysis out of code generator.
Diffstat (limited to 'libsolidity/inlineasm/AsmCodeGen.cpp')
-rw-r--r-- | libsolidity/inlineasm/AsmCodeGen.cpp | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/libsolidity/inlineasm/AsmCodeGen.cpp b/libsolidity/inlineasm/AsmCodeGen.cpp index ad413216..68d674f9 100644 --- a/libsolidity/inlineasm/AsmCodeGen.cpp +++ b/libsolidity/inlineasm/AsmCodeGen.cpp @@ -47,8 +47,8 @@ using namespace dev::solidity::assembly; struct GeneratorState { - GeneratorState(ErrorList& _errors, eth::Assembly& _assembly): - errors(_errors), assembly(_assembly) {} + GeneratorState(ErrorList& _errors, AsmAnalyzer::Scopes& _scopes, eth::Assembly& _assembly): + errors(_errors), scopes(_scopes), assembly(_assembly) {} size_t newLabelId() { @@ -62,8 +62,8 @@ struct GeneratorState return size_t(id); } - AsmAnalyzer::Scopes scopes; ErrorList& errors; + AsmAnalyzer::Scopes scopes; eth::Assembly& assembly; }; @@ -260,20 +260,25 @@ private: ExternalIdentifierAccess m_identifierAccess; }; -eth::Assembly assembly::CodeGenerator::assemble(ExternalIdentifierAccess const& _identifierAccess) +eth::Assembly assembly::CodeGenerator::assemble( + Block const& _parsedData, + AsmAnalyzer::Scopes& _scopes, + ExternalIdentifierAccess const& _identifierAccess +) { eth::Assembly assembly; - GeneratorState state(m_errors, assembly); - if (!(AsmAnalyzer(state.scopes, m_errors, _identifierAccess.resolve)).analyze(m_parsedData)) - solAssert(false, "Assembly error"); - CodeTransform(state, m_parsedData, _identifierAccess); + GeneratorState state(m_errors, _scopes, assembly); + CodeTransform(state, _parsedData, _identifierAccess); return assembly; } -void assembly::CodeGenerator::assemble(eth::Assembly& _assembly, ExternalIdentifierAccess const& _identifierAccess) +void assembly::CodeGenerator::assemble( + Block const& _parsedData, + AsmAnalyzer::Scopes& _scopes, + eth::Assembly& _assembly, + ExternalIdentifierAccess const& _identifierAccess +) { - GeneratorState state(m_errors, _assembly); - if (!(AsmAnalyzer(state.scopes, m_errors, _identifierAccess.resolve)).analyze(m_parsedData)) - solAssert(false, "Assembly error"); - CodeTransform(state, m_parsedData, _identifierAccess); + GeneratorState state(m_errors, _scopes, _assembly); + CodeTransform(state, _parsedData, _identifierAccess); } |