summaryrefslogtreecommitdiff
path: root/src/expand/macro_rules.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/expand/macro_rules.cpp')
-rw-r--r--src/expand/macro_rules.cpp23
1 files changed, 5 insertions, 18 deletions
diff --git a/src/expand/macro_rules.cpp b/src/expand/macro_rules.cpp
index fac6dec1..5a8e02c4 100644
--- a/src/expand/macro_rules.cpp
+++ b/src/expand/macro_rules.cpp
@@ -10,7 +10,7 @@ class CMacroRulesExpander:
{
bool expand_early() const override { return true; }
- AST::Expr expand(const ::std::string& ident, const TokenTree& tt, AST::Module& mod, MacroPosition position)
+ ::std::unique_ptr<TokenStream> expand(const ::std::string& ident, const TokenTree& tt, AST::Module& mod) override
{
if( ident == "" ) {
throw ::std::runtime_error( "ERROR: macro_rules! requires an identifier" );
@@ -21,7 +21,8 @@ class CMacroRulesExpander:
// TODO: Place into current module using `ident` as the name
mod.add_macro( false, ident, mac );
- return AST::Expr();
+ static TokenTree empty_tt;
+ return box$( TTStream(empty_tt) );
}
};
@@ -59,23 +60,9 @@ class CMacroUseHandler:
};
-AST::Expr Macro_Invoke(const char* name, const MacroRules& rules, const TokenTree& tt, AST::Module& mod, MacroPosition position)
+::std::unique_ptr<TokenStream> Macro_Invoke(const char* name, const MacroRules& rules, const TokenTree& tt, AST::Module& mod)
{
- auto out_tt = Macro_InvokeRules(name, rules, tt);
- TokenStream& lex = *out_tt;
- // TODO: Expand out_tt
- switch(position)
- {
- case MacroPosition::Item: {
- LList<AST::Module*> l(nullptr, &mod);
- Parse_ModRoot_Items(lex, mod, l, false, "-");
- return AST::Expr();
- }
- default:
- throw ::std::runtime_error("TODO: Macro in non-item position");
- //case MacroPosition::Stmt: {
- // break; }
- }
+ return Macro_InvokeRules(name, rules, tt);
}