From 762f93ff2efd6b7ef0177cad57939c0ab2002eac Mon Sep 17 00:00:00 2001 From: Jeroen Demeyer Date: Mon, 8 Jul 2019 10:19:25 +0200 Subject: [PATCH] bpo-37337: Add _PyObject_CallMethodNoArgs() (GH-14267) --- Doc/c-api/object.rst | 11 +++ Include/cpython/abstract.h | 14 ++++ .../2019-06-19-12-06-31.bpo-37337.gXIGyU.rst | 3 +- Modules/_asynciomodule.c | 16 ++-- Modules/_collectionsmodule.c | 2 +- Modules/_ctypes/_ctypes.c | 2 +- Modules/_cursesmodule.c | 2 +- Modules/_datetimemodule.c | 10 +-- Modules/_dbmmodule.c | 2 +- Modules/_gdbmmodule.c | 2 +- Modules/_io/_iomodule.c | 4 +- Modules/_io/bufferedio.c | 26 +++--- Modules/_io/iobase.c | 17 ++-- Modules/_io/stringio.c | 4 +- Modules/_io/textio.c | 79 +++++++++---------- Modules/_pickle.c | 2 +- Modules/_posixsubprocess.c | 6 +- Modules/_sqlite/connection.c | 8 +- Modules/_sqlite/cursor.c | 2 +- Modules/_sqlite/module.c | 2 +- Modules/_threadmodule.c | 2 +- Modules/faulthandler.c | 6 +- Modules/mmapmodule.c | 2 +- Modules/ossaudiodev.c | 2 +- Modules/selectmodule.c | 2 +- Objects/abstract.c | 2 +- Objects/descrobject.c | 8 +- Objects/fileobject.c | 2 +- Objects/odictobject.c | 6 +- Objects/typeobject.c | 2 +- Objects/weakrefobject.c | 2 +- Python/bltinmodule.c | 12 +-- Python/errors.c | 2 +- Python/import.c | 2 +- Python/pylifecycle.c | 10 +-- Python/pythonrun.c | 6 +- Python/traceback.c | 4 +- 37 files changed, 154 insertions(+), 132 deletions(-) diff --git a/Doc/c-api/object.rst b/Doc/c-api/object.rst index 6d138558d60a6c..8ca034452954c3 100644 --- a/Doc/c-api/object.rst +++ b/Doc/c-api/object.rst @@ -364,6 +364,17 @@ Object Protocol *NULL* on failure. +.. c:function:: PyObject* _PyObject_CallMethodNoArgs(PyObject *obj, PyObject *name) + + Call a method of the Python object *obj* without arguments, + where the name of the method is given as a Python string object in *name*. + + Return the result of the call on success, or raise an exception and return + *NULL* on failure. + + .. versionadded:: 3.9 + + .. c:function:: PyObject* _PyObject_Vectorcall(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwnames) Call a callable Python object *callable*, using diff --git a/Include/cpython/abstract.h b/Include/cpython/abstract.h index c9a8a075458830..e9a23195f414b3 100644 --- a/Include/cpython/abstract.h +++ b/Include/cpython/abstract.h @@ -156,6 +156,13 @@ PyAPI_FUNC(PyObject *) _PyObject_VectorcallMethod( PyObject *name, PyObject *const *args, size_t nargsf, PyObject *kwnames); +static inline PyObject * +_PyObject_CallMethodNoArgs(PyObject *self, PyObject *name) +{ + return _PyObject_VectorcallMethod(name, &self, + 1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +} + /* Like PyObject_CallMethod(), but expect a _Py_Identifier* as the method name. */ PyAPI_FUNC(PyObject *) _PyObject_CallMethodId(PyObject *obj, @@ -184,6 +191,13 @@ _PyObject_VectorcallMethodId( return _PyObject_VectorcallMethod(oname, args, nargsf, kwnames); } +static inline PyObject * +_PyObject_CallMethodIdNoArgs(PyObject *self, _Py_Identifier *name) +{ + return _PyObject_VectorcallMethodId(name, &self, + 1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +} + PyAPI_FUNC(int) _PyObject_HasLen(PyObject *o); /* Guess the size of object 'o' using len(o) or o.__length_hint__(). diff --git a/Misc/NEWS.d/next/C API/2019-06-19-12-06-31.bpo-37337.gXIGyU.rst b/Misc/NEWS.d/next/C API/2019-06-19-12-06-31.bpo-37337.gXIGyU.rst index 96ba2d0ec085b9..df0e807e11666d 100644 --- a/Misc/NEWS.d/next/C API/2019-06-19-12-06-31.bpo-37337.gXIGyU.rst +++ b/Misc/NEWS.d/next/C API/2019-06-19-12-06-31.bpo-37337.gXIGyU.rst @@ -1 +1,2 @@ -Add :c:func:`_PyObject_VectorcallMethod` for fast calling of methods. +Add fast functions for calling methods: :c:func:`_PyObject_VectorcallMethod` +and :c:func:`_PyObject_CallMethodNoArgs` diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index 443acc5723c3b6..6c469d2a2ec589 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -332,7 +332,7 @@ get_event_loop(void) return NULL; } - loop = _PyObject_CallMethodId(policy, &PyId_get_event_loop, NULL); + loop = _PyObject_CallMethodIdNoArgs(policy, &PyId_get_event_loop); Py_DECREF(policy); return loop; } @@ -493,7 +493,7 @@ future_init(FutureObj *fut, PyObject *loop) } fut->fut_loop = loop; - res = _PyObject_CallMethodId(fut->fut_loop, &PyId_get_debug, NULL); + res = _PyObject_CallMethodIdNoArgs(fut->fut_loop, &PyId_get_debug); if (res == NULL) { return -1; } @@ -1295,9 +1295,8 @@ FutureObj_repr(FutureObj *fut) ENSURE_FUTURE_ALIVE(fut) - PyObject *rinfo = _PyObject_CallMethodIdObjArgs((PyObject*)fut, - &PyId__repr_info, - NULL); + PyObject *rinfo = _PyObject_CallMethodIdNoArgs((PyObject*)fut, + &PyId__repr_info); if (rinfo == NULL) { return NULL; } @@ -2197,8 +2196,7 @@ _asyncio_Task_cancel_impl(TaskObj *self) PyObject *res; int is_true; - res = _PyObject_CallMethodId( - self->task_fut_waiter, &PyId_cancel, NULL); + res = _PyObject_CallMethodIdNoArgs(self->task_fut_waiter, &PyId_cancel); if (res == NULL) { return NULL; } @@ -2735,7 +2733,7 @@ task_step_impl(TaskObj *task, PyObject *exc) if (task->task_must_cancel) { PyObject *r; int is_true; - r = _PyObject_CallMethodId(result, &PyId_cancel, NULL); + r = _PyObject_CallMethodIdNoArgs(result, &PyId_cancel); if (r == NULL) { return NULL; } @@ -2826,7 +2824,7 @@ task_step_impl(TaskObj *task, PyObject *exc) if (task->task_must_cancel) { PyObject *r; int is_true; - r = _PyObject_CallMethodId(result, &PyId_cancel, NULL); + r = _PyObject_CallMethodIdNoArgs(result, &PyId_cancel); if (r == NULL) { return NULL; } diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 7e9cf8a283a22a..1d23973fd05661 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -2039,7 +2039,7 @@ defdict_reduce(defdictobject *dd, PyObject *Py_UNUSED(ignored)) args = PyTuple_Pack(1, dd->default_factory); if (args == NULL) return NULL; - items = _PyObject_CallMethodId((PyObject *)dd, &PyId_items, NULL); + items = _PyObject_CallMethodIdNoArgs((PyObject *)dd, &PyId_items); if (items == NULL) { Py_DECREF(args); return NULL; diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index c6ae487b4cf046..c1941c16400e11 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -3974,7 +3974,7 @@ _build_result(PyObject *result, PyObject *callargs, _Py_IDENTIFIER(__ctypes_from_outparam__); v = PyTuple_GET_ITEM(callargs, i); - v = _PyObject_CallMethodId(v, &PyId___ctypes_from_outparam__, NULL); + v = _PyObject_CallMethodIdNoArgs(v, &PyId___ctypes_from_outparam__); if (v == NULL || numretvals == 1) { Py_DECREF(callargs); return v; diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index 2435e1c1295514..8595b6282c1bdc 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -2906,7 +2906,7 @@ _curses_getwin(PyObject *module, PyObject *file) if (_Py_set_inheritable(fileno(fp), 0, NULL) < 0) goto error; - data = _PyObject_CallMethodId(file, &PyId_read, NULL); + data = _PyObject_CallMethodIdNoArgs(file, &PyId_read); if (data == NULL) goto error; if (!PyBytes_Check(data)) { diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 2e0211cbbef801..0546368d1df7d5 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -1659,7 +1659,7 @@ time_time(void) if (time != NULL) { _Py_IDENTIFIER(time); - result = _PyObject_CallMethodId(time, &PyId_time, NULL); + result = _PyObject_CallMethodIdNoArgs(time, &PyId_time); Py_DECREF(time); } return result; @@ -1918,7 +1918,7 @@ get_float_as_integer_ratio(PyObject *floatobj) PyObject *ratio; assert(floatobj && PyFloat_Check(floatobj)); - ratio = _PyObject_CallMethodId(floatobj, &PyId_as_integer_ratio, NULL); + ratio = _PyObject_CallMethodIdNoArgs(floatobj, &PyId_as_integer_ratio); if (ratio == NULL) { return NULL; } @@ -3162,7 +3162,7 @@ date_isoformat(PyDateTime_Date *self, PyObject *Py_UNUSED(ignored)) static PyObject * date_str(PyDateTime_Date *self) { - return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, NULL); + return _PyObject_CallMethodIdNoArgs((PyObject *)self, &PyId_isoformat); } @@ -3188,7 +3188,7 @@ date_strftime(PyDateTime_Date *self, PyObject *args, PyObject *kw) &format)) return NULL; - tuple = _PyObject_CallMethodId((PyObject *)self, &PyId_timetuple, NULL); + tuple = _PyObject_CallMethodIdNoArgs((PyObject *)self, &PyId_timetuple); if (tuple == NULL) return NULL; result = wrap_strftime((PyObject *)self, format, tuple, @@ -4175,7 +4175,7 @@ time_repr(PyDateTime_Time *self) static PyObject * time_str(PyDateTime_Time *self) { - return _PyObject_CallMethodId((PyObject *)self, &PyId_isoformat, NULL); + return _PyObject_CallMethodIdNoArgs((PyObject *)self, &PyId_isoformat); } static PyObject * diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c index ea0a9d6fc957b6..b317b57e7ae57e 100644 --- a/Modules/_dbmmodule.c +++ b/Modules/_dbmmodule.c @@ -370,7 +370,7 @@ static PyObject * dbm__exit__(PyObject *self, PyObject *args) { _Py_IDENTIFIER(close); - return _PyObject_CallMethodId(self, &PyId_close, NULL); + return _PyObject_CallMethodIdNoArgs(self, &PyId_close); } diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c index 77e7887525069a..dd4a348d136c7d 100644 --- a/Modules/_gdbmmodule.c +++ b/Modules/_gdbmmodule.c @@ -497,7 +497,7 @@ static PyObject * dbm__exit__(PyObject *self, PyObject *args) { _Py_IDENTIFIER(close); - return _PyObject_CallMethodId(self, &PyId_close, NULL); + return _PyObject_CallMethodIdNoArgs(self, &PyId_close); } static PyMethodDef dbm_methods[] = { diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c index 5c2f019e840bdf..96426e0276abda 100644 --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -400,7 +400,7 @@ _io_open_impl(PyObject *module, PyObject *file, const char *mode, /* buffering */ if (buffering < 0) { - PyObject *res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL); + PyObject *res = _PyObject_CallMethodIdNoArgs(raw, &PyId_isatty); if (res == NULL) goto error; isatty = PyLong_AsLong(res); @@ -494,7 +494,7 @@ _io_open_impl(PyObject *module, PyObject *file, const char *mode, if (result != NULL) { PyObject *exc, *val, *tb, *close_result; PyErr_Fetch(&exc, &val, &tb); - close_result = _PyObject_CallMethodId(result, &PyId_close, NULL); + close_result = _PyObject_CallMethodIdNoArgs(result, &PyId_close); _PyErr_ChainExceptions(exc, val, tb); Py_XDECREF(close_result); Py_DECREF(result); diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 44e12db6a30ed0..9e7e5f3d0935dc 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -461,7 +461,7 @@ static PyObject * buffered_simple_flush(buffered *self, PyObject *args) { CHECK_INITIALIZED(self) - return PyObject_CallMethodObjArgs(self->raw, _PyIO_str_flush, NULL); + return _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_flush); } static int @@ -513,7 +513,7 @@ buffered_close(buffered *self, PyObject *args) } /* flush() will most probably re-take the lock, so drop it first */ LEAVE_BUFFERED(self) - res = PyObject_CallMethodObjArgs((PyObject *)self, _PyIO_str_flush, NULL); + res = _PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush); if (!ENTER_BUFFERED(self)) return NULL; if (res == NULL) @@ -521,7 +521,7 @@ buffered_close(buffered *self, PyObject *args) else Py_DECREF(res); - res = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_close, NULL); + res = _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_close); if (self->buffer) { PyMem_Free(self->buffer); @@ -545,7 +545,7 @@ buffered_detach(buffered *self, PyObject *Py_UNUSED(ignored)) { PyObject *raw, *res; CHECK_INITIALIZED(self) - res = PyObject_CallMethodObjArgs((PyObject *)self, _PyIO_str_flush, NULL); + res = _PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush); if (res == NULL) return NULL; Py_DECREF(res); @@ -562,21 +562,21 @@ static PyObject * buffered_seekable(buffered *self, PyObject *Py_UNUSED(ignored)) { CHECK_INITIALIZED(self) - return PyObject_CallMethodObjArgs(self->raw, _PyIO_str_seekable, NULL); + return _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_seekable); } static PyObject * buffered_readable(buffered *self, PyObject *Py_UNUSED(ignored)) { CHECK_INITIALIZED(self) - return PyObject_CallMethodObjArgs(self->raw, _PyIO_str_readable, NULL); + return _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_readable); } static PyObject * buffered_writable(buffered *self, PyObject *Py_UNUSED(ignored)) { CHECK_INITIALIZED(self) - return PyObject_CallMethodObjArgs(self->raw, _PyIO_str_writable, NULL); + return _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_writable); } static PyObject * @@ -599,14 +599,14 @@ static PyObject * buffered_fileno(buffered *self, PyObject *Py_UNUSED(ignored)) { CHECK_INITIALIZED(self) - return PyObject_CallMethodObjArgs(self->raw, _PyIO_str_fileno, NULL); + return _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_fileno); } static PyObject * buffered_isatty(buffered *self, PyObject *Py_UNUSED(ignored)) { CHECK_INITIALIZED(self) - return PyObject_CallMethodObjArgs(self->raw, _PyIO_str_isatty, NULL); + return _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_isatty); } /* Forward decls */ @@ -670,7 +670,7 @@ _buffered_raw_tell(buffered *self) { Py_off_t n; PyObject *res; - res = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_tell, NULL); + res = _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_tell); if (res == NULL) return -1; n = PyNumber_AsOff_t(res, PyExc_ValueError); @@ -1350,8 +1350,8 @@ buffered_iternext(buffered *self) line = _buffered_readline(self, -1); } else { - line = PyObject_CallMethodObjArgs((PyObject *)self, - _PyIO_str_readline, NULL); + line = _PyObject_CallMethodNoArgs((PyObject *)self, + _PyIO_str_readline); if (line && !PyBytes_Check(line)) { PyErr_Format(PyExc_OSError, "readline() should have returned a bytes object, " @@ -1566,7 +1566,7 @@ _bufferedreader_read_all(buffered *self) } /* Read until EOF or until read() would block. */ - data = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_read, NULL); + data = _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_read); if (data == NULL) goto cleanup; if (data != Py_None && !PyBytes_Check(data)) { diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c index 82cc7767652355..d51fc944e1a629 100644 --- a/Modules/_io/iobase.c +++ b/Modules/_io/iobase.c @@ -235,7 +235,7 @@ _io__IOBase_close_impl(PyObject *self) Py_RETURN_NONE; } - res = PyObject_CallMethodObjArgs(self, _PyIO_str_flush, NULL); + res = _PyObject_CallMethodNoArgs(self, _PyIO_str_flush); PyErr_Fetch(&exc, &val, &tb); rc = _PyObject_SetAttrId(self, &PyId___IOBase_closed, Py_True); @@ -281,8 +281,7 @@ iobase_finalize(PyObject *self) finalization process. */ if (_PyObject_SetAttrId(self, &PyId__finalizing, Py_True)) PyErr_Clear(); - res = PyObject_CallMethodObjArgs((PyObject *) self, _PyIO_str_close, - NULL); + res = _PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_close); /* Silencing I/O errors is bad, but printing spurious tracebacks is equally as bad, and potentially more frequent (because of shutdown issues). */ @@ -383,7 +382,7 @@ _io__IOBase_seekable_impl(PyObject *self) PyObject * _PyIOBase_check_seekable(PyObject *self, PyObject *args) { - PyObject *res = PyObject_CallMethodObjArgs(self, _PyIO_str_seekable, NULL); + PyObject *res = _PyObject_CallMethodNoArgs(self, _PyIO_str_seekable); if (res == NULL) return NULL; if (res != Py_True) { @@ -416,7 +415,7 @@ _io__IOBase_readable_impl(PyObject *self) PyObject * _PyIOBase_check_readable(PyObject *self, PyObject *args) { - PyObject *res = PyObject_CallMethodObjArgs(self, _PyIO_str_readable, NULL); + PyObject *res = _PyObject_CallMethodNoArgs(self, _PyIO_str_readable); if (res == NULL) return NULL; if (res != Py_True) { @@ -449,7 +448,7 @@ _io__IOBase_writable_impl(PyObject *self) PyObject * _PyIOBase_check_writable(PyObject *self, PyObject *args) { - PyObject *res = PyObject_CallMethodObjArgs(self, _PyIO_str_writable, NULL); + PyObject *res = _PyObject_CallMethodNoArgs(self, _PyIO_str_writable); if (res == NULL) return NULL; if (res != Py_True) { @@ -478,7 +477,7 @@ iobase_enter(PyObject *self, PyObject *args) static PyObject * iobase_exit(PyObject *self, PyObject *args) { - return PyObject_CallMethodObjArgs(self, _PyIO_str_close, NULL); + return _PyObject_CallMethodNoArgs(self, _PyIO_str_close); } /* Lower-level APIs */ @@ -656,7 +655,7 @@ iobase_iter(PyObject *self) static PyObject * iobase_iternext(PyObject *self) { - PyObject *line = PyObject_CallMethodObjArgs(self, _PyIO_str_readline, NULL); + PyObject *line = _PyObject_CallMethodNoArgs(self, _PyIO_str_readline); if (line == NULL) return NULL; @@ -921,7 +920,7 @@ _io__RawIOBase_read_impl(PyObject *self, Py_ssize_t n) if (n < 0) { _Py_IDENTIFIER(readall); - return _PyObject_CallMethodId(self, &PyId_readall, NULL); + return _PyObject_CallMethodIdNoArgs(self, &PyId_readall); } /* TODO: allocate a bytes object directly instead and manually construct diff --git a/Modules/_io/stringio.c b/Modules/_io/stringio.c index 9e9724db2d3308..810cad6d63ce8d 100644 --- a/Modules/_io/stringio.c +++ b/Modules/_io/stringio.c @@ -408,8 +408,8 @@ stringio_iternext(stringio *self) } else { /* XXX is subclassing StringIO really supported? */ - line = PyObject_CallMethodObjArgs((PyObject *)self, - _PyIO_str_readline, NULL); + line = _PyObject_CallMethodNoArgs((PyObject *)self, + _PyIO_str_readline); if (line && !PyUnicode_Check(line)) { PyErr_Format(PyExc_OSError, "readline() should have returned a str object, " diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index 021231e4c6b58c..ed1dc005c69a17 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -527,8 +527,8 @@ _io_IncrementalNewlineDecoder_getstate_impl(nldecoder_object *self) unsigned long long flag; if (self->decoder != Py_None) { - PyObject *state = PyObject_CallMethodObjArgs(self->decoder, - _PyIO_str_getstate, NULL); + PyObject *state = _PyObject_CallMethodNoArgs(self->decoder, + _PyIO_str_getstate); if (state == NULL) return NULL; if (!PyTuple_Check(state)) { @@ -601,7 +601,7 @@ _io_IncrementalNewlineDecoder_reset_impl(nldecoder_object *self) self->seennl = 0; self->pendingcr = 0; if (self->decoder != Py_None) - return PyObject_CallMethodObjArgs(self->decoder, _PyIO_str_reset, NULL); + return _PyObject_CallMethodNoArgs(self->decoder, _PyIO_str_reset); else Py_RETURN_NONE; } @@ -862,7 +862,7 @@ _textiowrapper_set_decoder(textio *self, PyObject *codec_info, PyObject *res; int r; - res = _PyObject_CallMethodId(self->buffer, &PyId_readable, NULL); + res = _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_readable); if (res == NULL) return -1; @@ -917,7 +917,7 @@ _textiowrapper_set_encoder(textio *self, PyObject *codec_info, PyObject *res; int r; - res = _PyObject_CallMethodId(self->buffer, &PyId_writable, NULL); + res = _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_writable); if (res == NULL) return -1; @@ -963,8 +963,8 @@ _textiowrapper_fix_encoder_state(textio *self) self->encoding_start_of_stream = 1; - PyObject *cookieObj = PyObject_CallMethodObjArgs( - self->buffer, _PyIO_str_tell, NULL); + PyObject *cookieObj = _PyObject_CallMethodNoArgs( + self->buffer, _PyIO_str_tell); if (cookieObj == NULL) { return -1; } @@ -1126,7 +1126,7 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, state = IO_STATE(); if (state == NULL) goto error; - fileno = _PyObject_CallMethodId(buffer, &PyId_fileno, NULL); + fileno = _PyObject_CallMethodIdNoArgs(buffer, &PyId_fileno); /* Ignore only AttributeError and UnsupportedOperation */ if (fileno == NULL) { if (PyErr_ExceptionMatches(PyExc_AttributeError) || @@ -1241,7 +1241,7 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, } } - res = _PyObject_CallMethodId(buffer, &PyId_seekable, NULL); + res = _PyObject_CallMethodIdNoArgs(buffer, &PyId_seekable); if (res == NULL) goto error; r = PyObject_IsTrue(res); @@ -1386,7 +1386,7 @@ _io_TextIOWrapper_reconfigure_impl(textio *self, PyObject *encoding, return NULL; } - PyObject *res = PyObject_CallMethodObjArgs((PyObject *)self, _PyIO_str_flush, NULL); + PyObject *res = _PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush); if (res == NULL) { return NULL; } @@ -1525,7 +1525,7 @@ _io_TextIOWrapper_detach_impl(textio *self) { PyObject *buffer, *res; CHECK_ATTACHED(self); - res = PyObject_CallMethodObjArgs((PyObject *)self, _PyIO_str_flush, NULL); + res = _PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush); if (res == NULL) return NULL; Py_DECREF(res); @@ -1720,7 +1720,7 @@ _io_TextIOWrapper_write_impl(textio *self, PyObject *text) } if (needflush) { - ret = PyObject_CallMethodObjArgs(self->buffer, _PyIO_str_flush, NULL); + ret = _PyObject_CallMethodNoArgs(self->buffer, _PyIO_str_flush); if (ret == NULL) return NULL; Py_DECREF(ret); @@ -1730,7 +1730,7 @@ _io_TextIOWrapper_write_impl(textio *self, PyObject *text) Py_CLEAR(self->snapshot); if (self->decoder) { - ret = _PyObject_CallMethodId(self->decoder, &PyId_reset, NULL); + ret = _PyObject_CallMethodIdNoArgs(self->decoder, &PyId_reset); if (ret == NULL) return NULL; Py_DECREF(ret); @@ -1810,9 +1810,8 @@ textiowrapper_read_chunk(textio *self, Py_ssize_t size_hint) /* To prepare for tell(), we need to snapshot a point in the file * where the decoder's input buffer is empty. */ - - PyObject *state = PyObject_CallMethodObjArgs(self->decoder, - _PyIO_str_getstate, NULL); + PyObject *state = _PyObject_CallMethodNoArgs(self->decoder, + _PyIO_str_getstate); if (state == NULL) return -1; /* Given this, we know there was a valid snapshot point @@ -1935,7 +1934,7 @@ _io_TextIOWrapper_read_impl(textio *self, Py_ssize_t n) if (n < 0) { /* Read everything */ - PyObject *bytes = _PyObject_CallMethodId(self->buffer, &PyId_read, NULL); + PyObject *bytes = _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_read); PyObject *decoded; if (bytes == NULL) goto fail; @@ -2396,7 +2395,7 @@ _textiowrapper_decoder_setstate(textio *self, cookie_type *cookie) utf-16, that we are expecting a BOM). */ if (cookie->start_pos == 0 && cookie->dec_flags == 0) - res = PyObject_CallMethodObjArgs(self->decoder, _PyIO_str_reset, NULL); + res = _PyObject_CallMethodNoArgs(self->decoder, _PyIO_str_reset); else res = _PyObject_CallMethodId(self->decoder, &PyId_setstate, "((yi))", "", cookie->dec_flags); @@ -2411,7 +2410,7 @@ _textiowrapper_encoder_reset(textio *self, int start_of_stream) { PyObject *res; if (start_of_stream) { - res = PyObject_CallMethodObjArgs(self->encoder, _PyIO_str_reset, NULL); + res = _PyObject_CallMethodNoArgs(self->encoder, _PyIO_str_reset); self->encoding_start_of_stream = 1; } else { @@ -2476,7 +2475,7 @@ _io_TextIOWrapper_seek_impl(textio *self, PyObject *cookieObj, int whence) * sync the underlying buffer with the current position. */ Py_DECREF(cookieObj); - cookieObj = _PyObject_CallMethodId((PyObject *)self, &PyId_tell, NULL); + cookieObj = _PyObject_CallMethodIdNoArgs((PyObject *)self, &PyId_tell); if (cookieObj == NULL) goto fail; break; @@ -2492,7 +2491,7 @@ _io_TextIOWrapper_seek_impl(textio *self, PyObject *cookieObj, int whence) goto fail; } - res = _PyObject_CallMethodId((PyObject *)self, &PyId_flush, NULL); + res = _PyObject_CallMethodIdNoArgs((PyObject *)self, &PyId_flush); if (res == NULL) goto fail; Py_DECREF(res); @@ -2500,7 +2499,7 @@ _io_TextIOWrapper_seek_impl(textio *self, PyObject *cookieObj, int whence) textiowrapper_set_decoded_chars(self, NULL); Py_CLEAR(self->snapshot); if (self->decoder) { - res = _PyObject_CallMethodId(self->decoder, &PyId_reset, NULL); + res = _PyObject_CallMethodIdNoArgs(self->decoder, &PyId_reset); if (res == NULL) goto fail; Py_DECREF(res); @@ -2540,7 +2539,7 @@ _io_TextIOWrapper_seek_impl(textio *self, PyObject *cookieObj, int whence) goto fail; } - res = PyObject_CallMethodObjArgs((PyObject *)self, _PyIO_str_flush, NULL); + res = _PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush); if (res == NULL) goto fail; Py_DECREF(res); @@ -2663,12 +2662,12 @@ _io_TextIOWrapper_tell_impl(textio *self) if (_textiowrapper_writeflush(self) < 0) return NULL; - res = _PyObject_CallMethodId((PyObject *)self, &PyId_flush, NULL); + res = _PyObject_CallMethodIdNoArgs((PyObject *)self, &PyId_flush); if (res == NULL) goto fail; Py_DECREF(res); - posobj = _PyObject_CallMethodId(self->buffer, &PyId_tell, NULL); + posobj = _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_tell); if (posobj == NULL) goto fail; @@ -2704,15 +2703,15 @@ _io_TextIOWrapper_tell_impl(textio *self) chars_to_skip = self->decoded_chars_used; /* Decoder state will be restored at the end */ - saved_state = PyObject_CallMethodObjArgs(self->decoder, - _PyIO_str_getstate, NULL); + saved_state = _PyObject_CallMethodNoArgs(self->decoder, + _PyIO_str_getstate); if (saved_state == NULL) goto fail; #define DECODER_GETSTATE() do { \ PyObject *dec_buffer; \ - PyObject *_state = PyObject_CallMethodObjArgs(self->decoder, \ - _PyIO_str_getstate, NULL); \ + PyObject *_state = _PyObject_CallMethodNoArgs(self->decoder, \ + _PyIO_str_getstate); \ if (_state == NULL) \ goto fail; \ if (!PyTuple_Check(_state)) { \ @@ -2874,7 +2873,7 @@ _io_TextIOWrapper_truncate_impl(textio *self, PyObject *pos) CHECK_ATTACHED(self) - res = PyObject_CallMethodObjArgs((PyObject *) self, _PyIO_str_flush, NULL); + res = _PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush); if (res == NULL) return NULL; Py_DECREF(res); @@ -2963,7 +2962,7 @@ _io_TextIOWrapper_fileno_impl(textio *self) /*[clinic end generated code: output=21490a4c3da13e6c input=c488ca83d0069f9b]*/ { CHECK_ATTACHED(self); - return _PyObject_CallMethodId(self->buffer, &PyId_fileno, NULL); + return _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_fileno); } /*[clinic input] @@ -2975,7 +2974,7 @@ _io_TextIOWrapper_seekable_impl(textio *self) /*[clinic end generated code: output=ab223dbbcffc0f00 input=8b005ca06e1fca13]*/ { CHECK_ATTACHED(self); - return _PyObject_CallMethodId(self->buffer, &PyId_seekable, NULL); + return _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_seekable); } /*[clinic input] @@ -2987,7 +2986,7 @@ _io_TextIOWrapper_readable_impl(textio *self) /*[clinic end generated code: output=72ff7ba289a8a91b input=0704ea7e01b0d3eb]*/ { CHECK_ATTACHED(self); - return _PyObject_CallMethodId(self->buffer, &PyId_readable, NULL); + return _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_readable); } /*[clinic input] @@ -2999,7 +2998,7 @@ _io_TextIOWrapper_writable_impl(textio *self) /*[clinic end generated code: output=a728c71790d03200 input=c41740bc9d8636e8]*/ { CHECK_ATTACHED(self); - return _PyObject_CallMethodId(self->buffer, &PyId_writable, NULL); + return _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_writable); } /*[clinic input] @@ -3011,7 +3010,7 @@ _io_TextIOWrapper_isatty_impl(textio *self) /*[clinic end generated code: output=12be1a35bace882e input=fb68d9f2c99bbfff]*/ { CHECK_ATTACHED(self); - return _PyObject_CallMethodId(self->buffer, &PyId_isatty, NULL); + return _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_isatty); } /*[clinic input] @@ -3027,7 +3026,7 @@ _io_TextIOWrapper_flush_impl(textio *self) self->telling = self->seekable; if (_textiowrapper_writeflush(self) < 0) return NULL; - return _PyObject_CallMethodId(self->buffer, &PyId_flush, NULL); + return _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_flush); } /*[clinic input] @@ -3064,13 +3063,13 @@ _io_TextIOWrapper_close_impl(textio *self) else PyErr_Clear(); } - res = _PyObject_CallMethodId((PyObject *)self, &PyId_flush, NULL); + res = _PyObject_CallMethodIdNoArgs((PyObject *)self, &PyId_flush); if (res == NULL) PyErr_Fetch(&exc, &val, &tb); else Py_DECREF(res); - res = _PyObject_CallMethodId(self->buffer, &PyId_close, NULL); + res = _PyObject_CallMethodIdNoArgs(self->buffer, &PyId_close); if (exc != NULL) { _PyErr_ChainExceptions(exc, val, tb); Py_CLEAR(res); @@ -3092,8 +3091,8 @@ textiowrapper_iternext(textio *self) line = _textiowrapper_readline(self, -1); } else { - line = PyObject_CallMethodObjArgs((PyObject *)self, - _PyIO_str_readline, NULL); + line = _PyObject_CallMethodNoArgs((PyObject *)self, + _PyIO_str_readline); if (line && !PyUnicode_Check(line)) { PyErr_Format(PyExc_OSError, "readline() should have returned a str object, " diff --git a/Modules/_pickle.c b/Modules/_pickle.c index d6d1250d04f755..0b0928f5cd2fa8 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -3305,7 +3305,7 @@ save_dict(PicklerObject *self, PyObject *obj) } else { _Py_IDENTIFIER(items); - items = _PyObject_CallMethodId(obj, &PyId_items, NULL); + items = _PyObject_CallMethodIdNoArgs(obj, &PyId_items); if (items == NULL) goto error; iter = PyObject_GetIter(items); diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c index 81a23c6d330037..60c8eab90a15cf 100644 --- a/Modules/_posixsubprocess.c +++ b/Modules/_posixsubprocess.c @@ -60,7 +60,7 @@ _enable_gc(int need_to_reenable_gc, PyObject *gc_module) if (need_to_reenable_gc) { PyErr_Fetch(&exctype, &val, &tb); - result = _PyObject_CallMethodId(gc_module, &PyId_enable, NULL); + result = _PyObject_CallMethodIdNoArgs(gc_module, &PyId_enable); if (exctype != NULL) { PyErr_Restore(exctype, val, tb); } @@ -606,7 +606,7 @@ subprocess_fork_exec(PyObject* self, PyObject *args) gc_module = PyImport_ImportModule("gc"); if (gc_module == NULL) return NULL; - result = _PyObject_CallMethodId(gc_module, &PyId_isenabled, NULL); + result = _PyObject_CallMethodIdNoArgs(gc_module, &PyId_isenabled); if (result == NULL) { Py_DECREF(gc_module); return NULL; @@ -617,7 +617,7 @@ subprocess_fork_exec(PyObject* self, PyObject *args) Py_DECREF(gc_module); return NULL; } - result = _PyObject_CallMethodId(gc_module, &PyId_disable, NULL); + result = _PyObject_CallMethodIdNoArgs(gc_module, &PyId_disable); if (result == NULL) { Py_DECREF(gc_module); return NULL; diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 08604b99a6ac64..30a9b889a9df19 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -713,7 +713,7 @@ void _pysqlite_final_callback(sqlite3_context* context) PyErr_Fetch(&exception, &value, &tb); restore = 1; - function_result = _PyObject_CallMethodId(*aggregate_instance, &PyId_finalize, NULL); + function_result = _PyObject_CallMethodIdNoArgs(*aggregate_instance, &PyId_finalize); Py_DECREF(*aggregate_instance); @@ -1275,7 +1275,7 @@ PyObject* pysqlite_connection_execute(pysqlite_Connection* self, PyObject* args) PyObject* result = 0; PyObject* method = 0; - cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, NULL); + cursor = _PyObject_CallMethodIdNoArgs((PyObject*)self, &PyId_cursor); if (!cursor) { goto error; } @@ -1304,7 +1304,7 @@ PyObject* pysqlite_connection_executemany(pysqlite_Connection* self, PyObject* a PyObject* result = 0; PyObject* method = 0; - cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, NULL); + cursor = _PyObject_CallMethodIdNoArgs((PyObject*)self, &PyId_cursor); if (!cursor) { goto error; } @@ -1333,7 +1333,7 @@ PyObject* pysqlite_connection_executescript(pysqlite_Connection* self, PyObject* PyObject* result = 0; PyObject* method = 0; - cursor = _PyObject_CallMethodId((PyObject*)self, &PyId_cursor, NULL); + cursor = _PyObject_CallMethodIdNoArgs((PyObject*)self, &PyId_cursor); if (!cursor) { goto error; } diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index e6fcac887fe3fc..6d9685b2964255 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -106,7 +106,7 @@ _pysqlite_get_converter(const char *keystr, Py_ssize_t keylen) if (!key) { return NULL; } - upcase_key = _PyObject_CallMethodId(key, &PyId_upper, NULL); + upcase_key = _PyObject_CallMethodIdNoArgs(key, &PyId_upper); Py_DECREF(key); if (!upcase_key) { return NULL; diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c index 9fe0dc952f0b82..d5c353ea7bee83 100644 --- a/Modules/_sqlite/module.c +++ b/Modules/_sqlite/module.c @@ -203,7 +203,7 @@ static PyObject* module_register_converter(PyObject* self, PyObject* args) } /* convert the name to upper case */ - name = _PyObject_CallMethodId(orig_name, &PyId_upper, NULL); + name = _PyObject_CallMethodIdNoArgs(orig_name, &PyId_upper); if (!name) { goto error; } diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 9ab8e7a0ceb3c4..6665827fe2babc 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -1358,7 +1358,7 @@ thread_excepthook_file(PyObject *file, PyObject *exc_type, PyObject *exc_value, _PyErr_Display(file, exc_type, exc_value, exc_traceback); /* Call file.flush() */ - PyObject *res = _PyObject_CallMethodId(file, &PyId_flush, NULL); + PyObject *res = _PyObject_CallMethodIdNoArgs(file, &PyId_flush); if (!res) { return -1; } diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index f2b5a503f4ee1e..2331051f7907a8 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -172,7 +172,7 @@ faulthandler_get_fileno(PyObject **file_ptr) return fd; } - result = _PyObject_CallMethodId(file, &PyId_fileno, NULL); + result = _PyObject_CallMethodIdNoArgs(file, &PyId_fileno); if (result == NULL) return -1; @@ -190,7 +190,7 @@ faulthandler_get_fileno(PyObject **file_ptr) return -1; } - result = _PyObject_CallMethodId(file, &PyId_flush, NULL); + result = _PyObject_CallMethodIdNoArgs(file, &PyId_flush); if (result != NULL) Py_DECREF(result); else { @@ -1305,7 +1305,7 @@ faulthandler_init_enable(void) return -1; } - PyObject *res = _PyObject_CallMethodId(module, &PyId_enable, NULL); + PyObject *res = _PyObject_CallMethodIdNoArgs(module, &PyId_enable); Py_DECREF(module); if (res == NULL) { return -1; diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index 9e3414f94e3124..51ab3f054f24f6 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -692,7 +692,7 @@ mmap__exit__method(PyObject *self, PyObject *args) { _Py_IDENTIFIER(close); - return _PyObject_CallMethodId(self, &PyId_close, NULL); + return _PyObject_CallMethodIdNoArgs(self, &PyId_close); } #ifdef MS_WINDOWS diff --git a/Modules/ossaudiodev.c b/Modules/ossaudiodev.c index affaf1d9680be2..6e050e4bc4ca53 100644 --- a/Modules/ossaudiodev.c +++ b/Modules/ossaudiodev.c @@ -539,7 +539,7 @@ oss_exit(PyObject *self, PyObject *unused) { _Py_IDENTIFIER(close); - PyObject *ret = _PyObject_CallMethodId(self, &PyId_close, NULL); + PyObject *ret = _PyObject_CallMethodIdNoArgs(self, &PyId_close); if (!ret) return NULL; Py_DECREF(ret); diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index ed71d8b0d59852..2e06a897132a84 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -1634,7 +1634,7 @@ select_epoll___exit___impl(pyEpoll_Object *self, PyObject *exc_type, { _Py_IDENTIFIER(close); - return _PyObject_CallMethodId((PyObject *)self, &PyId_close, NULL); + return _PyObject_CallMethodIdNoArgs((PyObject *)self, &PyId_close); } static PyGetSetDef pyepoll_getsetlist[] = { diff --git a/Objects/abstract.c b/Objects/abstract.c index 86178a74ea38ab..db1c3064db6f1f 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -2221,7 +2221,7 @@ method_output_as_list(PyObject *o, _Py_Identifier *meth_id) PyObject *it, *result, *meth_output; assert(o != NULL); - meth_output = _PyObject_CallMethodId(o, meth_id, NULL); + meth_output = _PyObject_CallMethodIdNoArgs(o, meth_id); if (meth_output == NULL || PyList_CheckExact(meth_output)) { return meth_output; } diff --git a/Objects/descrobject.c b/Objects/descrobject.c index 99855d8ae44cf8..edce250c7948a7 100644 --- a/Objects/descrobject.c +++ b/Objects/descrobject.c @@ -1019,28 +1019,28 @@ static PyObject * mappingproxy_keys(mappingproxyobject *pp, PyObject *Py_UNUSED(ignored)) { _Py_IDENTIFIER(keys); - return _PyObject_CallMethodId(pp->mapping, &PyId_keys, NULL); + return _PyObject_CallMethodIdNoArgs(pp->mapping, &PyId_keys); } static PyObject * mappingproxy_values(mappingproxyobject *pp, PyObject *Py_UNUSED(ignored)) { _Py_IDENTIFIER(values); - return _PyObject_CallMethodId(pp->mapping, &PyId_values, NULL); + return _PyObject_CallMethodIdNoArgs(pp->mapping, &PyId_values); } static PyObject * mappingproxy_items(mappingproxyobject *pp, PyObject *Py_UNUSED(ignored)) { _Py_IDENTIFIER(items); - return _PyObject_CallMethodId(pp->mapping, &PyId_items, NULL); + return _PyObject_CallMethodIdNoArgs(pp->mapping, &PyId_items); } static PyObject * mappingproxy_copy(mappingproxyobject *pp, PyObject *Py_UNUSED(ignored)) { _Py_IDENTIFIER(copy); - return _PyObject_CallMethodId(pp->mapping, &PyId_copy, NULL); + return _PyObject_CallMethodIdNoArgs(pp->mapping, &PyId_copy); } /* WARNING: mappingproxy methods must not give access diff --git a/Objects/fileobject.c b/Objects/fileobject.c index a21e490817eb9f..0faf7e70b5d87f 100644 --- a/Objects/fileobject.c +++ b/Objects/fileobject.c @@ -61,7 +61,7 @@ PyFile_GetLine(PyObject *f, int n) } if (n <= 0) { - result = _PyObject_CallMethodIdObjArgs(f, &PyId_readline, NULL); + result = _PyObject_CallMethodIdNoArgs(f, &PyId_readline); } else { result = _PyObject_CallMethodId(f, &PyId_readline, "i", n); diff --git a/Objects/odictobject.c b/Objects/odictobject.c index 4c9ae3bc934686..dfbd30a976caf2 100644 --- a/Objects/odictobject.c +++ b/Objects/odictobject.c @@ -920,7 +920,7 @@ odict_reduce(register PyODictObject *od, PyObject *Py_UNUSED(ignored)) if (args == NULL) goto Done; - items = _PyObject_CallMethodIdObjArgs((PyObject *)od, &PyId_items, NULL); + items = _PyObject_CallMethodIdNoArgs((PyObject *)od, &PyId_items); if (items == NULL) goto Done; @@ -1421,8 +1421,8 @@ odict_repr(PyODictObject *self) Py_SIZE(pieces) = count; } else { - PyObject *items = _PyObject_CallMethodIdObjArgs((PyObject *)self, - &PyId_items, NULL); + PyObject *items = _PyObject_CallMethodIdNoArgs((PyObject *)self, + &PyId_items); if (items == NULL) goto Done; pieces = PySequence_List(items); diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 3b9a537936a332..96021eeccc57e3 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -4425,7 +4425,7 @@ _PyObject_GetItemsIter(PyObject *obj, PyObject **listitems, PyObject *items; _Py_IDENTIFIER(items); - items = _PyObject_CallMethodIdObjArgs(obj, &PyId_items, NULL); + items = _PyObject_CallMethodIdNoArgs(obj, &PyId_items); if (items == NULL) { Py_CLEAR(*listitems); return -1; diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c index ae3f6dca9eed0b..e8a429ab5b54bc 100644 --- a/Objects/weakrefobject.c +++ b/Objects/weakrefobject.c @@ -455,7 +455,7 @@ proxy_checkref(PyWeakReference *proxy) method(PyObject *proxy, PyObject *Py_UNUSED(ignored)) { \ _Py_IDENTIFIER(special); \ UNWRAP(proxy); \ - return _PyObject_CallMethodId(proxy, &PyId_##special, NULL); \ + return _PyObject_CallMethodIdNoArgs(proxy, &PyId_##special); \ } diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 5de43636d96bb0..65110d8d12c625 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -1889,7 +1889,7 @@ builtin_print(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject if (do_flush == -1) return NULL; else if (do_flush) { - tmp = _PyObject_CallMethodId(file, &PyId_flush, NULL); + tmp = _PyObject_CallMethodIdNoArgs(file, &PyId_flush); if (tmp == NULL) return NULL; else @@ -1959,7 +1959,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt) } /* First of all, flush stderr */ - tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL); + tmp = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush); if (tmp == NULL) PyErr_Clear(); else @@ -1968,7 +1968,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt) /* We should only use (GNU) readline if Python's sys.stdin and sys.stdout are the same as C's stdin and stdout, because we need to pass it those. */ - tmp = _PyObject_CallMethodId(fin, &PyId_fileno, NULL); + tmp = _PyObject_CallMethodIdNoArgs(fin, &PyId_fileno); if (tmp == NULL) { PyErr_Clear(); tty = 0; @@ -1981,7 +1981,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt) tty = fd == fileno(stdin) && isatty(fd); } if (tty) { - tmp = _PyObject_CallMethodId(fout, &PyId_fileno, NULL); + tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_fileno); if (tmp == NULL) { PyErr_Clear(); tty = 0; @@ -2019,7 +2019,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt) stdin_errors_str = PyUnicode_AsUTF8(stdin_errors); if (!stdin_encoding_str || !stdin_errors_str) goto _readline_errors; - tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL); + tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush); if (tmp == NULL) PyErr_Clear(); else @@ -2114,7 +2114,7 @@ builtin_input_impl(PyObject *module, PyObject *prompt) if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0) return NULL; } - tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL); + tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush); if (tmp == NULL) PyErr_Clear(); else diff --git a/Python/errors.c b/Python/errors.c index a7d40c132d7bfa..b935341636f787 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -1263,7 +1263,7 @@ write_unraisable_exc_file(PyThreadState *tstate, PyObject *exc_type, } /* Explicitly call file.flush() */ - PyObject *res = _PyObject_CallMethodId(file, &PyId_flush, NULL); + PyObject *res = _PyObject_CallMethodIdNoArgs(file, &PyId_flush); if (!res) { return -1; } diff --git a/Python/import.c b/Python/import.c index 76866ae645a7b6..df258751c82ee5 100644 --- a/Python/import.c +++ b/Python/import.c @@ -539,7 +539,7 @@ _PyImport_Cleanup(PyThreadState *tstate) } else { _Py_IDENTIFIER(clear); - if (_PyObject_CallMethodId(modules, &PyId_clear, "") == NULL) { + if (_PyObject_CallMethodIdNoArgs(modules, &PyId_clear) == NULL) { PyErr_WriteUnraisable(NULL); } } diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 10765dab8f5d4b..e3333db4328ae6 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -1106,7 +1106,7 @@ flush_std_files(void) int status = 0; if (fout != NULL && fout != Py_None && !file_is_closed(fout)) { - tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL); + tmp = _PyObject_CallMethodIdNoArgs(fout, &PyId_flush); if (tmp == NULL) { PyErr_WriteUnraisable(fout); status = -1; @@ -1116,7 +1116,7 @@ flush_std_files(void) } if (ferr != NULL && ferr != Py_None && !file_is_closed(ferr)) { - tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL); + tmp = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush); if (tmp == NULL) { PyErr_Clear(); status = -1; @@ -1762,7 +1762,7 @@ create_stdio(const PyConfig *config, PyObject* io, text = PyUnicode_FromString(name); if (text == NULL || _PyObject_SetAttrId(raw, &PyId_name, text) < 0) goto error; - res = _PyObject_CallMethodId(raw, &PyId_isatty, NULL); + res = _PyObject_CallMethodIdNoArgs(raw, &PyId_isatty); if (res == NULL) goto error; isatty = PyObject_IsTrue(res); @@ -2026,7 +2026,7 @@ _Py_FatalError_PrintExc(int fd) Py_XDECREF(tb); /* sys.stderr may be buffered: call sys.stderr.flush() */ - res = _PyObject_CallMethodId(ferr, &PyId_flush, NULL); + res = _PyObject_CallMethodIdNoArgs(ferr, &PyId_flush); if (res == NULL) { _PyErr_Clear(tstate); } @@ -2220,7 +2220,7 @@ wait_for_thread_shutdown(PyThreadState *tstate) /* else: threading not imported */ return; } - result = _PyObject_CallMethodId(threading, &PyId__shutdown, NULL); + result = _PyObject_CallMethodIdNoArgs(threading, &PyId__shutdown); if (result == NULL) { PyErr_WriteUnraisable(threading); } diff --git a/Python/pythonrun.c b/Python/pythonrun.c index f1d946a0b0f83d..6089086078730d 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -978,7 +978,7 @@ _PyErr_Display(PyObject *file, PyObject *exception, PyObject *value, PyObject *t Py_XDECREF(seen); /* Call file.flush() */ - PyObject *res = _PyObject_CallMethodId(file, &PyId_flush, NULL); + PyObject *res = _PyObject_CallMethodIdNoArgs(file, &PyId_flush); if (!res) { /* Silently ignore file.flush() error */ PyErr_Clear(); @@ -1072,7 +1072,7 @@ flush_io(void) f = _PySys_GetObjectId(&PyId_stderr); if (f != NULL) { - r = _PyObject_CallMethodId(f, &PyId_flush, NULL); + r = _PyObject_CallMethodIdNoArgs(f, &PyId_flush); if (r) Py_DECREF(r); else @@ -1080,7 +1080,7 @@ flush_io(void) } f = _PySys_GetObjectId(&PyId_stdout); if (f != NULL) { - r = _PyObject_CallMethodId(f, &PyId_flush, NULL); + r = _PyObject_CallMethodIdNoArgs(f, &PyId_flush); if (r) Py_DECREF(r); else diff --git a/Python/traceback.c b/Python/traceback.c index 0463eb6d8c98e7..f396f1ad983c23 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -430,7 +430,7 @@ _Py_DisplaySourceLine(PyObject *f, PyObject *filename, int lineno, int indent) if (fob == NULL) { PyErr_Clear(); - res = _PyObject_CallMethodId(binary, &PyId_close, NULL); + res = _PyObject_CallMethodIdNoArgs(binary, &PyId_close); Py_DECREF(binary); if (res) Py_DECREF(res); @@ -450,7 +450,7 @@ _Py_DisplaySourceLine(PyObject *f, PyObject *filename, int lineno, int indent) break; } } - res = _PyObject_CallMethodId(fob, &PyId_close, NULL); + res = _PyObject_CallMethodIdNoArgs(fob, &PyId_close); if (res) Py_DECREF(res); else