diff options
author | Federico Bond <federicobond@gmail.com> | 2017-11-09 11:02:39 +0800 |
---|---|---|
committer | Federico Bond <federicobond@gmail.com> | 2017-11-23 10:08:12 +0800 |
commit | 14fd647b852146cd885426d04bffffbd1b7c08a0 (patch) | |
tree | 70ed23ccdcd5c0d29248f8e6292fa138ab05cdce | |
parent | dc154b4e5661945ca9c98720e097e84729a528be (diff) | |
download | dexon-solidity-14fd647b852146cd885426d04bffffbd1b7c08a0.tar dexon-solidity-14fd647b852146cd885426d04bffffbd1b7c08a0.tar.gz dexon-solidity-14fd647b852146cd885426d04bffffbd1b7c08a0.tar.bz2 dexon-solidity-14fd647b852146cd885426d04bffffbd1b7c08a0.tar.lz dexon-solidity-14fd647b852146cd885426d04bffffbd1b7c08a0.tar.xz dexon-solidity-14fd647b852146cd885426d04bffffbd1b7c08a0.tar.zst dexon-solidity-14fd647b852146cd885426d04bffffbd1b7c08a0.zip |
Fix event parsing. Refs #3175
-rw-r--r-- | Changelog.md | 1 | ||||
-rw-r--r-- | libsolidity/parsing/Parser.cpp | 14 | ||||
-rw-r--r-- | test/libsolidity/SolidityEndToEndTest.cpp | 6 | ||||
-rw-r--r-- | test/libsolidity/SolidityParser.cpp | 10 |
4 files changed, 19 insertions, 12 deletions
diff --git a/Changelog.md b/Changelog.md index 45521f3e..85a9fc7f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -5,6 +5,7 @@ Features: * Type Checker: More detailed errors for invalid array lengths (such as division by zero). Bugfixes: + * Parser: Disallow event declarations with no parameter list. ### 0.4.18 (2017-10-18) diff --git a/libsolidity/parsing/Parser.cpp b/libsolidity/parsing/Parser.cpp index 821e81d2..05b877b5 100644 --- a/libsolidity/parsing/Parser.cpp +++ b/libsolidity/parsing/Parser.cpp @@ -644,15 +644,11 @@ ASTPointer<EventDefinition> Parser::parseEventDefinition() expectToken(Token::Event); ASTPointer<ASTString> name(expectIdentifierToken()); - ASTPointer<ParameterList> parameters; - if (m_scanner->currentToken() == Token::LParen) - { - VarDeclParserOptions options; - options.allowIndexed = true; - parameters = parseParameterList(options); - } - else - parameters = createEmptyParameterList(); + + VarDeclParserOptions options; + options.allowIndexed = true; + ASTPointer<ParameterList> parameters = parseParameterList(options); + bool anonymous = false; if (m_scanner->currentToken() == Token::Anonymous) { diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp index 9a837113..7082b702 100644 --- a/test/libsolidity/SolidityEndToEndTest.cpp +++ b/test/libsolidity/SolidityEndToEndTest.cpp @@ -2953,7 +2953,7 @@ BOOST_AUTO_TEST_CASE(event_no_arguments) { char const* sourceCode = R"( contract ClientReceipt { - event Deposit; + event Deposit(); function deposit() { Deposit(); } @@ -2995,7 +2995,7 @@ BOOST_AUTO_TEST_CASE(events_with_same_name) { char const* sourceCode = R"( contract ClientReceipt { - event Deposit; + event Deposit(); event Deposit(address _addr); event Deposit(address _addr, uint _amount); function deposit() returns (uint) { @@ -3041,7 +3041,7 @@ BOOST_AUTO_TEST_CASE(events_with_same_name_inherited) { char const* sourceCode = R"( contract A { - event Deposit; + event Deposit(); } contract B { diff --git a/test/libsolidity/SolidityParser.cpp b/test/libsolidity/SolidityParser.cpp index 72473c3e..861e6408 100644 --- a/test/libsolidity/SolidityParser.cpp +++ b/test/libsolidity/SolidityParser.cpp @@ -960,6 +960,16 @@ BOOST_AUTO_TEST_CASE(event_arguments_indexed) 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) { char const* text = R"( |