parsing: ban empty enum definition.

This commit is contained in:
Yoichi Hirai 2016-11-09 14:08:51 +01:00
parent 457daecba1
commit eee629652e
No known key found for this signature in database
GPG Key ID: E7B75D080FCF7992
4 changed files with 7 additions and 15 deletions

View File

@ -5,6 +5,10 @@ Features:
* Type checker: now more eagerly searches for a common type of an inline array with mixed types
* Code generator: generates a runtime error when an out-of-range value is converted into an enum type.
Bugfixes:
* Parser: disallow empty enum definitions.
### 0.4.4 (2016-10-31)
Bugfixes:

View File

@ -406,6 +406,8 @@ ASTPointer<EnumDefinition> Parser::parseEnumDefinition()
if (m_scanner->currentToken() != Token::Identifier)
fatalParserError(string("Expected Identifier after ','"));
}
if (members.size() == 0)
parserError({"enum with no members is not allowed."});
nodeFactory.markEndPosition();
expectToken(Token::RBrace);

View File

@ -94,20 +94,6 @@ BOOST_AUTO_TEST_CASE(using_for_directive)
BOOST_CHECK_EQUAL(usingFor["children"][1]["attributes"]["name"], "uint");
}
BOOST_AUTO_TEST_CASE(enum_definition)
{
CompilerStack c;
c.addSource("a", "contract C { enum E {} }");
c.parse();
map<string, unsigned> sourceIndices;
sourceIndices["a"] = 1;
Json::Value astJson = ASTJsonConverter(c.ast("a"), sourceIndices).json();
Json::Value enumDefinition = astJson["children"][0]["children"][0];
BOOST_CHECK_EQUAL(enumDefinition["name"], "EnumDefinition");
BOOST_CHECK_EQUAL(enumDefinition["attributes"]["name"], "E");
BOOST_CHECK_EQUAL(enumDefinition["src"], "13:9:1");
}
BOOST_AUTO_TEST_CASE(enum_value)
{
CompilerStack c;

View File

@ -824,7 +824,7 @@ BOOST_AUTO_TEST_CASE(empty_enum_declaration)
contract c {
enum foo { }
})";
BOOST_CHECK(successParse(text));
BOOST_CHECK(!successParse(text));
}
BOOST_AUTO_TEST_CASE(malformed_enum_declaration)