pub struct InterpreterFrame {
pub code: PyRef<PyCode>,
pub func_obj: Option<PyObjectRef>,
pub locals: FrameLocals,
pub globals: PyDictRef,
pub builtins: PyObjectRef,
pub lasti: PyAtomic<u32>,
pub trace: PyMutex<PyObjectRef>,
pub trace_lines: PyMutex<bool>,
pub trace_opcodes: PyMutex<bool>,
pub temporary_refs: PyMutex<Vec<PyObjectRef>>,
pub generator: PyAtomicBorrow,
/* private fields */
}Expand description
Lightweight execution frame. Not a PyObject.
Analogous to CPython’s _PyInterpreterFrame.
Currently always embedded inside a Frame PyObject via FrameUnsafeCell.
In future PRs this will be usable independently for normal function calls
(allocated on the Rust stack + DataStack), eliminating PyObject overhead.
Fields§
§code: PyRef<PyCode>§func_obj: Option<PyObjectRef>§locals: FrameLocals§globals: PyDictRef§builtins: PyObjectRef§lasti: PyAtomic<u32>index of last instruction ran
trace: PyMutex<PyObjectRef>tracer function for this frame (usually is None)
trace_lines: PyMutex<bool>§trace_opcodes: PyMutex<bool>§temporary_refs: PyMutex<Vec<PyObjectRef>>§generator: PyAtomicBorrowBack-reference to owning generator/coroutine/async generator. Borrowed reference (not ref-counted) to avoid Generator↔Frame cycle. Cleared by the generator’s Drop impl.
Auto Trait Implementations§
impl !Freeze for InterpreterFrame
impl !RefUnwindSafe for InterpreterFrame
impl !Send for InterpreterFrame
impl !Sync for InterpreterFrame
impl Unpin for InterpreterFrame
impl UnsafeUnpin for InterpreterFrame
impl !UnwindSafe for InterpreterFrame
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