diff options
Diffstat (limited to 'src/expand')
-rw-r--r-- | src/expand/macro_rules.cpp | 8 | ||||
-rw-r--r-- | src/expand/macro_rules.hpp | 2 | ||||
-rw-r--r-- | src/expand/mod.cpp | 2 |
3 files changed, 7 insertions, 5 deletions
diff --git a/src/expand/macro_rules.cpp b/src/expand/macro_rules.cpp index 968bf5f9..1689746c 100644 --- a/src/expand/macro_rules.cpp +++ b/src/expand/macro_rules.cpp @@ -4,6 +4,7 @@ #include "../ast/ast.hpp" #include "../parse/common.hpp" #include "macro_rules.hpp" +#include <macro_rules/macro_rules.hpp> class CMacroRulesExpander: public ExpandProcMacro @@ -15,9 +16,10 @@ class CMacroRulesExpander: if( ident == "" ) ERROR(sp, E0000, "macro_rules! requires an identifier" ); + DEBUG("Parsing macro_rules! " << ident); TTStream lex(tt); auto mac = Parse_MacroRules(lex); - mod.add_macro( false, ident, mac ); + mod.add_macro( false, ident, mv$(mac) ); return ::std::unique_ptr<TokenStream>( new TTStreamO(TokenTree()) ); } @@ -45,7 +47,7 @@ class CMacroUseHandler: { if( mr.name == name ) { DEBUG("Imported " << mr.name); - mod.add_macro_import( mr.name, mr.data ); + mod.add_macro_import( mr.name, *mr.data ); goto _good; } } @@ -67,7 +69,7 @@ class CMacroUseHandler: for( const auto& mr : submod.macros() ) { DEBUG("Imported " << mr.name); - mod.add_macro_import( mr.name, mr.data ); + mod.add_macro_import( mr.name, *mr.data ); } for( const auto& mri : submod.macro_imports_res() ) { diff --git a/src/expand/macro_rules.hpp b/src/expand/macro_rules.hpp index b4e6e1e0..fc4a2851 100644 --- a/src/expand/macro_rules.hpp +++ b/src/expand/macro_rules.hpp @@ -4,7 +4,6 @@ #pragma once #include <synext.hpp> -#include "../macros.hpp" namespace AST { class Expr; @@ -12,5 +11,6 @@ namespace AST { } class TokenTree; class TokenStream; +class MacroRules; extern ::std::unique_ptr<TokenStream> Macro_Invoke(const char* name, const MacroRules& rules, const TokenTree& tt, AST::Module& mod); diff --git a/src/expand/mod.cpp b/src/expand/mod.cpp index 3f0911fe..0cb2c9c7 100644 --- a/src/expand/mod.cpp +++ b/src/expand/mod.cpp @@ -105,7 +105,7 @@ void Expand_Attrs(const ::AST::MetaItems& attrs, AttrStage stage, ::AST::Crate& if( input_ident != "" ) ERROR(mi_span, E0000, "macro_rules! macros can't take an ident"); - auto e = Macro_Invoke(name.c_str(), mr.data, input_tt, mod); + auto e = Macro_Invoke(name.c_str(), *mr.data, input_tt, mod); return e; } } |