aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2017-05-20 01:33:25 +0800
committerAlex Beregszaszi <alex@rtfs.hu>2017-05-26 10:20:31 +0800
commitba8a79c600e45618a5cd0bbfc044edbeab1e551c (patch)
tree64a4812dacc30f2df444bfeda7fff443244ad82c /libsolidity
parente48e84ca2bfdf863a798c88c329796284b2a87cb (diff)
downloaddexon-solidity-ba8a79c600e45618a5cd0bbfc044edbeab1e551c.tar.gz
dexon-solidity-ba8a79c600e45618a5cd0bbfc044edbeab1e551c.tar.zst
dexon-solidity-ba8a79c600e45618a5cd0bbfc044edbeab1e551c.zip
Do not stop on first switch error
Diffstat (limited to 'libsolidity')
-rw-r--r--libsolidity/inlineasm/AsmAnalysis.cpp12
1 files changed, 7 insertions, 5 deletions
diff --git a/libsolidity/inlineasm/AsmAnalysis.cpp b/libsolidity/inlineasm/AsmAnalysis.cpp
index a83a93a8..d022ecf6 100644
--- a/libsolidity/inlineasm/AsmAnalysis.cpp
+++ b/libsolidity/inlineasm/AsmAnalysis.cpp
@@ -287,9 +287,11 @@ bool AsmAnalyzer::operator()(assembly::FunctionCall const& _funCall)
bool AsmAnalyzer::operator()(Switch const& _switch)
{
+ bool success = true;
+
int const initialStackHeight = m_stackHeight;
if (!boost::apply_visitor(*this, *_switch.expression))
- return false;
+ success = false;
expectDeposit(1, initialStackHeight, locationOf(*_switch.expression));
set<tuple<LiteralKind, string>> cases;
@@ -299,7 +301,7 @@ bool AsmAnalyzer::operator()(Switch const& _switch)
{
int const initialStackHeight = m_stackHeight;
if (!(*this)(*_case.value))
- return false;
+ success = false;
expectDeposit(1, initialStackHeight, _case.value->location);
m_stackHeight--;
@@ -312,17 +314,17 @@ bool AsmAnalyzer::operator()(Switch const& _switch)
"Duplicate case defined",
_case.location
));
- return false;
+ success = false;
}
}
if (!(*this)(_case.body))
- return false;
+ success = false;
}
m_stackHeight--;
- return true;
+ return success;
}
bool AsmAnalyzer::operator()(Block const& _block)