diff options
author | John Hodge (bugs) <tpg@mutabah.net> | 2017-06-04 21:23:03 +0800 |
---|---|---|
committer | John Hodge (bugs) <tpg@mutabah.net> | 2017-06-04 21:23:03 +0800 |
commit | 0b9fd0014c8f32ecf299dae2ad1811dfb484af46 (patch) | |
tree | 609eff961f07d7562a2b5a1ffb4a43905f5e98fb /src/expand/mod.cpp | |
parent | 7a267995c7cfd6b68849079dc4ecae4ebe74e6fa (diff) | |
download | mrust-0b9fd0014c8f32ecf299dae2ad1811dfb484af46.tar.gz |
All - Compile and run fixes in MSVC
Diffstat (limited to 'src/expand/mod.cpp')
-rw-r--r-- | src/expand/mod.cpp | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/expand/mod.cpp b/src/expand/mod.cpp index 788b2109..81a3c5b6 100644 --- a/src/expand/mod.cpp +++ b/src/expand/mod.cpp @@ -15,6 +15,8 @@ #include <ast/expr.hpp> #include "cfg.hpp" +DecoratorDef* g_decorators_list = nullptr; +MacroDef* g_macros_list = nullptr; ::std::map< ::std::string, ::std::unique_ptr<ExpandDecorator> > g_decorators; ::std::map< ::std::string, ::std::unique_ptr<ExpandProcMacro> > g_macros; @@ -24,10 +26,18 @@ void Expand_Expr(::AST::Crate& crate, LList<const AST::Module*> modstack, AST::E void Expand_Expr(::AST::Crate& crate, LList<const AST::Module*> modstack, ::std::shared_ptr<AST::ExprNode>& node); void Register_Synext_Decorator(::std::string name, ::std::unique_ptr<ExpandDecorator> handler) { - g_decorators[name] = mv$(handler); + g_decorators.insert(::std::make_pair( mv$(name), mv$(handler) )); } void Register_Synext_Macro(::std::string name, ::std::unique_ptr<ExpandProcMacro> handler) { - g_macros[name] = mv$(handler); + g_macros.insert(::std::make_pair( mv$(name), mv$(handler) )); +} +void Register_Synext_Decorator_Static(DecoratorDef* def) { + def->prev = g_decorators_list; + g_decorators_list = def; +} +void Register_Synext_Macro_Static(MacroDef* def) { + def->prev = g_macros_list; + g_macros_list = def; } @@ -1062,6 +1072,18 @@ void Expand_Mod_IndexAnon(::AST::Crate& crate, ::AST::Module& mod) } void Expand(::AST::Crate& crate) { + // Fill macro/decorator map from init list + while(g_decorators_list) + { + g_decorators.insert(::std::make_pair( mv$(g_decorators_list->name), mv$(g_decorators_list->def) )); + g_decorators_list = g_decorators_list->prev; + } + while (g_macros_list) + { + g_macros.insert(::std::make_pair(mv$(g_macros_list->name), mv$(g_macros_list->def))); + g_macros_list = g_macros_list->prev; + } + auto modstack = LList<const ::AST::Module*>(nullptr, &crate.m_root_module); // 1. Crate attributes |