Skip to content

Commit f4742f4

Browse files
author
Tomas Koutsky
committed
Add def getting methods to librustc/ty/context
1 parent 16e7e05 commit f4742f4

File tree

10 files changed

+24
-19
lines changed

10 files changed

+24
-19
lines changed

src/librustc/middle/dead.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ impl<'a, 'tcx> MarkSymbolVisitor<'a, 'tcx> {
9292
}
9393

9494
fn lookup_and_handle_method(&mut self, id: hir::HirId) {
95-
if let Some(def) = self.tables.type_dependent_defs().get(id) {
96-
self.check_def_id(def.def_id());
95+
if let Some(def_id) = self.tables.type_dependent_def_id(id) {
96+
self.check_def_id(def_id);
9797
} else {
9898
bug!("no type-dependent def for method");
9999
}

src/librustc/middle/expr_use_visitor.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -559,8 +559,7 @@ impl<'a, 'gcx, 'tcx> ExprUseVisitor<'a, 'gcx, 'tcx> {
559559
}
560560
ty::Error => { }
561561
_ => {
562-
if let Some(def) = self.mc.tables.type_dependent_defs().get(call.hir_id) {
563-
let def_id = def.def_id();
562+
if let Some(def_id) = self.mc.tables.type_dependent_def_id(call.hir_id) {
564563
let call_scope = region::Scope {
565564
id: call.hir_id.local_id,
566565
data: region::ScopeData::Node

src/librustc/middle/reachable.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ impl<'a, 'tcx> Visitor<'tcx> for ReachableContext<'a, 'tcx> {
9797
Some(self.tables.qpath_def(qpath, expr.hir_id))
9898
}
9999
hir::ExprKind::MethodCall(..) => {
100-
self.tables.type_dependent_defs().get(expr.hir_id).cloned()
100+
self.tables.type_dependent_def(expr.hir_id)
101101
}
102102
_ => None
103103
};

src/librustc/ty/context.rs

+9
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,15 @@ impl<'tcx> TypeckTables<'tcx> {
482482
}
483483
}
484484

485+
pub fn type_dependent_def(&self, id: HirId) -> Option<Def> {
486+
validate_hir_id_for_typeck_tables(self.local_id_root, id, false);
487+
self.type_dependent_defs.get(&id.local_id).cloned()
488+
}
489+
490+
pub fn type_dependent_def_id(&self, id: HirId) -> Option<DefId> {
491+
self.type_dependent_def(id).map(|def| def.def_id())
492+
}
493+
485494
pub fn type_dependent_defs_mut(&mut self) -> LocalTableInContextMut<'_, Def> {
486495
LocalTableInContextMut {
487496
local_id_root: self.local_id_root,

src/librustc_lint/unused.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UnusedResults {
112112
}
113113
},
114114
hir::ExprKind::MethodCall(..) => {
115-
cx.tables.type_dependent_defs().get(expr.hir_id).cloned()
115+
cx.tables.type_dependent_def(expr.hir_id)
116116
},
117117
_ => None
118118
};

src/librustc_mir/hair/cx/expr.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -835,13 +835,11 @@ fn method_callee<'a, 'gcx, 'tcx>(
835835
let (def_id, substs, user_ty) = match overloaded_callee {
836836
Some((def_id, substs)) => (def_id, substs, None),
837837
None => {
838-
let type_dependent_defs = cx.tables().type_dependent_defs();
839-
let def = type_dependent_defs
840-
.get(expr.hir_id)
838+
let def = cx.tables().type_dependent_def(expr.hir_id)
841839
.unwrap_or_else(|| {
842840
span_bug!(expr.span, "no type-dependent def for method callee")
843841
});
844-
let user_ty = user_substs_applied_to_def(cx, expr.hir_id, def);
842+
let user_ty = user_substs_applied_to_def(cx, expr.hir_id, &def);
845843
debug!("method_callee: user_ty={:?}", user_ty);
846844
(def.def_id(), cx.tables().node_substs(expr.hir_id), user_ty)
847845
}

src/librustc_passes/rvalue_promotion.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -406,8 +406,7 @@ fn check_expr_kind<'a, 'tcx>(
406406
for index in hirvec.iter() {
407407
method_call_result &= v.check_expr(index);
408408
}
409-
if let Some(def) = v.tables.type_dependent_defs().get(e.hir_id) {
410-
let def_id = def.def_id();
409+
if let Some(def_id) = v.tables.type_dependent_def_id(e.hir_id) {
411410
match v.tcx.associated_item(def_id).container {
412411
ty::ImplContainer(_) => method_call_result & v.handle_const_fn_call(def_id),
413412
ty::TraitContainer(_) => NotPromotable,

src/librustc_privacy/lib.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1041,8 +1041,8 @@ impl<'a, 'tcx> Visitor<'tcx> for TypePrivacyVisitor<'a, 'tcx> {
10411041
hir::ExprKind::MethodCall(_, span, _) => {
10421042
// Method calls have to be checked specially.
10431043
self.span = span;
1044-
if let Some(def) = self.tables.type_dependent_defs().get(expr.hir_id) {
1045-
if self.visit(self.tcx.type_of(def.def_id())) {
1044+
if let Some(def_id) = self.tables.type_dependent_def_id(expr.hir_id) {
1045+
if self.visit(self.tcx.type_of(def_id)) {
10461046
return;
10471047
}
10481048
} else {
@@ -1071,7 +1071,7 @@ impl<'a, 'tcx> Visitor<'tcx> for TypePrivacyVisitor<'a, 'tcx> {
10711071
_ => None,
10721072
}
10731073
hir::QPath::TypeRelative(..) => {
1074-
self.tables.type_dependent_defs().get(id).cloned()
1074+
self.tables.type_dependent_def(id)
10751075
}
10761076
};
10771077
if let Some(def) = def {

src/librustc_save_analysis/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -565,8 +565,8 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
565565
}
566566
ast::ExprKind::MethodCall(ref seg, ..) => {
567567
let expr_hir_id = self.tcx.hir().definitions().node_to_hir_id(expr.id);
568-
let method_id = match self.tables.type_dependent_defs().get(expr_hir_id) {
569-
Some(id) => id.def_id(),
568+
let method_id = match self.tables.type_dependent_def_id(expr_hir_id) {
569+
Some(id) => id,
570570
None => {
571571
debug!("Could not resolve method id for {:?}", expr);
572572
return None;

src/librustc_typeck/check/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -4757,10 +4757,10 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
47574757
(self.to_ty(qself), qself, segment)
47584758
}
47594759
};
4760-
if let Some(cached_def) = self.tables.borrow().type_dependent_defs().get(hir_id) {
4760+
if let Some(cached_def) = self.tables.borrow().type_dependent_def(hir_id) {
47614761
// Return directly on cache hit. This is useful to avoid doubly reporting
47624762
// errors with default match binding modes. See #44614.
4763-
return (*cached_def, Some(ty), slice::from_ref(&**item_segment))
4763+
return (cached_def, Some(ty), slice::from_ref(&**item_segment))
47644764
}
47654765
let item_name = item_segment.ident;
47664766
let def = match self.resolve_ufcs(span, item_name, ty, hir_id) {

0 commit comments

Comments
 (0)