diff options
| author | bors <bors@rust-lang.org> | 2018-08-23 14:40:22 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-08-23 14:40:22 +0000 |
| commit | e5284b0b57275cb18618ef1532ee7f07c32a1e18 (patch) | |
| tree | 6aba8da7f29ac6d8ba8fee2a858d0bfeb14c06a1 /src/libsyntax/ext | |
| parent | 35bf1ae25799a4e62131159f052e0a3cbd27c960 (diff) | |
| parent | 4d81fe9243cc8372d3ad5a0eec3dd638578a3541 (diff) | |
| download | rust-e5284b0b57275cb18618ef1532ee7f07c32a1e18.tar.gz rust-e5284b0b57275cb18618ef1532ee7f07c32a1e18.zip | |
Auto merge of #53384 - gootorov:use-servo-smallvec, r=michaelwoerister
Use optimized SmallVec implementation This PR replaces current SmallVec implementation with the one from the Servo project. Closes https://github.com/rust-lang/rust/issues/51640 r? @Mark-Simulacrum
Diffstat (limited to 'src/libsyntax/ext')
| -rw-r--r-- | src/libsyntax/ext/base.rs | 8 | ||||
| -rw-r--r-- | src/libsyntax/ext/expand.rs | 9 | ||||
| -rw-r--r-- | src/libsyntax/ext/placeholders.rs | 22 | ||||
| -rw-r--r-- | src/libsyntax/ext/tt/macro_parser.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/ext/tt/transcribe.rs | 2 |
5 files changed, 22 insertions, 21 deletions
diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index c9925b41498..75d24df7b62 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -316,11 +316,11 @@ impl<F> IdentMacroExpander for F // Use a macro because forwarding to a simple function has type system issues macro_rules! make_stmts_default { ($me:expr) => { - $me.make_expr().map(|e| OneVector::one(ast::Stmt { + $me.make_expr().map(|e| smallvec![ast::Stmt { id: ast::DUMMY_NODE_ID, span: e.span, node: ast::StmtKind::Expr(e), - })) + }]) } } @@ -548,11 +548,11 @@ impl MacResult for DummyResult { } fn make_stmts(self: Box<DummyResult>) -> Option<OneVector<ast::Stmt>> { - Some(OneVector::one(ast::Stmt { + Some(smallvec![ast::Stmt { id: ast::DUMMY_NODE_ID, node: ast::StmtKind::Expr(DummyResult::raw_expr(self.span)), span: self.span, - })) + }]) } fn make_ty(self: Box<DummyResult>) -> Option<P<ast::Ty>> { diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index 494f6d29832..a2e84b508dc 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -37,6 +37,7 @@ use visit::{self, Visitor}; use std::collections::HashMap; use std::fs::File; use std::io::Read; +use std::iter::FromIterator; use std::{iter, mem}; use std::rc::Rc; use std::path::PathBuf; @@ -131,7 +132,7 @@ macro_rules! ast_fragments { self.expand_fragment(AstFragment::$Kind(ast)).$make_ast() })*)* $($(fn $fold_ast_elt(&mut self, ast_elt: <$AstTy as IntoIterator>::Item) -> $AstTy { - self.expand_fragment(AstFragment::$Kind(OneVector::one(ast_elt))).$make_ast() + self.expand_fragment(AstFragment::$Kind(smallvec![ast_elt])).$make_ast() })*)* } @@ -270,7 +271,7 @@ impl<'a, 'b> MacroExpander<'a, 'b> { let orig_mod_span = krate.module.inner; - let krate_item = AstFragment::Items(OneVector::one(P(ast::Item { + let krate_item = AstFragment::Items(smallvec![P(ast::Item { attrs: krate.attrs, span: krate.span, node: ast::ItemKind::Mod(krate.module), @@ -278,7 +279,7 @@ impl<'a, 'b> MacroExpander<'a, 'b> { id: ast::DUMMY_NODE_ID, vis: respan(krate.span.shrink_to_lo(), ast::VisibilityKind::Public), tokens: None, - }))); + })]); match self.expand_fragment(krate_item).make_items().pop().map(P::into_inner) { Some(ast::Item { attrs, node: ast::ItemKind::Mod(module), .. }) => { @@ -1404,7 +1405,7 @@ impl<'a, 'b> Folder for InvocationCollector<'a, 'b> { ui }); - OneVector::many( + OneVector::from_iter( self.fold_unnameable(item).into_iter() .chain(self.fold_unnameable(use_item))) } else { diff --git a/src/libsyntax/ext/placeholders.rs b/src/libsyntax/ext/placeholders.rs index 18b4119fde8..7a8ccfddf8e 100644 --- a/src/libsyntax/ext/placeholders.rs +++ b/src/libsyntax/ext/placeholders.rs @@ -46,37 +46,37 @@ pub fn placeholder(kind: AstFragmentKind, id: ast::NodeId) -> AstFragment { match kind { AstFragmentKind::Expr => AstFragment::Expr(expr_placeholder()), AstFragmentKind::OptExpr => AstFragment::OptExpr(Some(expr_placeholder())), - AstFragmentKind::Items => AstFragment::Items(OneVector::one(P(ast::Item { + AstFragmentKind::Items => AstFragment::Items(smallvec![P(ast::Item { id, span, ident, vis, attrs, node: ast::ItemKind::Mac(mac_placeholder()), tokens: None, - }))), - AstFragmentKind::TraitItems => AstFragment::TraitItems(OneVector::one(ast::TraitItem { + })]), + AstFragmentKind::TraitItems => AstFragment::TraitItems(smallvec![ast::TraitItem { id, span, ident, attrs, generics, node: ast::TraitItemKind::Macro(mac_placeholder()), tokens: None, - })), - AstFragmentKind::ImplItems => AstFragment::ImplItems(OneVector::one(ast::ImplItem { + }]), + AstFragmentKind::ImplItems => AstFragment::ImplItems(smallvec![ast::ImplItem { id, span, ident, vis, attrs, generics, node: ast::ImplItemKind::Macro(mac_placeholder()), defaultness: ast::Defaultness::Final, tokens: None, - })), + }]), AstFragmentKind::ForeignItems => - AstFragment::ForeignItems(OneVector::one(ast::ForeignItem { + AstFragment::ForeignItems(smallvec![ast::ForeignItem { id, span, ident, vis, attrs, node: ast::ForeignItemKind::Macro(mac_placeholder()), - })), + }]), AstFragmentKind::Pat => AstFragment::Pat(P(ast::Pat { id, span, node: ast::PatKind::Mac(mac_placeholder()), })), AstFragmentKind::Ty => AstFragment::Ty(P(ast::Ty { id, span, node: ast::TyKind::Mac(mac_placeholder()), })), - AstFragmentKind::Stmts => AstFragment::Stmts(OneVector::one({ + AstFragmentKind::Stmts => AstFragment::Stmts(smallvec![{ let mac = P((mac_placeholder(), ast::MacStmtStyle::Braces, ThinVec::new())); ast::Stmt { id, span, node: ast::StmtKind::Mac(mac) } - })), + }]), } } @@ -118,7 +118,7 @@ impl<'a, 'b> Folder for PlaceholderExpander<'a, 'b> { fn fold_item(&mut self, item: P<ast::Item>) -> OneVector<P<ast::Item>> { match item.node { ast::ItemKind::Mac(_) => return self.remove(item.id).make_items(), - ast::ItemKind::MacroDef(_) => return OneVector::one(item), + ast::ItemKind::MacroDef(_) => return smallvec![item], _ => {} } diff --git a/src/libsyntax/ext/tt/macro_parser.rs b/src/libsyntax/ext/tt/macro_parser.rs index 7d98fa661c0..dcdeee5c2e7 100644 --- a/src/libsyntax/ext/tt/macro_parser.rs +++ b/src/libsyntax/ext/tt/macro_parser.rs @@ -644,7 +644,7 @@ pub fn parse( // This MatcherPos instance is allocated on the stack. All others -- and // there are frequently *no* others! -- are allocated on the heap. let mut initial = initial_matcher_pos(ms, parser.span.lo()); - let mut cur_items = OneVector::one(MatcherPosHandle::Ref(&mut initial)); + let mut cur_items = smallvec![MatcherPosHandle::Ref(&mut initial)]; let mut next_items = Vec::new(); loop { diff --git a/src/libsyntax/ext/tt/transcribe.rs b/src/libsyntax/ext/tt/transcribe.rs index d451227e77c..67a15b149f6 100644 --- a/src/libsyntax/ext/tt/transcribe.rs +++ b/src/libsyntax/ext/tt/transcribe.rs @@ -70,7 +70,7 @@ pub fn transcribe(cx: &ExtCtxt, interp: Option<HashMap<Ident, Rc<NamedMatch>>>, src: Vec<quoted::TokenTree>) -> TokenStream { - let mut stack = OneVector::one(Frame::new(src)); + let mut stack: OneVector<Frame> = smallvec![Frame::new(src)]; let interpolations = interp.unwrap_or_else(HashMap::new); /* just a convenience */ let mut repeats = Vec::new(); let mut result: Vec<TokenStream> = Vec::new(); |
