gh-106084: Remove old PyObject call aliases (#106085)

Remove old aliases which were kept backwards compatibility with
Python 3.8:

* _PyObject_CallMethodNoArgs()
* _PyObject_CallMethodOneArg()
* _PyObject_CallOneArg()
* _PyObject_FastCallDict()
* _PyObject_Vectorcall()
* _PyObject_VectorcallMethod()
* _PyVectorcall_Function()

Update code which used these aliases to use new names.
This commit is contained in:
Victor Stinner 2023-06-26 08:08:12 +02:00 committed by GitHub
parent 93a970ffbc
commit 00e75a3372
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 42 additions and 24 deletions

View file

@ -568,3 +568,17 @@ Removed
<https://github.com/python/pythoncapi-compat/>`_ can be used to get this <https://github.com/python/pythoncapi-compat/>`_ can be used to get this
function on Python 3.8 and older. function on Python 3.8 and older.
(Contributed by Victor Stinner in :gh:`105268`.) (Contributed by Victor Stinner in :gh:`105268`.)
* Remove the old aliases to functions calling functions which were kept for
backward compatibility with Python 3.8 provisional API:
* ``_PyObject_CallMethodNoArgs()``: use ``PyObject_CallMethodNoArgs()``
* ``_PyObject_CallMethodOneArg()``: use ``PyObject_CallMethodOneArg()``
* ``_PyObject_CallOneArg()``: use ``PyObject_CallOneArg()``
* ``_PyObject_FastCallDict()``: use ``PyObject_VectorcallDict()``
* ``_PyObject_Vectorcall()``: use ``PyObject_Vectorcall()``
* ``_PyObject_VectorcallMethod()``: use ``PyObject_VectorcallMethod()``
* ``_PyVectorcall_Function()``: use ``PyVectorcall_Function()``
Just remove the underscore prefix to update your code.
(Contributed by Victor Stinner in :gh:`106084`.)

View file

@ -58,15 +58,6 @@ _PyVectorcall_NARGS(size_t n)
PyAPI_FUNC(vectorcallfunc) PyVectorcall_Function(PyObject *callable); PyAPI_FUNC(vectorcallfunc) PyVectorcall_Function(PyObject *callable);
// Backwards compatibility aliases for API that was provisional in Python 3.8
#define _PyObject_Vectorcall PyObject_Vectorcall
#define _PyObject_VectorcallMethod PyObject_VectorcallMethod
#define _PyObject_FastCallDict PyObject_VectorcallDict
#define _PyVectorcall_Function PyVectorcall_Function
#define _PyObject_CallOneArg PyObject_CallOneArg
#define _PyObject_CallMethodNoArgs PyObject_CallMethodNoArgs
#define _PyObject_CallMethodOneArg PyObject_CallMethodOneArg
/* Same as PyObject_Vectorcall except that keyword arguments are passed as /* Same as PyObject_Vectorcall except that keyword arguments are passed as
dict, which may be NULL if there are no keyword arguments. */ dict, which may be NULL if there are no keyword arguments. */
PyAPI_FUNC(PyObject *) PyObject_VectorcallDict( PyAPI_FUNC(PyObject *) PyObject_VectorcallDict(

View file

@ -0,0 +1,13 @@
Remove the old aliases to functions calling functions which were kept for
backward compatibility with Python 3.8 provisional API:
* ``_PyObject_CallMethodNoArgs()``: use ``PyObject_CallMethodNoArgs()``
* ``_PyObject_CallMethodOneArg()``: use ``PyObject_CallMethodOneArg()``
* ``_PyObject_CallOneArg()``: use ``PyObject_CallOneArg()``
* ``_PyObject_FastCallDict()``: use ``PyObject_VectorcallDict()``
* ``_PyObject_Vectorcall()``: use ``PyObject_Vectorcall()``
* ``_PyObject_VectorcallMethod()``: use ``PyObject_VectorcallMethod()``
* ``_PyVectorcall_Function()``: use ``PyVectorcall_Function()``
Just remove the underscore prefix to update your code. Patch by Victor
Stinner.

View file

@ -276,7 +276,7 @@ partial_vectorcall(partialobject *pto, PyObject *const *args,
static void static void
partial_setvectorcall(partialobject *pto) partial_setvectorcall(partialobject *pto)
{ {
if (_PyVectorcall_Function(pto->fn) == NULL) { if (PyVectorcall_Function(pto->fn) == NULL) {
/* Don't use vectorcall if the underlying function doesn't support it */ /* Don't use vectorcall if the underlying function doesn't support it */
pto->vectorcall = NULL; pto->vectorcall = NULL;
} }

View file

@ -1715,7 +1715,7 @@ mbstreamwriter_iwrite(MultibyteStreamWriterObject *self,
if (str == NULL) if (str == NULL)
return -1; return -1;
wr = _PyObject_CallMethodOneArg(self->stream, str_write, str); wr = PyObject_CallMethodOneArg(self->stream, str_write, str);
Py_DECREF(str); Py_DECREF(str);
if (wr == NULL) if (wr == NULL)
return -1; return -1;
@ -1826,7 +1826,7 @@ _multibytecodec_MultibyteStreamWriter_reset_impl(MultibyteStreamWriterObject *se
if (PyBytes_Size(pwrt) > 0) { if (PyBytes_Size(pwrt) > 0) {
PyObject *wr; PyObject *wr;
wr = _PyObject_CallMethodOneArg(self->stream, state->str_write, pwrt); wr = PyObject_CallMethodOneArg(self->stream, state->str_write, pwrt);
if (wr == NULL) { if (wr == NULL) {
Py_DECREF(pwrt); Py_DECREF(pwrt);
return NULL; return NULL;

View file

@ -122,7 +122,7 @@ _PyObject_FastCallDictTstate(PyThreadState *tstate, PyObject *callable,
assert(nargs == 0 || args != NULL); assert(nargs == 0 || args != NULL);
assert(kwargs == NULL || PyDict_Check(kwargs)); assert(kwargs == NULL || PyDict_Check(kwargs));
vectorcallfunc func = _PyVectorcall_Function(callable); vectorcallfunc func = PyVectorcall_Function(callable);
if (func == NULL) { if (func == NULL) {
/* Use tp_call instead */ /* Use tp_call instead */
return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwargs); return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwargs);
@ -349,7 +349,7 @@ _PyObject_Call(PyThreadState *tstate, PyObject *callable,
assert(PyTuple_Check(args)); assert(PyTuple_Check(args));
assert(kwargs == NULL || PyDict_Check(kwargs)); assert(kwargs == NULL || PyDict_Check(kwargs));
EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, callable); EVAL_CALL_STAT_INC_IF_FUNCTION(EVAL_CALL_API, callable);
vectorcallfunc vector_func = _PyVectorcall_Function(callable); vectorcallfunc vector_func = PyVectorcall_Function(callable);
if (vector_func != NULL) { if (vector_func != NULL) {
return _PyVectorcall_Call(tstate, vector_func, callable, args, kwargs); return _PyVectorcall_Call(tstate, vector_func, callable, args, kwargs);
} }

View file

@ -1110,9 +1110,9 @@ mappingproxy_get(mappingproxyobject *pp, PyObject *const *args, Py_ssize_t nargs
{ {
return NULL; return NULL;
} }
return _PyObject_VectorcallMethod(&_Py_ID(get), newargs, return PyObject_VectorcallMethod(&_Py_ID(get), newargs,
3 | PY_VECTORCALL_ARGUMENTS_OFFSET, 3 | PY_VECTORCALL_ARGUMENTS_OFFSET,
NULL); NULL);
} }
static PyObject * static PyObject *

View file

@ -1485,7 +1485,7 @@ write_unraisable_exc_file(PyThreadState *tstate, PyObject *exc_type,
} }
/* Explicitly call file.flush() */ /* Explicitly call file.flush() */
PyObject *res = _PyObject_CallMethodNoArgs(file, &_Py_ID(flush)); PyObject *res = PyObject_CallMethodNoArgs(file, &_Py_ID(flush));
if (!res) { if (!res) {
return -1; return -1;
} }

View file

@ -278,7 +278,7 @@ import_ensure_initialized(PyInterpreterState *interp, PyObject *mod, PyObject *n
Py_XDECREF(spec); Py_XDECREF(spec);
if (busy) { if (busy) {
/* Wait until module is done importing. */ /* Wait until module is done importing. */
PyObject *value = _PyObject_CallMethodOneArg( PyObject *value = PyObject_CallMethodOneArg(
IMPORTLIB(interp), &_Py_ID(_lock_unlock_module), name); IMPORTLIB(interp), &_Py_ID(_lock_unlock_module), name);
if (value == NULL) { if (value == NULL) {
return -1; return -1;
@ -1660,7 +1660,7 @@ PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co,
external= PyObject_GetAttrString(IMPORTLIB(interp), external= PyObject_GetAttrString(IMPORTLIB(interp),
"_bootstrap_external"); "_bootstrap_external");
if (external != NULL) { if (external != NULL) {
pathobj = _PyObject_CallMethodOneArg( pathobj = PyObject_CallMethodOneArg(
external, &_Py_ID(_get_sourcefile), cpathobj); external, &_Py_ID(_get_sourcefile), cpathobj);
Py_DECREF(external); Py_DECREF(external);
} }

View file

@ -1707,7 +1707,7 @@ marshal_dump_impl(PyObject *module, PyObject *value, PyObject *file,
s = PyMarshal_WriteObjectToString(value, version); s = PyMarshal_WriteObjectToString(value, version);
if (s == NULL) if (s == NULL)
return NULL; return NULL;
res = _PyObject_CallMethodOneArg(file, &_Py_ID(write), s); res = PyObject_CallMethodOneArg(file, &_Py_ID(write), s);
Py_DECREF(s); Py_DECREF(s);
return res; return res;
} }

View file

@ -1565,7 +1565,7 @@ _PyErr_Display(PyObject *file, PyObject *unused, PyObject *value, PyObject *tb)
Py_XDECREF(ctx.seen); Py_XDECREF(ctx.seen);
/* Call file.flush() */ /* Call file.flush() */
PyObject *res = _PyObject_CallMethodNoArgs(file, &_Py_ID(flush)); PyObject *res = PyObject_CallMethodNoArgs(file, &_Py_ID(flush));
if (!res) { if (!res) {
/* Silently ignore file.flush() error */ /* Silently ignore file.flush() error */
PyErr_Clear(); PyErr_Clear();
@ -1677,7 +1677,7 @@ flush_io_stream(PyThreadState *tstate, PyObject *name)
{ {
PyObject *f = _PySys_GetAttr(tstate, name); PyObject *f = _PySys_GetAttr(tstate, name);
if (f != NULL) { if (f != NULL) {
PyObject *r = _PyObject_CallMethodNoArgs(f, &_Py_ID(flush)); PyObject *r = PyObject_CallMethodNoArgs(f, &_Py_ID(flush));
if (r) { if (r) {
Py_DECREF(r); Py_DECREF(r);
} }

View file

@ -3756,7 +3756,7 @@ sys_pyfile_write_unicode(PyObject *unicode, PyObject *file)
if (file == NULL) if (file == NULL)
return -1; return -1;
assert(unicode != NULL); assert(unicode != NULL);
PyObject *result = _PyObject_CallMethodOneArg(file, &_Py_ID(write), unicode); PyObject *result = PyObject_CallMethodOneArg(file, &_Py_ID(write), unicode);
if (result == NULL) { if (result == NULL) {
return -1; return -1;
} }