diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e1716ead39..402e4d42e48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added the internal `IntoPyResult` trait to give better error messages when function return types do not implement `IntoPy`. [#2326](https://github.com/PyO3/pyo3/pull/2326) - Add `PyDictKeys`, `PyDictValues` and `PyDictItems` Rust types to represent `dict_keys`, `dict_values` and `dict_items` types. [#2358](https://github.com/PyO3/pyo3/pull/2358) - Add macro `append_to_inittab`. [#2377](https://github.com/PyO3/pyo3/pull/2377) +- Added `PyCode` and `PyFrame` high level objects. [#2408](https://github.com/PyO3/pyo3/pull/2408) ### Changed 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;