Merge pull request #3183 from federicobond/fix-event-parsing

Fix event parsing. Refs #3175
This commit is contained in:
Yoichi Hirai 2017-12-12 11:12:18 +01:00 committed by GitHub
commit 14707b27e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 19 additions and 12 deletions

View File

@ -20,6 +20,7 @@ Features:
* Type Checker: More detailed errors for invalid array lengths (such as division by zero). * Type Checker: More detailed errors for invalid array lengths (such as division by zero).
Bugfixes: Bugfixes:
* Parser: Disallow event declarations with no parameter list.
### 0.4.18 (2017-10-18) ### 0.4.18 (2017-10-18)

View File

@ -644,15 +644,11 @@ ASTPointer<EventDefinition> Parser::parseEventDefinition()
expectToken(Token::Event); expectToken(Token::Event);
ASTPointer<ASTString> name(expectIdentifierToken()); ASTPointer<ASTString> name(expectIdentifierToken());
ASTPointer<ParameterList> parameters;
if (m_scanner->currentToken() == Token::LParen) VarDeclParserOptions options;
{ options.allowIndexed = true;
VarDeclParserOptions options; ASTPointer<ParameterList> parameters = parseParameterList(options);
options.allowIndexed = true;
parameters = parseParameterList(options);
}
else
parameters = createEmptyParameterList();
bool anonymous = false; bool anonymous = false;
if (m_scanner->currentToken() == Token::Anonymous) if (m_scanner->currentToken() == Token::Anonymous)
{ {

View File

@ -2971,7 +2971,7 @@ BOOST_AUTO_TEST_CASE(event_no_arguments)
{ {
char const* sourceCode = R"( char const* sourceCode = R"(
contract ClientReceipt { contract ClientReceipt {
event Deposit; event Deposit();
function deposit() { function deposit() {
Deposit(); Deposit();
} }
@ -3013,7 +3013,7 @@ BOOST_AUTO_TEST_CASE(events_with_same_name)
{ {
char const* sourceCode = R"( char const* sourceCode = R"(
contract ClientReceipt { contract ClientReceipt {
event Deposit; event Deposit();
event Deposit(address _addr); event Deposit(address _addr);
event Deposit(address _addr, uint _amount); event Deposit(address _addr, uint _amount);
function deposit() returns (uint) { function deposit() returns (uint) {
@ -3059,7 +3059,7 @@ BOOST_AUTO_TEST_CASE(events_with_same_name_inherited)
{ {
char const* sourceCode = R"( char const* sourceCode = R"(
contract A { contract A {
event Deposit; event Deposit();
} }
contract B { contract B {

View File

@ -960,6 +960,16 @@ BOOST_AUTO_TEST_CASE(event_arguments_indexed)
BOOST_CHECK(successParse(text)); BOOST_CHECK(successParse(text));
} }
BOOST_AUTO_TEST_CASE(event_with_no_argument_list_fails)
{
char const* text = R"(
contract c {
event e;
}
)";
CHECK_PARSE_ERROR(text, "Expected token LParen got 'Semicolon'");
}
BOOST_AUTO_TEST_CASE(visibility_specifiers) BOOST_AUTO_TEST_CASE(visibility_specifiers)
{ {
char const* text = R"( char const* text = R"(