From 42f88757708c42f447572c9b96da06c06329e9bc Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Mon, 8 Jan 2018 00:39:22 +0000 Subject: Show restricted instruction warning before argument mismatch issue --- libsolidity/inlineasm/AsmParser.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'libsolidity/inlineasm') 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(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(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(args) + + " arguments)" + )); } if (currentToken() == Token::LParen) return parseCall(std::move(operation)); -- cgit v1.2.3