summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-02-25 18:44:27 +0800
committerJohn Hodge <tpg@mutabah.net>2016-02-25 18:44:27 +0800
commitd47fda127598279cf0193b411d67dbb96ca50233 (patch)
treef43ab1821972980afdb6cc4c7f91c4d6456f1408 /src
parent7a507fcb4955715ebccd1eb85cf792a1a7802c61 (diff)
downloadmrust-d47fda127598279cf0193b411d67dbb96ca50233.tar.gz
Parse - Parse (but don't use) attributes on enum variant fields
Diffstat (limited to 'src')
-rw-r--r--src/parse/root.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/parse/root.cpp b/src/parse/root.cpp
index ab760a19..eccac880 100644
--- a/src/parse/root.cpp
+++ b/src/parse/root.cpp
@@ -698,6 +698,15 @@ AST::Enum Parse_EnumDef(TokenStream& lex, const AST::MetaItems meta_items)
GET_TOK(tok, lex);
break;
}
+
+ AST::MetaItems field_attrs;
+ while( LOOK_AHEAD(lex) == TOK_ATTR_OPEN )
+ {
+ GET_TOK(tok, lex);
+ field_attrs.push_back( Parse_MetaItem(lex) );
+ GET_CHECK_TOK(tok, lex, TOK_SQUARE_CLOSE);
+ }
+
types.push_back( Parse_Type(lex) );
} while( GET_TOK(tok, lex) == TOK_COMMA );
CHECK_TOK(tok, TOK_PAREN_CLOSE);
@@ -714,10 +723,20 @@ AST::Enum Parse_EnumDef(TokenStream& lex, const AST::MetaItems meta_items)
GET_TOK(tok, lex);
break;
}
+
+ AST::MetaItems field_attrs;
+ while( LOOK_AHEAD(lex) == TOK_ATTR_OPEN )
+ {
+ GET_TOK(tok, lex);
+ field_attrs.push_back( Parse_MetaItem(lex) );
+ GET_CHECK_TOK(tok, lex, TOK_SQUARE_CLOSE);
+ }
+
GET_CHECK_TOK(tok, lex, TOK_IDENT);
auto name = mv$(tok.str());
GET_CHECK_TOK(tok, lex, TOK_COLON);
auto ty = Parse_Type(lex);
+ // TODO: Field attributes
fields.push_back( ::AST::Item<TypeRef>(mv$(name), mv$(ty), true) );
} while( GET_TOK(tok, lex) == TOK_COMMA );
CHECK_TOK(tok, TOK_BRACE_CLOSE);