]> git.lizzy.rs Git - rust.git/commitdiff
Add def getting methods to librustc/ty/context
authorTomas Koutsky <tomas@stepnivlk.net>
Fri, 15 Mar 2019 16:42:34 +0000 (17:42 +0100)
committerstepnivlk <tomas@stepnivlk.net>
Sat, 16 Mar 2019 12:14:06 +0000 (13:14 +0100)
src/librustc/middle/dead.rs
src/librustc/middle/expr_use_visitor.rs
src/librustc/middle/reachable.rs
src/librustc/ty/context.rs
src/librustc_lint/unused.rs
src/librustc_mir/hair/cx/expr.rs
src/librustc_passes/rvalue_promotion.rs
src/librustc_privacy/lib.rs
src/librustc_save_analysis/lib.rs
src/librustc_typeck/check/mod.rs

index 94de999c25da81843fe95ae8889034faa3094bee..c199b8273263cd4e7d184d08bc0de2d76e212195 100644 (file)
@@ -92,8 +92,8 @@ fn handle_definition(&mut self, def: Def) {
     }
 
     fn lookup_and_handle_method(&mut self, id: hir::HirId) {
-        if let Some(def) = self.tables.type_dependent_defs().get(id) {
-            self.check_def_id(def.def_id());
+        if let Some(def_id) = self.tables.type_dependent_def_id(id) {
+            self.check_def_id(def_id);
         } else {
             bug!("no type-dependent def for method");
         }
index 8ada67efaafdd3048c871095a1ccd73d2e15afbc..db640b581d35382f7351a295cec4ce7fc15335f7 100644 (file)
@@ -559,8 +559,7 @@ fn walk_callee(&mut self, call: &hir::Expr, callee: &hir::Expr) {
             }
             ty::Error => { }
             _ => {
-                if let Some(def) = self.mc.tables.type_dependent_defs().get(call.hir_id) {
-                    let def_id = def.def_id();
+                if let Some(def_id) = self.mc.tables.type_dependent_def_id(call.hir_id) {
                     let call_scope = region::Scope {
                         id: call.hir_id.local_id,
                         data: region::ScopeData::Node
index 72f6d22b696f7f6d609df91c2e8b8703b8a0ae9c..9a71020d65d03254b363bd34f6e6deddb5e989c0 100644 (file)
@@ -97,7 +97,7 @@ fn visit_expr(&mut self, expr: &'tcx hir::Expr) {
                 Some(self.tables.qpath_def(qpath, expr.hir_id))
             }
             hir::ExprKind::MethodCall(..) => {
-                self.tables.type_dependent_defs().get(expr.hir_id).cloned()
+                self.tables.type_dependent_def(expr.hir_id)
             }
             _ => None
         };
index ecf1d8a980a8d16b7ed0dc3e18951efe9997cb60..2fc95641693ef2008668e69240b746c86f0f8edb 100644 (file)
@@ -482,6 +482,15 @@ pub fn type_dependent_defs(&self) -> LocalTableInContext<'_, Def> {
         }
     }
 
+    pub fn type_dependent_def(&self, id: HirId) -> Option<Def> {
+        validate_hir_id_for_typeck_tables(self.local_id_root, id, false);
+        self.type_dependent_defs.get(&id.local_id).cloned()
+    }
+
+    pub fn type_dependent_def_id(&self, id: HirId) -> Option<DefId> {
+        self.type_dependent_def(id).map(|def| def.def_id())
+    }
+
     pub fn type_dependent_defs_mut(&mut self) -> LocalTableInContextMut<'_, Def> {
         LocalTableInContextMut {
             local_id_root: self.local_id_root,
index 86b8b276eafe5930d35cb7c427705892690c0c6d..2612efd83164c4084ac593c1e22a5115ed618ce7 100644 (file)
@@ -112,7 +112,7 @@ fn check_stmt(&mut self, cx: &LateContext<'_, '_>, s: &hir::Stmt) {
                 }
             },
             hir::ExprKind::MethodCall(..) => {
-                cx.tables.type_dependent_defs().get(expr.hir_id).cloned()
+                cx.tables.type_dependent_def(expr.hir_id)
             },
             _ => None
         };
index 7749b3a5ca49e893bab536bbbf4f5c06134ebc67..8ca75831235f750b4ca1f6aeb4a6090dc0ab0e25 100644 (file)
@@ -835,13 +835,11 @@ fn method_callee<'a, 'gcx, 'tcx>(
     let (def_id, substs, user_ty) = match overloaded_callee {
         Some((def_id, substs)) => (def_id, substs, None),
         None => {
-            let type_dependent_defs = cx.tables().type_dependent_defs();
-            let def = type_dependent_defs
-                .get(expr.hir_id)
+            let def = cx.tables().type_dependent_def(expr.hir_id)
                 .unwrap_or_else(|| {
                     span_bug!(expr.span, "no type-dependent def for method callee")
                 });
-            let user_ty = user_substs_applied_to_def(cx, expr.hir_id, def);
+            let user_ty = user_substs_applied_to_def(cx, expr.hir_id, &def);
             debug!("method_callee: user_ty={:?}", user_ty);
             (def.def_id(), cx.tables().node_substs(expr.hir_id), user_ty)
         }
index 6de98675a3dc8cfa3815b47340a312c13b0999a1..fcd51062cd97adde2588f78d5794210710df7537 100644 (file)
@@ -406,8 +406,7 @@ fn check_expr_kind<'a, 'tcx>(
             for index in hirvec.iter() {
                 method_call_result &= v.check_expr(index);
             }
-            if let Some(def) = v.tables.type_dependent_defs().get(e.hir_id) {
-                let def_id = def.def_id();
+            if let Some(def_id) = v.tables.type_dependent_def_id(e.hir_id) {
                 match v.tcx.associated_item(def_id).container {
                     ty::ImplContainer(_) => method_call_result & v.handle_const_fn_call(def_id),
                     ty::TraitContainer(_) => NotPromotable,
index 52514a3ca97d67ab6a8eba9f555c2ff0a46ebcee..98ee871489db8e29641dfb58923939b27ea779c1 100644 (file)
@@ -1041,8 +1041,8 @@ fn visit_expr(&mut self, expr: &'tcx hir::Expr) {
             hir::ExprKind::MethodCall(_, span, _) => {
                 // Method calls have to be checked specially.
                 self.span = span;
-                if let Some(def) = self.tables.type_dependent_defs().get(expr.hir_id) {
-                    if self.visit(self.tcx.type_of(def.def_id())) {
+                if let Some(def_id) = self.tables.type_dependent_def_id(expr.hir_id) {
+                    if self.visit(self.tcx.type_of(def_id)) {
                         return;
                     }
                 } else {
@@ -1071,7 +1071,7 @@ fn visit_qpath(&mut self, qpath: &'tcx hir::QPath, id: hir::HirId, span: Span) {
                 _ => None,
             }
             hir::QPath::TypeRelative(..) => {
-                self.tables.type_dependent_defs().get(id).cloned()
+                self.tables.type_dependent_def(id)
             }
         };
         if let Some(def) = def {
index d80f3e5ce759cae9434335eb20e3f886e5d49867..f6a43e888d206cb3b51ea57d339be6a7066b32d5 100644 (file)
@@ -565,8 +565,8 @@ pub fn get_expr_data(&self, expr: &ast::Expr) -> Option<Data> {
             }
             ast::ExprKind::MethodCall(ref seg, ..) => {
                 let expr_hir_id = self.tcx.hir().definitions().node_to_hir_id(expr.id);
-                let method_id = match self.tables.type_dependent_defs().get(expr_hir_id) {
-                    Some(id) => id.def_id(),
+                let method_id = match self.tables.type_dependent_def_id(expr_hir_id) {
+                    Some(id) => id,
                     None => {
                         debug!("Could not resolve method id for {:?}", expr);
                         return None;
index 28c79ce0c74e86c77ad9634838a21a9a9f8b061f..ceb33439c3ec7094a646116afd00deb54e0ba7b7 100644 (file)
@@ -4757,10 +4757,10 @@ pub fn resolve_ty_and_def_ufcs<'b>(&self,
                 (self.to_ty(qself), qself, segment)
             }
         };
-        if let Some(cached_def) = self.tables.borrow().type_dependent_defs().get(hir_id) {
+        if let Some(cached_def) = self.tables.borrow().type_dependent_def(hir_id) {
             // Return directly on cache hit. This is useful to avoid doubly reporting
             // errors with default match binding modes. See #44614.
-            return (*cached_def, Some(ty), slice::from_ref(&**item_segment))
+            return (cached_def, Some(ty), slice::from_ref(&**item_segment))
         }
         let item_name = item_segment.ident;
         let def = match self.resolve_ufcs(span, item_name, ty, hir_id) {