Struct chalk_solve::rust_ir::CoroutineInputOutputDatum

source ·
pub struct CoroutineInputOutputDatum<I: Interner> {
    pub resume_type: Ty<I>,
    pub yield_type: Ty<I>,
    pub return_type: Ty<I>,
    pub upvars: Vec<Ty<I>>,
}
Expand description

The nested types for a coroutine. This always appears inside a CoroutineDatum

Fields§

§resume_type: Ty<I>

The coroutine resume type - a value of this type is supplied by the caller when resuming the coroutine. Currently, this plays no rule in goal resolution.

§yield_type: Ty<I>

The coroutine yield type - a value of this type is supplied by the coroutine during a yield. Currently, this plays no role in goal resolution.

§return_type: Ty<I>

The coroutine return type - a value of this type is supplied by the coroutine when it returns. Currently, this plays no role in goal resolution

§upvars: Vec<Ty<I>>

The upvars stored by the coroutine. These represent types captured from the coroutine’s environment, and are stored across all yields. These types (along with the witness types) are considered ‘constituent types’ for the purposes of determining auto trait implementations - that its, a coroutine impls an auto trait A iff all of its constituent types implement A.

Trait Implementations§

source§

impl<I: Clone + Interner> Clone for CoroutineInputOutputDatum<I>

source§

fn clone(&self) -> CoroutineInputOutputDatum<I>

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<I: Debug + Interner> Debug for CoroutineInputOutputDatum<I>

source§

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

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

impl<I: Interner> HasInterner for CoroutineInputOutputDatum<I>

§

type Interner = I

The interner associated with the type.
source§

impl<I: Hash + Interner> Hash for CoroutineInputOutputDatum<I>

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<I: PartialEq + Interner> PartialEq for CoroutineInputOutputDatum<I>

source§

fn eq(&self, other: &CoroutineInputOutputDatum<I>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<I: Interner> TypeFoldable<I> for CoroutineInputOutputDatum<I>

source§

fn try_fold_with<E>( self, folder: &mut dyn FallibleTypeFolder<I, Error = E>, outer_binder: DebruijnIndex, ) -> Result<Self, E>

Apply the given folder folder to self; binders is the number of binders that are in scope when beginning the folder. Typically binders starts as 0, but is adjusted when we encounter Binders<T> in the IR or other similar constructs.
source§

fn fold_with( self, folder: &mut dyn TypeFolder<I, Error = Infallible>, outer_binder: DebruijnIndex, ) -> Self

A convenient alternative to try_fold_with for use with infallible folders. Do not override this method, to ensure coherence with try_fold_with.
source§

impl<I: Eq + Interner> Eq for CoroutineInputOutputDatum<I>

source§

impl<I: Interner> StructuralPartialEq for CoroutineInputOutputDatum<I>

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> Cast for T

source§

fn cast<U>(self, interner: <U as HasInterner>::Interner) -> U
where Self: CastTo<U>, U: HasInterner,

Cast a value to type U using CastTo.
source§

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

source§

default 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.

§

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, I> Shift<I> for T
where T: TypeFoldable<I>, I: Interner,

source§

fn shifted_in(self, interner: I) -> T

Shifts this term in one level of binders.
source§

fn shifted_in_from(self, interner: I, source_binder: DebruijnIndex) -> T

Shifts a term valid at outer_binder so that it is valid at the innermost binder. See DebruijnIndex::shifted_in_from for a detailed explanation.
source§

fn shifted_out_to( self, interner: I, target_binder: DebruijnIndex, ) -> Result<T, NoSolution>

Shifts a term valid at the innermost binder so that it is valid at outer_binder. See DebruijnIndex::shifted_out_to for a detailed explanation.
source§

fn shifted_out(self, interner: I) -> Result<T, NoSolution>

Shifts this term out one level of binders.
source§

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

§

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>,

§

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>,

§

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.
§

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