aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/inlineasm/AsmCodeGen.cpp
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2017-04-13 00:32:25 +0800
committerchriseth <chris@ethereum.org>2017-04-25 22:49:04 +0800
commitdfb7d5ebd955d390142241a2abcb95995ef1ba04 (patch)
tree6a6c4bf8091fd8d6e60272f9fb94b9b38fda4530 /libsolidity/inlineasm/AsmCodeGen.cpp
parent4afd54b23594563036498943087bcd06ef021f94 (diff)
downloaddexon-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.cpp31
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);
}