Skip to main content

TyKind

Enum TyKind 

Source
pub enum TyKind {
Show 15 variants Scalar(ScalarTy), Array(Ty, ConstantExpr, Option<TraitRef>), Slice(Ty, Option<TraitRef>), Adt(TypeDeclRef), Ref(Region, Ty, RefKind), RawPtr(Ty, RefKind), FnDef(RegionBinder<FnPtr>), FnPtr(RegionBinder<FunSig>), DynTrait(DynPredicate), Pattern(Ty, TypePattern), Never, TypeVar(TypeDbVar), TraitType(TraitRef, AssocTypeId, GenericArgs), PtrMetadata(Ty), Error(String),
}
Expand description

A type.

This is interned as Ty, making it cheap to clone and compare.

Variants§

§

Scalar(ScalarTy)

A scalar (integers, floats, char, or bool).

§

Array(Ty, ConstantExpr, Option<TraitRef>)

An array [T; N]. The third field is the proof that T: Sized; it is absent with --hide-marker-traits.

§

Slice(Ty, Option<TraitRef>)

A slice [T]. The second field is the proof that T: Sized; it is absent with --hide-marker-traits.

§

Adt(TypeDeclRef)

An ADT: structs, enums, unions, as well as tuples and str.

§

Ref(Region, Ty, RefKind)

A reference: &T or &mut T.

§

RawPtr(Ty, RefKind)

A raw pointer.

§

FnDef(RegionBinder<FnPtr>)

The unique type associated with each function item. Each function item is given a unique type that has the function’s early-bound generics. This type is not generally nameable in Rust; it’s a ZST (there’s a unique value), and a value of that type can be cast to a function pointer or passed to functions that expect FnOnce/FnMut/Fn parameters.

There’s a binder here because charon function items take both early and late-bound lifetimes as arguments; given that the type we’re pointing to is polymorphic in the late-bound variables, we need to bind them here.

// `'a` is early-bound, 'b is late-bound.
fn foo<'a, 'b>(x: &'a u32, y: &'b u32)
where u32: 'b
{}

For rustc, there’s a ZST foo<'a>, that can be cast to a for<'b> fn(&'a u32, &'b u32) function pointer. For charon, there’s an item foo<'a, 'b>, and the FnDef item that corresponds to rustc’s foo<'a> is represented as FnDef(for<'b> foo<'a, 'b>).

§

FnPtr(RegionBinder<FunSig>)

Function pointer type. This is a literal pointer to a region of memory that contains a callable function.

A function pointer can have lifetime generics, e.g. for<'a> fn(&'a mut u32) -> &'a u32, hence the binder.

§

DynTrait(DynPredicate)

dyn Trait: erased value known to implement Trait. A pointer to it will carry a vtable pointer that stores the methods that can be called on this value.

§

Pattern(Ty, TypePattern)

A pattern type: a type that is representationally identical to its base type, except the only valid values are the ones that match the pattern.

§

Never

The never type, the canonical uninhabited type.

§

TypeVar(TypeDbVar)

A type variable.

§

TraitType(TraitRef, AssocTypeId, GenericArgs)

A trait associated type: <T as Trait>::AssocType<Args>.

§

PtrMetadata(Ty)

The type of pointer metadata for the given type; e.g. for [T], this type is usize. The way to write this type in Rust is <X as core::ptr::Pointee>::Metadata.

§

Error(String)

A type that could not be computed or was incorrect.

Implementations§

Source§

impl TyKind

Source

pub fn variant_name(&self) -> &'static str

Source§

impl TyKind

Source

pub fn is_scalar(&self) -> bool

Source

pub fn is_array(&self) -> bool

Source

pub fn is_slice(&self) -> bool

Source

pub fn is_adt(&self) -> bool

Source

pub fn is_ref(&self) -> bool

Source

pub fn is_raw_ptr(&self) -> bool

Source

pub fn is_fn_def(&self) -> bool

Source

pub fn is_fn_ptr(&self) -> bool

Source

pub fn is_dyn_trait(&self) -> bool

Source

pub fn is_pattern(&self) -> bool

Source

pub fn is_never(&self) -> bool

Source

pub fn is_type_var(&self) -> bool

Source

pub fn is_trait_type(&self) -> bool

Source

pub fn is_ptr_metadata(&self) -> bool

Source

pub fn is_error(&self) -> bool

Source§

impl TyKind

Source

pub fn as_scalar(&self) -> Option<&ScalarTy>

Source

pub fn as_array(&self) -> Option<(&Ty, &ConstantExpr, &Option<TraitRef>)>

Source

pub fn as_slice(&self) -> Option<(&Ty, &Option<TraitRef>)>

Source

pub fn as_adt(&self) -> Option<&TypeDeclRef>

Source

pub fn as_ref(&self) -> Option<(&Region, &Ty, &RefKind)>

Source

pub fn as_raw_ptr(&self) -> Option<(&Ty, &RefKind)>

Source

pub fn as_fn_def(&self) -> Option<&RegionBinder<FnPtr>>

Source

pub fn as_fn_ptr(&self) -> Option<&RegionBinder<FunSig>>

Source

pub fn as_dyn_trait(&self) -> Option<&DynPredicate>

Source

pub fn as_pattern(&self) -> Option<(&Ty, &TypePattern)>

Source

pub fn as_never(&self) -> Option<()>

Source

pub fn as_type_var(&self) -> Option<&TypeDbVar>

Source

pub fn as_trait_type(&self) -> Option<(&TraitRef, &AssocTypeId, &GenericArgs)>

Source

pub fn as_ptr_metadata(&self) -> Option<&Ty>

Source

pub fn as_error(&self) -> Option<&String>

Source§

impl TyKind

Source

pub fn as_scalar_mut(&mut self) -> Option<&mut ScalarTy>

Source

pub fn as_array_mut( &mut self, ) -> Option<(&mut Ty, &mut ConstantExpr, &mut Option<TraitRef>)>

Source

pub fn as_slice_mut(&mut self) -> Option<(&mut Ty, &mut Option<TraitRef>)>

Source

pub fn as_adt_mut(&mut self) -> Option<&mut TypeDeclRef>

Source

pub fn as_ref_mut(&mut self) -> Option<(&mut Region, &mut Ty, &mut RefKind)>

Source

pub fn as_raw_ptr_mut(&mut self) -> Option<(&mut Ty, &mut RefKind)>

Source

pub fn as_fn_def_mut(&mut self) -> Option<&mut RegionBinder<FnPtr>>

Source

pub fn as_fn_ptr_mut(&mut self) -> Option<&mut RegionBinder<FunSig>>

Source

pub fn as_dyn_trait_mut(&mut self) -> Option<&mut DynPredicate>

Source

pub fn as_pattern_mut(&mut self) -> Option<(&mut Ty, &mut TypePattern)>

Source

pub fn as_never_mut(&mut self) -> Option<()>

Source

pub fn as_type_var_mut(&mut self) -> Option<&mut TypeDbVar>

Source

pub fn as_trait_type_mut( &mut self, ) -> Option<(&mut TraitRef, &mut AssocTypeId, &mut GenericArgs)>

Source

pub fn as_ptr_metadata_mut(&mut self) -> Option<&mut Ty>

Source

pub fn as_error_mut(&mut self) -> Option<&mut String>

Source§

impl TyKind

Source§

impl TyKind

Source

pub fn variant_index_arity(&self) -> (u32, usize)

Source§

impl TyKind

Source

pub fn into_ty(self) -> Ty

Source

pub fn is_usize(&self) -> bool

Source

pub fn is_unsigned_scalar(&self) -> bool

Source

pub fn is_signed_scalar(&self) -> bool

Source

pub fn is_str(&self) -> bool

Source

pub fn is_box(&self) -> bool

Return true if the type is Box

Source

pub fn is_tuple(&self) -> bool

Source

pub fn as_adt_id(&self) -> Option<TypeDeclId>

Source

pub fn as_box(&self) -> Option<&Ty>

Source

pub fn as_box_mut(&mut self) -> Option<&mut Ty>

Source

pub fn builtin_deref(&self) -> Option<&Ty>

Source

pub fn builtin_deref_mut(&mut self) -> Option<&mut Ty>

Source

pub fn as_array_or_slice(&self) -> Option<&Ty>

Source

pub fn as_array_or_slice_mut(&mut self) -> Option<&mut Ty>

Trait Implementations§

Source§

impl AstVisitable for TyKind

Source§

fn drive<V: VisitAst>(&self, v: &mut V) -> ControlFlow<V::Break>

Recursively visit this type with the provided visitor. This calls the visitor’s visit_$any method if it exists, otherwise visit_inner.
Source§

fn drive_mut<V: VisitAstMut>(&mut self, v: &mut V) -> ControlFlow<V::Break>

Recursively visit this type with the provided visitor. This calls the visitor’s visit_$any method if it exists, otherwise visit_inner.
Source§

fn drive_two<V: ZipAst>(&self, other: &Self, v: &mut V) -> ControlFlow<V::Break>

Recursively visit this type with the provided visitor. This calls the visitor’s visit_$any method if it exists, otherwise visit_inner.
Source§

fn name(&self) -> &'static str

The name of the type, used for debug logging.
Source§

fn dyn_visit<T: AstVisitable>(&self, f: impl FnMut(&T))
where Self: Sized,

Visit all occurrences of that type inside self, in pre-order traversal.
Source§

fn dyn_visit_mut<T: AstVisitable>(&mut self, f: impl FnMut(&mut T))
where Self: Sized,

Visit all occurrences of that type inside self, in pre-order traversal.
Source§

impl Clone for TyKind

Source§

fn clone(&self) -> TyKind

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TyKind

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de, __State: ?Sized> DeserializeState<'de, __State> for TyKind
where ScalarTy: DeserializeState<'de, __State>, Ty: DeserializeState<'de, __State>, ConstantExpr: DeserializeState<'de, __State>, Option<TraitRef>: DeserializeState<'de, __State>, TypeDeclRef: DeserializeState<'de, __State>, Region: DeserializeState<'de, __State>, RefKind: DeserializeState<'de, __State>, RegionBinder<FnPtr>: DeserializeState<'de, __State>, RegionBinder<FunSig>: DeserializeState<'de, __State>, DynPredicate: DeserializeState<'de, __State>, TypePattern: DeserializeState<'de, __State>, TypeDbVar: DeserializeState<'de, __State>, TraitRef: DeserializeState<'de, __State>, AssocTypeId: DeserializeState<'de, __State>, GenericArgs: DeserializeState<'de, __State>, String: DeserializeState<'de, __State>,

Source§

fn deserialize_state<__D>( __state: &__State, __deserializer: __D, ) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Source§

impl<'s, V> Drive<'s, V> for TyKind
where V: Visitor + Visit<'s, ScalarTy> + Visit<'s, Ty> + Visit<'s, ConstantExpr> + Visit<'s, Option<TraitRef>> + Visit<'s, TypeDeclRef> + Visit<'s, Region> + Visit<'s, RefKind> + Visit<'s, RegionBinder<FnPtr>> + Visit<'s, RegionBinder<FunSig>> + Visit<'s, DynPredicate> + Visit<'s, TypePattern> + Visit<'s, TypeDbVar> + Visit<'s, TraitRef> + Visit<'s, AssocTypeId> + Visit<'s, GenericArgs> + Visit<'s, String>,

Source§

fn drive_inner(&'s self, visitor: &mut V) -> ControlFlow<V::Break>

Call v.visit() on the immediate contents of self.
Source§

impl<'s, V> DriveMut<'s, V> for TyKind
where V: Visitor + VisitMut<'s, ScalarTy> + VisitMut<'s, Ty> + VisitMut<'s, ConstantExpr> + VisitMut<'s, Option<TraitRef>> + VisitMut<'s, TypeDeclRef> + VisitMut<'s, Region> + VisitMut<'s, RefKind> + VisitMut<'s, RegionBinder<FnPtr>> + VisitMut<'s, RegionBinder<FunSig>> + VisitMut<'s, DynPredicate> + VisitMut<'s, TypePattern> + VisitMut<'s, TypeDbVar> + VisitMut<'s, TraitRef> + VisitMut<'s, AssocTypeId> + VisitMut<'s, GenericArgs> + VisitMut<'s, String>,

Source§

fn drive_inner_mut(&'s mut self, visitor: &mut V) -> ControlFlow<V::Break>

Call v.visit() on the immediate contents of self.
Source§

impl<'s, V> DriveTwo<'s, V> for TyKind
where V: Visitor<Break: Default> + VisitTwo<'s, ScalarTy> + VisitTwo<'s, Ty> + VisitTwo<'s, ConstantExpr> + VisitTwo<'s, Option<TraitRef>> + VisitTwo<'s, TypeDeclRef> + VisitTwo<'s, Region> + VisitTwo<'s, RefKind> + VisitTwo<'s, RegionBinder<FnPtr>> + VisitTwo<'s, RegionBinder<FunSig>> + VisitTwo<'s, DynPredicate> + VisitTwo<'s, TypePattern> + VisitTwo<'s, TypeDbVar> + VisitTwo<'s, TraitRef> + VisitTwo<'s, AssocTypeId> + VisitTwo<'s, GenericArgs> + VisitTwo<'s, String>,

Source§

fn drive_two_inner( &'s self, other: &'s Self, visitor: &mut V, ) -> ControlFlow<V::Break>

Call v.visit() on the immediate contents of self and other, if they correspond. If the values don’t match up, this returns Break(Default::default()).
Source§

impl Eq for TyKind

Source§

impl From<DeBruijnVar<TypeVarId>> for TyKind

Source§

fn from(x: TypeDbVar) -> Self

Converts to this type from the input type.
Source§

impl From<TyKind> for Ty

Source§

fn from(kind: TyKind) -> Ty

Converts to this type from the input type.
Source§

impl Hash for TyKind

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Ord for TyKind

Source§

fn cmp(&self, other: &TyKind) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for TyKind

Source§

fn eq(&self, other: &TyKind) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl PartialOrd for TyKind

Source§

fn partial_cmp(&self, other: &TyKind) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 (const: unstable) · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 (const: unstable) · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 (const: unstable) · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl<__State: ?Sized> SerializeState<__State> for TyKind
where ScalarTy: SerializeState<__State>, Ty: SerializeState<__State>, ConstantExpr: SerializeState<__State>, Option<TraitRef>: SerializeState<__State>, TypeDeclRef: SerializeState<__State>, Region: SerializeState<__State>, RefKind: SerializeState<__State>, RegionBinder<FnPtr>: SerializeState<__State>, RegionBinder<FunSig>: SerializeState<__State>, DynPredicate: SerializeState<__State>, TypePattern: SerializeState<__State>, TypeDbVar: SerializeState<__State>, TraitRef: SerializeState<__State>, AssocTypeId: SerializeState<__State>, GenericArgs: SerializeState<__State>, String: SerializeState<__State>,

Source§

fn serialize_state<__S>( &self, __state: &__State, __serializer: __S, ) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Source§

impl StructuralPartialEq for TyKind

Source§

impl TryFrom<TyKind> for TypeDbVar

Source§

type Error = ()

The type returned in the event of a conversion error.
Source§

fn try_from(e: TyKind) -> Result<Self, Self::Error>

Performs the conversion.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
Source§

impl<T> Dedup for T
where T: Mappable + Clone + Eq + Hash,

§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> HashConsable for T
where T: Hash + PartialEq + Eq + Clone + Mappable,

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Mappable for T
where T: Any + Send + Sync,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> TyVisitable for T
where T: AstVisitable,

Source§

fn visit_vars(&mut self, v: &mut impl VarsVisitor)

Visit the variables contained in self, as seen from the outside of self. This means that any variable bound inside self will be skipped, and all the seen De Bruijn indices will count from the outside of self.
Source§

fn substitute(self, generics: &GenericArgs) -> Self

Substitute the generic variables inside self by replacing them with the provided values. Note: if self is an item that comes from a TraitDecl, you must use substitute_with_self or substitute_inner_binder, otherwise you’ll get panics.
Source§

fn substitute_inner_binder(self, generics: &GenericArgs) -> Self

Substitute the generic variables inside self by replacing them with the provided values. This is appropriate when substituting an inner binder.
Source§

fn substitute_explicits(self, generics: &GenericArgs) -> Self

Substitute only the type, region and const generic args.
Source§

fn substitute_with_self( self, generics: &GenericArgs, self_ref: &TraitRefKind, ) -> Self

Substitute the generic variables as well as the TraitRefKind::SelfId trait ref.
Source§

fn substitute_with_tref(self, tref: &TraitRef) -> Self

Substitute the generic variables as well as the TraitRefKind::SelfId trait ref.
Source§

fn try_substitute_with_tref( self, tref: &TraitRef, ) -> Result<Self, GenericsMismatch>

Substitute the generic variables as well as the TraitRefKind::SelfId trait ref.
Source§

fn try_substitute( self, generics: &GenericArgs, ) -> Result<Self, GenericsMismatch>

Source§

fn try_substitute_with_self( self, generics: &GenericArgs, self_ref: &TraitRefKind, ) -> Result<Self, GenericsMismatch>

Source§

fn move_under_binder(self) -> Self

Move under one binder.
Source§

fn move_under_binders(self, depth: DeBruijnId) -> Self

Move under depth binders.
Source§

fn move_from_under_binder(self) -> Option<Self>

Move from under one binder.
Source§

fn move_from_under_binders(self, depth: DeBruijnId) -> Option<Self>

Move the value out of depth binders. Returns None if it contains a variable bound in one of these depth binders.
Source§

fn visit_db_id<B>( &mut self, f: impl FnMut(&mut DeBruijnId) -> ControlFlow<B>, ) -> ControlFlow<B>

Visit the de Bruijn ids contained in self, as seen from the outside of self. This means that any variable bound inside self will be skipped, and all the seen indices will count from the outside of self.
Source§

fn replace_erased_regions(self, f: impl FnMut() -> Region) -> Self

Replace all the erased regions by the output of the provided function. Binders levels are handled automatically.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more