From 71be64cd7400eb0bab311d3470cc2cc0554e1792 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Sun, 29 May 2022 14:11:22 -0400 Subject: [PATCH] Added new PyCode and PyFrame objects. They currently do not expose any APIs, but are significantly easier to work with than raw pointers :-) --- src/types/code.rs | 14 ++++++++++++++ src/types/frame.rs | 14 ++++++++++++++ src/types/mod.rs | 8 ++++++++ 3 files changed, 36 insertions(+) create mode 100644 src/types/code.rs create mode 100644 src/types/frame.rs diff --git a/src/types/code.rs b/src/types/code.rs new file mode 100644 index 00000000000..fc7e3e9f83e --- /dev/null +++ b/src/types/code.rs @@ -0,0 +1,14 @@ +// Copyright (c) 2022-present PyO3 Project and Contributors + +use crate::ffi; +use crate::PyAny; + +/// Represents a Python code object. +#[repr(transparent)] +pub struct PyCode(PyAny); + +pyobject_native_type_core!( + PyCode, + ffi::PyCode_Type, + #checkfunction=ffi::PyCode_Check +); diff --git a/src/types/frame.rs b/src/types/frame.rs new file mode 100644 index 00000000000..c16e143987d --- /dev/null +++ b/src/types/frame.rs @@ -0,0 +1,14 @@ +// Copyright (c) 2022-present PyO3 Project and Contributors + +use crate::ffi; +use crate::PyAny; + +/// Represents a Python frame. +#[repr(transparent)] +pub struct PyFrame(PyAny); + +pyobject_native_type_core!( + PyFrame, + ffi::PyFrame_Type, + #checkfunction=ffi::PyFrame_Check +); diff --git a/src/types/mod.rs b/src/types/mod.rs index 861a4a3ebfe..e4f72577db6 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -7,6 +7,8 @@ pub use self::boolobject::PyBool; pub use self::bytearray::PyByteArray; pub use self::bytes::PyBytes; pub use self::capsule::PyCapsule; +#[cfg(not(Py_LIMITED_API))] +pub use self::code::PyCode; pub use self::complex::PyComplex; #[cfg(not(Py_LIMITED_API))] pub use self::datetime::{ @@ -15,6 +17,8 @@ pub use self::datetime::{ }; pub use self::dict::{IntoPyDict, PyDict}; pub use self::floatob::PyFloat; +#[cfg(all(not(Py_LIMITED_API), not(PyPy)))] +pub use self::frame::PyFrame; pub use self::frozenset::PyFrozenSet; pub use self::function::{PyCFunction, PyFunction}; pub use self::iterator::PyIterator; @@ -257,11 +261,15 @@ mod boolobject; mod bytearray; mod bytes; mod capsule; +#[cfg(not(Py_LIMITED_API))] +mod code; mod complex; #[cfg(not(Py_LIMITED_API))] mod datetime; mod dict; mod floatob; +#[cfg(all(not(Py_LIMITED_API), not(PyPy)))] +mod frame; mod frozenset; mod function; mod iterator;