]> git.lizzy.rs Git - rust.git/commitdiff
Use query instead of `impl_is_default` fn
authorJonas Schievink <jonasschievink@gmail.com>
Sun, 29 Mar 2020 18:01:14 +0000 (20:01 +0200)
committerJonas Schievink <jonasschievink@gmail.com>
Mon, 30 Mar 2020 17:48:32 +0000 (19:48 +0200)
src/librustc_middle/traits/mod.rs
src/librustc_middle/traits/specialization_graph.rs
src/librustc_middle/traits/util.rs [deleted file]
src/librustc_trait_selection/traits/util.rs
src/librustc_ty/ty.rs
src/librustc_typeck/check/mod.rs

index d47e2d75fba355434e13eba76d77f6a34455fc0b..c129b574fd38a0f6def4cb3a9fa896fde54304f9 100644 (file)
@@ -6,7 +6,6 @@
 pub mod select;
 pub mod specialization_graph;
 mod structural_impls;
-pub mod util;
 
 use crate::mir::interpret::ErrorHandled;
 use crate::ty::subst::SubstsRef;
index f66f94fe8c16860d9888731ef57af44e8f67ed33..a2793f98050048ceeed91f55138599f5ebe0982e 100644 (file)
@@ -211,7 +211,7 @@ pub fn leaf_def(
             if let Some(item) = node.item(tcx, trait_item_name, trait_item_kind, trait_def_id) {
                 if finalizing_node.is_none() {
                     let is_specializable = item.defaultness.is_default()
-                        || super::util::impl_is_default(tcx, node.def_id());
+                        || tcx.impl_defaultness(node.def_id()).is_default();
 
                     if !is_specializable {
                         finalizing_node = Some(node);
diff --git a/src/librustc_middle/traits/util.rs b/src/librustc_middle/traits/util.rs
deleted file mode 100644 (file)
index cb29cf0..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-use crate::ty::TyCtxt;
-use rustc_hir as hir;
-use rustc_hir::def_id::DefId;
-
-pub fn impl_is_default(tcx: TyCtxt<'_>, node_item_def_id: DefId) -> bool {
-    match tcx.hir().as_local_hir_id(node_item_def_id) {
-        Some(hir_id) => {
-            let item = tcx.hir().expect_item(hir_id);
-            if let hir::ItemKind::Impl { defaultness, .. } = item.kind {
-                defaultness.is_default()
-            } else {
-                false
-            }
-        }
-        None => tcx.impl_defaultness(node_item_def_id).is_default(),
-    }
-}
index c28628678a9354c56ac92d32fea35fff9b17d2ff..6348673dab8b542a28450966d6da22f68f31a957 100644 (file)
@@ -8,7 +8,6 @@
 use rustc_middle::ty::outlives::Component;
 use rustc_middle::ty::subst::{GenericArg, Subst, SubstsRef};
 use rustc_middle::ty::{self, ToPolyTraitRef, ToPredicate, Ty, TyCtxt, WithConstness};
-use rustc_middle::traits::util::impl_is_default;
 
 use super::{Normalized, Obligation, ObligationCause, PredicateObligation, SelectionContext};
 
@@ -652,7 +651,7 @@ pub fn generator_trait_ref_and_outputs(
 }
 
 pub fn impl_item_is_final(tcx: TyCtxt<'_>, assoc_item: &ty::AssocItem) -> bool {
-    assoc_item.defaultness.is_final() && !impl_is_default(tcx, assoc_item.container.id())
+    assoc_item.defaultness.is_final() && tcx.impl_defaultness(assoc_item.container.id()).is_final()
 }
 
 pub enum TupleArgumentsFlag {
index 9d28447e212a6a0ce63ee3651792e62feec9ed2a..aefe61f60b87a4e59b2d2effa8a9d33b1cc751d6 100644 (file)
@@ -165,6 +165,16 @@ fn associated_item(tcx: TyCtxt<'_>, def_id: DefId) -> ty::AssocItem {
     )
 }
 
+fn impl_defaultness(tcx: TyCtxt<'_>, def_id: DefId) -> hir::Defaultness {
+    let hir_id = tcx.hir().as_local_hir_id(def_id).unwrap();
+    let item = tcx.hir().expect_item(hir_id);
+    if let hir::ItemKind::Impl { defaultness, .. } = item.kind {
+        defaultness
+    } else {
+        bug!("`impl_defaultness` called on {:?}", item);
+    }
+}
+
 /// Calculates the `Sized` constraint.
 ///
 /// In fact, there are only a few options for the types in the constraint:
@@ -371,6 +381,7 @@ pub fn provide(providers: &mut ty::query::Providers<'_>) {
         crate_hash,
         instance_def_size_estimate,
         issue33140_self_ty,
+        impl_defaultness,
         ..*providers
     };
 }
index c85b5a4f2a258f23e2286fdb223fe8794d1b5948..3823efe9d927e9667fd9ede644a9cbb876d36815 100644 (file)
 use rustc_middle::hir::map::blocks::FnLikeNode;
 use rustc_middle::middle::region;
 use rustc_middle::mir::interpret::ConstValue;
-use rustc_middle::traits::util::impl_is_default;
 use rustc_middle::ty::adjustment::{
     Adjust, Adjustment, AllowTwoPhase, AutoBorrow, AutoBorrowMutability, PointerCast,
 };
@@ -1943,7 +1942,7 @@ fn check_specialization_validity<'tcx>(
             // grandparent. In that case, if parent is a `default impl`, inherited items use the
             // "defaultness" from the grandparent, else they are final.
             None => {
-                if impl_is_default(tcx, parent_impl.def_id()) {
+                if tcx.impl_defaultness(parent_impl.def_id()).is_default() {
                     None
                 } else {
                     Some(Err(parent_impl.def_id()))
@@ -2118,7 +2117,7 @@ fn check_impl_items_against_trait<'tcx>(
                 .map(|node_item| !node_item.defining_node.is_from_trait())
                 .unwrap_or(false);
 
-            if !is_implemented && !impl_is_default(tcx, impl_id) {
+            if !is_implemented && tcx.impl_defaultness(impl_id).is_final() {
                 if !trait_item.defaultness.has_value() {
                     missing_items.push(*trait_item);
                 }