Skip to content

Commit d337a3b

Browse files
committed
rustc: remove the name field from ty::GenericParamDef.
1 parent 22397bf commit d337a3b

File tree

16 files changed

+45
-40
lines changed

16 files changed

+45
-40
lines changed

src/librustc/ich/impls_ty.rs

-1
Original file line numberDiff line numberDiff line change
@@ -690,7 +690,6 @@ impl_stable_hash_for!(struct ty::Generics {
690690
});
691691

692692
impl_stable_hash_for!(struct ty::GenericParamDef {
693-
name,
694693
def_id,
695694
index,
696695
pure_wrt_drop,

src/librustc/infer/error_reporting/mod.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -1338,7 +1338,10 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
13381338
br_string(br),
13391339
self.tcx.associated_item(def_id).ident
13401340
),
1341-
infer::EarlyBoundRegion(_, name) => format!(" for lifetime parameter `{}`", name),
1341+
infer::EarlyBoundRegion(_, def_id) => format!(
1342+
" for lifetime parameter `{}`",
1343+
self.tcx.generic_param_name(def_id),
1344+
),
13421345
infer::BoundRegionInCoherence(name) => {
13431346
format!(" for lifetime parameter `{}` in coherence check", name)
13441347
}

src/librustc/infer/mod.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ use std::fmt;
3535
use syntax::ast;
3636
use errors::DiagnosticBuilder;
3737
use syntax_pos::{self, Span};
38-
use syntax_pos::symbol::InternedString;
3938
use util::nodemap::FxHashMap;
4039
use arena::SyncDroplessArena;
4140

@@ -355,7 +354,7 @@ pub enum RegionVariableOrigin {
355354
Coercion(Span),
356355

357356
// Region variables created as the values for early-bound regions
358-
EarlyBoundRegion(Span, InternedString),
357+
EarlyBoundRegion(Span, DefId),
359358

360359
// Region variables created for bound regions
361360
// in a function or method that is called
@@ -931,7 +930,7 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
931930
GenericParamDefKind::Lifetime => {
932931
// Create a region inference variable for the given
933932
// region parameter definition.
934-
self.next_region_var(EarlyBoundRegion(span, param.name)).into()
933+
self.next_region_var(EarlyBoundRegion(span, param.def_id)).into()
935934
}
936935
GenericParamDefKind::Type {..} => {
937936
// Create a type inference variable for the given

src/librustc/traits/auto_trait.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,9 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> {
225225
.params
226226
.iter()
227227
.filter_map(|param| match param.kind {
228-
ty::GenericParamDefKind::Lifetime => Some(param.name.to_string()),
228+
ty::GenericParamDefKind::Lifetime => {
229+
Some(tcx.generic_param_name(param.def_id).to_string())
230+
}
229231
_ => None
230232
})
231233
.collect();

src/librustc/traits/error_reporting.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
387387
},
388388
GenericParamDefKind::Lifetime => continue,
389389
};
390-
let name = param.name.to_string();
390+
let name = self.tcx.generic_param_name(param.def_id).to_string();
391391
flags.push((name, Some(value)));
392392
}
393393

src/librustc/traits/on_unimplemented.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ impl<'a, 'gcx, 'tcx> OnUnimplementedFormatString {
260260
Position::ArgumentNamed(s) if s == "from_desugaring" => (),
261261
// So is `{A}` if A is a type parameter
262262
Position::ArgumentNamed(s) => match generics.params.iter().find(|param| {
263-
param.name == s
263+
tcx.generic_param_name(param.def_id) == s
264264
}) {
265265
Some(_) => (),
266266
None => {
@@ -298,7 +298,7 @@ impl<'a, 'gcx, 'tcx> OnUnimplementedFormatString {
298298
},
299299
GenericParamDefKind::Lifetime => return None
300300
};
301-
let name = param.name.to_string();
301+
let name = tcx.generic_param_name(param.def_id).to_string();
302302
Some((name, value))
303303
}).collect::<FxHashMap<String, String>>();
304304
let empty_string = String::new();

src/librustc/ty/mod.rs

-1
Original file line numberDiff line numberDiff line change
@@ -844,7 +844,6 @@ pub enum GenericParamDefKind {
844844

845845
#[derive(Clone, RustcEncodable, RustcDecodable)]
846846
pub struct GenericParamDef {
847-
pub name: InternedString,
848847
pub def_id: DefId,
849848
pub index: u32,
850849

src/librustc/util/ppaux.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -637,7 +637,7 @@ impl fmt::Debug for ty::GenericParamDef {
637637
};
638638
write!(f, "{}({}, {:?}, {})",
639639
type_name,
640-
self.name,
640+
ty::tls::with(|tcx| tcx.generic_param_name(self.def_id)),
641641
self.def_id,
642642
self.index)
643643
}

src/librustc_codegen_llvm/debuginfo/mod.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -437,7 +437,9 @@ pub fn create_function_debug_context(
437437
let mut names = generics.parent.map_or(vec![], |def_id| {
438438
get_parameter_names(cx, cx.tcx.generics_of(def_id))
439439
});
440-
names.extend(generics.params.iter().map(|param| param.name));
440+
names.extend(generics.params.iter().map(|param| {
441+
cx.tcx.generic_param_name(param.def_id)
442+
}));
441443
names
442444
}
443445

src/librustc_typeck/astconv.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -636,12 +636,13 @@ impl<'o, 'gcx: 'tcx, 'tcx> dyn AstConv<'gcx, 'tcx>+'o {
636636
// defaults. This will lead to an ICE if we are not
637637
// careful!
638638
if default_needs_object_self(param) {
639+
let param_name = tcx.generic_param_name(param.def_id);
639640
struct_span_err!(tcx.sess, span, E0393,
640641
"the type parameter `{}` must be explicitly \
641642
specified",
642-
param.name)
643+
param_name)
643644
.span_label(span,
644-
format!("missing reference to `{}`", param.name))
645+
format!("missing reference to `{}`", param_name))
645646
.note(&format!("because of the default `Self` reference, \
646647
type parameters must be specified on object \
647648
types"))

src/librustc_typeck/check/mod.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1844,7 +1844,7 @@ impl<'a, 'gcx, 'tcx> AstConv<'gcx, 'tcx> for FnCtxt<'a, 'gcx, 'tcx> {
18441844
fn re_infer(&self, span: Span, def: Option<&ty::GenericParamDef>)
18451845
-> Option<ty::Region<'tcx>> {
18461846
let v = match def {
1847-
Some(def) => infer::EarlyBoundRegion(span, def.name),
1847+
Some(def) => infer::EarlyBoundRegion(span, def.def_id),
18481848
None => infer::MiscVariable(span)
18491849
};
18501850
Some(self.next_region_var(v))
@@ -5259,9 +5259,9 @@ pub fn check_bounds_are_used<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
52595259
});
52605260
for (&used, param) in types_used.iter().zip(types) {
52615261
if !used {
5262-
let id = tcx.hir.as_local_node_id(param.def_id).unwrap();
5263-
let span = tcx.hir.span(id);
5264-
struct_span_err!(tcx.sess, span, E0091, "type parameter `{}` is unused", param.name)
5262+
let span = tcx.def_span(param.def_id);
5263+
let param_name = tcx.generic_param_name(param.def_id);
5264+
struct_span_err!(tcx.sess, span, E0091, "type parameter `{}` is unused", param_name)
52655265
.span_label(span, "unused type parameter")
52665266
.emit();
52675267
}

src/librustc_typeck/check/wfcheck.rs

+7-4
Original file line numberDiff line numberDiff line change
@@ -838,7 +838,9 @@ fn reject_shadowing_parameters(tcx: TyCtxt, def_id: DefId) {
838838
let parent = tcx.generics_of(generics.parent.unwrap());
839839
let impl_params: FxHashMap<_, _> = parent.params.iter().flat_map(|param| match param.kind {
840840
GenericParamDefKind::Lifetime => None,
841-
GenericParamDefKind::Type {..} => Some((param.name, param.def_id)),
841+
GenericParamDefKind::Type {..} => {
842+
Some((tcx.generic_param_name(param.def_id), param.def_id))
843+
}
842844
}).collect();
843845

844846
for method_param in &generics.params {
@@ -847,15 +849,16 @@ fn reject_shadowing_parameters(tcx: TyCtxt, def_id: DefId) {
847849
GenericParamDefKind::Lifetime => continue,
848850
_ => {},
849851
};
850-
if impl_params.contains_key(&method_param.name) {
852+
let method_param_name = tcx.generic_param_name(method_param.def_id);
853+
if impl_params.contains_key(&method_param_name) {
851854
// Tighten up the span to focus on only the shadowing type
852855
let type_span = tcx.def_span(method_param.def_id);
853856

854857
// The expectation here is that the original trait declaration is
855858
// local so it should be okay to just unwrap everything.
856-
let trait_def_id = impl_params[&method_param.name];
859+
let trait_def_id = impl_params[&method_param_name];
857860
let trait_decl_span = tcx.def_span(trait_def_id);
858-
error_194(tcx, type_span, trait_decl_span, &method_param.name.as_str()[..]);
861+
error_194(tcx, type_span, trait_decl_span, &method_param_name.as_str()[..]);
859862
}
860863
}
861864
}

src/librustc_typeck/collect.rs

+2-7
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ use syntax::ast::MetaItemKind;
4545
use syntax::attr::{InlineAttr, list_contains_name, mark_used};
4646
use syntax::source_map::Spanned;
4747
use syntax::feature_gate;
48-
use syntax::symbol::{keywords, Symbol};
48+
use syntax::symbol::Symbol;
4949
use syntax_pos::{Span, DUMMY_SP};
5050

5151
use rustc::hir::def::{CtorKind, Def};
@@ -909,7 +909,6 @@ fn generics_of<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, def_id: DefId) -> &'tcx ty
909909

910910
opt_self = Some(ty::GenericParamDef {
911911
index: 0,
912-
name: keywords::SelfType.name().as_interned_str(),
913912
def_id: tcx.hir.local_def_id(param_id),
914913
pure_wrt_drop: false,
915914
kind: ty::GenericParamDefKind::Type {
@@ -954,7 +953,6 @@ fn generics_of<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, def_id: DefId) -> &'tcx ty
954953
early_lifetimes
955954
.enumerate()
956955
.map(|(i, param)| ty::GenericParamDef {
957-
name: param.name.ident().as_interned_str(),
958956
index: own_start + i as u32,
959957
def_id: tcx.hir.local_def_id(param.id),
960958
pure_wrt_drop: param.pure_wrt_drop,
@@ -994,7 +992,6 @@ fn generics_of<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, def_id: DefId) -> &'tcx ty
994992

995993
let ty_param = ty::GenericParamDef {
996994
index: type_start + i as u32,
997-
name: param.name.ident().as_interned_str(),
998995
def_id: tcx.hir.local_def_id(param.id),
999996
pure_wrt_drop: param.pure_wrt_drop,
1000997
kind: ty::GenericParamDefKind::Type {
@@ -1030,9 +1027,8 @@ fn generics_of<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, def_id: DefId) -> &'tcx ty
10301027
dummy_args
10311028
.iter()
10321029
.enumerate()
1033-
.map(|(i, &arg)| ty::GenericParamDef {
1030+
.map(|(i, &_arg)| ty::GenericParamDef {
10341031
index: type_start + i as u32,
1035-
name: Symbol::intern(arg).as_interned_str(),
10361032
def_id,
10371033
pure_wrt_drop: false,
10381034
kind: ty::GenericParamDefKind::Type {
@@ -1047,7 +1043,6 @@ fn generics_of<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, def_id: DefId) -> &'tcx ty
10471043
params.extend(fv.iter().zip((dummy_args.len() as u32)..).map(|(_, i)| {
10481044
ty::GenericParamDef {
10491045
index: type_start + i,
1050-
name: Symbol::intern("<upvar>").as_interned_str(),
10511046
def_id,
10521047
pure_wrt_drop: false,
10531048
kind: ty::GenericParamDefKind::Type {

src/librustc_typeck/impl_wf_check.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ fn enforce_impl_params_are_constrained<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
131131
tcx.sess, span, E0207,
132132
"the {} parameter `{}` is not constrained by the \
133133
impl trait, self type, or predicates",
134-
kind, param.name)
134+
kind, tcx.generic_param_name(param.def_id))
135135
.span_label(span, format!("unconstrained {} parameter", kind))
136136
.emit();
137137
}

src/librustdoc/clean/mod.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -1243,8 +1243,8 @@ impl Clean<Lifetime> for hir::GenericParam {
12431243
}
12441244

12451245
impl<'tcx> Clean<Lifetime> for ty::GenericParamDef {
1246-
fn clean(&self, _cx: &DocContext) -> Lifetime {
1247-
Lifetime(self.name.to_string())
1246+
fn clean(&self, cx: &DocContext) -> Lifetime {
1247+
Lifetime(cx.tcx.generic_param_name(self.def_id).to_string())
12481248
}
12491249
}
12501250

@@ -1409,19 +1409,20 @@ impl GenericParamDef {
14091409

14101410
impl<'tcx> Clean<GenericParamDef> for ty::GenericParamDef {
14111411
fn clean(&self, cx: &DocContext) -> GenericParamDef {
1412+
let name = cx.tcx.generic_param_name(self.def_id);
14121413
let (name, kind) = match self.kind {
14131414
ty::GenericParamDefKind::Lifetime => {
1414-
(self.name.to_string(), GenericParamDefKind::Lifetime)
1415+
(name.to_string(), GenericParamDefKind::Lifetime)
14151416
}
14161417
ty::GenericParamDefKind::Type { has_default, .. } => {
14171418
cx.renderinfo.borrow_mut().external_typarams
1418-
.insert(self.def_id, self.name.clean(cx));
1419+
.insert(self.def_id, name.clean(cx));
14191420
let default = if has_default {
14201421
Some(cx.tcx.type_of(self.def_id).clean(cx))
14211422
} else {
14221423
None
14231424
};
1424-
(self.name.clean(cx), GenericParamDefKind::Type {
1425+
(name.clean(cx), GenericParamDefKind::Type {
14251426
did: self.def_id,
14261427
bounds: vec![], // These are filled in from the where-clauses.
14271428
default,
@@ -1561,8 +1562,7 @@ impl<'a, 'tcx> Clean<Generics> for (&'a ty::Generics,
15611562
let stripped_typarams = gens.params.iter().filter_map(|param| match param.kind {
15621563
ty::GenericParamDefKind::Lifetime => None,
15631564
ty::GenericParamDefKind::Type { .. } => {
1564-
if param.name == keywords::SelfType.name().as_str() {
1565-
assert_eq!(param.index, 0);
1565+
if gens.has_self && param.index == 0 {
15661566
return None;
15671567
}
15681568
Some(param.clean(cx))

src/librustdoc/core.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,11 @@ impl<'a, 'tcx, 'rcx, 'cstore> DocContext<'a, 'tcx, 'rcx, 'cstore> {
201201
for param in generics.params.iter() {
202202
match param.kind {
203203
ty::GenericParamDefKind::Lifetime => {
204-
let name = if param.name == "" {
204+
let param_name = self.tcx.generic_param_name(param.def_id);
205+
let name = if param_name == "" {
205206
hir::ParamName::Plain(keywords::StaticLifetime.ident())
206207
} else {
207-
hir::ParamName::Plain(ast::Ident::from_interned_str(param.name))
208+
hir::ParamName::Plain(ast::Ident::from_interned_str(param_name))
208209
};
209210

210211
args.push(hir::GenericArg::Lifetime(hir::Lifetime {
@@ -228,6 +229,7 @@ impl<'a, 'tcx, 'rcx, 'cstore> DocContext<'a, 'tcx, 'rcx, 'cstore> {
228229

229230
pub fn ty_param_to_ty(&self, param: ty::GenericParamDef) -> hir::Ty {
230231
debug!("ty_param_to_ty({:?}) {:?}", param, param.def_id);
232+
let param_name = self.tcx.generic_param_name(param.def_id);
231233
hir::Ty {
232234
id: ast::DUMMY_NODE_ID,
233235
node: hir::TyKind::Path(hir::QPath::Resolved(
@@ -236,7 +238,7 @@ impl<'a, 'tcx, 'rcx, 'cstore> DocContext<'a, 'tcx, 'rcx, 'cstore> {
236238
span: DUMMY_SP,
237239
def: Def::TyParam(param.def_id),
238240
segments: HirVec::from_vec(vec![
239-
hir::PathSegment::from_ident(Ident::from_interned_str(param.name))
241+
hir::PathSegment::from_ident(Ident::from_interned_str(param_name))
240242
]),
241243
}),
242244
)),

0 commit comments

Comments
 (0)