diff options
| author | Mark-Simulacrum <mark.simulacrum@gmail.com> | 2016-11-25 21:54:48 -0700 |
|---|---|---|
| committer | Mark-Simulacrum <mark.simulacrum@gmail.com> | 2016-11-28 18:09:15 -0700 |
| commit | 8b82fd7a94313140d8c745bb8cc647a953e07d9e (patch) | |
| tree | 0a1d6dea9f05473277f7e45cc77332c7971cf590 | |
| parent | a79c80d0b0f3fa15111ba88fe7260f86ff6df410 (diff) | |
| download | rust-8b82fd7a94313140d8c745bb8cc647a953e07d9e.tar.gz rust-8b82fd7a94313140d8c745bb8cc647a953e07d9e.zip | |
Remove allocation in push_type_params
| -rw-r--r-- | src/librustc_trans/trans_item.rs | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/librustc_trans/trans_item.rs b/src/librustc_trans/trans_item.rs index 979c2206fc1..322c5eb6e18 100644 --- a/src/librustc_trans/trans_item.rs +++ b/src/librustc_trans/trans_item.rs @@ -36,6 +36,7 @@ use glue; use abi::{Abi, FnType}; use back::symbol_names; use std::fmt::Write; +use std::iter; #[derive(PartialEq, Eq, Clone, Copy, Debug, Hash)] pub enum TransItem<'tcx> { @@ -410,7 +411,7 @@ impl<'a, 'tcx> DefPathBasedNames<'a, 'tcx> { ty::TyFloat(ast::FloatTy::F64) => output.push_str("f64"), ty::TyAdt(adt_def, substs) => { self.push_def_path(adt_def.did, output); - self.push_type_params(substs, &[], output); + self.push_type_params(substs, iter::empty(), output); }, ty::TyTuple(component_types) => { output.push('('); @@ -461,7 +462,7 @@ impl<'a, 'tcx> DefPathBasedNames<'a, 'tcx> { if let Some(principal) = trait_data.principal() { self.push_def_path(principal.def_id(), output); self.push_type_params(principal.skip_binder().substs, - &trait_data.projection_bounds().collect::<Vec<_>>()[..], + trait_data.projection_bounds(), output); } }, @@ -513,7 +514,7 @@ impl<'a, 'tcx> DefPathBasedNames<'a, 'tcx> { self.push_def_path(def_id, output); let generics = self.tcx.item_generics(self.tcx.closure_base_def_id(def_id)); let substs = closure_substs.substs.truncate_to(self.tcx, generics); - self.push_type_params(substs, &[], output); + self.push_type_params(substs, iter::empty(), output); } ty::TyError | ty::TyInfer(_) | @@ -553,11 +554,14 @@ impl<'a, 'tcx> DefPathBasedNames<'a, 'tcx> { output.pop(); } - pub fn push_type_params(&self, + fn push_type_params<I>(&self, substs: &Substs<'tcx>, - projections: &[ty::PolyExistentialProjection<'tcx>], - output: &mut String) { - if substs.types().next().is_none() && projections.is_empty() { + projections: I, + output: &mut String) + where I: Iterator<Item=ty::PolyExistentialProjection<'tcx>> + { + let mut projections = projections.peekable(); + if substs.types().next().is_none() && projections.peek().is_none() { return; } @@ -587,6 +591,6 @@ impl<'a, 'tcx> DefPathBasedNames<'a, 'tcx> { instance: Instance<'tcx>, output: &mut String) { self.push_def_path(instance.def, output); - self.push_type_params(instance.substs, &[], output); + self.push_type_params(instance.substs, iter::empty(), output); } } |
