pub struct PlaceTy<'tcx, Prov: Provenance = CtfeProvenance> {
place: Place<Prov>,
pub layout: TyAndLayout<'tcx>,
}Expand description
An evaluated place, together with its type.
This may reference a stack frame by its index, so PlaceTy should generally not be kept around
for longer than a single operation. Popping and then pushing a stack frame can make PlaceTy
point to the wrong destination. If the interpreter has multiple stacks, stack switching will
also invalidate a PlaceTy.
Fields§
§place: Place<Prov>§layout: TyAndLayout<'tcx>Implementations§
Source§impl<'tcx, Prov: Provenance> PlaceTy<'tcx, Prov>
impl<'tcx, Prov: Provenance> PlaceTy<'tcx, Prov>
pub(super) fn place(&self) -> &Place<Prov>
Sourcepub fn as_mplace_or_local(
&self,
) -> Either<MPlaceTy<'tcx, Prov>, (Local, Option<Size>, usize, TyAndLayout<'tcx>)>
pub fn as_mplace_or_local( &self, ) -> Either<MPlaceTy<'tcx, Prov>, (Local, Option<Size>, usize, TyAndLayout<'tcx>)>
A place is either an mplace or some local.
Note that the return value can be different even for logically identical places!
Specifically, if a local is stored in-memory, this may return Local or MPlaceTy
depending on how the place was constructed. In other words, seeing Local here does not
imply that this place does not point to memory. Every caller must therefore always handle
both cases.
pub fn assert_mem_place(&self) -> MPlaceTy<'tcx, Prov>
Trait Implementations§
Source§impl<Prov: Provenance> Debug for PlaceTy<'_, Prov>
impl<Prov: Provenance> Debug for PlaceTy<'_, Prov>
Source§impl<'tcx, Prov: Provenance> Projectable<'tcx, Prov> for PlaceTy<'tcx, Prov>
impl<'tcx, Prov: Provenance> Projectable<'tcx, Prov> for PlaceTy<'tcx, Prov>
Source§fn layout(&self) -> TyAndLayout<'tcx>
fn layout(&self) -> TyAndLayout<'tcx>
Source§fn meta(&self) -> MemPlaceMeta<Prov>
fn meta(&self) -> MemPlaceMeta<Prov>
Source§fn offset_with_meta<M: Machine<'tcx, Provenance = Prov>>(
&self,
offset: Size,
mode: OffsetMode,
meta: MemPlaceMeta<Prov>,
layout: TyAndLayout<'tcx>,
ecx: &InterpCx<'tcx, M>,
) -> InterpResult<'tcx, Self>
fn offset_with_meta<M: Machine<'tcx, Provenance = Prov>>( &self, offset: Size, mode: OffsetMode, meta: MemPlaceMeta<Prov>, layout: TyAndLayout<'tcx>, ecx: &InterpCx<'tcx, M>, ) -> InterpResult<'tcx, Self>
Source§fn to_op<M: Machine<'tcx, Provenance = Prov>>(
&self,
ecx: &InterpCx<'tcx, M>,
) -> InterpResult<'tcx, OpTy<'tcx, M::Provenance>>
fn to_op<M: Machine<'tcx, Provenance = Prov>>( &self, ecx: &InterpCx<'tcx, M>, ) -> InterpResult<'tcx, OpTy<'tcx, M::Provenance>>
OpTy. This might be an irreversible transformation, but is useful for
reading from this thing.Source§fn len<M: Machine<'tcx, Provenance = Prov>>(
&self,
ecx: &InterpCx<'tcx, M>,
) -> InterpResult<'tcx, u64>
fn len<M: Machine<'tcx, Provenance = Prov>>( &self, ecx: &InterpCx<'tcx, M>, ) -> InterpResult<'tcx, u64>
fn offset<M: Machine<'tcx, Provenance = Prov>>( &self, offset: Size, layout: TyAndLayout<'tcx>, ecx: &InterpCx<'tcx, M>, ) -> InterpResult<'tcx, Self>
Source§fn transmute<M: Machine<'tcx, Provenance = Prov>>(
&self,
layout: TyAndLayout<'tcx>,
ecx: &InterpCx<'tcx, M>,
) -> InterpResult<'tcx, Self>
fn transmute<M: Machine<'tcx, Provenance = Prov>>( &self, layout: TyAndLayout<'tcx>, ecx: &InterpCx<'tcx, M>, ) -> InterpResult<'tcx, Self>
OpTy or ImmTy, the new layout must have almost the same ABI as the old one
(only changing the valid_range is allowed and turning integers into pointers).Auto Trait Implementations§
impl<'tcx, Prov> DynSend for PlaceTy<'tcx, Prov>where
Prov: DynSend,
impl<'tcx, Prov> DynSync for PlaceTy<'tcx, Prov>where
Prov: DynSync,
impl<'tcx, Prov> Freeze for PlaceTy<'tcx, Prov>where
Prov: Freeze,
impl<'tcx, Prov = CtfeProvenance> !RefUnwindSafe for PlaceTy<'tcx, Prov>
impl<'tcx, Prov> Send for PlaceTy<'tcx, Prov>where
Prov: Send,
impl<'tcx, Prov> Sync for PlaceTy<'tcx, Prov>where
Prov: Sync,
impl<'tcx, Prov> Unpin for PlaceTy<'tcx, Prov>where
Prov: Unpin,
impl<'tcx, Prov = CtfeProvenance> !UnwindSafe for PlaceTy<'tcx, Prov>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
impl<Tcx, T> Value<Tcx> for Twhere
Tcx: DepContext,
default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
Source§fn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
impl<T> ErasedDestructor for Twhere
T: 'static,
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.