]> git.lizzy.rs Git - rust.git/commitdiff
Remove OneVector
authorljedrz <ljedrz@gmail.com>
Thu, 30 Aug 2018 09:42:16 +0000 (11:42 +0200)
committerljedrz <ljedrz@gmail.com>
Wed, 26 Sep 2018 08:43:37 +0000 (10:43 +0200)
22 files changed:
src/Cargo.lock
src/librustc/hir/lowering.rs
src/librustc_allocator/expand.rs
src/librustc_data_structures/lib.rs
src/librustc_data_structures/small_vec.rs [deleted file]
src/librustc_driver/Cargo.toml
src/librustc_driver/lib.rs
src/librustc_driver/pretty.rs
src/librustc_resolve/macros.rs
src/libsyntax/config.rs
src/libsyntax/diagnostics/plugin.rs
src/libsyntax/ext/base.rs
src/libsyntax/ext/expand.rs
src/libsyntax/ext/placeholders.rs
src/libsyntax/ext/source_util.rs
src/libsyntax/ext/tt/macro_parser.rs
src/libsyntax/ext/tt/transcribe.rs
src/libsyntax/fold.rs
src/libsyntax/lib.rs
src/libsyntax/test.rs
src/libsyntax/util/move_map.rs
src/test/run-pass-fulldeps/auxiliary/issue-16723.rs

index 6725c23135090ed4502df63aab777e06ea3a7c98..40a5ea6b12bf0fc226204bfa3b9285a754b7771f 100644 (file)
@@ -2177,6 +2177,7 @@ dependencies = [
  "rustc_typeck 0.0.0",
  "scoped-tls 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "serialize 0.0.0",
+ "smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "syntax 0.0.0",
  "syntax_ext 0.0.0",
  "syntax_pos 0.0.0",
index 1e9936fdc13fcbf503f0447f40cba2bedec89ced..aa1bd6dd59ccf0e28d1ec9d7755b5ed576cb9195 100644 (file)
@@ -52,7 +52,6 @@
 use middle::cstore::CrateStore;
 use rustc_data_structures::fx::FxHashSet;
 use rustc_data_structures::indexed_vec::IndexVec;
-use rustc_data_structures::small_vec::OneVector;
 use rustc_data_structures::thin_vec::ThinVec;
 use session::Session;
 use util::common::FN_OUTPUT_NAME;
@@ -62,6 +61,7 @@
 use std::fmt::Debug;
 use std::iter;
 use std::mem;
+use smallvec::SmallVec;
 use syntax::attr;
 use syntax::ast;
 use syntax::ast::*;
@@ -307,7 +307,7 @@ enum AnonymousLifetimeMode {
     PassThrough,
 }
 
-struct ImplTraitTypeIdVisitor<'a> { ids: &'a mut OneVector<hir::ItemId> }
+struct ImplTraitTypeIdVisitor<'a> { ids: &'a mut SmallVec<[hir::ItemId; 1]> }
 
 impl<'a, 'b> Visitor<'a> for ImplTraitTypeIdVisitor<'b> {
     fn visit_ty(&mut self, ty: &'a Ty) {
@@ -1901,9 +1901,9 @@ fn lower_parenthesized_parameter_data(
         )
     }
 
-    fn lower_local(&mut self, l: &Local) -> (P<hir::Local>, OneVector<hir::ItemId>) {
+    fn lower_local(&mut self, l: &Local) -> (P<hir::Local>, SmallVec<[hir::ItemId; 1]>) {
         let LoweredNodeId { node_id, hir_id } = self.lower_node_id(l.id);
-        let mut ids = OneVector::<hir::ItemId>::new();
+        let mut ids = SmallVec::<[hir::ItemId; 1]>::new();
         if self.sess.features_untracked().impl_trait_in_bindings {
             if let Some(ref ty) = l.ty {
                 let mut visitor = ImplTraitTypeIdVisitor { ids: &mut ids };
@@ -3211,7 +3211,7 @@ fn lower_fn_impl_trait_ids(
         &mut self,
         decl: &FnDecl,
         header: &FnHeader,
-        ids: &mut OneVector<hir::ItemId>,
+        ids: &mut SmallVec<[hir::ItemId; 1]>,
     ) {
         if let Some(id) = header.asyncness.opt_return_id() {
             ids.push(hir::ItemId { id });
@@ -3223,14 +3223,14 @@ fn lower_fn_impl_trait_ids(
         }
     }
 
-    fn lower_item_id(&mut self, i: &Item) -> OneVector<hir::ItemId> {
+    fn lower_item_id(&mut self, i: &Item) -> SmallVec<[hir::ItemId; 1]> {
         match i.node {
             ItemKind::Use(ref use_tree) => {
                 let mut vec = smallvec![hir::ItemId { id: i.id }];
                 self.lower_item_id_use_tree(use_tree, i.id, &mut vec);
                 vec
             }
-            ItemKind::MacroDef(..) => OneVector::new(),
+            ItemKind::MacroDef(..) => SmallVec::new(),
             ItemKind::Fn(ref decl, ref header, ..) => {
                 let mut ids = smallvec![hir::ItemId { id: i.id }];
                 self.lower_fn_impl_trait_ids(decl, header, &mut ids);
@@ -3268,7 +3268,7 @@ fn lower_item_id(&mut self, i: &Item) -> OneVector<hir::ItemId> {
     fn lower_item_id_use_tree(&mut self,
                               tree: &UseTree,
                               base_id: NodeId,
-                              vec: &mut OneVector<hir::ItemId>)
+                              vec: &mut SmallVec<[hir::ItemId; 1]>)
     {
         match tree.kind {
             UseTreeKind::Nested(ref nested_vec) => for &(ref nested, id) in nested_vec {
@@ -4369,11 +4369,11 @@ fn lower_expr(&mut self, e: &Expr) -> hir::Expr {
         }
     }
 
-    fn lower_stmt(&mut self, s: &Stmt) -> OneVector<hir::Stmt> {
+    fn lower_stmt(&mut self, s: &Stmt) -> SmallVec<[hir::Stmt; 1]> {
         smallvec![match s.node {
             StmtKind::Local(ref l) => {
                 let (l, item_ids) = self.lower_local(l);
-                let mut ids: OneVector<hir::Stmt> = item_ids
+                let mut ids: SmallVec<[hir::Stmt; 1]> = item_ids
                     .into_iter()
                     .map(|item_id| Spanned {
                         node: hir::StmtKind::Decl(
index 11e8c30760b8a4f08ed22d0089b50ae89c665ba0..5df68d49af5f7ae4009883687a86f8625175f9ed 100644 (file)
@@ -9,8 +9,8 @@
 // except according to those terms.
 
 use rustc::middle::allocator::AllocatorKind;
-use rustc_data_structures::small_vec::OneVector;
 use rustc_errors;
+use smallvec::SmallVec;
 use syntax::{
     ast::{
         self, Arg, Attribute, Crate, Expr, FnHeader, Generics, Ident, Item, ItemKind,
@@ -65,7 +65,7 @@ struct ExpandAllocatorDirectives<'a> {
 }
 
 impl<'a> Folder for ExpandAllocatorDirectives<'a> {
-    fn fold_item(&mut self, item: P<Item>) -> OneVector<P<Item>> {
+    fn fold_item(&mut self, item: P<Item>) -> SmallVec<[P<Item>; 1]> {
         debug!("in submodule {}", self.in_submod);
 
         let name = if attr::contains_name(&item.attrs, "global_allocator") {
@@ -152,11 +152,7 @@ fn fold_item(&mut self, item: P<Item>) -> OneVector<P<Item>> {
         let module = f.cx.monotonic_expander().fold_item(module).pop().unwrap();
 
         // Return the item and new submodule
-        let mut ret = OneVector::with_capacity(2);
-        ret.push(item);
-        ret.push(module);
-
-        return ret;
+        smallvec![item, module]
     }
 
     // If we enter a submodule, take note.
index 70b960ac351c0031069b153b00cff8cedfb5402d..43ab38698062615005d81f381667c100c379a0fe 100644 (file)
@@ -50,7 +50,6 @@
 extern crate rustc_rayon_core as rayon_core;
 extern crate rustc_hash;
 extern crate serialize;
-#[cfg_attr(test, macro_use)]
 extern crate smallvec;
 
 // See librustc_cratesio_shim/Cargo.toml for a comment explaining this.
@@ -72,7 +71,6 @@
 pub mod ptr_key;
 pub mod sip128;
 pub mod small_c_str;
-pub mod small_vec;
 pub mod snapshot_map;
 pub use ena::snapshot_vec;
 pub mod sorted_map;
diff --git a/src/librustc_data_structures/small_vec.rs b/src/librustc_data_structures/small_vec.rs
deleted file mode 100644 (file)
index 075b70c..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
-// file at the top-level directory of this distribution and at
-// http://rust-lang.org/COPYRIGHT.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-//! A vector type intended to be used for small vectors.
-//!
-//! Space for up to N elements is provided on the stack. If more elements are collected, Vec is
-//! used to store the values on the heap.
-//!
-//! The N above is determined by Array's implementor, by way of an associated constant.
-
-use smallvec::{Array, SmallVec};
-
-pub type OneVector<T> = SmallVec<[T; 1]>;
-
-pub trait ExpectOne<A: Array> {
-    fn expect_one(self, err: &'static str) -> A::Item;
-}
-
-impl<A: Array> ExpectOne<A> for SmallVec<A> {
-    fn expect_one(self, err: &'static str) -> A::Item {
-        assert!(self.len() == 1, err);
-        self.into_iter().next().unwrap()
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    extern crate test;
-    use super::*;
-
-    #[test]
-    #[should_panic]
-    fn test_expect_one_zero() {
-        let _: isize = OneVector::new().expect_one("");
-    }
-
-    #[test]
-    #[should_panic]
-    fn test_expect_one_many() {
-        OneVector::from_vec(vec![1, 2]).expect_one("");
-    }
-
-    #[test]
-    fn test_expect_one_one() {
-        assert_eq!(1, (smallvec![1] as OneVector<_>).expect_one(""));
-        assert_eq!(1, OneVector::from_vec(vec![1]).expect_one(""));
-    }
-}
index 7a020f331e50b1119c8e3830c56a2edca361ce3b..470c8b03d0bca212282d8bc9c4185eb58418f5e7 100644 (file)
@@ -35,5 +35,6 @@ rustc_codegen_utils = { path = "../librustc_codegen_utils" }
 rustc_typeck = { path = "../librustc_typeck" }
 serialize = { path = "../libserialize" }
 syntax = { path = "../libsyntax" }
+smallvec = { version = "0.6.5", features = ["union"] }
 syntax_ext = { path = "../libsyntax_ext" }
 syntax_pos = { path = "../libsyntax_pos" }
index a96c277d4b555d723e9967cdf55c7b717daf8a22..f8ca154d168bab2480d25f134a93d3f03d5589e8 100644 (file)
@@ -58,6 +58,7 @@
 extern crate rustc_typeck;
 extern crate scoped_tls;
 extern crate serialize;
+extern crate smallvec;
 #[macro_use]
 extern crate log;
 extern crate syntax;
index c49631515eab9eb6cd63346d53e8e58a7361359f..7e395f1e9a92f3ac3f7246c820463f6992bd53ff 100644 (file)
@@ -24,7 +24,6 @@
 use rustc::session::config::{Input, OutputFilenames};
 use rustc_borrowck as borrowck;
 use rustc_borrowck::graphviz as borrowck_dot;
-use rustc_data_structures::small_vec::OneVector;
 use rustc_data_structures::thin_vec::ThinVec;
 use rustc_metadata::cstore::CStore;
 
@@ -38,6 +37,7 @@
 use syntax_pos::{self, FileName};
 
 use graphviz as dot;
+use smallvec::SmallVec;
 
 use std::cell::Cell;
 use std::fs::File;
@@ -727,7 +727,7 @@ fn fold_item_kind(&mut self, i: ast::ItemKind) -> ast::ItemKind {
         self.run(is_const, |s| fold::noop_fold_item_kind(i, s))
     }
 
-    fn fold_trait_item(&mut self, i: ast::TraitItem) -> OneVector<ast::TraitItem> {
+    fn fold_trait_item(&mut self, i: ast::TraitItem) -> SmallVec<[ast::TraitItem; 1]> {
         let is_const = match i.node {
             ast::TraitItemKind::Const(..) => true,
             ast::TraitItemKind::Method(ast::MethodSig { ref decl, ref header, .. }, _) =>
@@ -737,7 +737,7 @@ fn fold_trait_item(&mut self, i: ast::TraitItem) -> OneVector<ast::TraitItem> {
         self.run(is_const, |s| fold::noop_fold_trait_item(i, s))
     }
 
-    fn fold_impl_item(&mut self, i: ast::ImplItem) -> OneVector<ast::ImplItem> {
+    fn fold_impl_item(&mut self, i: ast::ImplItem) -> SmallVec<[ast::ImplItem; 1]> {
         let is_const = match i.node {
             ast::ImplItemKind::Const(..) => true,
             ast::ImplItemKind::Method(ast::MethodSig { ref decl, ref header, .. }, _) =>
index 89bc2f2709a3cf2284ea6c9faa2e0b3f64590878..ed79ff62f176cc0332f8de99b606e2af10bc5eec 100644 (file)
@@ -42,7 +42,6 @@
 use std::cell::Cell;
 use std::mem;
 use rustc_data_structures::sync::Lrc;
-use rustc_data_structures::small_vec::ExpectOne;
 
 #[derive(Clone, Copy)]
 crate struct FromPrelude(bool);
@@ -190,7 +189,9 @@ fn fold_mac(&mut self, mac: ast::Mac) -> ast::Mac {
             }
         }
 
-        EliminateCrateVar(self, item.span).fold_item(item).expect_one("")
+        let ret = EliminateCrateVar(self, item.span).fold_item(item);
+        assert!(ret.len() == 1);
+        ret.into_iter().next().unwrap()
     }
 
     fn is_whitelisted_legacy_custom_derive(&self, name: Name) -> bool {
index 5d978b6b9e6623789db80d537d430b5ecda880fd..3d9f4a92f818a3faeed4dfcf198be04838436afc 100644 (file)
@@ -15,7 +15,7 @@
 use source_map::Spanned;
 use edition::Edition;
 use parse::{token, ParseSess};
-use OneVector;
+use smallvec::SmallVec;
 use errors::Applicability;
 
 use ptr::P;
@@ -338,22 +338,23 @@ fn fold_opt_expr(&mut self, expr: P<ast::Expr>) -> Option<P<ast::Expr>> {
         Some(P(fold::noop_fold_expr(expr, self)))
     }
 
-    fn fold_stmt(&mut self, stmt: ast::Stmt) -> OneVector<ast::Stmt> {
+    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 OneVector::new(),
+            None => return SmallVec::new(),
         }
     }
 
-    fn fold_item(&mut self, item: P<ast::Item>) -> OneVector<P<ast::Item>> {
+    fn fold_item(&mut self, item: P<ast::Item>) -> SmallVec<[P<ast::Item>; 1]> {
         fold::noop_fold_item(configure!(self, item), self)
     }
 
-    fn fold_impl_item(&mut self, item: ast::ImplItem) -> OneVector<ast::ImplItem> {
+    fn fold_impl_item(&mut self, item: ast::ImplItem) -> SmallVec<[ast::ImplItem; 1]>
+    {
         fold::noop_fold_impl_item(configure!(self, item), self)
     }
 
-    fn fold_trait_item(&mut self, item: ast::TraitItem) -> OneVector<ast::TraitItem> {
+    fn fold_trait_item(&mut self, item: ast::TraitItem) -> SmallVec<[ast::TraitItem; 1]> {
         fold::noop_fold_trait_item(configure!(self, item), self)
     }
 
index c5a2cd5ac0b439f03d22ad39f9b44c488c612cbc..1229db9b0e03819539ddf48130a5e3cb96233521 100644 (file)
@@ -19,7 +19,6 @@
 use ext::build::AstBuilder;
 use parse::token;
 use ptr::P;
-use OneVector;
 use symbol::{keywords, Symbol};
 use tokenstream::{TokenTree};
 
@@ -131,7 +130,7 @@ pub fn expand_register_diagnostic<'cx>(ecx: &'cx mut ExtCtxt,
     let sym = Ident::with_empty_ctxt(Symbol::gensym(&format!(
         "__register_diagnostic_{}", code
     )));
-    MacEager::items(OneVector::from_vec(vec![
+    MacEager::items(smallvec![
         ecx.item_mod(
             span,
             span,
@@ -139,7 +138,7 @@ pub fn expand_register_diagnostic<'cx>(ecx: &'cx mut ExtCtxt,
             Vec::new(),
             Vec::new()
         )
-    ]))
+    ])
 }
 
 pub fn expand_build_diagnostic_array<'cx>(ecx: &'cx mut ExtCtxt,
@@ -214,7 +213,7 @@ pub fn expand_build_diagnostic_array<'cx>(ecx: &'cx mut ExtCtxt,
         ),
     );
 
-    MacEager::items(OneVector::from_vec(vec![
+    MacEager::items(smallvec![
         P(ast::Item {
             ident: *name,
             attrs: Vec::new(),
@@ -227,5 +226,5 @@ pub fn expand_build_diagnostic_array<'cx>(ecx: &'cx mut ExtCtxt,
             span,
             tokens: None,
         })
-    ]))
+    ])
 }
index e42624bf41f0ad7ffacfc969d8f40a587254e0a0..5bf1a7dd663cc228a0f556bc9e80fbac41d9b28f 100644 (file)
@@ -22,7 +22,7 @@
 use parse::{self, parser, DirectoryOwnership};
 use parse::token;
 use ptr::P;
-use OneVector;
+use smallvec::SmallVec;
 use symbol::{keywords, Ident, Symbol};
 use ThinVec;
 
@@ -332,22 +332,22 @@ fn make_expr(self: Box<Self>) -> Option<P<ast::Expr>> {
         None
     }
     /// Create zero or more items.
-    fn make_items(self: Box<Self>) -> Option<OneVector<P<ast::Item>>> {
+    fn make_items(self: Box<Self>) -> Option<SmallVec<[P<ast::Item>; 1]>> {
         None
     }
 
     /// Create zero or more impl items.
-    fn make_impl_items(self: Box<Self>) -> Option<OneVector<ast::ImplItem>> {
+    fn make_impl_items(self: Box<Self>) -> Option<SmallVec<[ast::ImplItem; 1]>> {
         None
     }
 
     /// Create zero or more trait items.
-    fn make_trait_items(self: Box<Self>) -> Option<OneVector<ast::TraitItem>> {
+    fn make_trait_items(self: Box<Self>) -> Option<SmallVec<[ast::TraitItem; 1]>> {
         None
     }
 
     /// Create zero or more items in an `extern {}` block
-    fn make_foreign_items(self: Box<Self>) -> Option<OneVector<ast::ForeignItem>> { None }
+    fn make_foreign_items(self: Box<Self>) -> Option<SmallVec<[ast::ForeignItem; 1]>> { None }
 
     /// Create a pattern.
     fn make_pat(self: Box<Self>) -> Option<P<ast::Pat>> {
@@ -358,7 +358,7 @@ fn make_pat(self: Box<Self>) -> Option<P<ast::Pat>> {
     ///
     /// By default this attempts to create an expression statement,
     /// returning None if that fails.
-    fn make_stmts(self: Box<Self>) -> Option<OneVector<ast::Stmt>> {
+    fn make_stmts(self: Box<Self>) -> Option<SmallVec<[ast::Stmt; 1]>> {
         make_stmts_default!(self)
     }
 
@@ -394,11 +394,11 @@ pub fn $fld(v: $t) -> Box<dyn MacResult> {
 make_MacEager! {
     expr: P<ast::Expr>,
     pat: P<ast::Pat>,
-    items: OneVector<P<ast::Item>>,
-    impl_items: OneVector<ast::ImplItem>,
-    trait_items: OneVector<ast::TraitItem>,
-    foreign_items: OneVector<ast::ForeignItem>,
-    stmts: OneVector<ast::Stmt>,
+    items: SmallVec<[P<ast::Item>; 1]>,
+    impl_items: SmallVec<[ast::ImplItem; 1]>,
+    trait_items: SmallVec<[ast::TraitItem; 1]>,
+    foreign_items: SmallVec<[ast::ForeignItem; 1]>,
+    stmts: SmallVec<[ast::Stmt; 1]>,
     ty: P<ast::Ty>,
 }
 
@@ -407,23 +407,23 @@ fn make_expr(self: Box<Self>) -> Option<P<ast::Expr>> {
         self.expr
     }
 
-    fn make_items(self: Box<Self>) -> Option<OneVector<P<ast::Item>>> {
+    fn make_items(self: Box<Self>) -> Option<SmallVec<[P<ast::Item>; 1]>> {
         self.items
     }
 
-    fn make_impl_items(self: Box<Self>) -> Option<OneVector<ast::ImplItem>> {
+    fn make_impl_items(self: Box<Self>) -> Option<SmallVec<[ast::ImplItem; 1]>> {
         self.impl_items
     }
 
-    fn make_trait_items(self: Box<Self>) -> Option<OneVector<ast::TraitItem>> {
+    fn make_trait_items(self: Box<Self>) -> Option<SmallVec<[ast::TraitItem; 1]>> {
         self.trait_items
     }
 
-    fn make_foreign_items(self: Box<Self>) -> Option<OneVector<ast::ForeignItem>> {
+    fn make_foreign_items(self: Box<Self>) -> Option<SmallVec<[ast::ForeignItem; 1]>> {
         self.foreign_items
     }
 
-    fn make_stmts(self: Box<Self>) -> Option<OneVector<ast::Stmt>> {
+    fn make_stmts(self: Box<Self>) -> Option<SmallVec<[ast::Stmt; 1]>> {
         match self.stmts.as_ref().map_or(0, |s| s.len()) {
             0 => make_stmts_default!(self),
             _ => self.stmts,
@@ -514,40 +514,40 @@ fn make_pat(self: Box<DummyResult>) -> Option<P<ast::Pat>> {
         Some(P(DummyResult::raw_pat(self.span)))
     }
 
-    fn make_items(self: Box<DummyResult>) -> Option<OneVector<P<ast::Item>>> {
+    fn make_items(self: Box<DummyResult>) -> Option<SmallVec<[P<ast::Item>; 1]>> {
         // this code needs a comment... why not always just return the Some() ?
         if self.expr_only {
             None
         } else {
-            Some(OneVector::new())
+            Some(SmallVec::new())
         }
     }
 
-    fn make_impl_items(self: Box<DummyResult>) -> Option<OneVector<ast::ImplItem>> {
+    fn make_impl_items(self: Box<DummyResult>) -> Option<SmallVec<[ast::ImplItem; 1]>> {
         if self.expr_only {
             None
         } else {
-            Some(OneVector::new())
+            Some(SmallVec::new())
         }
     }
 
-    fn make_trait_items(self: Box<DummyResult>) -> Option<OneVector<ast::TraitItem>> {
+    fn make_trait_items(self: Box<DummyResult>) -> Option<SmallVec<[ast::TraitItem; 1]>> {
         if self.expr_only {
             None
         } else {
-            Some(OneVector::new())
+            Some(SmallVec::new())
         }
     }
 
-    fn make_foreign_items(self: Box<Self>) -> Option<OneVector<ast::ForeignItem>> {
+    fn make_foreign_items(self: Box<Self>) -> Option<SmallVec<[ast::ForeignItem; 1]>> {
         if self.expr_only {
             None
         } else {
-            Some(OneVector::new())
+            Some(SmallVec::new())
         }
     }
 
-    fn make_stmts(self: Box<DummyResult>) -> Option<OneVector<ast::Stmt>> {
+    fn make_stmts(self: Box<DummyResult>) -> Option<SmallVec<[ast::Stmt; 1]>> {
         Some(smallvec![ast::Stmt {
             id: ast::DUMMY_NODE_ID,
             node: ast::StmtKind::Expr(DummyResult::raw_expr(self.span)),
index 33d0e76ca481cb2bbf42bcc6b0cdbf4cc63ca73e..87c53d16875433244f7b2afb22ba605441c7707f 100644 (file)
@@ -25,7 +25,7 @@
 use parse::token::{self, Token};
 use parse::parser::Parser;
 use ptr::P;
-use OneVector;
+use smallvec::SmallVec;
 use symbol::Symbol;
 use symbol::keywords;
 use syntax_pos::{Span, DUMMY_SP, FileName};
@@ -147,15 +147,19 @@ impl<'a> MacResult for ::ext::tt::macro_rules::ParserAnyMacro<'a> {
     Expr(P<ast::Expr>) { "expression"; one fn fold_expr; fn visit_expr; fn make_expr; }
     Pat(P<ast::Pat>) { "pattern"; one fn fold_pat; fn visit_pat; fn make_pat; }
     Ty(P<ast::Ty>) { "type"; one fn fold_ty; fn visit_ty; fn make_ty; }
-    Stmts(OneVector<ast::Stmt>) { "statement"; many fn fold_stmt; fn visit_stmt; fn make_stmts; }
-    Items(OneVector<P<ast::Item>>) { "item"; many fn fold_item; fn visit_item; fn make_items; }
-    TraitItems(OneVector<ast::TraitItem>) {
+    Stmts(SmallVec<[ast::Stmt; 1]>) {
+        "statement"; many fn fold_stmt; fn visit_stmt; fn make_stmts;
+    }
+    Items(SmallVec<[P<ast::Item>; 1]>) {
+        "item"; many fn fold_item; fn visit_item; fn make_items;
+    }
+    TraitItems(SmallVec<[ast::TraitItem; 1]>) {
         "trait item"; many fn fold_trait_item; fn visit_trait_item; fn make_trait_items;
     }
-    ImplItems(OneVector<ast::ImplItem>) {
+    ImplItems(SmallVec<[ast::ImplItem; 1]>) {
         "impl item"; many fn fold_impl_item; fn visit_impl_item; fn make_impl_items;
     }
-    ForeignItems(OneVector<ast::ForeignItem>) {
+    ForeignItems(SmallVec<[ast::ForeignItem; 1]>) {
         "foreign item"; many fn fold_foreign_item; fn visit_foreign_item; fn make_foreign_items;
     }
 }
@@ -980,28 +984,28 @@ pub fn parse_ast_fragment(&mut self, kind: AstFragmentKind, macro_legacy_warning
                               -> PResult<'a, AstFragment> {
         Ok(match kind {
             AstFragmentKind::Items => {
-                let mut items = OneVector::new();
+                let mut items = SmallVec::new();
                 while let Some(item) = self.parse_item()? {
                     items.push(item);
                 }
                 AstFragment::Items(items)
             }
             AstFragmentKind::TraitItems => {
-                let mut items = OneVector::new();
+                let mut items = SmallVec::new();
                 while self.token != token::Eof {
                     items.push(self.parse_trait_item(&mut false)?);
                 }
                 AstFragment::TraitItems(items)
             }
             AstFragmentKind::ImplItems => {
-                let mut items = OneVector::new();
+                let mut items = SmallVec::new();
                 while self.token != token::Eof {
                     items.push(self.parse_impl_item(&mut false)?);
                 }
                 AstFragment::ImplItems(items)
             }
             AstFragmentKind::ForeignItems => {
-                let mut items = OneVector::new();
+                let mut items = SmallVec::new();
                 while self.token != token::Eof {
                     if let Some(item) = self.parse_foreign_item()? {
                         items.push(item);
@@ -1010,7 +1014,7 @@ pub fn parse_ast_fragment(&mut self, kind: AstFragmentKind, macro_legacy_warning
                 AstFragment::ForeignItems(items)
             }
             AstFragmentKind::Stmts => {
-                let mut stmts = OneVector::new();
+                let mut stmts = SmallVec::new();
                 while self.token != token::Eof &&
                       // won't make progress on a `}`
                       self.token != token::CloseDelim(token::Brace) {
@@ -1245,10 +1249,10 @@ fn fold_pat(&mut self, pat: P<ast::Pat>) -> P<ast::Pat> {
         })
     }
 
-    fn fold_stmt(&mut self, stmt: ast::Stmt) -> OneVector<ast::Stmt> {
+    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 OneVector::new(),
+            None => return SmallVec::new(),
         };
 
         // we'll expand attributes on expressions separately
@@ -1303,7 +1307,7 @@ fn fold_block(&mut self, block: P<Block>) -> P<Block> {
         result
     }
 
-    fn fold_item(&mut self, item: P<ast::Item>) -> OneVector<P<ast::Item>> {
+    fn fold_item(&mut self, item: P<ast::Item>) -> SmallVec<[P<ast::Item>; 1]> {
         let item = configure!(self, item);
 
         let (attr, traits, item, together_with) = self.classify_item(item);
@@ -1378,7 +1382,7 @@ fn fold_item(&mut self, item: P<ast::Item>) -> OneVector<P<ast::Item>> {
         }
     }
 
-    fn fold_trait_item(&mut self, item: ast::TraitItem) -> OneVector<ast::TraitItem> {
+    fn fold_trait_item(&mut self, item: ast::TraitItem) -> SmallVec<[ast::TraitItem; 1]> {
         let item = configure!(self, item);
 
         let (attr, traits, item, together_with) = self.classify_item(item);
@@ -1397,7 +1401,7 @@ fn fold_trait_item(&mut self, item: ast::TraitItem) -> OneVector<ast::TraitItem>
         }
     }
 
-    fn fold_impl_item(&mut self, item: ast::ImplItem) -> OneVector<ast::ImplItem> {
+    fn fold_impl_item(&mut self, item: ast::ImplItem) -> SmallVec<[ast::ImplItem; 1]> {
         let item = configure!(self, item);
 
         let (attr, traits, item, together_with) = self.classify_item(item);
@@ -1432,8 +1436,9 @@ fn fold_foreign_mod(&mut self, foreign_mod: ast::ForeignMod) -> ast::ForeignMod
         noop_fold_foreign_mod(self.cfg.configure_foreign_mod(foreign_mod), self)
     }
 
-    fn fold_foreign_item(&mut self,
-                         foreign_item: ast::ForeignItem) -> OneVector<ast::ForeignItem> {
+    fn fold_foreign_item(&mut self, foreign_item: ast::ForeignItem)
+        -> SmallVec<[ast::ForeignItem; 1]>
+    {
         let (attr, traits, foreign_item, together_with) = self.classify_item(foreign_item);
 
         if attr.is_some() || !traits.is_empty() {
index 5906412883ad0c0356091004cbbe261a8a5e63c6..7f31b04ef9c3c22832ed9b09602f84e5ac2550db 100644 (file)
@@ -16,7 +16,7 @@
 use tokenstream::TokenStream;
 use fold::*;
 use ptr::P;
-use OneVector;
+use smallvec::SmallVec;
 use symbol::keywords;
 use ThinVec;
 use util::move_map::MoveMap;
@@ -115,7 +115,7 @@ fn remove(&mut self, id: ast::NodeId) -> AstFragment {
 }
 
 impl<'a, 'b> Folder for PlaceholderExpander<'a, 'b> {
-    fn fold_item(&mut self, item: P<ast::Item>) -> OneVector<P<ast::Item>> {
+    fn fold_item(&mut self, item: P<ast::Item>) -> SmallVec<[P<ast::Item>; 1]> {
         match item.node {
             ast::ItemKind::Mac(_) => return self.remove(item.id).make_items(),
             ast::ItemKind::MacroDef(_) => return smallvec![item],
@@ -125,21 +125,21 @@ fn fold_item(&mut self, item: P<ast::Item>) -> OneVector<P<ast::Item>> {
         noop_fold_item(item, self)
     }
 
-    fn fold_trait_item(&mut self, item: ast::TraitItem) -> OneVector<ast::TraitItem> {
+    fn fold_trait_item(&mut self, item: ast::TraitItem) -> SmallVec<[ast::TraitItem; 1]> {
         match item.node {
             ast::TraitItemKind::Macro(_) => self.remove(item.id).make_trait_items(),
             _ => noop_fold_trait_item(item, self),
         }
     }
 
-    fn fold_impl_item(&mut self, item: ast::ImplItem) -> OneVector<ast::ImplItem> {
+    fn fold_impl_item(&mut self, item: ast::ImplItem) -> SmallVec<[ast::ImplItem; 1]> {
         match item.node {
             ast::ImplItemKind::Macro(_) => self.remove(item.id).make_impl_items(),
             _ => noop_fold_impl_item(item, self),
         }
     }
 
-    fn fold_foreign_item(&mut self, item: ast::ForeignItem) -> OneVector<ast::ForeignItem> {
+    fn fold_foreign_item(&mut self, item: ast::ForeignItem) -> SmallVec<[ast::ForeignItem; 1]> {
         match item.node {
             ast::ForeignItemKind::Macro(_) => self.remove(item.id).make_foreign_items(),
             _ => noop_fold_foreign_item(item, self),
@@ -160,7 +160,7 @@ fn fold_opt_expr(&mut self, expr: P<ast::Expr>) -> Option<P<ast::Expr>> {
         }
     }
 
-    fn fold_stmt(&mut self, stmt: ast::Stmt) -> OneVector<ast::Stmt> {
+    fn fold_stmt(&mut self, stmt: ast::Stmt) -> SmallVec<[ast::Stmt; 1]> {
         let (style, mut stmts) = match stmt.node {
             ast::StmtKind::Mac(mac) => (mac.1, self.remove(stmt.id).make_stmts()),
             _ => return noop_fold_stmt(stmt, self),
index e4b9e3216b13b7cf06c064a1d0276a5e2ca9be4e..f5d1bd6255e2abe6d1800f59cd35254398c65a7b 100644 (file)
@@ -17,7 +17,7 @@
 use parse;
 use print::pprust;
 use ptr::P;
-use OneVector;
+use smallvec::SmallVec;
 use symbol::Symbol;
 use tokenstream;
 
@@ -110,9 +110,9 @@ impl<'a> base::MacResult for ExpandResult<'a> {
         fn make_expr(mut self: Box<ExpandResult<'a>>) -> Option<P<ast::Expr>> {
             Some(panictry!(self.p.parse_expr()))
         }
-        fn make_items(mut self: Box<ExpandResult<'a>>)
-                      -> Option<OneVector<P<ast::Item>>> {
-            let mut ret = OneVector::new();
+
+        fn make_items(mut self: Box<ExpandResult<'a>>) -> Option<SmallVec<[P<ast::Item>; 1]>> {
+            let mut ret = SmallVec::new();
             while self.p.token != token::Eof {
                 match panictry!(self.p.parse_item()) {
                     Some(item) => ret.push(item),
index 941fd6f1000a326d07b342911f7da5af098a68e2..03a8376e7636138ce00524d8618fa8d500616153 100644 (file)
@@ -92,7 +92,7 @@
 use parse::parser::{Parser, PathStyle};
 use parse::token::{self, DocComment, Nonterminal, Token};
 use print::pprust;
-use OneVector;
+use smallvec::SmallVec;
 use symbol::keywords;
 use tokenstream::{DelimSpan, TokenStream};
 
@@ -440,10 +440,10 @@ fn token_name_eq(t1: &Token, t2: &Token) -> bool {
 /// A `ParseResult`. Note that matches are kept track of through the items generated.
 fn inner_parse_loop<'a>(
     sess: &ParseSess,
-    cur_items: &mut OneVector<MatcherPosHandle<'a>>,
+    cur_items: &mut SmallVec<[MatcherPosHandle<'a>; 1]>,
     next_items: &mut Vec<MatcherPosHandle<'a>>,
-    eof_items: &mut OneVector<MatcherPosHandle<'a>>,
-    bb_items: &mut OneVector<MatcherPosHandle<'a>>,
+    eof_items: &mut SmallVec<[MatcherPosHandle<'a>; 1]>,
+    bb_items: &mut SmallVec<[MatcherPosHandle<'a>; 1]>,
     token: &Token,
     span: syntax_pos::Span,
 ) -> ParseResult<()> {
@@ -649,10 +649,10 @@ pub fn parse(
 
     loop {
         // Matcher positions black-box parsed by parser.rs (`parser`)
-        let mut bb_items = OneVector::new();
+        let mut bb_items = SmallVec::new();
 
         // Matcher positions that would be valid if the macro invocation was over now
-        let mut eof_items = OneVector::new();
+        let mut eof_items = SmallVec::new();
         assert!(next_items.is_empty());
 
         // Process `cur_items` until either we have finished the input or we need to get some
index 2ed469e8e77f855ce868b12a92786b0f67b09e54..ae486158fee69a6a54a446db686c190a1d977e71 100644 (file)
@@ -15,7 +15,7 @@
 use ext::tt::quoted;
 use fold::noop_fold_tt;
 use parse::token::{self, Token, NtTT};
-use OneVector;
+use smallvec::SmallVec;
 use syntax_pos::DUMMY_SP;
 use tokenstream::{TokenStream, TokenTree, Delimited, DelimSpan};
 
@@ -70,7 +70,7 @@ pub fn transcribe(cx: &ExtCtxt,
                   interp: Option<FxHashMap<Ident, Rc<NamedMatch>>>,
                   src: Vec<quoted::TokenTree>)
                   -> TokenStream {
-    let mut stack: OneVector<Frame> = smallvec![Frame::new(src)];
+    let mut stack: SmallVec<[Frame; 1]> = smallvec![Frame::new(src)];
     let interpolations = interp.unwrap_or_else(FxHashMap::default); /* just a convenience */
     let mut repeats = Vec::new();
     let mut result: Vec<TokenStream> = Vec::new();
index 032393b4f12534e3727808531de87e5bfd9a8999..3e422f5af81a731f9d0525527798f7cde539ab21 100644 (file)
 use source_map::{Spanned, respan};
 use parse::token::{self, Token};
 use ptr::P;
-use OneVector;
+use smallvec::{Array, SmallVec};
 use symbol::keywords;
 use ThinVec;
 use tokenstream::*;
 use util::move_map::MoveMap;
 
 use rustc_data_structures::sync::Lrc;
-use rustc_data_structures::small_vec::ExpectOne;
+
+pub trait ExpectOne<A: Array> {
+    fn expect_one(self, err: &'static str) -> A::Item;
+}
+
+impl<A: Array> ExpectOne<A> for SmallVec<A> {
+    fn expect_one(self, err: &'static str) -> A::Item {
+        assert!(self.len() == 1, err);
+        self.into_iter().next().unwrap()
+    }
+}
 
 pub trait Folder : Sized {
     // Any additions to this trait should happen in form
@@ -62,7 +72,7 @@ fn fold_use_tree(&mut self, use_tree: UseTree) -> UseTree {
         noop_fold_use_tree(use_tree, self)
     }
 
-    fn fold_foreign_item(&mut self, ni: ForeignItem) -> OneVector<ForeignItem> {
+    fn fold_foreign_item(&mut self, ni: ForeignItem) -> SmallVec<[ForeignItem; 1]> {
         noop_fold_foreign_item(ni, self)
     }
 
@@ -70,7 +80,7 @@ fn fold_foreign_item_simple(&mut self, ni: ForeignItem) -> ForeignItem {
         noop_fold_foreign_item_simple(ni, self)
     }
 
-    fn fold_item(&mut self, i: P<Item>) -> OneVector<P<Item>> {
+    fn fold_item(&mut self, i: P<Item>) -> SmallVec<[P<Item>; 1]> {
         noop_fold_item(i, self)
     }
 
@@ -90,11 +100,11 @@ fn fold_item_kind(&mut self, i: ItemKind) -> ItemKind {
         noop_fold_item_kind(i, self)
     }
 
-    fn fold_trait_item(&mut self, i: TraitItem) -> OneVector<TraitItem> {
+    fn fold_trait_item(&mut self, i: TraitItem) -> SmallVec<[TraitItem; 1]> {
         noop_fold_trait_item(i, self)
     }
 
-    fn fold_impl_item(&mut self, i: ImplItem) -> OneVector<ImplItem> {
+    fn fold_impl_item(&mut self, i: ImplItem) -> SmallVec<[ImplItem; 1]> {
         noop_fold_impl_item(i, self)
     }
 
@@ -110,7 +120,7 @@ fn fold_block(&mut self, b: P<Block>) -> P<Block> {
         noop_fold_block(b, self)
     }
 
-    fn fold_stmt(&mut self, s: Stmt) -> OneVector<Stmt> {
+    fn fold_stmt(&mut self, s: Stmt) -> SmallVec<[Stmt; 1]> {
         noop_fold_stmt(s, self)
     }
 
@@ -974,8 +984,7 @@ pub fn noop_fold_item_kind<T: Folder>(i: ItemKind, folder: &mut T) -> ItemKind {
     }
 }
 
-pub fn noop_fold_trait_item<T: Folder>(i: TraitItem, folder: &mut T)
-                                       -> OneVector<TraitItem> {
+pub fn noop_fold_trait_item<T: Folder>(i: TraitItem, folder: &mut T) -> SmallVec<[TraitItem; 1]> {
     smallvec![TraitItem {
         id: folder.new_id(i.id),
         ident: folder.fold_ident(i.ident),
@@ -1003,8 +1012,7 @@ pub fn noop_fold_trait_item<T: Folder>(i: TraitItem, folder: &mut T)
     }]
 }
 
-pub fn noop_fold_impl_item<T: Folder>(i: ImplItem, folder: &mut T)
-                                      -> OneVector<ImplItem> {
+pub fn noop_fold_impl_item<T: Folder>(i: ImplItem, folder: &mut T)-> SmallVec<[ImplItem; 1]> {
     smallvec![ImplItem {
         id: folder.new_id(i.id),
         vis: folder.fold_vis(i.vis),
@@ -1080,7 +1088,7 @@ pub fn noop_fold_crate<T: Folder>(Crate {module, attrs, span}: Crate,
 }
 
 // fold one item into possibly many items
-pub fn noop_fold_item<T: Folder>(i: P<Item>, folder: &mut T) -> OneVector<P<Item>> {
+pub fn noop_fold_item<T: Folder>(i: P<Item>, folder: &mut T) -> SmallVec<[P<Item>; 1]> {
     smallvec![i.map(|i| folder.fold_item_simple(i))]
 }
 
@@ -1102,7 +1110,8 @@ pub fn noop_fold_item_simple<T: Folder>(Item {id, ident, attrs, node, vis, span,
 }
 
 pub fn noop_fold_foreign_item<T: Folder>(ni: ForeignItem, folder: &mut T)
--> OneVector<ForeignItem> {
+    -> SmallVec<[ForeignItem; 1]>
+{
     smallvec![folder.fold_foreign_item_simple(ni)]
 }
 
@@ -1381,7 +1390,8 @@ pub fn noop_fold_exprs<T: Folder>(es: Vec<P<Expr>>, folder: &mut T) -> Vec<P<Exp
     es.move_flat_map(|e| folder.fold_opt_expr(e))
 }
 
-pub fn noop_fold_stmt<T: Folder>(Stmt {node, span, id}: Stmt, folder: &mut T) -> OneVector<Stmt> {
+pub fn noop_fold_stmt<T: Folder>(Stmt {node, span, id}: Stmt, folder: &mut T) -> SmallVec<[Stmt; 1]>
+{
     let id = folder.new_id(id);
     let span = folder.new_span(span);
     noop_fold_stmt_kind(node, folder).into_iter().map(|node| {
@@ -1389,7 +1399,7 @@ pub fn noop_fold_stmt<T: Folder>(Stmt {node, span, id}: Stmt, folder: &mut T) ->
     }).collect()
 }
 
-pub fn noop_fold_stmt_kind<T: Folder>(node: StmtKind, folder: &mut T) -> OneVector<StmtKind> {
+pub fn noop_fold_stmt_kind<T: Folder>(node: StmtKind, folder: &mut T) -> SmallVec<[StmtKind; 1]> {
     match node {
         StmtKind::Local(local) => smallvec![StmtKind::Local(folder.fold_local(local))],
         StmtKind::Item(item) => folder.fold_item(item).into_iter().map(StmtKind::Item).collect(),
index 68b468417182a0bef98e6e699e195b2215f3d10f..a1b031a655f8577988016d249d4c967aac0e242b 100644 (file)
@@ -47,7 +47,6 @@
 
 use rustc_data_structures::sync::Lock;
 use rustc_data_structures::bit_set::GrowableBitSet;
-pub use rustc_data_structures::small_vec::OneVector;
 pub use rustc_data_structures::thin_vec::ThinVec;
 use ast::AttrId;
 
index ab67736c389c0164f20c1093dac4a73995ffb9dc..744e2e4a5fdb88e9fff02938f07281906e10f087 100644 (file)
 use fold::Folder;
 use feature_gate::Features;
 use util::move_map::MoveMap;
-use fold;
+use fold::{self, ExpectOne};
 use parse::{token, ParseSess};
 use print::pprust;
 use ast::{self, Ident};
 use ptr::P;
-use OneVector;
+use smallvec::SmallVec;
 use symbol::{self, Symbol, keywords};
 use ThinVec;
-use rustc_data_structures::small_vec::ExpectOne;
 
 struct Test {
     span: Span,
@@ -113,7 +112,7 @@ fn fold_crate(&mut self, c: ast::Crate) -> ast::Crate {
         folded
     }
 
-    fn fold_item(&mut self, i: P<ast::Item>) -> OneVector<P<ast::Item>> {
+    fn fold_item(&mut self, i: P<ast::Item>) -> SmallVec<[P<ast::Item>; 1]> {
         let ident = i.ident;
         if ident.name != keywords::Invalid.name() {
             self.cx.path.push(ident);
@@ -171,7 +170,7 @@ struct EntryPointCleaner {
 }
 
 impl fold::Folder for EntryPointCleaner {
-    fn fold_item(&mut self, i: P<ast::Item>) -> OneVector<P<ast::Item>> {
+    fn fold_item(&mut self, i: P<ast::Item>) -> SmallVec<[P<ast::Item>; 1]> {
         self.depth += 1;
         let folded = fold::noop_fold_item(i, self).expect_one("noop did something");
         self.depth -= 1;
index eb2c5a2458c1590b06e9d0e7ec506427f1a3f4c9..51cae1b5d84ac50efe0279bdbb62da8c13b80cf3 100644 (file)
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 use std::ptr;
-use OneVector;
+use smallvec::{Array, SmallVec};
 
 pub trait MoveMap<T>: Sized {
     fn move_map<F>(self, mut f: F) -> Self where F: FnMut(T) -> T {
@@ -77,7 +77,7 @@ fn move_flat_map<F, I>(self, f: F) -> Self
     }
 }
 
-impl<T> MoveMap<T> for OneVector<T> {
+impl<T, A: Array<Item = T>> MoveMap<T> for SmallVec<A> {
     fn move_flat_map<F, I>(mut self, mut f: F) -> Self
         where F: FnMut(T) -> I,
               I: IntoIterator<Item=T>
index 533d0ac490c413c5179e50de334c5b1f51100b90..7b7092c7e22e3d4ac2566ced29c6b28134855321 100644 (file)
 extern crate rustc;
 extern crate rustc_data_structures;
 extern crate rustc_plugin;
+#[macro_use] extern crate smallvec;
 extern crate syntax_pos;
 
-use rustc_data_structures::small_vec::OneVector;
+use smallvec::SmallVec;
 use syntax::ext::base::{ExtCtxt, MacResult, MacEager};
 use syntax::tokenstream;
 use rustc_plugin::Registry;
@@ -31,8 +32,8 @@ pub fn plugin_registrar(reg: &mut Registry) {
 
 fn expand(cx: &mut ExtCtxt, _: syntax_pos::Span, _: &[tokenstream::TokenTree])
           -> Box<MacResult+'static> {
-    MacEager::items(OneVector::from_vec(vec![
+    MacEager::items(smallvec![
         quote_item!(cx, struct Struct1;).unwrap(),
         quote_item!(cx, struct Struct2;).unwrap()
-    ]))
+    ])
 }