Skip to content

Commit fe1f651

Browse files
committed
Review refactoring
1 parent fd8e284 commit fe1f651

File tree

5 files changed

+48
-52
lines changed

5 files changed

+48
-52
lines changed

src/librustc/traits/error_reporting.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,14 +380,14 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
380380
}
381381

382382
for param in generics.params.iter() {
383-
let name = param.name.to_string();
384383
let value = match param.kind {
385384
GenericParamDefKind::Type(_) => {
386385
let ty = trait_ref.substs.type_for_def(&param);
387386
ty.to_string()
388387
},
389388
GenericParamDefKind::Lifetime => continue,
390389
};
390+
let name = param.name.to_string();
391391
flags.push((name.clone(), Some(value.clone())));
392392
}
393393

src/librustc/traits/on_unimplemented.rs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -288,13 +288,14 @@ impl<'a, 'gcx, 'tcx> OnUnimplementedFormatString {
288288
let trait_str = tcx.item_path_str(trait_ref.def_id);
289289
let generics = tcx.generics_of(trait_ref.def_id);
290290
let generic_map = generics.params.iter().filter_map(|param| {
291-
match param.kind {
291+
let value = match param.kind {
292292
GenericParamDefKind::Type(_) => {
293-
Some((param.name.to_string(),
294-
trait_ref.substs.type_for_def(&param).to_string()))
293+
trait_ref.substs.type_for_def(&param).to_string()
295294
},
296-
GenericParamDefKind::Lifetime => None
297-
}
295+
GenericParamDefKind::Lifetime => return None
296+
};
297+
let name = param.name.to_string();
298+
Some((name, value))
298299
}).collect::<FxHashMap<String, String>>();
299300

300301
let parser = Parser::new(&self.0);

src/librustc/util/ppaux.rs

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ use util::nodemap::FxHashSet;
2525
use std::cell::Cell;
2626
use std::fmt;
2727
use std::usize;
28-
use std::iter;
2928

3029
use rustc_data_structures::indexed_vec::Idx;
3130
use rustc_target::spec::abi::Abi;
@@ -342,23 +341,22 @@ impl PrintContext {
342341
GenericParamDefKind::Type(ty) => Some((param.def_id, ty.has_default)),
343342
GenericParamDefKind::Lifetime => None,
344343
}
345-
});
346-
if let Some(last_ty) = type_params.next() {
347-
let (_, has_default) = last_ty;
348-
if has_default {
349-
if let Some(substs) = tcx.lift(&substs) {
350-
let mut types = substs.types().rev().skip(child_types);
351-
let zipped = iter::once((last_ty, types.next().unwrap()))
352-
.chain(type_params.zip(types));
353-
for ((def_id, has_default), actual) in zipped {
354-
if !has_default {
355-
break;
356-
}
357-
if tcx.type_of(def_id).subst(tcx, substs) != actual {
358-
break;
359-
}
360-
num_supplied_defaults += 1;
344+
}).peekable();
345+
let has_default = {
346+
let has_default = type_params.peek().map(|(_, has_default)| has_default);
347+
*has_default.unwrap_or(&false)
348+
};
349+
if has_default {
350+
if let Some(substs) = tcx.lift(&substs) {
351+
let mut types = substs.types().rev().skip(child_types);
352+
for ((def_id, has_default), actual) in type_params.zip(types) {
353+
if !has_default {
354+
break;
355+
}
356+
if tcx.type_of(def_id).subst(tcx, substs) != actual {
357+
break;
361358
}
359+
num_supplied_defaults += 1;
362360
}
363361
}
364362
}

src/librustc_typeck/collect.rs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -886,23 +886,25 @@ fn generics_of<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
886886
generics.parent_count + generics.params.len()
887887
});
888888

889+
let mut params: Vec<_> = opt_self.into_iter().collect();
890+
889891
let early_lifetimes = early_bound_lifetimes_from_generics(tcx, ast_generics);
890-
let lifetimes = early_lifetimes.enumerate().map(|(i, l)| {
892+
params.extend(early_lifetimes.enumerate().map(|(i, l)| {
891893
ty::GenericParamDef {
892894
name: l.lifetime.name.name().as_interned_str(),
893895
index: own_start + i as u32,
894896
def_id: tcx.hir.local_def_id(l.lifetime.id),
895897
pure_wrt_drop: l.pure_wrt_drop,
896898
kind: ty::GenericParamDefKind::Lifetime,
897899
}
898-
}).collect::<Vec<_>>();
900+
}));
899901

900902
let hir_id = tcx.hir.node_to_hir_id(node_id);
901903
let object_lifetime_defaults = tcx.object_lifetime_defaults(hir_id);
902904

903905
// Now create the real type parameters.
904-
let type_start = own_start + lifetimes.len() as u32;
905-
let mut types: Vec<_> = ast_generics.ty_params().enumerate().map(|(i, p)| {
906+
let type_start = params.len() as u32;
907+
params.extend(ast_generics.ty_params().enumerate().map(|(i, p)| {
906908
if p.name == keywords::SelfType.name() {
907909
span_bug!(p.span, "`Self` should not be the name of a regular parameter");
908910
}
@@ -930,7 +932,7 @@ fn generics_of<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
930932
synthetic: p.synthetic,
931933
}),
932934
}
933-
}).collect();
935+
}));
934936

935937
// provide junk type parameter defs - the only place that
936938
// cares about anything but the length is instantiation,
@@ -943,7 +945,7 @@ fn generics_of<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
943945
};
944946

945947
for (i, &arg) in dummy_args.iter().enumerate() {
946-
types.push(ty::GenericParamDef {
948+
params.push(ty::GenericParamDef {
947949
index: type_start + i as u32,
948950
name: Symbol::intern(arg).as_interned_str(),
949951
def_id,
@@ -957,7 +959,7 @@ fn generics_of<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
957959
}
958960

959961
tcx.with_freevars(node_id, |fv| {
960-
types.extend(fv.iter().zip((dummy_args.len() as u32)..).map(|(_, i)| {
962+
params.extend(fv.iter().zip((dummy_args.len() as u32)..).map(|(_, i)| {
961963
ty::GenericParamDef {
962964
index: type_start + i,
963965
name: Symbol::intern("<upvar>").as_interned_str(),
@@ -973,11 +975,6 @@ fn generics_of<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
973975
});
974976
}
975977

976-
let params: Vec<_> = opt_self.into_iter()
977-
.chain(lifetimes)
978-
.chain(types)
979-
.collect();
980-
981978
let param_def_id_to_index = params.iter()
982979
.map(|param| (param.def_id, param.index))
983980
.collect();

src/librustc_typeck/impl_wf_check.rs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,9 @@ struct ImplWfCheck<'a, 'tcx: 'a> {
7272
impl<'a, 'tcx> ItemLikeVisitor<'tcx> for ImplWfCheck<'a, 'tcx> {
7373
fn visit_item(&mut self, item: &'tcx hir::Item) {
7474
match item.node {
75-
hir::ItemImpl(.., ref generics, _, _, ref impl_item_refs) => {
75+
hir::ItemImpl(.., _, _, _, ref impl_item_refs) => {
7676
let impl_def_id = self.tcx.hir.local_def_id(item.id);
7777
enforce_impl_params_are_constrained(self.tcx,
78-
generics,
7978
impl_def_id,
8079
impl_item_refs);
8180
enforce_impl_items_are_distinct(self.tcx, impl_item_refs);
@@ -90,7 +89,6 @@ impl<'a, 'tcx> ItemLikeVisitor<'tcx> for ImplWfCheck<'a, 'tcx> {
9089
}
9190

9291
fn enforce_impl_params_are_constrained<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
93-
impl_hir_generics: &hir::Generics,
9492
impl_def_id: DefId,
9593
impl_item_refs: &[hir::ImplItemRef])
9694
{
@@ -115,26 +113,28 @@ fn enforce_impl_params_are_constrained<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
115113
ctp::parameters_for(&tcx.type_of(def_id), true)
116114
}).collect();
117115

118-
for (ty_param, hir_param) in impl_generics.params.iter()
119-
.zip(impl_hir_generics.params.iter()) {
120-
match (&ty_param.kind, hir_param) {
116+
for param in &impl_generics.params {
117+
match param.kind {
121118
// Disallow ANY unconstrained type parameters.
122-
(&ty::GenericParamDefKind::Type(_), hir::GenericParam::Type(hir_ty)) => {
123-
let param_ty = ty::ParamTy::for_def(ty_param);
119+
ty::GenericParamDefKind::Type(_) => {
120+
let param_ty = ty::ParamTy::for_def(param);
124121
if !input_parameters.contains(&ctp::Parameter::from(param_ty)) {
125-
report_unused_parameter(tcx, hir_ty.span, "type", &param_ty.to_string());
122+
report_unused_parameter(tcx,
123+
tcx.def_span(param.def_id),
124+
"type",
125+
&param_ty.to_string());
126126
}
127127
}
128-
(&ty::GenericParamDefKind::Lifetime, hir::GenericParam::Lifetime(hir_lt)) => {
129-
let param = ctp::Parameter::from(ty_param.to_early_bound_region_data());
130-
if lifetimes_in_associated_types.contains(&param) && // (*)
131-
!input_parameters.contains(&param) {
132-
report_unused_parameter(tcx, hir_lt.lifetime.span,
133-
"lifetime", &hir_lt.lifetime.name.name().to_string());
128+
ty::GenericParamDefKind::Lifetime => {
129+
let param_lt = ctp::Parameter::from(param.to_early_bound_region_data());
130+
if lifetimes_in_associated_types.contains(&param_lt) && // (*)
131+
!input_parameters.contains(&param_lt) {
132+
report_unused_parameter(tcx,
133+
tcx.def_span(param.def_id),
134+
"lifetime",
135+
&param.name.to_string());
134136
}
135137
}
136-
(&ty::GenericParamDefKind::Type(_), _) => continue,
137-
(&ty::GenericParamDefKind::Lifetime, _) => continue,
138138
}
139139
}
140140

0 commit comments

Comments
 (0)