]> git.lizzy.rs Git - rust.git/commitdiff
Refactor out `ast::MacroDef`.
authorJeffrey Seyfried <jeffrey.seyfried@gmail.com>
Fri, 17 Mar 2017 21:58:48 +0000 (21:58 +0000)
committerJeffrey Seyfried <jeffrey.seyfried@gmail.com>
Thu, 25 May 2017 05:47:25 +0000 (05:47 +0000)
src/librustc/hir/lowering.rs
src/librustc/lint/context.rs
src/librustc_metadata/cstore_impl.rs
src/librustdoc/visit_ast.rs
src/libsyntax/ast.rs
src/libsyntax/ext/tt/macro_rules.rs
src/libsyntax/fold.rs
src/libsyntax/parse/parser.rs
src/libsyntax/print/pprust.rs
src/libsyntax/visit.rs

index d359c69d3a092842e8868c63b03d9c3fa43b9d9d..77bcde22ef72d4a001f90d0c77c749ebd0431f98 100644 (file)
@@ -1505,7 +1505,7 @@ pub fn lower_item(&mut self, i: &Item) -> Option<hir::Item> {
         if let ItemKind::MacroDef(ref tts) = i.node {
             if i.attrs.iter().any(|attr| attr.path == "macro_export") {
                 self.exported_macros.push(hir::MacroDef {
-                    name: name, attrs: attrs, id: i.id, span: i.span, body: tts.clone().into(),
+                    name: name, attrs: attrs, id: i.id, span: i.span, body: tts.stream(),
                 });
             }
             return None;
index 9d5ba2c8f950101547a810d5ea2a398f044249f0..a265a84114a34525f7be2e07e1593451cecca6ef 100644 (file)
@@ -49,7 +49,6 @@
 use hir::def_id::LOCAL_CRATE;
 use hir::intravisit as hir_visit;
 use syntax::visit as ast_visit;
-use syntax::tokenstream::ThinTokenStream;
 
 /// Information about the registered lints.
 ///
@@ -1127,7 +1126,7 @@ fn visit_attribute(&mut self, attr: &'a ast::Attribute) {
         run_lints!(self, check_attribute, early_passes, attr);
     }
 
-    fn visit_mac_def(&mut self, _mac: &'a ThinTokenStream, id: ast::NodeId) {
+    fn visit_mac_def(&mut self, _mac: &'a ast::MacroDef, id: ast::NodeId) {
         let lints = self.sess.lints.borrow_mut().take(id);
         for early_lint in lints {
             self.early_lint(&early_lint);
index 7478f902e061a321614af006535e68a6f129dcae..06472ed7fd1429960990c1fea50fc35389505090 100644 (file)
@@ -386,7 +386,9 @@ fn load_macro(&self, id: DefId, sess: &Session) -> LoadedMacro {
             id: ast::DUMMY_NODE_ID,
             span: local_span,
             attrs: attrs.iter().cloned().collect(),
-            node: ast::ItemKind::MacroDef(body.into()),
+            node: ast::ItemKind::MacroDef(ast::MacroDef {
+                tokens: body.into(),
+            }),
             vis: ast::Visibility::Inherited,
         })
     }
index d463e41c58a2a3281206510a116a8d29687ed4e5..39ebe490d0eb28a064821bde1f20c3e37b638db2 100644 (file)
@@ -16,7 +16,6 @@
 use syntax::abi;
 use syntax::ast;
 use syntax::attr;
-use syntax::tokenstream::TokenStream;
 use syntax_pos::Span;
 
 use rustc::hir::map as hir_map;
@@ -214,8 +213,8 @@ pub fn visit_mod_contents(&mut self, span: Span, attrs: hir::HirVec<ast::Attribu
                         LoadedMacro::ProcMacro(..) => continue,
                     };
 
-                    let matchers = if let ast::ItemKind::MacroDef(ref tokens) = def.node {
-                        let tts: Vec<_> = TokenStream::from(tokens.clone()).into_trees().collect();
+                    let matchers = if let ast::ItemKind::MacroDef(ref def) = def.node {
+                        let tts: Vec<_> = def.stream().into_trees().collect();
                         tts.chunks(4).map(|arm| arm[0].span()).collect()
                     } else {
                         unreachable!()
index 24ce99208ed11bc9e89cda6408003e12fa3207d2..6a30072c835aa27548b14b1588c460cdddc949b1 100644 (file)
@@ -1019,6 +1019,17 @@ pub fn stream(&self) -> TokenStream {
     }
 }
 
+#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
+pub struct MacroDef {
+    pub tokens: ThinTokenStream,
+}
+
+impl MacroDef {
+    pub fn stream(&self) -> TokenStream {
+        self.tokens.clone().into()
+    }
+}
+
 #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
 pub enum StrStyle {
     /// A regular string, like `"foo"`
@@ -1863,7 +1874,7 @@ pub enum ItemKind {
     Mac(Mac),
 
     /// A macro definition.
-    MacroDef(ThinTokenStream),
+    MacroDef(MacroDef),
 }
 
 impl ItemKind {
index 73494d47fee9b9a59dee95d448e95e43de1e55ca..7ac3990def4c17ba027642c71857ab668b54c1c2 100644 (file)
@@ -189,7 +189,7 @@ pub fn compile(sess: &ParseSess, features: &RefCell<Features>, def: &ast::Item)
 
     // Parse the macro_rules! invocation
     let body = match def.node {
-        ast::ItemKind::MacroDef(ref body) => body.clone().into(),
+        ast::ItemKind::MacroDef(ref body) => body.stream(),
         _ => unreachable!(),
     };
     let argument_map = match parse(sess, body, &argument_gram, None, true) {
index 58cf50cdc000ce3026dda2ad2ec1814926237378..9aeb9ecca5a59171434449cbfc43f18a1943ca60 100644 (file)
@@ -189,6 +189,10 @@ fn fold_mac(&mut self, _mac: Mac) -> Mac {
         // fold::noop_fold_mac(_mac, self)
     }
 
+    fn fold_macro_def(&mut self, def: MacroDef) -> MacroDef {
+        noop_fold_macro_def(def, self)
+    }
+
     fn fold_lifetime(&mut self, l: Lifetime) -> Lifetime {
         noop_fold_lifetime(l, self)
     }
@@ -515,6 +519,12 @@ pub fn noop_fold_mac<T: Folder>(Spanned {node, span}: Mac, fld: &mut T) -> Mac {
     }
 }
 
+pub fn noop_fold_macro_def<T: Folder>(def: MacroDef, fld: &mut T) -> MacroDef {
+    MacroDef {
+        tokens: fld.fold_tts(def.tokens.into()).into(),
+    }
+}
+
 pub fn noop_fold_meta_list_item<T: Folder>(li: NestedMetaItem, fld: &mut T)
     -> NestedMetaItem {
     Spanned {
@@ -919,7 +929,7 @@ pub fn noop_fold_item_kind<T: Folder>(i: ItemKind, folder: &mut T) -> ItemKind {
             items.move_flat_map(|item| folder.fold_trait_item(item)),
         ),
         ItemKind::Mac(m) => ItemKind::Mac(folder.fold_mac(m)),
-        ItemKind::MacroDef(tts) => ItemKind::MacroDef(folder.fold_tts(tts.into()).into()),
+        ItemKind::MacroDef(def) => ItemKind::MacroDef(folder.fold_macro_def(def)),
     }
 }
 
index c28f678cb5197a84f62426c4bdfc5f8fdfb3d485..3c9ad8ca9c04a5289637bf2d341e2b3abd7d0c98 100644 (file)
@@ -3781,7 +3781,9 @@ fn eat_macro_def(&mut self, attrs: &[Attribute], vis: &Visibility)
         }
 
         let span = lo.to(self.prev_span);
-        let kind = ItemKind::MacroDef(tts);
+        let kind = ItemKind::MacroDef(ast::MacroDef {
+            tokens: tts,
+        });
         Ok(Some(self.mk_item(span, id, kind, Visibility::Inherited, attrs.to_owned())))
     }
 
index 83c289ff80b9251bd2df854ebed1207b7f5a09f0..6c5bf56070e163016330ffbd11179353b68579c0 100644 (file)
@@ -1392,7 +1392,7 @@ pub fn print_item(&mut self, item: &ast::Item) -> io::Result<()> {
                 self.print_ident(item.ident)?;
                 self.cbox(INDENT_UNIT)?;
                 self.popen()?;
-                self.print_tts(tts.clone().into())?;
+                self.print_tts(tts.stream())?;
                 self.pclose()?;
                 word(&mut self.s, ";")?;
                 self.end()?;
index 0fa0753b22c8298276987aa44eff0d5d6c39f5bd..d29d2497afe1ac22b2f824d7484618a9cb1805b8 100644 (file)
@@ -27,7 +27,6 @@
 use ast::*;
 use syntax_pos::Span;
 use codemap::Spanned;
-use tokenstream::ThinTokenStream;
 
 #[derive(Copy, Clone, PartialEq, Eq)]
 pub enum FnKind<'a> {
@@ -113,7 +112,7 @@ fn visit_mac(&mut self, _mac: &'ast Mac) {
         // definition in your trait impl:
         // visit::walk_mac(self, _mac)
     }
-    fn visit_mac_def(&mut self, _mac: &'ast ThinTokenStream, _id: NodeId) {
+    fn visit_mac_def(&mut self, _mac: &'ast MacroDef, _id: NodeId) {
         // Nothing to do
     }
     fn visit_path(&mut self, path: &'ast Path, _id: NodeId) {