diff options
author | Alex Beregszaszi <alex@rtfs.hu> | 2018-01-08 08:39:22 +0800 |
---|---|---|
committer | Alex Beregszaszi <alex@rtfs.hu> | 2018-01-08 08:39:22 +0800 |
commit | 42f88757708c42f447572c9b96da06c06329e9bc (patch) | |
tree | afbb0156aa46cd68cd82d010298629aa5bf7fb7c /libsolidity/inlineasm | |
parent | 767052f2f78a2fd7cd37991945b0a3f559851822 (diff) | |
download | dexon-solidity-42f88757708c42f447572c9b96da06c06329e9bc.tar dexon-solidity-42f88757708c42f447572c9b96da06c06329e9bc.tar.gz dexon-solidity-42f88757708c42f447572c9b96da06c06329e9bc.tar.bz2 dexon-solidity-42f88757708c42f447572c9b96da06c06329e9bc.tar.lz dexon-solidity-42f88757708c42f447572c9b96da06c06329e9bc.tar.xz dexon-solidity-42f88757708c42f447572c9b96da06c06329e9bc.tar.zst dexon-solidity-42f88757708c42f447572c9b96da06c06329e9bc.zip |
Show restricted instruction warning before argument mismatch issue
Diffstat (limited to 'libsolidity/inlineasm')
-rw-r--r-- | libsolidity/inlineasm/AsmParser.cpp | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/libsolidity/inlineasm/AsmParser.cpp b/libsolidity/inlineasm/AsmParser.cpp index 5983d7ff..88a0afc1 100644 --- a/libsolidity/inlineasm/AsmParser.cpp +++ b/libsolidity/inlineasm/AsmParser.cpp @@ -254,17 +254,6 @@ assembly::Expression Parser::parseExpression() if (operation.type() == typeid(Instruction)) { Instruction const& instr = boost::get<Instruction>(operation); - // Enforce functional notation for instructions requiring multiple arguments. - int args = instructionInfo(instr.instruction).args; - bool requireFunctionalNotation = (args > 0 || m_flavour != AsmFlavour::Loose); - if (requireFunctionalNotation && currentToken() != Token::LParen) - fatalParserError(string( - "Expected token \"(\" (\"" + - instructionNames().at(instr.instruction) + - "\" expects " + - boost::lexical_cast<string>(args) + - " arguments)" - )); // Disallow instructions returning multiple values (and DUP/SWAP) as expression. if ( instructionInfo(instr.instruction).ret != 1 || @@ -276,6 +265,17 @@ assembly::Expression Parser::parseExpression() instructionNames().at(instr.instruction) + "\" not allowed in this context." ); + // Enforce functional notation for instructions requiring multiple arguments. + int args = instructionInfo(instr.instruction).args; + bool requireFunctionalNotation = (args > 0 || m_flavour != AsmFlavour::Loose); + if (requireFunctionalNotation && currentToken() != Token::LParen) + fatalParserError(string( + "Expected token \"(\" (\"" + + instructionNames().at(instr.instruction) + + "\" expects " + + boost::lexical_cast<string>(args) + + " arguments)" + )); } if (currentToken() == Token::LParen) return parseCall(std::move(operation)); |