diff options
-rw-r--r-- | src/parse/root.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/parse/root.cpp b/src/parse/root.cpp index 9b4cfcfb..5b724e1a 100644 --- a/src/parse/root.cpp +++ b/src/parse/root.cpp @@ -1107,16 +1107,7 @@ AST::MetaItem Parse_MetaItem(TokenStream& lex) // A sequence of method implementations while( lex.lookahead(0) != TOK_BRACE_CLOSE ) { - auto ps = lex.start_span(); - ::AST::MacroInvocation inv; - if( Parse_MacroInvocation_Opt(lex, inv) ) - { - impl.add_macro_invocation( mv$(inv) ); - } - else - { - Parse_Impl_Item(lex, impl); - } + Parse_Impl_Item(lex, impl); } GET_CHECK_TOK(tok, lex, TOK_BRACE_CLOSE); @@ -1131,6 +1122,16 @@ void Parse_Impl_Item(TokenStream& lex, AST::Impl& impl) AST::MetaItems item_attrs = Parse_ItemAttrs(lex); SET_ATTRS(lex, item_attrs); + { + ::AST::MacroInvocation inv; + if( Parse_MacroInvocation_Opt(lex, inv) ) + { + impl.add_macro_invocation( mv$(inv) ); + impl.items().back().data->attrs = mv$(item_attrs); + return ; + } + } + auto ps = lex.start_span(); bool is_public = Parse_Publicity(lex); |