struct CallFrame {
lambda: Rc<Lambda>,
upvalues: Rc<Upvalues>,
ip: CodeIdx,
stack_offset: usize,
}
Fields§
§lambda: Rc<Lambda>
The lambda currently being executed.
upvalues: Rc<Upvalues>
Optional captured upvalues of this frame (if a thunk or closure if being evaluated).
ip: CodeIdx
Instruction pointer to the instruction currently being executed.
stack_offset: usize
Stack offset, i.e. the frames “view” into the VM’s full stack.
Implementations§
source§impl CallFrame
impl CallFrame
sourcefn upvalue(&self, idx: UpvalueIdx) -> &Value
fn upvalue(&self, idx: UpvalueIdx) -> &Value
Retrieve an upvalue from this frame at the given index.
sourcefn inc_ip(&mut self) -> Op
fn inc_ip(&mut self) -> Op
Increment this frame’s instruction pointer and return the operation that the pointer moved past.
sourcefn read_uvarint(&mut self) -> u64
fn read_uvarint(&mut self) -> u64
Read a varint-encoded operand and return it. The frame pointer is incremented internally.
sourcepub fn error<T, IO>(&self, vm: &VM<'_, IO>, kind: ErrorKind) -> Result<T, Error>
pub fn error<T, IO>(&self, vm: &VM<'_, IO>, kind: ErrorKind) -> Result<T, Error>
Construct an error result from the given ErrorKind and the source span of the current instruction.
sourcepub fn current_span(&self) -> Span
pub fn current_span(&self) -> Span
Returns the current span. This is potentially expensive and should only be used when actually constructing an error or warning.
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 !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
Mutably borrows from an owned value. Read more
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>
Converts
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>
Converts
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