pub struct CallFrame {
pub return_ip: usize,
pub base_pointer: usize,
pub locals_count: usize,
pub function_id: Option<u16>,
pub upvalues: Option<Vec<u64>>,
pub blob_hash: Option<FunctionHash>,
pub closure_heap_bits: Option<u64>,
pub closure_heap_kind: Option<NativeKind>,
}Expand description
Call frame for function calls
Fields§
§return_ip: usizeReturn address
base_pointer: usizeBase pointer into the unified value stack where this frame’s locals start
locals_count: usizeNumber of locals
function_id: Option<u16>Function index
upvalues: Option<Vec<u64>>Upvalues captured by this closure (None for regular functions).
SURFACE (phase-2c): the legacy shape_value::Upvalue carrier was
deleted during the strict-typing bulldozer (the v1 ValueWord-tagged
closure-capture word). The replacement is the v2 typed closure
surface (shape_value::v2::closure_raw::OwnedClosureBlock /
ClosureLayout), but the wiring through CallFrame is part of
the §2.7.8 / Q10 cell-storage extension scheduled for
B6-variables-loadptr / B7-closure-cells. Until then this field
is a Vec<u64> of raw-bit captures, matching the existing layout
in closure_raw::ClosureCell. Consumers in
executor/variables/mod.rs, executor/gc_integration.rs,
executor/state_builtins/introspection.rs, and crates/shape-vm/ src/remote.rs are pre-existing Wave-α-broken and migrate together
with this surface — see ADR-006 §2.7.4 deferral pattern.
blob_hash: Option<FunctionHash>Content hash of the function blob being executed (for content-addressed state capture).
None for programs compiled without content-addressed metadata.
closure_heap_bits: Option<u64>WB2.3 retain-on-read: optional owning ValueWord bits for the
closure HeapValue that backs this frame’s upvalues. When the
frame is a closure call, CaptureKind::OwnedMutable / Shared
captures in upvalues are raw *mut ValueWord / *const SharedCell pointer bits into this block’s allocation — the
frame must hold this share so the block outlives the callee’s
pointer dereferences.
None for regular function calls and host-closure calls.
Released via drop_with_kind(bits, kind) on frame-pop (see
op_return / op_return_value cleanup) using the lockstep
closure_heap_kind companion below.
closure_heap_kind: Option<NativeKind>ADR-006 §2.7.8 / Q10 — lockstep NativeKind companion for
closure_heap_bits. Both fields are Some together or None
together at every observable boundary; mixed states are a bug.
When closure_heap_bits = Some(bits), this carries the
NativeKind that the teardown path (op_return /
op_return_value) feeds into drop_with_kind(bits, kind) —
replacing the forbidden vw_drop(bits) (§2.7.7 #8) and the
forbidden Bool-default fallback (§2.7.7 #9). For closure calls
the kind is NativeKind::Ptr(HeapKind::Closure) (the
closure_heap_bits always come from a TAG_HEAP ValueWord
pointing to a HeapValue::ClosureRaw).
Trait Implementations§
Auto Trait Implementations§
impl Freeze for CallFrame
impl RefUnwindSafe for CallFrame
impl Send for CallFrame
impl Sync for CallFrame
impl Unpin for CallFrame
impl UnsafeUnpin for CallFrame
impl UnwindSafe for CallFrame
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> 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 more