summaryrefslogtreecommitdiff
path: root/src/expand/mod.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/expand/mod.cpp')
-rw-r--r--src/expand/mod.cpp22
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);