mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Disallow non-functional instructions in parseExpression early
This commit is contained in:
parent
42f8875770
commit
8b20a7cd53
@ -265,10 +265,13 @@ assembly::Expression Parser::parseExpression()
|
||||
instructionNames().at(instr.instruction) +
|
||||
"\" not allowed in this context."
|
||||
);
|
||||
if (m_flavour != AsmFlavour::Loose && currentToken() != Token::LParen)
|
||||
fatalParserError(
|
||||
"Non-functional instructions are 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)
|
||||
if (args > 0 && currentToken() != Token::LParen)
|
||||
fatalParserError(string(
|
||||
"Expected token \"(\" (\"" +
|
||||
instructionNames().at(instr.instruction) +
|
||||
|
@ -480,11 +480,11 @@ BOOST_AUTO_TEST_CASE(no_opcodes_in_strict)
|
||||
{
|
||||
BOOST_CHECK(successParse("{ pop(callvalue) }"));
|
||||
BOOST_CHECK(successParse("{ callvalue pop }"));
|
||||
CHECK_STRICT_ERROR("{ pop(callvalue) }", ParserError, "Instruction \"callvalue\" not allowed in this context");
|
||||
CHECK_STRICT_ERROR("{ pop(callvalue) }", ParserError, "Non-functional instructions are not allowed in this context.");
|
||||
CHECK_STRICT_ERROR("{ callvalue pop }", ParserError, "Call or assignment expected");
|
||||
SUCCESS_STRICT("{ pop(callvalue()) }");
|
||||
BOOST_CHECK(successParse("{ switch callvalue case 0 {} }"));
|
||||
CHECK_STRICT_ERROR("{ switch callvalue case 0 {} }", ParserError, "Instruction \"callvalue\" not allowed in this context");
|
||||
CHECK_STRICT_ERROR("{ switch callvalue case 0 {} }", ParserError, "Non-functional instructions are not allowed in this context.");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(no_labels_in_strict)
|
||||
|
Loading…
Reference in New Issue
Block a user