]> git.lizzy.rs Git - rust.git/commitdiff
Allow attribute macro invocations at the crate root.
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>
Wed, 21 Sep 2016 09:20:42 +0000 (09:20 +0000)
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>
Wed, 21 Sep 2016 09:24:06 +0000 (09:24 +0000)
src/libsyntax/ext/expand.rs

index 4e87d8ee9dda21a2312b7a8fc66573a4e9756c94..e704934dba9c17ee77332c8a5dd2fe37aedd05c7 100644 (file)
@@ -184,13 +184,20 @@ pub fn new(cx: &'a mut ExtCtxt<'b>, monotonic: bool) -> Self {
     fn expand_crate(&mut self, mut krate: ast::Crate) -> ast::Crate {
         let err_count = self.cx.parse_sess.span_diagnostic.err_count();
 
-        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,
+        let krate_item = Expansion::Items(SmallVector::one(P(ast::Item {
+            attrs: krate.attrs,
+            span: krate.span,
+            node: ast::ItemKind::Mod(krate.module),
+            ident: keywords::Invalid.ident(),
+            id: ast::DUMMY_NODE_ID,
+            vis: ast::Visibility::Public,
+        })));
+
+        match self.expand(krate_item).make_items().pop().unwrap().unwrap() {
+            ast::Item { attrs, node: ast::ItemKind::Mod(module), .. } => {
+                krate.attrs = attrs;
+                krate.module = module;
+            },
             _ => unreachable!(),
         };
         krate.exported_macros = mem::replace(&mut self.cx.exported_macros, Vec::new());