Merge pull request #2302 from ethereum/inlineasm-better-errors

Better error messages for parsing functional assembly instructions
This commit is contained in:
Alex Beregszaszi 2017-05-24 14:03:49 +01:00 committed by GitHub
commit afe0a5404f
3 changed files with 25 additions and 0 deletions

View File

@ -1,5 +1,9 @@
### 0.4.12 (unreleased)
Features:
* AST: export all attributes to Json format
* Inline Assembly: Present proper error message when not supplying enough arguments to a functional
instruction.
Bugfixes:
* Unused variable warnings no longer issued for variables used inside inline assembly

View File

@ -321,6 +321,16 @@ assembly::Statement Parser::parseCall(assembly::Statement&& _instruction)
unsigned args = unsigned(instrInfo.args);
for (unsigned i = 0; i < args; ++i)
{
/// check for premature closing parentheses
if (m_scanner->currentToken() == Token::RParen)
fatalParserError(string(
"Expected expression (" +
instrInfo.name +
" expects " +
boost::lexical_cast<string>(args) +
" arguments)"
));
ret.arguments.emplace_back(parseExpression());
if (i != args - 1)
{

View File

@ -270,6 +270,17 @@ BOOST_AUTO_TEST_CASE(invalid_tuple_assignment)
CHECK_PARSE_ERROR("{ 42 let x, y := 1 }", DeclarationError, "Variable count mismatch.");
}
BOOST_AUTO_TEST_CASE(instruction_too_few_arguments)
{
CHECK_PARSE_ERROR("{ mul() }", ParserError, "Expected expression (MUL expects 2 arguments)");
CHECK_PARSE_ERROR("{ mul(1) }", ParserError, "Expected comma (MUL expects 2 arguments)");
}
BOOST_AUTO_TEST_CASE(instruction_too_many_arguments)
{
CHECK_PARSE_ERROR("{ mul(1, 2, 3) }", ParserError, "Expected ')' (MUL expects 2 arguments)");
}
BOOST_AUTO_TEST_SUITE_END()
BOOST_AUTO_TEST_SUITE(Printing)