Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Define missing import APIs #1475

Merged
merged 1 commit into from
Apr 22, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- Add FFI definition `PyCFunction_CheckExact` for Python 3.9 and later. [#1425](https://github.com/PyO3/pyo3/pull/1425)
- Add FFI definition `Py_IS_TYPE`. [#1429](https://github.com/PyO3/pyo3/pull/1429)
- Add FFI definition `_Py_InitializeMain`. [#1473](https://github.com/PyO3/pyo3/pull/1473)
- Add FFI definitions from `cpython/import.h`.[#1475](https://github.com/PyO3/pyo3/pull/1475)
- Add tuple and unit struct support for `#[pyclass]` macro. [#1504](https://github.com/PyO3/pyo3/pull/1504)

### Changed
Expand Down
71 changes: 71 additions & 0 deletions src/ffi/cpython/import.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
use crate::ffi::{PyInterpreterState, PyObject};
use std::os::raw::{c_char, c_int, c_uchar};

davidhewitt marked this conversation as resolved.
Show resolved Hide resolved
// skipped PyInit__imp

extern "C" {
pub fn _PyImport_IsInitialized(state: *mut PyInterpreterState) -> c_int;
// skipped _PyImport_GetModuleId
#[cfg(Py_3_7)]
pub fn _PyImport_SetModule(name: *mut PyObject, module: *mut PyObject) -> c_int;
#[cfg(Py_3_7)]
pub fn _PyImport_SetModuleString(name: *const c_char, module: *mut PyObject) -> c_int;
pub fn _PyImport_AcquireLock();
pub fn _PyImport_ReleaseLock() -> c_int;
#[cfg(not(Py_3_7))]
pub fn _PyImport_FindBuiltin(name: *const c_char) -> *mut PyObject;
#[cfg(all(Py_3_7, not(Py_3_9)))]
pub fn _PyImport_FindBuiltin(name: *const c_char, modules: *mut PyObject) -> *mut PyObject;
#[cfg(not(Py_3_10))]
pub fn _PyImport_FindExtensionObject(a: *mut PyObject, b: *mut PyObject) -> *mut PyObject;
#[cfg(not(Py_3_7))]
pub fn _PyImport_FixupBuiltin(module: *mut PyObject, name: *const c_char) -> c_int;
#[cfg(Py_3_7)]
pub fn _PyImport_FixupBuiltin(
module: *mut PyObject,
name: *const c_char,
modules: *mut PyObject,
) -> c_int;
#[cfg(not(Py_3_7))]
pub fn _PyImport_FixupExtensionObject(
a: *mut PyObject,
b: *mut PyObject,
c: *mut PyObject,
) -> c_int;
#[cfg(Py_3_7)]
pub fn _PyImport_FixupExtensionObject(
davidhewitt marked this conversation as resolved.
Show resolved Hide resolved
a: *mut PyObject,
b: *mut PyObject,
c: *mut PyObject,
d: *mut PyObject,
) -> c_int;
}

#[repr(C)]
#[derive(Copy, Clone)]
pub struct _inittab {
pub name: *const c_char,
pub initfun: Option<unsafe extern "C" fn() -> *mut PyObject>,
}

#[cfg_attr(windows, link(name = "pythonXY"))]
extern "C" {
pub static mut PyImport_Inittab: *mut _inittab;
}

extern "C" {
pub fn PyImport_ExtendInittab(newtab: *mut _inittab) -> c_int;
}

#[repr(C)]
#[derive(Copy, Clone)]
pub struct _frozen {
name: *const c_char,
code: *const c_uchar,
size: c_int,
}

#[cfg_attr(windows, link(name = "pythonXY"))]
extern "C" {
pub static mut PyImport_FrozenModules: *const _frozen;
}
3 changes: 2 additions & 1 deletion src/ffi/cpython/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ pub mod compile;
pub mod dictobject;
// skipped fileobject.h
pub mod frameobject;
// skipped import.h
pub mod import;
#[cfg(all(Py_3_8, not(PyPy)))]
pub mod initconfig;
// skipped interpreteridobject.h
Expand All @@ -28,6 +28,7 @@ pub use self::compile::*;
#[cfg(not(PyPy))]
pub use self::dictobject::*;
pub use self::frameobject::*;
pub use self::import::*;
#[cfg(all(Py_3_8, not(PyPy)))]
pub use self::initconfig::*;
pub use self::listobject::*;
Expand Down