Skip to main content

FrameObject

Struct FrameObject 

Source
pub struct FrameObject { /* private fields */ }

Implementations§

Source§

impl FrameObject

Source

pub fn lineno(&self) -> i32

Current line, or -1 when the linetable has no line for lasti.

Source

pub fn f_code(&self) -> PyRef<PyCode>

Source§

impl FrameObject

Source

pub fn iframe(&self) -> &InterpreterFrame

Shared access to the embedded interpreter frame. Safe to call on any reachable FrameObject: immutable fields and atomic/mutex fields are always safe to access.

Source§

impl FrameObject

Source

pub unsafe fn fastlocals(&self) -> &[Option<PyObjectRef>]

Access fastlocals immutably.

§Safety

Caller must ensure no concurrent mutable access (frame not executing, or called from the same thread during trace callback).

Source

pub unsafe fn fastlocals_mut(&self) -> &mut [Option<PyObjectRef>]

Access fastlocals mutably.

§Safety

Caller must ensure exclusive access (frame not executing).

Source

pub fn set_generator(&self, generator: &PyObject)

Store a borrowed back-reference to the owning generator/coroutine. The caller must ensure the generator outlives the frame.

Source

pub fn clear_generator(&self)

Clear the generator back-reference. Called when the generator is finalized.

Source

pub fn current_location(&self) -> SourceLocation

Source

pub fn previous_iframe(&self) -> *const InterpreterFrame

Get the previous InterpreterFrame in the chain. Returns null if the frame has been cleared (GC deallocation).

Source

pub fn previous_frame(&self) -> *const Self

Get the previous FrameObject in the chain, if any. Walks through the chain to find the next materialized frame.

Source

pub fn lasti(&self) -> u32

Source

pub fn set_lasti(&self, val: u32)

Source

pub fn locals(&self, vm: &VirtualMachine) -> PyResult<ArgMapping>

Source

pub fn locals_snapshot_cache(&self, vm: &VirtualMachine) -> PyDictRef

Return the lazily allocated dict used by APIs that must keep a frame-owned locals snapshot. Ordinary VM execution never accesses it.

Trait Implementations§

Source§

impl Debug for FrameObject

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl MaybeTraverse for FrameObject

Source§

const HAS_TRAVERSE: bool = true

if is traceable, will be used by vtable to determine
Source§

const HAS_CLEAR: bool = true

if has clear implementation for circular reference resolution (tp_clear)
Source§

fn try_traverse(&self, tracer_fn: &mut TraverseFn<'_>)

Source§

fn try_clear(&mut self, out: &mut Vec<PyObjectRef>)

Source§

impl PyClassDef for FrameObject

Source§

const NAME: &'static str = "frame"

Source§

const MODULE_NAME: Option<&'static str> = None

Source§

const TP_NAME: &'static str = "frame"

Source§

const DOC: ItemDoc = ::rustpython_vm::function::ItemDoc::NONE

Source§

const ATTR_DOCS: &'static [(&'static str, u32, u32)]

Attribute name → database span, sorted by name. (u32::MAX, 0) is an explicit empty doc.
Source§

const BASICSIZE: usize

Source§

const UNHASHABLE: bool = false

Source§

const MEMBERS: &'static [PyMemberSpec]

Source§

type Base = PyBaseObject

Source§

fn assert_member_layout()

Source§

const ITEMSIZE: usize = 0

Source§

impl PyClassImpl for FrameObject

Source§

const TP_FLAGS: PyTypeFlags

Source§

const INTERNAL_DOC: ItemDoc

Signature-bearing class doc. ItemDoc::NONE when the constructor has no signature.
Source§

const METHOD_DEFS: &'static [PyMethodDef]

Source§

fn impl_extend_class(ctx: &'static Context, class: &'static Py<PyType>)

Source§

fn extend_slots(slots: &mut PyTypeSlots)

Source§

fn extend_class(ctx: &'static Context, class: &'static Py<PyType>)
where Self: Sized,

Source§

fn make_static_type() -> PyTypeRef
where Self: StaticType + Sized,

Source§

fn make_slots() -> PyTypeSlots

Source§

impl PyPayload for FrameObject

Source§

const MAX_FREELIST: usize = 200

Maximum number of objects to keep in the freelist.
Source§

const HAS_FREELIST: bool = true

Whether this type has a freelist. Types with freelists require immediate (non-deferred) GC untracking during dealloc to prevent race conditions when the object is reused.
Source§

const NEW_REF_UNTRACKED: bool = true

Whether PyRef::new_ref skips auto-tracking this type in the GC even when it would otherwise qualify (has traverse, dict, or heap type). Such objects are created untracked and must be tracked explicitly if and when they can become part of a reference cycle. Used by FrameObject, which is created untracked and tracked lazily only on escape.
Source§

fn class(ctx: &Context) -> &'static Py<PyType>

Source§

unsafe fn freelist_push(obj: *mut PyObject) -> bool

Try to push a dead object onto this type’s freelist for reuse. Returns true if the object was stored (caller must NOT free the memory). Called after tp_clear, so the payload is a cleared husk; implementations must not rely on its pre-clear contents. Read more
Source§

unsafe fn freelist_pop(_payload: &Self) -> Option<NonNull<PyObject>>

Try to pop a pre-allocated object from this type’s freelist. The returned pointer still has the old payload; the caller must reinitialize ref_count, gc_bits, and payload. Read more
Source§

const PAYLOAD_TYPE_ID: TypeId = _

Source§

unsafe fn validate_downcastable_from(_obj: &PyObject) -> bool

Safety Read more
Source§

fn try_downcast_from(obj: &PyObject, vm: &VirtualMachine) -> PyResult<()>

Source§

fn into_pyobject(self, vm: &VirtualMachine) -> PyObjectRef
where Self: Debug,

Source§

fn _into_ref(self, cls: PyTypeRef, ctx: &Context) -> PyRef<Self>
where Self: Debug,

Source§

fn into_exact_ref(self, ctx: &Context) -> PyRefExact<Self>
where Self: Debug,

Source§

fn into_ref(self, ctx: &Context) -> PyRef<Self>
where Self: Debug,

Source§

fn into_ref_with_type( self, vm: &VirtualMachine, cls: PyTypeRef, ) -> PyResult<PyRef<Self>>
where Self: Debug,

Source§

fn into_ref_with_type_lazy_dict( self, vm: &VirtualMachine, cls: PyTypeRef, ) -> PyResult<PyRef<Self>>
where Self: Debug,

Like into_ref_with_type, but leaves the instance __dict__ unallocated until the first attribute write or __dict__ access. Only valid for types whose attribute protocol materializes the dict lazily via get_or_insert.
Source§

fn into_ref_with_type_and_dict( self, vm: &VirtualMachine, cls: PyTypeRef, eager_dict: bool, ) -> PyResult<PyRef<Self>>
where Self: Debug,

Source§

impl Representable for FrameObject

Source§

impl StaticType for FrameObject

Source§

impl Traverse for FrameObject

Source§

fn traverse(&self, tracer_fn: &mut TraverseFn<'_>)

impl traverse() with caution! Following those guideline so traverse doesn’t cause memory error!: Read more
Source§

fn clear(&mut self, out: &mut Vec<PyObjectRef>)

Extract all owned child PyObjectRefs for circular reference resolution (tp_clear). Called just before object deallocation to break circular references. Default implementation does nothing.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T, U> ExactFrom<T> for U
where U: TryFrom<T>,

Source§

fn exact_from(value: T) -> U

Source§

impl<T, U> ExactInto<U> for T
where U: ExactFrom<T>,

Source§

fn exact_into(self) -> U

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Helper for T

Source§

impl<T, U> ImaginaryInto<U> for T
where U: ImaginaryFrom<T>,

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T, U> OverflowingInto<U> for T
where U: OverflowingFrom<T>,

Source§

impl<T> PrimitiveIntRandomBounds for T

Source§

impl<T> PrimitiveSignedRandomBounds for T

Source§

impl<T> PyObjectPayload for T
where T: PyPayload + Debug + 'static,

Source§

impl<T> PyThreadingConstraint for T

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> RoundingInto<U> for T
where U: RoundingFrom<T>,

Source§

impl<T, U> SaturatingInto<U> for T
where U: SaturatingFrom<T>,

Source§

impl<T> ToDebugString for T
where T: Debug,

Source§

fn to_debug_string(&self) -> String

Returns the String produced by Ts Debug implementation.

§Examples
use malachite_base::strings::ToDebugString;

assert_eq!([1, 2, 3].to_debug_string(), "[1, 2, 3]");
assert_eq!(
    [vec![2, 3], vec![], vec![4]].to_debug_string(),
    "[[2, 3], [], [4]]"
);
assert_eq!(Some(5).to_debug_string(), "Some(5)");
Source§

impl<T> ToPyObject for T
where T: PyPayload + Debug,

Source§

impl<T> ToPyResult for T
where T: ToPyObject,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T, U> WrappingInto<U> for T
where U: WrappingFrom<T>,

Source§

fn wrapping_into(self) -> U