# define PyNumber_Check (*py3_PyNumber_Check)
# define PyNumber_Long (*py3_PyNumber_Long)
# define PyBool_Type (*py3_PyBool_Type)
-# if PY_VERSION_HEX >= 0x030c00b0
-# define PyLong_Type (*py3_PyLong_Type)
-# endif
# define PyErr_NewException py3_PyErr_NewException
# ifdef Py_DEBUG
# define _Py_NegativeRefcount py3__Py_NegativeRefcount
static PyTypeObject* py3_PySlice_Type;
static PyTypeObject* py3_PyFloat_Type;
static PyTypeObject* py3_PyBool_Type;
-# if PY_VERSION_HEX >= 0x030c00b0
-static PyTypeObject* py3_PyLong_Type;
-# endif
static int (*py3_PyNumber_Check)(PyObject *);
static PyObject* (*py3_PyNumber_Long)(PyObject *);
static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict);
{"PySlice_Type", (PYTHON_PROC*)&py3_PySlice_Type},
{"PyFloat_Type", (PYTHON_PROC*)&py3_PyFloat_Type},
{"PyBool_Type", (PYTHON_PROC*)&py3_PyBool_Type},
-# if PY_VERSION_HEX >= 0x030c00b0
- {"PyLong_Type", (PYTHON_PROC*)&py3_PyLong_Type},
-# endif
{"PyNumber_Check", (PYTHON_PROC*)&py3_PyNumber_Check},
{"PyNumber_Long", (PYTHON_PROC*)&py3_PyNumber_Long},
{"PyErr_NewException", (PYTHON_PROC*)&py3_PyErr_NewException},
# endif
# if !defined(USE_LIMITED_API) && PY_VERSION_HEX >= 0x030c00b0
-// Py_SIZE() uses PyLong_Type and PyBool_Type starting from Python 3.12.
-// We need to define our own Py_SIZE() to replace Py{Bool,Long}_Type with
-// py3_Py{Bool,Long}_Type.
-// We also need to redefine PyTuple_GET_SIZE() and PyList_GET_SIZE(), because
-// they use Py_SIZE().
- static inline Py_ssize_t
-py3_Py_SIZE(PyObject *ob)
-{
- assert(ob->ob_type != &PyLong_Type);
- assert(ob->ob_type != &PyBool_Type);
- PyVarObject *var_ob = _PyVarObject_CAST(ob);
- return var_ob->ob_size;
-}
-# undef Py_SIZE
-# define Py_SIZE(ob) py3_Py_SIZE(_PyObject_CAST(ob))
-
- static inline Py_ssize_t
-py3_PyTuple_GET_SIZE(PyObject *op)
-{
- PyTupleObject *tuple = _PyTuple_CAST(op);
- return Py_SIZE(tuple);
-}
+// PyTuple_GET_SIZE/PyList_GET_SIZE are inlined functions that use Py_SIZE(),
+// which started to introduce linkage dependency from Python 3.12. When we
+// build Python in dynamic mode, we don't link against it in build time, and
+// this would fail to build. Just use the non-inlined version instead.
# undef PyTuple_GET_SIZE
-# define PyTuple_GET_SIZE(op) py3_PyTuple_GET_SIZE(_PyObject_CAST(op))
-
- static inline
-Py_ssize_t py3_PyList_GET_SIZE(PyObject *op)
-{
- PyListObject *list = _PyList_CAST(op);
- return Py_SIZE(list);
-}
+# define PyTuple_GET_SIZE(o) PyTuple_Size(o)
# undef PyList_GET_SIZE
-# define PyList_GET_SIZE(op) py3_PyList_GET_SIZE(_PyObject_CAST(op))
+# define PyList_GET_SIZE(o) PyList_Size(o)
# endif
# ifdef MSWIN