Struct rustc_const_eval::interpret::Frame [−][src]
pub struct Frame<'mir, 'tcx, Tag: Provenance = AllocId, Extra = ()> {
pub body: &'mir Body<'tcx>,
pub instance: Instance<'tcx>,
pub extra: Extra,
pub return_to_block: StackPopCleanup,
pub return_place: Option<PlaceTy<'tcx, Tag>>,
pub locals: IndexVec<Local, LocalState<'tcx, Tag>>,
tracing_span: SpanGuard,
pub(super) loc: Result<Location, Span>,
}
Expand description
A stack frame.
Fields
body: &'mir Body<'tcx>
The MIR for the function called on this frame.
instance: Instance<'tcx>
The def_id and substs of the current function.
extra: Extra
Extra data for the machine.
return_to_block: StackPopCleanup
Work to perform when returning from this function.
return_place: Option<PlaceTy<'tcx, Tag>>
The location where the result of the current stack frame should be written to, and its layout in the caller.
locals: IndexVec<Local, LocalState<'tcx, Tag>>
The list of locals for this stack frame, stored in order as
[return_ptr, arguments..., variables..., temporaries...]
.
The locals are stored as Option<Value>
s.
None
represents a local that is currently dead, while a live local
can either directly contain Scalar
or refer to some part of an Allocation
.
tracing_span: SpanGuard
The span of the tracing
crate is stored here.
When the guard is dropped, the span is exited. This gives us
a full stack trace on all tracing statements.
loc: Result<Location, Span>
If this is Err
, we are not currently executing any particular statement in
this frame (can happen e.g. during frame initialization, and during unwinding on
frames without cleanup code).
We basically abuse Result
as Either
.
Implementations
Get the current location within the Frame.
If this is Err
, we are not currently executing any particular statement in
this frame (can happen e.g. during frame initialization, and during unwinding on
frames without cleanup code).
We basically abuse Result
as Either
.
Used by priroda.
Return the SourceInfo
of the current instruction.
Trait Implementations
impl<'ctx, 'mir, 'tcx, Tag: Provenance, Extra> HashStable<StableHashingContext<'ctx>> for Frame<'mir, 'tcx, Tag, Extra> where
Extra: HashStable<StableHashingContext<'ctx>>,
Tag: HashStable<StableHashingContext<'ctx>>,
impl<'ctx, 'mir, 'tcx, Tag: Provenance, Extra> HashStable<StableHashingContext<'ctx>> for Frame<'mir, 'tcx, Tag, Extra> where
Extra: HashStable<StableHashingContext<'ctx>>,
Tag: HashStable<StableHashingContext<'ctx>>,
Auto Trait Implementations
impl<'mir, 'tcx, Tag = AllocId, Extra = ()> !RefUnwindSafe for Frame<'mir, 'tcx, Tag, Extra>
impl<'mir, 'tcx, Tag, Extra> Unpin for Frame<'mir, 'tcx, Tag, Extra> where
Extra: Unpin,
Tag: Unpin,
'tcx: 'mir,
impl<'mir, 'tcx, Tag = AllocId, Extra = ()> !UnwindSafe for Frame<'mir, 'tcx, Tag, Extra>
Blanket Implementations
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.