mirror of https://github.com/python/cpython
gh-105107: Remove PyEval_CallFunction() function (#105108)
Remove 4 functions from the C API, deprecated in Python 3.9: * PyEval_CallObjectWithKeywords() * PyEval_CallObject() * PyEval_CallFunction() * PyEval_CallMethod() Keep 3 functions in the stable ABI: * PyEval_CallObjectWithKeywords() * PyEval_CallFunction() * PyEval_CallMethod()
This commit is contained in:
parent
adccff3b3f
commit
579c41c102
|
@ -180,9 +180,6 @@ function,PyErr_WarnFormat,3.2,,
|
|||
function,PyErr_WriteUnraisable,3.2,,
|
||||
function,PyEval_AcquireLock,3.2,,
|
||||
function,PyEval_AcquireThread,3.2,,
|
||||
function,PyEval_CallFunction,3.2,,
|
||||
function,PyEval_CallMethod,3.2,,
|
||||
function,PyEval_CallObjectWithKeywords,3.2,,
|
||||
function,PyEval_EvalCode,3.2,,
|
||||
function,PyEval_EvalCodeEx,3.2,,
|
||||
function,PyEval_EvalFrame,3.2,,
|
||||
|
|
|
@ -308,3 +308,18 @@ Deprecated
|
|||
Removed
|
||||
-------
|
||||
|
||||
* Remove functions deprecated in Python 3.9.
|
||||
|
||||
* ``PyEval_CallObject()``, ``PyEval_CallObjectWithKeywords()``: use
|
||||
:c:func:`PyObject_CallNoArgs` or :c:func:`PyObject_Call` instead.
|
||||
Warning: :c:func:`PyObject_Call` positional arguments must be a
|
||||
:class:`tuple` and must not be *NULL*, keyword arguments must be a
|
||||
:class:`dict` or *NULL*, whereas removed functions checked arguments type
|
||||
and accepted *NULL* positional and keyword arguments.
|
||||
To replace ``PyEval_CallObjectWithKeywords(func, NULL, kwargs)`` with
|
||||
:c:func:`PyObject_Call`, pass an empty tuple as positional arguments using
|
||||
:c:func:`PyTuple_New(0) <PyTuple_New>`.
|
||||
* ``PyEval_CallFunction()``: use :c:func:`PyObject_CallFunction` instead.
|
||||
* ``PyEval_CallMethod()``: use :c:func:`PyObject_CallMethod` instead.
|
||||
|
||||
(Contributed by Victor Stinner in :gh:`105107`.)
|
||||
|
|
|
@ -17,27 +17,6 @@ PyAPI_FUNC(PyObject *) PyEval_EvalCodeEx(PyObject *co,
|
|||
PyObject *const *defs, int defc,
|
||||
PyObject *kwdefs, PyObject *closure);
|
||||
|
||||
/* PyEval_CallObjectWithKeywords(), PyEval_CallObject(), PyEval_CallFunction
|
||||
* and PyEval_CallMethod are deprecated. Since they are officially part of the
|
||||
* stable ABI (PEP 384), they must be kept for backward compatibility.
|
||||
* PyObject_Call(), PyObject_CallFunction() and PyObject_CallMethod() are
|
||||
* recommended to call a callable object.
|
||||
*/
|
||||
|
||||
Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyEval_CallObjectWithKeywords(
|
||||
PyObject *callable,
|
||||
PyObject *args,
|
||||
PyObject *kwargs);
|
||||
|
||||
/* Deprecated since PyEval_CallObjectWithKeywords is deprecated */
|
||||
#define PyEval_CallObject(callable, arg) \
|
||||
PyEval_CallObjectWithKeywords((callable), (arg), _PyObject_CAST(_Py_NULL))
|
||||
|
||||
Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyEval_CallFunction(
|
||||
PyObject *callable, const char *format, ...);
|
||||
Py_DEPRECATED(3.9) PyAPI_FUNC(PyObject *) PyEval_CallMethod(
|
||||
PyObject *obj, const char *name, const char *format, ...);
|
||||
|
||||
PyAPI_FUNC(PyObject *) PyEval_GetBuiltins(void);
|
||||
PyAPI_FUNC(PyObject *) PyEval_GetGlobals(void);
|
||||
PyAPI_FUNC(PyObject *) PyEval_GetLocals(void);
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
Remove functions deprecated in Python 3.9.
|
||||
|
||||
* ``PyEval_CallObject()``, ``PyEval_CallObjectWithKeywords()``: use
|
||||
:c:func:`PyObject_CallNoArgs` and :c:func:`PyObject_Call` (positional
|
||||
arguments must not be *NULL*) instead.
|
||||
* ``PyEval_CallFunction()``: use :c:func:`PyObject_CallFunction` instead.
|
||||
* ``PyEval_CallMethod()``: use :c:func:`PyObject_CallMethod` instead.
|
||||
|
||||
Patch by Victor Stinner.
|
|
@ -667,10 +667,13 @@
|
|||
added = '3.2'
|
||||
[function.PyEval_CallFunction]
|
||||
added = '3.2'
|
||||
abi_only = true
|
||||
[function.PyEval_CallMethod]
|
||||
added = '3.2'
|
||||
abi_only = true
|
||||
[function.PyEval_CallObjectWithKeywords]
|
||||
added = '3.2'
|
||||
abi_only = true
|
||||
[function.PyEval_EvalCode]
|
||||
added = '3.2'
|
||||
[function.PyEval_EvalCodeEx]
|
||||
|
|
|
@ -426,8 +426,9 @@ _PyFunction_Vectorcall(PyObject *func, PyObject* const* stack,
|
|||
/* --- More complex call functions -------------------------------- */
|
||||
|
||||
/* External interface to call any callable object.
|
||||
The args must be a tuple or NULL. The kwargs must be a dict or NULL. */
|
||||
PyObject *
|
||||
The args must be a tuple or NULL. The kwargs must be a dict or NULL.
|
||||
Function removed in Python 3.13 API but kept in the stable ABI. */
|
||||
PyAPI_FUNC(PyObject*)
|
||||
PyEval_CallObjectWithKeywords(PyObject *callable,
|
||||
PyObject *args, PyObject *kwargs)
|
||||
{
|
||||
|
@ -583,9 +584,8 @@ PyObject_CallFunction(PyObject *callable, const char *format, ...)
|
|||
|
||||
|
||||
/* PyEval_CallFunction is exact copy of PyObject_CallFunction.
|
||||
* This function is kept for backward compatibility.
|
||||
*/
|
||||
PyObject *
|
||||
Function removed in Python 3.13 API but kept in the stable ABI. */
|
||||
PyAPI_FUNC(PyObject*)
|
||||
PyEval_CallFunction(PyObject *callable, const char *format, ...)
|
||||
{
|
||||
va_list va;
|
||||
|
@ -656,9 +656,8 @@ PyObject_CallMethod(PyObject *obj, const char *name, const char *format, ...)
|
|||
|
||||
|
||||
/* PyEval_CallMethod is exact copy of PyObject_CallMethod.
|
||||
* This function is kept for backward compatibility.
|
||||
*/
|
||||
PyObject *
|
||||
Function removed in Python 3.13 API but kept in the stable ABI. */
|
||||
PyAPI_FUNC(PyObject*)
|
||||
PyEval_CallMethod(PyObject *obj, const char *name, const char *format, ...)
|
||||
{
|
||||
PyThreadState *tstate = _PyThreadState_GET();
|
||||
|
|
Loading…
Reference in New Issue