diff options
| author | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-09-06 01:45:23 +0000 |
|---|---|---|
| committer | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2016-09-13 09:40:28 +0000 |
| commit | f3c2dca3539e6edc745f9c91898cb97d281865c1 (patch) | |
| tree | 7ee94d4356e71e453f17141fcfb3663c94571443 | |
| parent | c86c8d41a26b2037e80c9fd028a59313a78b3a66 (diff) | |
| download | rust-f3c2dca3539e6edc745f9c91898cb97d281865c1.tar.gz rust-f3c2dca3539e6edc745f9c91898cb97d281865c1.zip | |
Remove scope placeholders from the crate root.
| -rw-r--r-- | src/libsyntax/ext/expand.rs | 15 |
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); |
