flux_middle::rty

Struct Ty

Source
pub struct Ty(Interned<TyKind>);

Tuple Fields§

§0: Interned<TyKind>

Implementations§

Source§

impl Ty

Source

pub fn shallow_canonicalize(&self) -> CanonicalTy

Hoist existentials and predicates inside the type stopping when encountering the first type constructor.

Source§

impl Ty

Source

pub fn kind(&self) -> &TyKind

Source

pub fn trait_object_dummy_self() -> Ty

Dummy type used for the Self of a TraitRef created when converting a trait object, and which gets removed in ExistentialTraitRef. This type must not appear anywhere in other converted types and must be a valid rustc type (i.e., we must be able to call to_rustc on it). TyKind::Infer(TyVid(0)) does the job, with the caveat that we must skip 0 when generating TyKind::Infer for “type holes”.

Source

pub fn dynamic( preds: impl Into<List<Binder<ExistentialPredicate>>>, region: Region, ) -> Ty

Source

pub fn strg_ref(re: Region, path: Path, ty: Ty) -> Ty

Source

pub fn ptr(pk: impl Into<PtrKind>, path: impl Into<Path>) -> Ty

Source

pub fn constr(p: impl Into<Expr>, ty: Ty) -> Ty

Source

pub fn uninit() -> Ty

Source

pub fn indexed(bty: BaseTy, idx: impl Into<Expr>) -> Ty

Source

pub fn exists(ty: Binder<Ty>) -> Ty

Source

pub fn exists_with_constr(bty: BaseTy, pred: Expr) -> Ty

Source

pub fn discr(adt_def: AdtDef, place: Place) -> Ty

Source

pub fn unit() -> Ty

Source

pub fn bool() -> Ty

Source

pub fn int(int_ty: IntTy) -> Ty

Source

pub fn uint(uint_ty: UintTy) -> Ty

Source

pub fn param(param_ty: ParamTy) -> Ty

Source

pub fn downcast( adt: AdtDef, args: GenericArgs, ty: Ty, variant: VariantIdx, fields: List<Ty>, ) -> Ty

Source

pub fn blocked(ty: Ty) -> Ty

Source

pub fn str() -> Ty

Source

pub fn char() -> Ty

Source

pub fn float(float_ty: FloatTy) -> Ty

Source

pub fn mk_ref(region: Region, ty: Ty, mutbl: Mutability) -> Ty

Source

pub fn mk_slice(ty: Ty) -> Ty

Source

pub fn mk_box( genv: GlobalEnv<'_, '_>, deref_ty: Ty, alloc_ty: Ty, ) -> QueryResult<Ty>

Source

pub fn mk_box_with_default_alloc( genv: GlobalEnv<'_, '_>, deref_ty: Ty, ) -> QueryResult<Ty>

Source

pub fn tuple(tys: impl Into<List<Ty>>) -> Ty

Source

pub fn array(ty: Ty, c: Const) -> Ty

Source

pub fn closure(did: DefId, tys: impl Into<List<Ty>>, args: &GenericArgs) -> Ty

Source

pub fn coroutine(did: DefId, resume_ty: Ty, upvar_tys: List<Ty>) -> Ty

Source

pub fn never() -> Ty

Source

pub fn infer(vid: TyVid) -> Ty

Source

pub fn unconstr(&self) -> (Ty, Expr)

Source

pub fn unblocked(&self) -> Ty

Source

pub fn is_integral(&self) -> bool

Whether the type is an int or a uint

Source

pub fn is_bool(&self) -> bool

Whether the type is a bool

Source

pub fn is_char(&self) -> bool

Whether the type is a char

Source

pub fn is_uninit(&self) -> bool

Source

pub fn is_box(&self) -> bool

Source

pub fn is_struct(&self) -> bool

Source

pub fn is_array(&self) -> bool

Source

pub fn is_slice(&self) -> bool

Source

pub fn as_bty_skipping_existentials(&self) -> Option<&BaseTy>

Source

pub fn expect_discr(&self) -> (&AdtDef, &Place)

Source

pub fn expect_adt(&self) -> (&AdtDef, &[GenericArg], &Expr)

Source

pub(crate) fn expect_tuple(&self) -> &[Ty]

Trait Implementations§

Source§

impl Clone for Ty

Source§

fn clone(&self) -> Ty

Returns a copy of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Ty

Source§

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

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

impl<__D: TyDecoder> Decodable<__D> for Ty

Source§

fn decode(__decoder: &mut __D) -> Self

Source§

impl<__E: TyEncoder> Encodable<__E> for Ty

Source§

fn encode(&self, __encoder: &mut __E)

Source§

impl Hash for Ty

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 PartialEq for Ty

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Pretty for Ty

Source§

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

Source§

fn default_cx(tcx: TyCtxt<'_>) -> PrettyCx<'_>

Source§

impl SliceInternable for Ty

Source§

fn storage() -> &'static InternStorage<[Self]>

Source§

impl<'tcx> ToRustc<'tcx> for Ty

Source§

type T = Ty<'tcx>

Source§

fn to_rustc(&self, tcx: TyCtxt<'tcx>) -> Self::T

Source§

impl TypeFoldable for Ty

Source§

fn try_fold_with<F: FallibleTypeFolder>( &self, folder: &mut F, ) -> Result<Self, F::Error>

Source§

fn fold_with<F: TypeFolder>(&self, folder: &mut F) -> Self

Source§

fn normalize_projections<'tcx>( &self, genv: GlobalEnv<'_, 'tcx>, infcx: &InferCtxt<'tcx>, callsite_def_id: DefId, ) -> QueryResult<Self>

Source§

fn normalize(&self, defns: &SpecFuncDefns) -> Self

Normalize expressions by applying beta reductions for tuples and lambda abstractions.
Source§

fn replace_holes( &self, f: impl FnMut(&[BoundVariableKinds], HoleKind) -> Expr, ) -> Self

Replaces all holes with the result of calling a closure. The closure takes a list with all the layers of bound variables at the point the hole was found. Each layer corresponds to the list of bound variables at that level. The list is ordered from outermost to innermost binder, i.e., the last element is the binder closest to the hole.
Source§

fn with_holes(&self) -> Self

Remove all refinements and turn each underlying BaseTy into a TyKind::Exists with a TyKind::Constr and a hole. For example, Vec<{v. i32[v] | v > 0}>[n] becomes {n. Vec<{v. i32[v] | *}>[n] | *}.
Source§

fn replace_evars(&self, evars: &EVarSol) -> Self

Source§

fn shift_in_escaping(&self, amount: u32) -> Self

Source§

fn shift_out_escaping(&self, amount: u32) -> Self

Source§

fn erase_regions(&self) -> Self

Source§

impl TypeSuperFoldable for Ty

Source§

fn try_super_fold_with<F: FallibleTypeFolder>( &self, folder: &mut F, ) -> Result<Ty, F::Error>

Source§

fn super_fold_with<F: TypeFolder>(&self, folder: &mut F) -> Self

Source§

impl TypeSuperVisitable for Ty

Source§

impl TypeVisitable for Ty

Source§

fn visit_with<V: TypeVisitor>(&self, visitor: &mut V) -> ControlFlow<V::BreakTy>

Source§

fn has_escaping_bvars(&self) -> bool

Source§

fn has_escaping_bvars_at_or_above(&self, binder: DebruijnIndex) -> bool

Returns true if self has any late-bound vars that are either bound by binder or bound by some binder outside of binder. If binder is ty::INNERMOST, this indicates whether there are any late-bound vars that appear free.
Source§

fn fvars(&self) -> FxHashSet<Name>

Returns the set of all free variables. For example, Vec<i32[n]>{v : v > m} returns {n, m}.
Source§

impl Eq for Ty

Source§

impl StructuralPartialEq for Ty

Auto Trait Implementations§

§

impl Freeze for Ty

§

impl RefUnwindSafe for Ty

§

impl Send for Ty

§

impl Sync for Ty

§

impl Unpin for Ty

§

impl UnwindSafe for Ty

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, dst: *mut T)

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

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, 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<P> IntoQueryParam<P> for P

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.