summaryrefslogtreecommitdiff
path: root/src/hir/from_ast.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-10-09 12:53:11 +0800
committerJohn Hodge <tpg@mutabah.net>2016-10-09 12:53:11 +0800
commitbc0bc36123727c258dd3f2a61b7e46507485777b (patch)
tree069fced4cc9226d3cd49abfb1b401bddf3b48fef /src/hir/from_ast.cpp
parentbaaca746b480d0ede1c15ae24327f57475d04353 (diff)
downloadmrust-bc0bc36123727c258dd3f2a61b7e46507485777b.tar.gz
Expand - #[macro_reexport]
Diffstat (limited to 'src/hir/from_ast.cpp')
-rw-r--r--src/hir/from_ast.cpp27
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 );
+ }
}
}