about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-09-06 01:45:23 +0000
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>2016-09-13 09:40:28 +0000
commitf3c2dca3539e6edc745f9c91898cb97d281865c1 (patch)
tree7ee94d4356e71e453f17141fcfb3663c94571443
parentc86c8d41a26b2037e80c9fd028a59313a78b3a66 (diff)
downloadrust-f3c2dca3539e6edc745f9c91898cb97d281865c1.tar.gz
rust-f3c2dca3539e6edc745f9c91898cb97d281865c1.zip
Remove scope placeholders from the crate root.
-rw-r--r--src/libsyntax/ext/expand.rs15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs
index eef38ea28e0..0eb9d4bc0c2 100644
--- a/src/libsyntax/ext/expand.rs
+++ b/src/libsyntax/ext/expand.rs
@@ -191,8 +191,15 @@ impl<'a, 'b> MacroExpander<'a, 'b> {
     fn expand_crate(&mut self, mut krate: ast::Crate) -> ast::Crate {
         let err_count = self.cx.parse_sess.span_diagnostic.err_count();
 
-        let items = Expansion::Items(SmallVector::many(krate.module.items));
-        krate.module.items = self.expand(items).make_items().into();
+        let mut krate_item = placeholder(ExpansionKind::Items, ast::DUMMY_NODE_ID)
+            .make_items().pop().unwrap().unwrap();
+        krate_item.node = ast::ItemKind::Mod(krate.module);
+        let krate_item = Expansion::Items(SmallVector::one(P(krate_item)));
+
+        krate.module = match self.expand(krate_item).make_items().pop().unwrap().unwrap().node {
+            ast::ItemKind::Mod(module) => module,
+            _ => unreachable!(),
+        };
         krate.exported_macros = mem::replace(&mut self.cx.exported_macros, Vec::new());
 
         for def in &mut krate.exported_macros {
@@ -596,6 +603,10 @@ impl<'a, 'b> Folder for InvocationCollector<'a, 'b> {
                 })
             }
             ast::ItemKind::Mod(ast::Mod { inner, .. }) => {
+                if item.ident == keywords::Invalid.ident() {
+                    return noop_fold_item(item, self);
+                }
+
                 let mut module = (*self.cx.current_expansion.module).clone();
                 module.mod_path.push(item.ident);