summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_middle/src/infer/unify_key.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-07 05:48:48 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-07 05:48:48 +0000
commitef24de24a82fe681581cc130f342363c47c0969a (patch)
tree0d494f7e1a38b95c92426f58fe6eaa877303a86c /compiler/rustc_middle/src/infer/unify_key.rs
parentReleasing progress-linux version 1.74.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-ef24de24a82fe681581cc130f342363c47c0969a.tar.xz
rustc-ef24de24a82fe681581cc130f342363c47c0969a.zip
Merging upstream version 1.75.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'compiler/rustc_middle/src/infer/unify_key.rs')
-rw-r--r--compiler/rustc_middle/src/infer/unify_key.rs40
1 files changed, 32 insertions, 8 deletions
diff --git a/compiler/rustc_middle/src/infer/unify_key.rs b/compiler/rustc_middle/src/infer/unify_key.rs
index 7ca964759..041a63776 100644
--- a/compiler/rustc_middle/src/infer/unify_key.rs
+++ b/compiler/rustc_middle/src/infer/unify_key.rs
@@ -141,18 +141,30 @@ pub struct ConstVarValue<'tcx> {
pub val: ConstVariableValue<'tcx>,
}
-impl<'tcx> UnifyKey for ty::ConstVid<'tcx> {
+#[derive(PartialEq, Copy, Clone, Debug)]
+pub struct ConstVidKey<'tcx> {
+ pub vid: ty::ConstVid,
+ pub phantom: PhantomData<ty::Const<'tcx>>,
+}
+
+impl<'tcx> From<ty::ConstVid> for ConstVidKey<'tcx> {
+ fn from(vid: ty::ConstVid) -> Self {
+ ConstVidKey { vid, phantom: PhantomData }
+ }
+}
+
+impl<'tcx> UnifyKey for ConstVidKey<'tcx> {
type Value = ConstVarValue<'tcx>;
#[inline]
fn index(&self) -> u32 {
- self.index
+ self.vid.as_u32()
}
#[inline]
fn from_index(i: u32) -> Self {
- ty::ConstVid { index: i, phantom: PhantomData }
+ ConstVidKey::from(ty::ConstVid::from_u32(i))
}
fn tag() -> &'static str {
- "ConstVid"
+ "ConstVidKey"
}
}
@@ -224,17 +236,29 @@ impl<'tcx> UnifyValue for EffectVarValue<'tcx> {
}
}
-impl<'tcx> UnifyKey for ty::EffectVid<'tcx> {
+#[derive(PartialEq, Copy, Clone, Debug)]
+pub struct EffectVidKey<'tcx> {
+ pub vid: ty::EffectVid,
+ pub phantom: PhantomData<EffectVarValue<'tcx>>,
+}
+
+impl<'tcx> From<ty::EffectVid> for EffectVidKey<'tcx> {
+ fn from(vid: ty::EffectVid) -> Self {
+ EffectVidKey { vid, phantom: PhantomData }
+ }
+}
+
+impl<'tcx> UnifyKey for EffectVidKey<'tcx> {
type Value = Option<EffectVarValue<'tcx>>;
#[inline]
fn index(&self) -> u32 {
- self.index
+ self.vid.as_u32()
}
#[inline]
fn from_index(i: u32) -> Self {
- ty::EffectVid { index: i, phantom: PhantomData }
+ EffectVidKey::from(ty::EffectVid::from_u32(i))
}
fn tag() -> &'static str {
- "EffectVid"
+ "EffectVidKey"
}
}