diff options
author | chriseth <chris@ethereum.org> | 2017-04-12 02:19:37 +0800 |
---|---|---|
committer | chriseth <chris@ethereum.org> | 2017-04-25 22:49:03 +0800 |
commit | b622c2e9d3d13c4c9061488abbe795994e94cfcf (patch) | |
tree | ea289f5d868848407f5db274a59513fc6acacd7c | |
parent | 34717838da875c5265f005bb92c3349c08063ba5 (diff) | |
download | dexon-solidity-b622c2e9d3d13c4c9061488abbe795994e94cfcf.tar.gz dexon-solidity-b622c2e9d3d13c4c9061488abbe795994e94cfcf.tar.zst dexon-solidity-b622c2e9d3d13c4c9061488abbe795994e94cfcf.zip |
Only run stack filler on AST elements that are or contain declarations.
-rw-r--r-- | libsolidity/inlineasm/AsmScopeFiller.cpp | 30 | ||||
-rw-r--r-- | libsolidity/inlineasm/AsmScopeFiller.h | 6 |
2 files changed, 4 insertions, 32 deletions
diff --git a/libsolidity/inlineasm/AsmScopeFiller.cpp b/libsolidity/inlineasm/AsmScopeFiller.cpp index 66a217ea..de6fbdaa 100644 --- a/libsolidity/inlineasm/AsmScopeFiller.cpp +++ b/libsolidity/inlineasm/AsmScopeFiller.cpp @@ -46,17 +46,6 @@ ScopeFiller::ScopeFiller(ScopeFiller::Scopes& _scopes, ErrorList& _errors): m_currentScope = &scope(nullptr); } -bool ScopeFiller::operator()(FunctionalInstruction const& _instr) -{ - bool success = true; - for (auto const& arg: _instr.arguments | boost::adaptors::reversed) - if (!boost::apply_visitor(*this, arg)) - success = false; - if (!(*this)(_instr.instruction)) - success = false; - return success; -} - bool ScopeFiller::operator()(Label const& _item) { if (!m_currentScope->registerLabel(_item.name)) @@ -72,17 +61,9 @@ bool ScopeFiller::operator()(Label const& _item) return true; } -bool ScopeFiller::operator()(FunctionalAssignment const& _assignment) -{ - return boost::apply_visitor(*this, *_assignment.value); -} - bool ScopeFiller::operator()(assembly::VariableDeclaration const& _varDecl) { - bool success = boost::apply_visitor(*this, *_varDecl.value); - if (!registerVariable(_varDecl.name, _varDecl.location, *m_currentScope)) - success = false; - return success; + return registerVariable(_varDecl.name, _varDecl.location, *m_currentScope); } bool ScopeFiller::operator()(assembly::FunctionDefinition const& _funDef) @@ -111,15 +92,6 @@ bool ScopeFiller::operator()(assembly::FunctionDefinition const& _funDef) return success; } -bool ScopeFiller::operator()(assembly::FunctionCall const& _funCall) -{ - bool success = true; - for (auto const& arg: _funCall.arguments | boost::adaptors::reversed) - if (!boost::apply_visitor(*this, arg)) - success = false; - return success; -} - bool ScopeFiller::operator()(Block const& _block) { bool success = true; diff --git a/libsolidity/inlineasm/AsmScopeFiller.h b/libsolidity/inlineasm/AsmScopeFiller.h index 3747af0a..bb62948b 100644 --- a/libsolidity/inlineasm/AsmScopeFiller.h +++ b/libsolidity/inlineasm/AsmScopeFiller.h @@ -61,13 +61,13 @@ public: bool operator()(assembly::Instruction const&) { return true; } bool operator()(assembly::Literal const&) { return true; } bool operator()(assembly::Identifier const&) { return true; } - bool operator()(assembly::FunctionalInstruction const& _functionalInstruction); + bool operator()(assembly::FunctionalInstruction const&) { return true; } bool operator()(assembly::Label const& _label); bool operator()(assembly::Assignment const&) { return true; } - bool operator()(assembly::FunctionalAssignment const& _functionalAssignment); + bool operator()(assembly::FunctionalAssignment const&) { return true; } bool operator()(assembly::VariableDeclaration const& _variableDeclaration); bool operator()(assembly::FunctionDefinition const& _functionDefinition); - bool operator()(assembly::FunctionCall const& _functionCall); + bool operator()(assembly::FunctionCall const&) { return true; } bool operator()(assembly::Block const& _block); private: |