diff options
author | John Hodge <tpg@mutabah.net> | 2016-10-09 12:53:11 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-10-09 12:53:11 +0800 |
commit | bc0bc36123727c258dd3f2a61b7e46507485777b (patch) | |
tree | 069fced4cc9226d3cd49abfb1b401bddf3b48fef /src/hir/from_ast.cpp | |
parent | baaca746b480d0ede1c15ae24327f57475d04353 (diff) | |
download | mrust-bc0bc36123727c258dd3f2a61b7e46507485777b.tar.gz |
Expand - #[macro_reexport]
Diffstat (limited to 'src/hir/from_ast.cpp')
-rw-r--r-- | src/hir/from_ast.cpp | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/hir/from_ast.cpp b/src/hir/from_ast.cpp index 02aa7e02..fb0b3186 100644 --- a/src/hir/from_ast.cpp +++ b/src/hir/from_ast.cpp @@ -1309,14 +1309,29 @@ public: auto& macros = rv.m_exported_macros; // - Extract macros from root module - for( auto& mac : crate.m_root_module.macro_imports_res() ) { - //if( mac.data->export ) { - macros.insert( ::std::make_pair( mac.name, MacroRulesPtr(new MacroRules( mv$(*const_cast<MacroRules*>(mac.data)) )) ) ); - //} - } for( /*const*/ auto& mac : crate.m_root_module.macros() ) { if( mac.data->m_exported ) { - macros.insert( ::std::make_pair( mac.name, mv$(mac.data) ) ); + auto res = macros.insert( ::std::make_pair( mac.name, mv$(mac.data) ) ); + if( res.second ) + DEBUG("- Define " << mac.name << "!"); + } + else { + DEBUG("- Non-exported " << mac.name << "!"); + } + } + for( auto& mac : crate.m_root_module.macro_imports_res() ) { + if( mac.data->m_exported && mac.name != "" ) { + auto v = ::std::make_pair( mac.name, MacroRulesPtr(new MacroRules( mv$(*const_cast<MacroRules*>(mac.data)) )) ); + auto it = macros.find(mac.name); + if( it == macros.end() ) + { + auto res = macros.insert( mv$(v) ); + DEBUG("- Import " << mac.name << "! (from \"" << res.first->second->m_source_crate << "\")"); + } + else { + DEBUG("- Replace " << mac.name << "! (from \"" << it->second->m_source_crate << "\") with one from \"" << v.second->m_source_crate << "\""); + it->second = mv$( v.second ); + } } } |