diff options
author | Alex Beregszaszi <alex@rtfs.hu> | 2017-05-20 01:04:40 +0800 |
---|---|---|
committer | Alex Beregszaszi <alex@rtfs.hu> | 2017-05-26 10:20:15 +0800 |
commit | e48e84ca2bfdf863a798c88c329796284b2a87cb (patch) | |
tree | 4423ade342384e1343f71e5dbbaf9f8d7f8c4929 /libsolidity/inlineasm | |
parent | db3d9e0416e7ac69ddf13eb6e2fd4e0a35dd1a63 (diff) | |
download | dexon-solidity-e48e84ca2bfdf863a798c88c329796284b2a87cb.tar.gz dexon-solidity-e48e84ca2bfdf863a798c88c329796284b2a87cb.tar.zst dexon-solidity-e48e84ca2bfdf863a798c88c329796284b2a87cb.zip |
Check token within parseCase
Diffstat (limited to 'libsolidity/inlineasm')
-rw-r--r-- | libsolidity/inlineasm/AsmParser.cpp | 14 | ||||
-rw-r--r-- | libsolidity/inlineasm/AsmParser.h | 2 |
2 files changed, 9 insertions, 7 deletions
diff --git a/libsolidity/inlineasm/AsmParser.cpp b/libsolidity/inlineasm/AsmParser.cpp index 63c08b15..537a39a1 100644 --- a/libsolidity/inlineasm/AsmParser.cpp +++ b/libsolidity/inlineasm/AsmParser.cpp @@ -75,7 +75,7 @@ assembly::Statement Parser::parseStatement() while (m_scanner->currentToken() == Token::Case) _switch.cases.emplace_back(parseCase()); if (m_scanner->currentToken() == Token::Default) - _switch.cases.emplace_back(parseCase(true)); + _switch.cases.emplace_back(parseCase()); if (_switch.cases.size() == 0) fatalParserError("Switch statement without any cases."); _switch.location.end = _switch.cases.back().body.location.end; @@ -148,19 +148,21 @@ assembly::Statement Parser::parseStatement() return statement; } -assembly::Case Parser::parseCase(bool _defaultCase) +assembly::Case Parser::parseCase() { assembly::Case _case = createWithLocation<assembly::Case>(); - if (_defaultCase) - expectToken(Token::Default); - else + if (m_scanner->currentToken() == Token::Default) + m_scanner->next(); + else if (m_scanner->currentToken() == Token::Case) { - expectToken(Token::Case); + m_scanner->next(); assembly::Statement statement = parseElementaryOperation(); if (statement.type() != typeid(assembly::Literal)) fatalParserError("Literal expected."); _case.value = make_shared<Literal>(std::move(boost::get<assembly::Literal>(statement))); } + else + fatalParserError("Case or default case expected."); _case.body = parseBlock(); _case.location.end = _case.body.location.end; return _case; diff --git a/libsolidity/inlineasm/AsmParser.h b/libsolidity/inlineasm/AsmParser.h index d1d0c1cc..138af337 100644 --- a/libsolidity/inlineasm/AsmParser.h +++ b/libsolidity/inlineasm/AsmParser.h @@ -62,7 +62,7 @@ protected: Block parseBlock(); Statement parseStatement(); - Case parseCase(bool _defaultCase = false); + Case parseCase(); /// Parses a functional expression that has to push exactly one stack element Statement parseExpression(); std::map<std::string, dev::solidity::Instruction> const& instructions(); |