diff options
author | John Hodge (sonata) <tpg@mutabah.net> | 2015-01-20 21:32:16 +0800 |
---|---|---|
committer | John Hodge (sonata) <tpg@mutabah.net> | 2015-01-20 21:32:16 +0800 |
commit | 2306ea6076531132e990d038bdf759b71d9654db (patch) | |
tree | 17b9630505d592f01c07d74bab96add9523e9b0a | |
parent | 2b9a03f6b71446dceb12f5d097f066e3c9354210 (diff) | |
download | mrust-2306ea6076531132e990d038bdf759b71d9654db.tar.gz |
Fixed handling of "empty" enum variants (type to unit, not empty tuple)
-rw-r--r-- | src/parse/root.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/parse/root.cpp b/src/parse/root.cpp index 1ab010bd..2c559d84 100644 --- a/src/parse/root.cpp +++ b/src/parse/root.cpp @@ -545,9 +545,9 @@ AST::Enum Parse_EnumDef(TokenStream& lex, const ::std::vector<AST::MetaItem> met {
CHECK_TOK(tok, TOK_IDENT);
::std::string name = tok.str();
- ::std::vector<TypeRef> types;
if( GET_TOK(tok, lex) == TOK_PAREN_OPEN )
{
+ ::std::vector<TypeRef> types;
// Get type list
// TODO: Handle 'Variant()'?
do
@@ -556,9 +556,13 @@ AST::Enum Parse_EnumDef(TokenStream& lex, const ::std::vector<AST::MetaItem> met } while( GET_TOK(tok, lex) == TOK_COMMA );
CHECK_TOK(tok, TOK_PAREN_CLOSE);
GET_TOK(tok, lex);
+ variants.push_back( AST::StructItem(::std::move(name), TypeRef(TypeRef::TagTuple(), ::std::move(types))) );
+ }
+ else
+ {
+ variants.push_back( AST::StructItem(::std::move(name), TypeRef(TypeRef::TagUnit())) );
}
- variants.push_back( AST::StructItem(::std::move(name), TypeRef(TypeRef::TagTuple(), ::std::move(types))) );
if( tok.type() != TOK_COMMA )
break;
}
|