Skip to content

Commit b5dfa6a

Browse files
committed
Compute ty_param_owner using DefIdTree.
1 parent dd38eea commit b5dfa6a

File tree

4 files changed

+13
-15
lines changed

4 files changed

+13
-15
lines changed

compiler/rustc_middle/src/hir/map/mod.rs

+7-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::hir::{ModuleItems, Owner};
2-
use crate::ty::TyCtxt;
2+
use crate::ty::{DefIdTree, TyCtxt};
33
use rustc_ast as ast;
44
use rustc_data_structures::fingerprint::Fingerprint;
55
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
@@ -545,13 +545,12 @@ impl<'hir> Map<'hir> {
545545
});
546546
}
547547

548-
pub fn ty_param_owner(self, id: HirId) -> LocalDefId {
549-
match self.get(id) {
550-
Node::Item(&Item { kind: ItemKind::Trait(..) | ItemKind::TraitAlias(..), .. }) => {
551-
id.expect_owner()
552-
}
553-
Node::GenericParam(_) => self.get_parent_item(id),
554-
_ => bug!("ty_param_owner: {} not a type parameter", self.node_to_string(id)),
548+
pub fn ty_param_owner(self, def_id: LocalDefId) -> LocalDefId {
549+
let def_kind = self.tcx.def_kind(def_id);
550+
match def_kind {
551+
DefKind::Trait | DefKind::TraitAlias => def_id,
552+
DefKind::TyParam | DefKind::ConstParam => self.tcx.local_parent(def_id).unwrap(),
553+
_ => bug!("ty_param_owner: {:?} is a {:?} not a type parameter", def_id, def_kind),
555554
}
556555
}
557556

compiler/rustc_typeck/src/astconv/mod.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -2265,11 +2265,11 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
22652265
assert_eq!(opt_self_ty, None);
22662266
self.prohibit_generics(path.segments);
22672267

2268-
let hir_id = tcx.hir().local_def_id_to_hir_id(def_id.expect_local());
2269-
let item_id = tcx.hir().get_parent_node(hir_id);
2270-
let item_def_id = tcx.hir().local_def_id(item_id);
2268+
let def_id = def_id.expect_local();
2269+
let hir_id = tcx.hir().local_def_id_to_hir_id(def_id);
2270+
let item_def_id = tcx.hir().ty_param_owner(def_id);
22712271
let generics = tcx.generics_of(item_def_id);
2272-
let index = generics.param_def_id_to_index[&def_id];
2272+
let index = generics.param_def_id_to_index[&def_id.to_def_id()];
22732273
tcx.mk_ty_param(index, tcx.hir().name(hir_id))
22742274
}
22752275
Res::SelfTy { trait_: Some(_), alias_to: None } => {

compiler/rustc_typeck/src/check/fn_ctxt/mod.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -184,8 +184,7 @@ impl<'a, 'tcx> AstConv<'tcx> for FnCtxt<'a, 'tcx> {
184184
_: Ident,
185185
) -> ty::GenericPredicates<'tcx> {
186186
let tcx = self.tcx;
187-
let hir_id = tcx.hir().local_def_id_to_hir_id(def_id.expect_local());
188-
let item_def_id = tcx.hir().ty_param_owner(hir_id);
187+
let item_def_id = tcx.hir().ty_param_owner(def_id.expect_local());
189188
let generics = tcx.generics_of(item_def_id);
190189
let index = generics.param_def_id_to_index[&def_id];
191190
ty::GenericPredicates {

compiler/rustc_typeck/src/collect.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,7 @@ fn type_param_predicates(
558558
// `where T: Foo`.
559559

560560
let param_id = tcx.hir().local_def_id_to_hir_id(def_id);
561-
let param_owner = tcx.hir().ty_param_owner(param_id);
561+
let param_owner = tcx.hir().ty_param_owner(def_id);
562562
let generics = tcx.generics_of(param_owner);
563563
let index = generics.param_def_id_to_index[&def_id.to_def_id()];
564564
let ty = tcx.mk_ty_param(index, tcx.hir().ty_param_name(param_id));

0 commit comments

Comments
 (0)