diff options
| author | Nicholas Nethercote <nnethercote@mozilla.com> | 2019-02-05 15:18:29 +1100 |
|---|---|---|
| committer | Nicholas Nethercote <nnethercote@mozilla.com> | 2019-02-05 15:18:29 +1100 |
| commit | 970b5d189af48dd6ec26e90bb8d6d236824edf4b (patch) | |
| tree | d2e00ee9e14277c62a121b8a5c1755639f48c4f9 /src/libsyntax | |
| parent | 372fe84a8349ab4a8693d656bd786a5a47e22a56 (diff) | |
| download | rust-970b5d189af48dd6ec26e90bb8d6d236824edf4b.tar.gz rust-970b5d189af48dd6ec26e90bb8d6d236824edf4b.zip | |
Various improvements in `Folder` impls.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/config.rs | 44 | ||||
| -rw-r--r-- | src/libsyntax/ext/expand.rs | 5 | ||||
| -rw-r--r-- | src/libsyntax/ext/placeholders.rs | 15 |
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 } |
