summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/parse/root.cpp21
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);