about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorNicholas Nethercote <nnethercote@mozilla.com>2019-02-05 15:18:29 +1100
committerNicholas Nethercote <nnethercote@mozilla.com>2019-02-05 15:18:29 +1100
commit970b5d189af48dd6ec26e90bb8d6d236824edf4b (patch)
treed2e00ee9e14277c62a121b8a5c1755639f48c4f9 /src/libsyntax
parent372fe84a8349ab4a8693d656bd786a5a47e22a56 (diff)
downloadrust-970b5d189af48dd6ec26e90bb8d6d236824edf4b.tar.gz
rust-970b5d189af48dd6ec26e90bb8d6d236824edf4b.zip
Various improvements in `Folder` impls.
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/config.rs44
-rw-r--r--src/libsyntax/ext/expand.rs5
-rw-r--r--src/libsyntax/ext/placeholders.rs15
3 files changed, 18 insertions, 46 deletions
diff --git a/src/libsyntax/config.rs b/src/libsyntax/config.rs
index 2930ce079c8..b35730bf238 100644
--- a/src/libsyntax/config.rs
+++ b/src/libsyntax/config.rs
@@ -13,6 +13,7 @@ use edition::Edition;
 use parse::{token, ParseSess};
 use smallvec::SmallVec;
 use errors::Applicability;
+use util::move_map::MoveMap;
 
 use ptr::P;
 
@@ -220,19 +221,19 @@ impl<'a> StripUnconfigured<'a> {
     pub fn configure_foreign_mod(&mut self, foreign_mod: ast::ForeignMod) -> ast::ForeignMod {
         ast::ForeignMod {
             abi: foreign_mod.abi,
-            items: foreign_mod.items.into_iter().filter_map(|item| self.configure(item)).collect(),
+            items: foreign_mod.items.move_flat_map(|item| self.configure(item)),
         }
     }
 
     fn configure_variant_data(&mut self, vdata: ast::VariantData) -> ast::VariantData {
         match vdata {
             ast::VariantData::Struct(fields, id) => {
-                let fields = fields.into_iter().filter_map(|field| self.configure(field));
-                ast::VariantData::Struct(fields.collect(), id)
+                let fields = fields.move_flat_map(|field| self.configure(field));
+                ast::VariantData::Struct(fields, id)
             }
             ast::VariantData::Tuple(fields, id) => {
-                let fields = fields.into_iter().filter_map(|field| self.configure(field));
-                ast::VariantData::Tuple(fields.collect(), id)
+                let fields = fields.move_flat_map(|field| self.configure(field));
+                ast::VariantData::Tuple(fields, id)
             }
             ast::VariantData::Unit(id) => ast::VariantData::Unit(id)
         }
@@ -247,7 +248,7 @@ impl<'a> StripUnconfigured<'a> {
                 ast::ItemKind::Union(self.configure_variant_data(def), generics)
             }
             ast::ItemKind::Enum(def, generics) => {
-                let variants = def.variants.into_iter().filter_map(|v| {
+                let variants = def.variants.move_flat_map(|v| {
                     self.configure(v).map(|v| {
                         Spanned {
                             node: ast::Variant_ {
@@ -260,9 +261,7 @@ impl<'a> StripUnconfigured<'a> {
                         }
                     })
                 });
-                ast::ItemKind::Enum(ast::EnumDef {
-                    variants: variants.collect(),
-                }, generics)
+                ast::ItemKind::Enum(ast::EnumDef { variants }, generics)
             }
             item => item,
         }
@@ -271,15 +270,11 @@ impl<'a> StripUnconfigured<'a> {
     pub fn configure_expr_kind(&mut self, expr_kind: ast::ExprKind) -> ast::ExprKind {
         match expr_kind {
             ast::ExprKind::Match(m, arms) => {
-                let arms = arms.into_iter().filter_map(|a| self.configure(a)).collect();
+                let arms = arms.move_flat_map(|a| self.configure(a));
                 ast::ExprKind::Match(m, arms)
             }
             ast::ExprKind::Struct(path, fields, base) => {
-                let fields = fields.into_iter()
-                    .filter_map(|field| {
-                        self.configure(field)
-                    })
-                    .collect();
+                let fields = fields.move_flat_map(|field| self.configure(field));
                 ast::ExprKind::Struct(path, fields, base)
             }
             _ => expr_kind,
@@ -304,22 +299,10 @@ impl<'a> StripUnconfigured<'a> {
         self.process_cfg_attrs(expr)
     }
 
-    pub fn configure_stmt(&mut self, stmt: ast::Stmt) -> Option<ast::Stmt> {
-        self.configure(stmt)
-    }
-
-    pub fn configure_struct_expr_field(&mut self, field: ast::Field) -> Option<ast::Field> {
-        self.configure(field)
-    }
-
     pub fn configure_pat(&mut self, pattern: P<ast::Pat>) -> P<ast::Pat> {
         pattern.map(|mut pattern| {
             if let ast::PatKind::Struct(path, fields, etc) = pattern.node {
-                let fields = fields.into_iter()
-                    .filter_map(|field| {
-                        self.configure(field)
-                    })
-                    .collect();
+                let fields = fields.move_flat_map(|field| self.configure(field));
                 pattern.node = ast::PatKind::Struct(path, fields, etc);
             }
             pattern
@@ -367,10 +350,7 @@ impl<'a> fold::Folder for StripUnconfigured<'a> {
     }
 
     fn fold_stmt(&mut self, stmt: ast::Stmt) -> SmallVec<[ast::Stmt; 1]> {
-        match self.configure_stmt(stmt) {
-            Some(stmt) => fold::noop_fold_stmt(stmt, self),
-            None => return SmallVec::new(),
-        }
+        fold::noop_fold_stmt(configure!(self, stmt), self)
     }
 
     fn fold_item(&mut self, item: P<ast::Item>) -> SmallVec<[P<ast::Item>; 1]> {
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs
index 72e0a86bf59..2effd910e85 100644
--- a/src/libsyntax/ext/expand.rs
+++ b/src/libsyntax/ext/expand.rs
@@ -1247,10 +1247,7 @@ impl<'a, 'b> Folder for InvocationCollector<'a, 'b> {
     }
 
     fn fold_stmt(&mut self, stmt: ast::Stmt) -> SmallVec<[ast::Stmt; 1]> {
-        let mut stmt = match self.cfg.configure_stmt(stmt) {
-            Some(stmt) => stmt,
-            None => return SmallVec::new(),
-        };
+        let mut stmt = configure!(self, stmt);
 
         // we'll expand attributes on expressions separately
         if !stmt.is_expr() {
diff --git a/src/libsyntax/ext/placeholders.rs b/src/libsyntax/ext/placeholders.rs
index 3b0402d910a..0928bc80404 100644
--- a/src/libsyntax/ext/placeholders.rs
+++ b/src/libsyntax/ext/placeholders.rs
@@ -181,17 +181,12 @@ impl<'a, 'b> Folder for PlaceholderExpander<'a, 'b> {
 
     fn fold_block(&mut self, block: P<ast::Block>) -> P<ast::Block> {
         noop_fold_block(block, self).map(|mut block| {
-            let mut remaining_stmts = block.stmts.len();
-
-            block.stmts = block.stmts.move_flat_map(|mut stmt| {
-                remaining_stmts -= 1;
-
+            block.stmts = block.stmts.move_map(|mut stmt| {
                 if self.monotonic {
                     assert_eq!(stmt.id, ast::DUMMY_NODE_ID);
                     stmt.id = self.cx.resolver.next_node_id();
                 }
-
-                Some(stmt)
+                stmt
             });
 
             block
@@ -200,9 +195,9 @@ impl<'a, 'b> Folder for PlaceholderExpander<'a, 'b> {
 
     fn fold_mod(&mut self, module: ast::Mod) -> ast::Mod {
         let mut module = noop_fold_mod(module, self);
-        module.items = module.items.move_flat_map(|item| match item.node {
-            ast::ItemKind::Mac(_) if !self.cx.ecfg.keep_macs => None, // remove macro definitions
-            _ => Some(item),
+        module.items.retain(|item| match item.node {
+            ast::ItemKind::Mac(_) if !self.cx.ecfg.keep_macs => false, // remove macro definitions
+            _ => true,
         });
         module
     }