diff options
Diffstat (limited to 'src/expand/mod.cpp')
-rw-r--r-- | src/expand/mod.cpp | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/expand/mod.cpp b/src/expand/mod.cpp index 97934db2..be7e17b0 100644 --- a/src/expand/mod.cpp +++ b/src/expand/mod.cpp @@ -604,7 +604,25 @@ void Expand_Mod(bool is_early, ::AST::Crate& crate, LList<const AST::Module*> mo } } - // 2. General items + // 2. Use statements + for( auto it = mod.imports().begin(); it != mod.imports().end(); ) + { + auto& i = *it; + auto attrs = mv$(i.data.attrs); + Expand_Attrs(attrs, stage_pre (is_early), [&](const auto& sp, const auto& d, const auto& a){ d.handle(sp, a, crate, i.data); }); + Expand_Attrs(attrs, stage_post(is_early), [&](const auto& sp, const auto& d, const auto& a){ d.handle(sp, a, crate, i.data); }); + if( i.data.attrs.m_items.size() == 0 ) + i.data.attrs = mv$(attrs); + + if( i.data.path == AST::Path() ) { + it = mod.imports().erase(it); + } + else { + ++ it; + } + } + + // 3. General items DEBUG("Items"); for( auto& i : mod.items() ) { @@ -619,7 +637,7 @@ void Expand_Mod(bool is_early, ::AST::Crate& crate, LList<const AST::Module*> mo // Skip, nothing ), (MacroInv, - TODO(Span(), "Macro invocation"); + TODO(Span(), "Macro invocation in item list"); ), (Module, LList<const AST::Module*> sub_modstack(&modstack, &e); |