From 38c943136d2ebebceb835a8f5689d3805b3709b1 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Fri, 3 Apr 2015 15:19:55 +0800 Subject: Save #[] attrs with item, ready for post-processing derive() --- src/parse/expr.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src/parse/expr.cpp') diff --git a/src/parse/expr.cpp b/src/parse/expr.cpp index 88dc2f5e..536860c6 100644 --- a/src/parse/expr.cpp +++ b/src/parse/expr.cpp @@ -52,7 +52,7 @@ ExprNodeP Parse_ExprBlockNode(TokenStream& lex) ::std::vector nodes; - ::std::unique_ptr local_mod( new AST::Module("") ); + ::std::unique_ptr local_mod( new AST::Module(AST::MetaItems(),"") ); bool keep_mod = false; const LList* prev_modstack = Macro_GetModule(); @@ -109,7 +109,7 @@ ExprNodeP Parse_ExprBlockNode(TokenStream& lex) local_mod->statics().push_back( AST::Item( ::std::move(name), - AST::Static(AST::Static::CONST, ::std::move(type), ::std::move(val)), + AST::Static(mv$(item_attrs), AST::Static::CONST, mv$(type), mv$(val)), false ) ); break; } @@ -130,14 +130,18 @@ ExprNodeP Parse_ExprBlockNode(TokenStream& lex) auto val = Parse_Expr1(lex); GET_CHECK_TOK(tok, lex, TOK_SEMICOLON); - local_mod->add_global(false, is_mut, ::std::move(name), ::std::move(type), ::std::move(val)); + local_mod->add_static(false, mv$(name), + AST::Static(mv$(item_attrs), (is_mut ? AST::Static::MUT : AST::Static::STATIC), mv$(type), mv$(val)) + ); break; } // - 'struct' - case TOK_RWORD_STRUCT: + case TOK_RWORD_STRUCT: { keep_mod = true; - Parse_Struct(*local_mod, lex, false, item_attrs); - break; + GET_CHECK_TOK(tok, lex, TOK_IDENT); + ::std::string name = tok.str(); + local_mod->add_struct(false, mv$(name), Parse_Struct(lex, item_attrs)); + break; } // - 'impl' case TOK_RWORD_IMPL: keep_mod = true; -- cgit v1.2.3