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> Filterable for T
impl<T> Filterable for T
Source§fn filterable(
self,
filter_name: &'static str,
) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>
fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(DataRequest<'_>) -> bool>
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,
impl<T> MaybeSendSync for T
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.