Skip to content
Draft
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
12 changes: 2 additions & 10 deletions pyo3-ffi/src/abstract_.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,21 +54,13 @@ extern "C" {
...
) -> *mut PyObject;

#[cfg(not(Py_3_13))]
#[cfg(PyPy)]
#[cfg_attr(PyPy, link_name = "_PyPyObject_CallFunction_SizeT")]
pub fn _PyObject_CallFunction_SizeT(
pub(crate) fn _PyObject_CallFunction_SizeT(
callable_object: *mut PyObject,
format: *const c_char,
...
) -> *mut PyObject;
#[cfg(not(Py_3_13))]
#[cfg_attr(PyPy, link_name = "_PyPyObject_CallMethod_SizeT")]
pub fn _PyObject_CallMethod_SizeT(
o: *mut PyObject,
method: *const c_char,
format: *const c_char,
...
) -> *mut PyObject;

#[cfg_attr(PyPy, link_name = "PyPyObject_CallFunctionObjArgs")]
pub fn PyObject_CallFunctionObjArgs(callable: *mut PyObject, ...) -> *mut PyObject;
Expand Down
61 changes: 8 additions & 53 deletions pyo3-ffi/src/cpython/abstract_.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,25 +14,22 @@ use crate::{
#[cfg(Py_3_8)]
use libc::size_t;

extern "C" {
#[cfg(all(Py_3_8, not(any(PyPy, GraalPy))))]
pub fn _PyStack_AsDict(values: *const *mut PyObject, kwnames: *mut PyObject) -> *mut PyObject;
}
// skipped private _PyStack_AsDict

#[cfg(all(Py_3_8, not(any(PyPy, GraalPy))))]
const _PY_FASTCALL_SMALL_STACK: size_t = 5;

extern "C" {
#[cfg(all(Py_3_8, not(PyPy)))]
pub fn _Py_CheckFunctionResult(
fn _Py_CheckFunctionResult(
tstate: *mut PyThreadState,
callable: *mut PyObject,
result: *mut PyObject,
where_: *const c_char,
) -> *mut PyObject;

#[cfg(all(Py_3_8, not(PyPy)))]
pub fn _PyObject_MakeTpCall(
fn _PyObject_MakeTpCall(
tstate: *mut PyThreadState,
callable: *mut PyObject,
args: *const *mut PyObject,
Expand Down Expand Up @@ -69,7 +66,7 @@ pub unsafe fn PyVectorcall_Function(callable: *mut PyObject) -> Option<vectorcal

#[cfg(all(Py_3_8, not(PyPy)))]
#[inline(always)]
pub unsafe fn _PyObject_VectorcallTstate(
unsafe fn _PyObject_VectorcallTstate(
tstate: *mut PyThreadState,
callable: *mut PyObject,
args: *const *mut PyObject,
Expand Down Expand Up @@ -127,44 +124,9 @@ extern "C" {
) -> *mut PyObject;
}

#[cfg(all(Py_3_8, not(any(PyPy, GraalPy))))]
#[inline(always)]
pub unsafe fn _PyObject_FastCallTstate(
tstate: *mut PyThreadState,
func: *mut PyObject,
args: *const *mut PyObject,
nargs: Py_ssize_t,
) -> *mut PyObject {
_PyObject_VectorcallTstate(tstate, func, args, nargs as size_t, std::ptr::null_mut())
}

#[cfg(all(Py_3_8, not(any(PyPy, GraalPy))))]
#[inline(always)]
pub unsafe fn _PyObject_FastCall(
func: *mut PyObject,
args: *const *mut PyObject,
nargs: Py_ssize_t,
) -> *mut PyObject {
_PyObject_FastCallTstate(PyThreadState_GET(), func, args, nargs)
}

#[cfg(all(Py_3_8, not(PyPy)))]
#[inline(always)]
pub unsafe fn _PyObject_CallNoArg(func: *mut PyObject) -> *mut PyObject {
_PyObject_VectorcallTstate(
PyThreadState_GET(),
func,
std::ptr::null_mut(),
0,
std::ptr::null_mut(),
)
}

extern "C" {
#[cfg(PyPy)]
#[link_name = "_PyPyObject_CallNoArg"]
pub fn _PyObject_CallNoArg(func: *mut PyObject) -> *mut PyObject;
}
// skipped private _PyObject_FastCallTstate
// skipped private _PyObject_FastCall
// skipped private _PyObject_CallNoArg

#[cfg(all(Py_3_8, not(PyPy)))]
#[inline(always)]
Expand Down Expand Up @@ -290,14 +252,7 @@ pub const PY_ITERSEARCH_COUNT: c_int = 1;
pub const PY_ITERSEARCH_INDEX: c_int = 2;
pub const PY_ITERSEARCH_CONTAINS: c_int = 3;

extern "C" {
#[cfg(not(any(PyPy, GraalPy)))]
pub fn _PySequence_IterSearch(
seq: *mut PyObject,
obj: *mut PyObject,
operation: c_int,
) -> Py_ssize_t;
}
// skipped private _PySequence_IterSearch

// skipped _PyObject_RealIsInstance
// skipped _PyObject_RealIsSubclass
Expand Down
7 changes: 1 addition & 6 deletions pyo3-ffi/src/cpython/bytesobject.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
use crate::object::*;
use crate::Py_ssize_t;
#[cfg(not(Py_LIMITED_API))]
use std::ffi::c_char;
use std::ffi::c_int;

#[cfg(not(any(PyPy, GraalPy, Py_LIMITED_API)))]
#[repr(C)]
Expand All @@ -19,10 +17,7 @@ pub struct PyBytesObject {
#[cfg(any(PyPy, GraalPy, Py_LIMITED_API))]
opaque_struct!(pub PyBytesObject);

extern "C" {
#[cfg_attr(PyPy, link_name = "_PyPyBytes_Resize")]
pub fn _PyBytes_Resize(bytes: *mut *mut PyObject, newsize: Py_ssize_t) -> c_int;
}
// skipped private _PyBytes_Resize

#[cfg(not(Py_LIMITED_API))]
#[inline]
Expand Down
16 changes: 4 additions & 12 deletions pyo3-ffi/src/cpython/ceval.rs
Original file line number Diff line number Diff line change
@@ -1,21 +1,13 @@
use crate::cpython::pystate::Py_tracefunc;
use crate::object::{freefunc, PyObject};
use std::ffi::c_int;
use crate::object::PyObject;

extern "C" {
// skipped non-limited _PyEval_CallTracing
// skipped private _PyEval_CallTracing

#[cfg(not(Py_3_11))]
pub fn _PyEval_EvalFrameDefault(arg1: *mut crate::PyFrameObject, exc: c_int) -> *mut PyObject;
// skipped private _PyEval_EvalFrameDefault

#[cfg(Py_3_11)]
pub fn _PyEval_EvalFrameDefault(
tstate: *mut crate::PyThreadState,
frame: *mut crate::_PyInterpreterFrame,
exc: c_int,
) -> *mut crate::PyObject;
// skipped private _PyEval_RequestCodeExtraIndex

pub fn _PyEval_RequestCodeExtraIndex(func: freefunc) -> c_int;
pub fn PyEval_SetProfile(trace_func: Option<Py_tracefunc>, arg1: *mut PyObject);
pub fn PyEval_SetTrace(trace_func: Option<Py_tracefunc>, arg1: *mut PyObject);
}
9 changes: 3 additions & 6 deletions pyo3-ffi/src/cpython/code.rs
Original file line number Diff line number Diff line change
Expand Up @@ -144,10 +144,7 @@ extern "C" {
names: *mut PyObject,
lnotab: *mut PyObject,
) -> *mut PyObject;
pub fn _PyCode_GetExtra(
code: *mut PyObject,
index: Py_ssize_t,
extra: *const *mut c_void,
) -> c_int;
pub fn _PyCode_SetExtra(code: *mut PyObject, index: Py_ssize_t, extra: *mut c_void) -> c_int;

// skipped private _Py_GetExtra
// skipped private _Py_SetExtra
}
27 changes: 7 additions & 20 deletions pyo3-ffi/src/cpython/import.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,14 @@ use std::ffi::{c_char, c_int};
// skipped PyInit__imp

extern "C" {
pub fn _PyImport_IsInitialized(state: *mut PyInterpreterState) -> c_int;
// skipped private _PyImport_IsInitialized
// skipped _PyImport_GetModuleId
pub fn _PyImport_SetModule(name: *mut PyObject, module: *mut PyObject) -> c_int;
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_9))]
pub fn _PyImport_FindBuiltin(name: *const c_char, modules: *mut PyObject) -> *mut PyObject;
#[cfg(not(Py_3_11))]
pub fn _PyImport_FindExtensionObject(a: *mut PyObject, b: *mut PyObject) -> *mut PyObject;
pub fn _PyImport_FixupBuiltin(
module: *mut PyObject,
name: *const c_char,
modules: *mut PyObject,
) -> c_int;
pub fn _PyImport_FixupExtensionObject(
a: *mut PyObject,
b: *mut PyObject,
c: *mut PyObject,
d: *mut PyObject,
) -> c_int;
// skipped private _PyImport_SetModule
// skipped private _PyImport_SetModuleString
// skipped private _PyImport_AcquireLock
// skipped private _PyImport_ReleaseLock
// skipped private _PyImport_FixupBuiltin
// skipped private _PyImport_FixupExtensionObject
}

#[cfg(not(PyPy))]
Expand Down
4 changes: 2 additions & 2 deletions pyo3-ffi/src/cpython/initconfig.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use std::ffi::{c_char, c_int, c_ulong};

#[repr(C)]
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum _PyStatus_TYPE {
enum _PyStatus_TYPE {
_PyStatus_TYPE_OK = 0,
_PyStatus_TYPE_ERROR = 1,
_PyStatus_TYPE_EXIT = 2,
Expand All @@ -15,7 +15,7 @@ pub enum _PyStatus_TYPE {
#[repr(C)]
#[derive(Copy, Clone)]
pub struct PyStatus {
pub _type: _PyStatus_TYPE,
_type: _PyStatus_TYPE,
pub func: *const c_char,
pub err_msg: *const c_char,
pub exitcode: c_int,
Expand Down
11 changes: 0 additions & 11 deletions pyo3-ffi/src/cpython/objimpl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,6 @@ use crate::object::*;
// skipped _PyObject_SIZE
// skipped _PyObject_VAR_SIZE

#[cfg(not(Py_3_11))]
extern "C" {
pub fn _Py_GetAllocatedBlocks() -> crate::Py_ssize_t;
}

#[cfg(not(any(PyPy, GraalPy)))]
#[repr(C)]
#[derive(Copy, Clone)]
Expand Down Expand Up @@ -52,12 +47,6 @@ pub unsafe fn PyObject_IS_GC(o: *mut PyObject) -> c_int {
}) as c_int
}

#[cfg(not(Py_3_11))]
extern "C" {
pub fn _PyObject_GC_Malloc(size: size_t) -> *mut PyObject;
pub fn _PyObject_GC_Calloc(size: size_t) -> *mut PyObject;
}

#[inline]
pub unsafe fn PyType_SUPPORTS_WEAKREFS(t: *mut PyTypeObject) -> c_int {
((*t).tp_weaklistoffset > 0) as c_int
Expand Down
4 changes: 1 addition & 3 deletions pyo3-ffi/src/cpython/pyframe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,7 @@ use std::ffi::c_char;
use std::ffi::c_int;
use std::ptr::addr_of_mut;

// NB used in `_PyEval_EvalFrameDefault`, maybe we remove this too.
#[cfg(all(Py_3_11, not(PyPy)))]
opaque_struct!(pub _PyInterpreterFrame);
// skipped private _PyInterpreterFrame

#[cfg_attr(windows, link(name = "pythonXY"))]
extern "C" {
Expand Down
6 changes: 3 additions & 3 deletions pyo3-ffi/src/cpython/pythonrun.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use std::ffi::{c_char, c_int};

extern "C" {
pub fn PyRun_SimpleStringFlags(arg1: *const c_char, arg2: *mut PyCompilerFlags) -> c_int;
pub fn _PyRun_SimpleFileObject(
fn _PyRun_SimpleFileObject(
fp: *mut FILE,
filename: *mut PyObject,
closeit: c_int,
Expand All @@ -21,7 +21,7 @@ extern "C" {
closeit: c_int,
flags: *mut PyCompilerFlags,
) -> c_int;
pub fn _PyRun_AnyFileObject(
fn _PyRun_AnyFileObject(
fp: *mut FILE,
filename: *mut PyObject,
closeit: c_int,
Expand All @@ -48,7 +48,7 @@ extern "C" {
filename: *const c_char,
flags: *mut PyCompilerFlags,
) -> c_int;
pub fn _PyRun_InteractiveLoopObject(
fn _PyRun_InteractiveLoopObject(
fp: *mut FILE,
filename: *mut PyObject,
flags: *mut PyCompilerFlags,
Expand Down
13 changes: 7 additions & 6 deletions pyo3-ffi/src/cpython/unicodeobject.rs
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,7 @@ pub struct PyUnicodeObject {

extern "C" {
#[cfg(not(any(PyPy, GraalPy)))]
pub fn _PyUnicode_CheckConsistency(op: *mut PyObject, check_content: c_int) -> c_int;
fn _PyUnicode_CheckConsistency(op: *mut PyObject, check_content: c_int) -> c_int;
}

// skipped PyUnicode_GET_SIZE
Expand Down Expand Up @@ -538,19 +538,19 @@ pub unsafe fn PyUnicode_KIND(op: *mut PyObject) -> c_uint {
(*(op as *mut PyASCIIObject)).kind()
}

#[cfg(not(any(GraalPy, Py_3_14)))]
#[cfg(not(any(GraalPy, PyPy, Py_3_14)))]
#[inline]
pub unsafe fn _PyUnicode_COMPACT_DATA(op: *mut PyObject) -> *mut c_void {
unsafe fn _PyUnicode_COMPACT_DATA(op: *mut PyObject) -> *mut c_void {
if PyUnicode_IS_ASCII(op) != 0 {
(op as *mut PyASCIIObject).offset(1) as *mut c_void
} else {
(op as *mut PyCompactUnicodeObject).offset(1) as *mut c_void
}
}

#[cfg(not(any(GraalPy, PyPy)))]
#[cfg(not(any(GraalPy, PyPy, Py_3_14)))]
#[inline]
pub unsafe fn _PyUnicode_NONCOMPACT_DATA(op: *mut PyObject) -> *mut c_void {
unsafe fn _PyUnicode_NONCOMPACT_DATA(op: *mut PyObject) -> *mut c_void {
debug_assert!(!(*(op as *mut PyUnicodeObject)).data.any.is_null());

(*(op as *mut PyUnicodeObject)).data.any
Expand Down Expand Up @@ -628,7 +628,8 @@ extern "C" {
#[cfg_attr(PyPy, link_name = "PyPyUnicode_New")]
pub fn PyUnicode_New(size: Py_ssize_t, maxchar: Py_UCS4) -> *mut PyObject;
#[cfg_attr(PyPy, link_name = "_PyPyUnicode_Ready")]
pub fn _PyUnicode_Ready(unicode: *mut PyObject) -> c_int;
#[cfg(not(any(Py_3_12, GraalPy)))]
fn _PyUnicode_Ready(unicode: *mut PyObject) -> c_int;

// skipped _PyUnicode_Copy

Expand Down
28 changes: 5 additions & 23 deletions pyo3-ffi/src/datetime.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,19 +33,10 @@ pub struct PyDateTime_Delta {
pub microseconds: c_int,
}

// skipped non-limited PyDateTime_TZInfo
// skipped non-limited _PyDateTime_BaseTZInfo
// skipped PyDateTime_TZInfo
// skipped private _PyDateTime_BaseTZInfo

#[cfg(not(any(PyPy, GraalPy)))]
#[repr(C)]
#[derive(Debug)]
/// Structure representing a `datetime.time` without a `tzinfo` member.
pub struct _PyDateTime_BaseTime {
pub ob_base: PyObject,
pub hashcode: Py_hash_t,
pub hastzinfo: c_char,
pub data: [c_uchar; _PyDateTime_TIME_DATASIZE],
}
// skipped private _PyDateTime_BaseTime

#[repr(C)]
#[derive(Debug)]
Expand Down Expand Up @@ -79,16 +70,7 @@ pub struct PyDateTime_Date {
pub data: [c_uchar; _PyDateTime_DATE_DATASIZE],
}

#[cfg(not(any(PyPy, GraalPy)))]
#[repr(C)]
#[derive(Debug)]
/// Structure representing a `datetime.datetime` without a `tzinfo` member.
pub struct _PyDateTime_BaseDateTime {
pub ob_base: PyObject,
pub hashcode: Py_hash_t,
pub hastzinfo: c_char,
pub data: [c_uchar; _PyDateTime_DATETIME_DATASIZE],
}
// skipped private _PyDateTime_BaseDateTime

#[repr(C)]
#[derive(Debug)]
Expand Down Expand Up @@ -469,7 +451,7 @@ pub unsafe fn PyDateTime_DELTA_GET_MICROSECONDS(o: *mut PyObject) -> c_int {

#[cfg(PyPy)]
extern "C" {
// skipped _PyDateTime_HAS_TZINFO (not in PyPy)
// skipped private _PyDateTime_HAS_TZINFO
#[link_name = "PyPyDateTime_GET_YEAR"]
pub fn PyDateTime_GET_YEAR(o: *mut PyObject) -> c_int;
#[link_name = "PyPyDateTime_GET_MONTH"]
Expand Down
Loading
Loading