Browse Source

Merge pull request #474 from chriseth/sol_expressionStartingWithTypeConversion

Bugfix: Special case of statements starting with type conversion.
cl-refactor
Gav Wood 10 years ago
parent
commit
7b5416fcec
  1. 8
      libsolidity/Parser.cpp
  2. 10
      test/solidityParser.cpp

8
libsolidity/Parser.cpp

@ -290,10 +290,10 @@ ASTPointer<Statement> Parser::parseStatement()
// We have a variable definition if we ge a keyword that specifies a type name, or
// in the case of a user-defined type, we have two identifiers following each other.
if (m_scanner->getCurrentToken() == Token::MAPPING ||
m_scanner->getCurrentToken() == Token::VAR ||
Token::isElementaryTypeName(m_scanner->getCurrentToken()) ||
(m_scanner->getCurrentToken() == Token::IDENTIFIER &&
m_scanner->peekNextToken() == Token::IDENTIFIER))
m_scanner->getCurrentToken() == Token::VAR ||
((Token::isElementaryTypeName(m_scanner->getCurrentToken()) ||
m_scanner->getCurrentToken() == Token::IDENTIFIER) &&
m_scanner->peekNextToken() == Token::IDENTIFIER))
statement = parseVariableDefinition();
else // "ordinary" expression
statement = parseExpression();

10
test/solidityParser.cpp

@ -211,7 +211,15 @@ BOOST_AUTO_TEST_CASE(else_if_statement)
BOOST_CHECK_NO_THROW(parseText(text));
}
BOOST_AUTO_TEST_CASE(statement_starting_with_type_conversion)
{
char const* text = "contract test {\n"
" function fun() {\n"
" uint64(2);\n"
" }\n"
"}\n";
BOOST_CHECK_NO_THROW(parseText(text));
}
BOOST_AUTO_TEST_SUITE_END()

Loading…
Cancel
Save