about summary refs log tree commit diff
path: root/compiler/rustc_middle/src
diff options
context:
space:
mode:
authorMark Rousskov <mark.simulacrum@gmail.com>2024-04-27 13:58:37 -0400
committerMark Rousskov <mark.simulacrum@gmail.com>2024-06-01 07:50:32 -0400
commit95e073234ff513375879e898fecb5ba727f8cee5 (patch)
tree1750aa383cc90fd6e878105ce024eab6225f957f /compiler/rustc_middle/src
parentdd9c8cc467a8a6af3a785bac285458dd9def6cf0 (diff)
downloadrust-95e073234ff513375879e898fecb5ba727f8cee5.tar.gz
rust-95e073234ff513375879e898fecb5ba727f8cee5.zip
Deduplicate supertrait_def_ids code
Diffstat (limited to 'compiler/rustc_middle/src')
-rw-r--r--compiler/rustc_middle/src/ty/vtable.rs22
1 files changed, 10 insertions, 12 deletions
diff --git a/compiler/rustc_middle/src/ty/vtable.rs b/compiler/rustc_middle/src/ty/vtable.rs
index 092451b80aa..dc3c84f9e43 100644
--- a/compiler/rustc_middle/src/ty/vtable.rs
+++ b/compiler/rustc_middle/src/ty/vtable.rs
@@ -42,28 +42,26 @@ impl<'tcx> fmt::Debug for VtblEntry<'tcx> {
 impl<'tcx> TyCtxt<'tcx> {
     pub const COMMON_VTABLE_ENTRIES: &'tcx [VtblEntry<'tcx>] =
         &[VtblEntry::MetadataDropInPlace, VtblEntry::MetadataSize, VtblEntry::MetadataAlign];
+
+    pub fn supertrait_def_ids(self, trait_def_id: DefId) -> SupertraitDefIds<'tcx> {
+        SupertraitDefIds {
+            tcx: self,
+            stack: vec![trait_def_id],
+            visited: Some(trait_def_id).into_iter().collect(),
+        }
+    }
 }
 
 pub const COMMON_VTABLE_ENTRIES_DROPINPLACE: usize = 0;
 pub const COMMON_VTABLE_ENTRIES_SIZE: usize = 1;
 pub const COMMON_VTABLE_ENTRIES_ALIGN: usize = 2;
 
-// FIXME: This is duplicating equivalent code in compiler/rustc_trait_selection/src/traits/util.rs
-// But that is a downstream crate, and this code is pretty simple. Probably OK for now.
-struct SupertraitDefIds<'tcx> {
+pub struct SupertraitDefIds<'tcx> {
     tcx: TyCtxt<'tcx>,
     stack: Vec<DefId>,
     visited: FxHashSet<DefId>,
 }
 
-fn supertrait_def_ids(tcx: TyCtxt<'_>, trait_def_id: DefId) -> SupertraitDefIds<'_> {
-    SupertraitDefIds {
-        tcx,
-        stack: vec![trait_def_id],
-        visited: Some(trait_def_id).into_iter().collect(),
-    }
-}
-
 impl Iterator for SupertraitDefIds<'_> {
     type Item = DefId;
 
@@ -100,7 +98,7 @@ pub(crate) fn vtable_min_entries<'tcx>(
     };
 
     // This includes self in supertraits.
-    for def_id in supertrait_def_ids(tcx, trait_ref.def_id()) {
+    for def_id in tcx.supertrait_def_ids(trait_ref.def_id()) {
         count += tcx.own_existential_vtable_entries(def_id).len();
     }