summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_type_ir/src/lib.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 18:31:44 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 18:31:44 +0000
commitc23a457e72abe608715ac76f076f47dc42af07a5 (patch)
tree2772049aaf84b5c9d0ed12ec8d86812f7a7904b6 /compiler/rustc_type_ir/src/lib.rs
parentReleasing progress-linux version 1.73.0+dfsg1-1~progress7.99u1. (diff)
downloadrustc-c23a457e72abe608715ac76f076f47dc42af07a5.tar.xz
rustc-c23a457e72abe608715ac76f076f47dc42af07a5.zip
Merging upstream version 1.74.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'compiler/rustc_type_ir/src/lib.rs')
-rw-r--r--compiler/rustc_type_ir/src/lib.rs48
1 files changed, 22 insertions, 26 deletions
diff --git a/compiler/rustc_type_ir/src/lib.rs b/compiler/rustc_type_ir/src/lib.rs
index b0f8ea7a0..83401b65c 100644
--- a/compiler/rustc_type_ir/src/lib.rs
+++ b/compiler/rustc_type_ir/src/lib.rs
@@ -6,7 +6,7 @@
#![feature(unwrap_infallible)]
#![deny(rustc::untranslatable_diagnostic)]
#![deny(rustc::diagnostic_outside_of_impl)]
-#![cfg_attr(not(bootstrap), allow(internal_features))]
+#![allow(internal_features)]
#[macro_use]
extern crate bitflags;
@@ -41,7 +41,12 @@ pub trait HashStableContext {}
pub trait Interner: Sized {
type AdtDef: Clone + Debug + Hash + Ord;
- type GenericArgsRef: Clone + DebugWithInfcx<Self> + Hash + Ord;
+ type GenericArgsRef: Clone
+ + DebugWithInfcx<Self>
+ + Hash
+ + Ord
+ + IntoIterator<Item = Self::GenericArg>;
+ type GenericArg: Clone + DebugWithInfcx<Self> + Hash + Ord;
type DefId: Clone + Debug + Hash + Ord;
type Binder<T>;
type Ty: Clone + DebugWithInfcx<Self> + Hash + Ord;
@@ -294,6 +299,9 @@ bitflags! {
/// Does this have `Generator` or `GeneratorWitness`?
const HAS_TY_GENERATOR = 1 << 23;
+
+ /// Does this have any binders with bound vars (e.g. that need to be anonymized)?
+ const HAS_BINDER_VARS = 1 << 24;
}
}
@@ -574,16 +582,16 @@ rustc_index::newtype_index! {
pub struct TyVid {}
}
-/// An **int**egral (`u32`, `i32`, `usize`, etc.) type **v**ariable **ID**.
-#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Encodable, Decodable)]
-pub struct IntVid {
- pub index: u32,
+rustc_index::newtype_index! {
+ /// An **int**egral (`u32`, `i32`, `usize`, etc.) type **v**ariable **ID**.
+ #[debug_format = "?{}i"]
+ pub struct IntVid {}
}
-/// An **float**ing-point (`f32` or `f64`) type **v**ariable **ID**.
-#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Encodable, Decodable)]
-pub struct FloatVid {
- pub index: u32,
+rustc_index::newtype_index! {
+ /// A **float**ing-point (`f32` or `f64`) type **v**ariable **ID**.
+ #[debug_format = "?{}f"]
+ pub struct FloatVid {}
}
/// A placeholder for a type that hasn't been inferred yet.
@@ -645,11 +653,11 @@ impl UnifyKey for IntVid {
type Value = Option<IntVarValue>;
#[inline] // make this function eligible for inlining - it is quite hot.
fn index(&self) -> u32 {
- self.index
+ self.as_u32()
}
#[inline]
fn from_index(i: u32) -> IntVid {
- IntVid { index: i }
+ IntVid::from_u32(i)
}
fn tag() -> &'static str {
"IntVid"
@@ -662,11 +670,11 @@ impl UnifyKey for FloatVid {
type Value = Option<FloatVarValue>;
#[inline]
fn index(&self) -> u32 {
- self.index
+ self.as_u32()
}
#[inline]
fn from_index(i: u32) -> FloatVid {
- FloatVid { index: i }
+ FloatVid::from_u32(i)
}
fn tag() -> &'static str {
"FloatVid"
@@ -770,18 +778,6 @@ impl fmt::Debug for FloatVarValue {
}
}
-impl fmt::Debug for IntVid {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(f, "?{}i", self.index)
- }
-}
-
-impl fmt::Debug for FloatVid {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- write!(f, "?{}f", self.index)
- }
-}
-
impl fmt::Debug for Variance {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_str(match *self {