Skip to main content

PyCode

Struct PyCode 

Source
pub struct PyCode {
    pub code: CodeObject<Literal>,
    pub instrumentation_version: AtomicU64,
    pub monitoring_data: PyMutex<Option<CoMonitoringData>>,
    pub quickened: AtomicBool,
    pub has_exc_handling: bool,
    /* private fields */
}

Fields§

§code: CodeObject<Literal>§instrumentation_version: AtomicU64

Version counter for lazy re-instrumentation. Compared against PyGlobalState::instrumentation_version at RESUME.

§monitoring_data: PyMutex<Option<CoMonitoringData>>

Side-table for INSTRUMENTED_LINE / INSTRUMENTED_INSTRUCTION.

§quickened: AtomicBool

Whether adaptive counters have been initialized (lazy quickening).

§has_exc_handling: bool

Whether the bytecode contains any instruction that mutates the current exc_info slot (vm.set_exception). When false, a normal frame call for this code cannot leave the slot unbalanced, so with_frame skips the exc_info save/restore. Computed once by scanning the instruction stream.

Implementations§

Source§

impl PyCode

Source

pub fn new(code: CodeObject<Literal>) -> Self

Source

pub fn source_path(&self) -> &'static PyStrInterned

Source

pub fn set_source_path(&self, new: &'static PyStrInterned)

Source

pub fn new_ref_with_bag( vm: &VirtualMachine, code: CodeObject<Literal>, ) -> PyRef<Self>

Source

pub fn new_ref_from_bytecode( vm: &VirtualMachine, code: CodeObject, ) -> PyRef<Self>

Source

pub fn new_ref_from_frozen<B: AsRef<[u8]>>( vm: &VirtualMachine, code: FrozenCodeObject<B>, ) -> PyRef<Self>

Source

pub fn from_pyc_path(path: &Path, vm: &VirtualMachine) -> PyResult<PyRef<Self>>

Source

pub fn from_pyc( pyc_bytes: &[u8], name: Option<&str>, bytecode_path: Option<&str>, source_path: Option<&str>, vm: &VirtualMachine, ) -> PyResult<PyRef<Self>>

Source§

impl PyCode

Source

pub fn addr2line(&self, lasti_bytes: i32) -> i32

Line number for a byte offset, or -1 when the linetable has no line.

Source§

impl PyCode

Source

pub fn co_filename(&self) -> PyStrRef

Methods from Deref<Target = CodeObject<Literal>>§

Source

pub fn arg_names(&self) -> Arguments<'_, <C as Constant>::Name>

Get all arguments of the code object like inspect.getargs

Source

pub fn label_targets(&self) -> BTreeSet<Label>

Return the labels targeted by the instructions of this CodeObject

Source

pub fn map_clone_bag<Bag>( &self, bag: &Bag, ) -> CodeObject<<Bag as ConstantBag>::Constant>
where Bag: ConstantBag,

Same as map_bag but clones self

Trait Implementations§

Source§

impl Comparable for PyCode

Source§

impl Constructor for PyCode

Source§

type Args = PyCodeNewArgs

Source§

fn py_new( _cls: &Py<PyType>, args: Self::Args, vm: &VirtualMachine, ) -> PyResult<Self>

Creates the payload for this type. In most cases, just implement this method and let the default slot_new handle wrapping with the correct type.
Source§

const DROP_KWARGS_WHEN_INIT_OVERRIDDEN: bool = false

When true, extra keywords are dropped if a subclass replaced tp_init.
Source§

fn slot_new(cls: PyTypeRef, args: FuncArgs, vm: &VirtualMachine) -> PyResult

The type slot for __new__. Override this only when you need special behavior beyond simple payload creation.
Source§

const __OWN_METHOD_DEFS: &'static [PyMethodDef] = _

Source§

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

Source§

fn __extend_slots(slots: &mut PyTypeSlots)

Source§

impl Debug for PyCode

Source§

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

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

impl Deref for PyCode

Source§

type Target = CodeObject<Literal>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl Hashable for PyCode

Source§

impl MaybeTraverse for PyCode

Source§

const HAS_TRAVERSE: bool = false

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

const HAS_CLEAR: bool = false

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 PyCode

Source§

const NAME: &'static str = "code"

Source§

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

Source§

const TP_NAME: &'static str = "code"

Source§

const DOC: ItemDoc

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 PyCode

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 PyCode

Source§

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

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§

const NEW_REF_UNTRACKED: bool = false

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§

const HAS_FREELIST: bool = false

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 MAX_FREELIST: usize = 0

Maximum number of objects to keep in the freelist.
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§

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 PyCode

Source§

impl StaticType for PyCode

Auto Trait Implementations§

§

impl !Freeze for PyCode

§

impl !RefUnwindSafe for PyCode

§

impl !Send for PyCode

§

impl !Sync for PyCode

§

impl !UnwindSafe for PyCode

§

impl Unpin for PyCode

§

impl UnsafeUnpin for PyCode

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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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