diff options
author | Jeroen Demeyer <J.Demeyer@UGent.be> | 2019-07-11 08:59:05 (GMT) |
---|---|---|
committer | Inada Naoki <songofacandy@gmail.com> | 2019-07-11 08:59:05 (GMT) |
commit | 59ad110d7a7784d53d0b502eebce0346597a6bef (patch) | |
tree | 8ccd39e358017efe2abe41912c2f9d567ee9f248 | |
parent | 2a3d4d9c53dd4831c3ecf56bc7c4a289c33030d6 (diff) | |
download | cpython-59ad110d7a7784d53d0b502eebce0346597a6bef.zip cpython-59ad110d7a7784d53d0b502eebce0346597a6bef.tar.gz cpython-59ad110d7a7784d53d0b502eebce0346597a6bef.tar.bz2 |
bpo-37547: add _PyObject_CallMethodOneArg (GH-14685)
-rw-r--r-- | Doc/c-api/object.rst | 12 | ||||
-rw-r--r-- | Include/cpython/abstract.h | 18 | ||||
-rw-r--r-- | Misc/NEWS.d/next/C API/2019-06-19-12-06-31.bpo-37337.gXIGyU.rst | 4 | ||||
-rw-r--r-- | Modules/_abc.c | 23 | ||||
-rw-r--r-- | Modules/_asynciomodule.c | 14 | ||||
-rw-r--r-- | Modules/_ctypes/callproc.c | 2 | ||||
-rw-r--r-- | Modules/_datetimemodule.c | 15 | ||||
-rw-r--r-- | Modules/_elementtree.c | 2 | ||||
-rw-r--r-- | Modules/_io/bufferedio.c | 10 | ||||
-rw-r--r-- | Modules/_io/fileio.c | 4 | ||||
-rw-r--r-- | Modules/_io/textio.c | 37 | ||||
-rw-r--r-- | Modules/_io/winconsoleio.c | 4 | ||||
-rw-r--r-- | Modules/_pickle.c | 2 | ||||
-rw-r--r-- | Modules/_sqlite/connection.c | 8 | ||||
-rw-r--r-- | Modules/arraymodule.c | 2 | ||||
-rw-r--r-- | Modules/cjkcodecs/multibytecodec.c | 4 | ||||
-rw-r--r-- | Objects/dictobject.c | 8 | ||||
-rw-r--r-- | Objects/typeobject.c | 4 | ||||
-rw-r--r-- | Python/_warnings.c | 2 | ||||
-rw-r--r-- | Python/ceval.c | 2 | ||||
-rw-r--r-- | Python/import.c | 12 | ||||
-rw-r--r-- | Python/marshal.c | 2 | ||||
-rw-r--r-- | Python/sysmodule.c | 6 |
23 files changed, 104 insertions, 93 deletions
diff --git a/Doc/c-api/object.rst b/Doc/c-api/object.rst index 8ca0344..2cf0328 100644 --- a/Doc/c-api/object.rst +++ b/Doc/c-api/object.rst @@ -375,6 +375,18 @@ Object Protocol .. versionadded:: 3.9 +.. c:function:: PyObject* _PyObject_CallMethodOneArg(PyObject *obj, PyObject *name, PyObject *arg) + + Call a method of the Python object *obj* with a single positional argument + *arg*, 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 e9a2319..d57aa54 100644 --- a/Include/cpython/abstract.h +++ b/Include/cpython/abstract.h @@ -163,6 +163,15 @@ _PyObject_CallMethodNoArgs(PyObject *self, PyObject *name) 1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); } +static inline PyObject * +_PyObject_CallMethodOneArg(PyObject *self, PyObject *name, PyObject *arg) +{ + assert(arg != NULL); + PyObject *args[2] = {self, arg}; + return _PyObject_VectorcallMethod(name, args, + 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +} + /* Like PyObject_CallMethod(), but expect a _Py_Identifier* as the method name. */ PyAPI_FUNC(PyObject *) _PyObject_CallMethodId(PyObject *obj, @@ -198,6 +207,15 @@ _PyObject_CallMethodIdNoArgs(PyObject *self, _Py_Identifier *name) 1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); } +static inline PyObject * +_PyObject_CallMethodIdOneArg(PyObject *self, _Py_Identifier *name, PyObject *arg) +{ + assert(arg != NULL); + PyObject *args[2] = {self, arg}; + return _PyObject_VectorcallMethodId(name, args, + 2 | 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 df0e807..63b355e 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,2 +1,2 @@ -Add fast functions for calling methods: :c:func:`_PyObject_VectorcallMethod` -and :c:func:`_PyObject_CallMethodNoArgs` +Add fast functions for calling methods: :c:func:`_PyObject_VectorcallMethod`, +:c:func:`_PyObject_CallMethodNoArgs` and :c:func:`_PyObject_CallMethodOneArg`. diff --git a/Modules/_abc.c b/Modules/_abc.c index 219ea0d..7b5d418 100644 --- a/Modules/_abc.c +++ b/Modules/_abc.c @@ -480,7 +480,6 @@ _abc__abc_instancecheck_impl(PyObject *module, PyObject *self, /*[clinic end generated code: output=b8b5148f63b6b56f input=a4f4525679261084]*/ { PyObject *subtype, *result = NULL, *subclass = NULL; - PyObject *margs[2]; _abc_data *impl = _get_impl(self); if (impl == NULL) { return NULL; @@ -515,16 +514,12 @@ _abc__abc_instancecheck_impl(PyObject *module, PyObject *self, } } /* Fall back to the subclass check. */ - margs[0] = self; - margs[1] = subclass; - result = _PyObject_VectorcallMethodId(&PyId___subclasscheck__, margs, - 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); + result = _PyObject_CallMethodIdOneArg(self, &PyId___subclasscheck__, + subclass); goto end; } - margs[0] = self; - margs[1] = subclass; - result = _PyObject_VectorcallMethodId(&PyId___subclasscheck__, margs, - 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); + result = _PyObject_CallMethodIdOneArg(self, &PyId___subclasscheck__, + subclass); if (result == NULL) { goto end; } @@ -536,10 +531,8 @@ _abc__abc_instancecheck_impl(PyObject *module, PyObject *self, break; case 0: Py_DECREF(result); - margs[0] = self; - margs[1] = subtype; - result = _PyObject_VectorcallMethodId(&PyId___subclasscheck__, margs, - 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); + result = _PyObject_CallMethodIdOneArg(self, &PyId___subclasscheck__, + subtype); break; case 1: // Nothing to do. break; @@ -620,8 +613,8 @@ _abc__abc_subclasscheck_impl(PyObject *module, PyObject *self, } /* 3. Check the subclass hook. */ - ok = _PyObject_CallMethodIdObjArgs((PyObject *)self, &PyId___subclasshook__, - subclass, NULL); + ok = _PyObject_CallMethodIdOneArg((PyObject *)self, &PyId___subclasshook__, + subclass); if (ok == NULL) { goto end; } diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index 6c469d2..e9e6c56 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -1842,8 +1842,8 @@ register_task(PyObject *task) { _Py_IDENTIFIER(add); - PyObject *res = _PyObject_CallMethodIdObjArgs( - all_tasks, &PyId_add, task, NULL); + PyObject *res = _PyObject_CallMethodIdOneArg(all_tasks, + &PyId_add, task); if (res == NULL) { return -1; } @@ -1857,8 +1857,8 @@ unregister_task(PyObject *task) { _Py_IDENTIFIER(discard); - PyObject *res = _PyObject_CallMethodIdObjArgs( - all_tasks, &PyId_discard, task, NULL); + PyObject *res = _PyObject_CallMethodIdOneArg(all_tasks, + &PyId_discard, task); if (res == NULL) { return -1; } @@ -2611,13 +2611,11 @@ task_step_impl(TaskObj *task, PyObject *exc) result = _PyGen_Send((PyGenObject*)coro, Py_None); } else { - result = _PyObject_CallMethodIdObjArgs(coro, &PyId_send, - Py_None, NULL); + result = _PyObject_CallMethodIdOneArg(coro, &PyId_send, Py_None); } } else { - result = _PyObject_CallMethodIdObjArgs(coro, &PyId_throw, - exc, NULL); + result = _PyObject_CallMethodIdOneArg(coro, &PyId_throw, exc); if (clear_exc) { /* We created 'exc' during this call */ Py_DECREF(exc); diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index 973a654..bd67c6e 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -1699,7 +1699,7 @@ unpickle(PyObject *self, PyObject *args) if (!PyArg_ParseTuple(args, "OO!", &typ, &PyTuple_Type, &state)) return NULL; - obj = _PyObject_CallMethodIdObjArgs(typ, &PyId___new__, typ, NULL); + obj = _PyObject_CallMethodIdOneArg(typ, &PyId___new__, typ); if (obj == NULL) return NULL; diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index 0546368..19d3d7e 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -1237,8 +1237,7 @@ call_tzname(PyObject *tzinfo, PyObject *tzinfoarg) if (tzinfo == Py_None) Py_RETURN_NONE; - result = _PyObject_CallMethodIdObjArgs(tzinfo, &PyId_tzname, - tzinfoarg, NULL); + result = _PyObject_CallMethodIdOneArg(tzinfo, &PyId_tzname, tzinfoarg); if (result == NULL || result == Py_None) return result; @@ -1693,8 +1692,7 @@ build_struct_time(int y, int m, int d, int hh, int mm, int ss, int dstflag) return NULL; } - result = _PyObject_CallMethodIdObjArgs(time, &PyId_struct_time, - args, NULL); + result = _PyObject_CallMethodIdOneArg(time, &PyId_struct_time, args); Py_DECREF(time); Py_DECREF(args); return result; @@ -2894,8 +2892,7 @@ date_today(PyObject *cls, PyObject *dummy) * time.time() delivers; if someone were gonzo about optimization, * date.today() could get away with plain C time(). */ - result = _PyObject_CallMethodIdObjArgs(cls, &PyId_fromtimestamp, - time, NULL); + result = _PyObject_CallMethodIdOneArg(cls, &PyId_fromtimestamp, time); Py_DECREF(time); return result; } @@ -3209,8 +3206,8 @@ date_format(PyDateTime_Date *self, PyObject *args) if (PyUnicode_GetLength(format) == 0) return PyObject_Str((PyObject *)self); - return _PyObject_CallMethodIdObjArgs((PyObject *)self, &PyId_strftime, - format, NULL); + return _PyObject_CallMethodIdOneArg((PyObject *)self, &PyId_strftime, + format); } /* ISO methods. */ @@ -5960,7 +5957,7 @@ datetime_astimezone(PyDateTime_DateTime *self, PyObject *args, PyObject *kw) temp = (PyObject *)result; result = (PyDateTime_DateTime *) - _PyObject_CallMethodIdObjArgs(tzinfo, &PyId_fromutc, temp, NULL); + _PyObject_CallMethodIdOneArg(tzinfo, &PyId_fromutc, temp); Py_DECREF(temp); return result; diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c index b93ec3d..b9b5016 100644 --- a/Modules/_elementtree.c +++ b/Modules/_elementtree.c @@ -2679,7 +2679,7 @@ treebuilder_add_subelement(PyObject *element, PyObject *child) } else { PyObject *res; - res = _PyObject_CallMethodIdObjArgs(element, &PyId_append, child, NULL); + res = _PyObject_CallMethodIdOneArg(element, &PyId_append, child); if (res == NULL) return -1; Py_DECREF(res); diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c index 9e7e5f3..86dd277 100644 --- a/Modules/_io/bufferedio.c +++ b/Modules/_io/bufferedio.c @@ -439,8 +439,8 @@ buffered_dealloc_warn(buffered *self, PyObject *source) { if (self->ok && self->raw) { PyObject *r; - r = _PyObject_CallMethodIdObjArgs(self->raw, &PyId__dealloc_warn, - source, NULL); + r = _PyObject_CallMethodIdOneArg(self->raw, &PyId__dealloc_warn, + source); if (r) Py_DECREF(r); else @@ -1323,7 +1323,7 @@ _io__Buffered_truncate_impl(buffered *self, PyObject *pos) goto end; Py_CLEAR(res); } - res = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_truncate, pos, NULL); + res = _PyObject_CallMethodOneArg(self->raw, _PyIO_str_truncate, pos); if (res == NULL) goto end; /* Reset cached position */ @@ -1467,7 +1467,7 @@ _bufferedreader_raw_read(buffered *self, char *start, Py_ssize_t len) raised (see issue #10956). */ do { - res = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_readinto, memobj, NULL); + res = _PyObject_CallMethodOneArg(self->raw, _PyIO_str_readinto, memobj); } while (res == NULL && _PyIO_trap_eintr()); Py_DECREF(memobj); if (res == NULL) @@ -1815,7 +1815,7 @@ _bufferedwriter_raw_write(buffered *self, char *start, Py_ssize_t len) */ do { errno = 0; - res = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_write, memobj, NULL); + res = _PyObject_CallMethodOneArg(self->raw, _PyIO_str_write, memobj); errnum = errno; } while (res == NULL && _PyIO_trap_eintr()); Py_DECREF(memobj); diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c index 7f784a3..e4cbbfa 100644 --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -145,8 +145,8 @@ _io_FileIO_close_impl(fileio *self) PyObject *exc, *val, *tb; int rc; _Py_IDENTIFIER(close); - res = _PyObject_CallMethodIdObjArgs((PyObject*)&PyRawIOBase_Type, - &PyId_close, self, NULL); + res = _PyObject_CallMethodIdOneArg((PyObject*)&PyRawIOBase_Type, + &PyId_close, (PyObject *)self); if (!self->closefd) { self->fd = -1; return res; diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c index ed1dc00..05911d9 100644 --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -977,8 +977,8 @@ _textiowrapper_fix_encoder_state(textio *self) if (cmp == 0) { self->encoding_start_of_stream = 0; - PyObject *res = PyObject_CallMethodObjArgs( - self->encoder, _PyIO_str_setstate, _PyLong_Zero, NULL); + PyObject *res = _PyObject_CallMethodOneArg( + self->encoder, _PyIO_str_setstate, _PyLong_Zero); if (res == NULL) { return -1; } @@ -1155,8 +1155,8 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer, PyObject *locale_module = _PyIO_get_locale_module(state); if (locale_module == NULL) goto catch_ImportError; - self->encoding = _PyObject_CallMethodIdObjArgs( - locale_module, &PyId_getpreferredencoding, Py_False, NULL); + self->encoding = _PyObject_CallMethodIdOneArg( + locale_module, &PyId_getpreferredencoding, Py_False); Py_DECREF(locale_module); if (self->encoding == NULL) { catch_ImportError: @@ -1597,8 +1597,7 @@ _textiowrapper_writeflush(textio *self) PyObject *ret; do { - ret = PyObject_CallMethodObjArgs(self->buffer, - _PyIO_str_write, b, NULL); + ret = _PyObject_CallMethodOneArg(self->buffer, _PyIO_str_write, b); } while (ret == NULL && _PyIO_trap_eintr()); Py_DECREF(b); if (ret == NULL) @@ -1668,8 +1667,7 @@ _io_TextIOWrapper_write_impl(textio *self, PyObject *text) self->encoding_start_of_stream = 0; } else - b = PyObject_CallMethodObjArgs(self->encoder, - _PyIO_str_encode, text, NULL); + b = _PyObject_CallMethodOneArg(self->encoder, _PyIO_str_encode, text); Py_DECREF(text); if (b == NULL) @@ -1851,9 +1849,9 @@ textiowrapper_read_chunk(textio *self, Py_ssize_t size_hint) if (chunk_size == NULL) goto fail; - input_chunk = PyObject_CallMethodObjArgs(self->buffer, + input_chunk = _PyObject_CallMethodOneArg(self->buffer, (self->has_read1 ? _PyIO_str_read1: _PyIO_str_read), - chunk_size, NULL); + chunk_size); Py_DECREF(chunk_size); if (input_chunk == NULL) goto fail; @@ -2414,8 +2412,8 @@ _textiowrapper_encoder_reset(textio *self, int start_of_stream) self->encoding_start_of_stream = 1; } else { - res = PyObject_CallMethodObjArgs(self->encoder, _PyIO_str_setstate, - _PyLong_Zero, NULL); + res = _PyObject_CallMethodOneArg(self->encoder, _PyIO_str_setstate, + _PyLong_Zero); self->encoding_start_of_stream = 0; } if (res == NULL) @@ -2554,8 +2552,7 @@ _io_TextIOWrapper_seek_impl(textio *self, PyObject *cookieObj, int whence) posobj = PyLong_FromOff_t(cookie.start_pos); if (posobj == NULL) goto fail; - res = PyObject_CallMethodObjArgs(self->buffer, - _PyIO_str_seek, posobj, NULL); + res = _PyObject_CallMethodOneArg(self->buffer, _PyIO_str_seek, posobj); Py_DECREF(posobj); if (res == NULL) goto fail; @@ -2837,7 +2834,7 @@ _io_TextIOWrapper_tell_impl(textio *self) } finally: - res = _PyObject_CallMethodIdObjArgs(self->decoder, &PyId_setstate, saved_state, NULL); + res = _PyObject_CallMethodIdOneArg(self->decoder, &PyId_setstate, saved_state); Py_DECREF(saved_state); if (res == NULL) return NULL; @@ -2851,7 +2848,7 @@ fail: if (saved_state) { PyObject *type, *value, *traceback; PyErr_Fetch(&type, &value, &traceback); - res = _PyObject_CallMethodIdObjArgs(self->decoder, &PyId_setstate, saved_state, NULL); + res = _PyObject_CallMethodIdOneArg(self->decoder, &PyId_setstate, saved_state); _PyErr_ChainExceptions(type, value, traceback); Py_DECREF(saved_state); Py_XDECREF(res); @@ -2878,7 +2875,7 @@ _io_TextIOWrapper_truncate_impl(textio *self, PyObject *pos) return NULL; Py_DECREF(res); - return PyObject_CallMethodObjArgs(self->buffer, _PyIO_str_truncate, pos, NULL); + return _PyObject_CallMethodOneArg(self->buffer, _PyIO_str_truncate, pos); } static PyObject * @@ -3055,9 +3052,9 @@ _io_TextIOWrapper_close_impl(textio *self) else { PyObject *exc = NULL, *val, *tb; if (self->finalizing) { - res = _PyObject_CallMethodIdObjArgs(self->buffer, - &PyId__dealloc_warn, - self, NULL); + res = _PyObject_CallMethodIdOneArg(self->buffer, + &PyId__dealloc_warn, + (PyObject *)self); if (res) Py_DECREF(res); else diff --git a/Modules/_io/winconsoleio.c b/Modules/_io/winconsoleio.c index ea5d24f..f27a6dc 100644 --- a/Modules/_io/winconsoleio.c +++ b/Modules/_io/winconsoleio.c @@ -204,8 +204,8 @@ _io__WindowsConsoleIO_close_impl(winconsoleio *self) PyObject *exc, *val, *tb; int rc; _Py_IDENTIFIER(close); - res = _PyObject_CallMethodIdObjArgs((PyObject*)&PyRawIOBase_Type, - &PyId_close, self, NULL); + res = _PyObject_CallMethodIdOneArg((PyObject*)&PyRawIOBase_Type, + &PyId_close, self); if (!self->closehandle) { self->handle = INVALID_HANDLE_VALUE; return res; diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 0b0928f..735c13d 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -5773,7 +5773,7 @@ instantiate(PyObject *cls, PyObject *args) return NULL; } if (func == NULL) { - return _PyObject_CallMethodIdObjArgs(cls, &PyId___new__, cls, NULL); + return _PyObject_CallMethodIdOneArg(cls, &PyId___new__, cls); } Py_DECREF(func); } diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 30a9b88..47b8b62 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -1185,9 +1185,9 @@ pysqlite_connection_set_isolation_level(pysqlite_Connection* self, PyObject* iso return -1; } - uppercase_level = _PyObject_CallMethodIdObjArgs( + uppercase_level = _PyObject_CallMethodIdOneArg( (PyObject *)&PyUnicode_Type, &PyId_upper, - isolation_level, NULL); + isolation_level); if (!uppercase_level) { return -1; } @@ -1648,8 +1648,8 @@ pysqlite_connection_create_collation(pysqlite_Connection* self, PyObject* args) goto finally; } - uppercase_name = _PyObject_CallMethodIdObjArgs((PyObject *)&PyUnicode_Type, - &PyId_upper, name, NULL); + uppercase_name = _PyObject_CallMethodIdOneArg((PyObject *)&PyUnicode_Type, + &PyId_upper, name); if (!uppercase_name) { goto finally; } diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 26c90a8..48986c4 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -1507,7 +1507,7 @@ array_array_tofile(arrayobject *self, PyObject *f) bytes = PyBytes_FromStringAndSize(ptr, size); if (bytes == NULL) return NULL; - res = _PyObject_CallMethodIdObjArgs(f, &PyId_write, bytes, NULL); + res = _PyObject_CallMethodIdOneArg(f, &PyId_write, bytes); Py_DECREF(bytes); if (res == NULL) return NULL; diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index 052ed88..4de6787 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -1776,7 +1776,7 @@ mbstreamwriter_iwrite(MultibyteStreamWriterObject *self, if (str == NULL) return -1; - wr = _PyObject_CallMethodIdObjArgs(self->stream, &PyId_write, str, NULL); + wr = _PyObject_CallMethodIdOneArg(self->stream, &PyId_write, str); Py_DECREF(str); if (wr == NULL) return -1; @@ -1870,7 +1870,7 @@ _multibytecodec_MultibyteStreamWriter_reset_impl(MultibyteStreamWriterObject *se if (PyBytes_Size(pwrt) > 0) { PyObject *wr; - wr = _PyObject_CallMethodIdObjArgs(self->stream, &PyId_write, pwrt); + wr = _PyObject_CallMethodIdOneArg(self->stream, &PyId_write, pwrt); if (wr == NULL) { Py_DECREF(pwrt); return NULL; diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 422f4b0..b6205d9 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -4159,7 +4159,7 @@ dictviews_sub(PyObject* self, PyObject *other) if (result == NULL) return NULL; - tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_difference_update, other, NULL); + tmp = _PyObject_CallMethodIdOneArg(result, &PyId_difference_update, other); if (tmp == NULL) { Py_DECREF(result); return NULL; @@ -4179,7 +4179,7 @@ _PyDictView_Intersect(PyObject* self, PyObject *other) if (result == NULL) return NULL; - tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_intersection_update, other, NULL); + tmp = _PyObject_CallMethodIdOneArg(result, &PyId_intersection_update, other); if (tmp == NULL) { Py_DECREF(result); return NULL; @@ -4199,7 +4199,7 @@ dictviews_or(PyObject* self, PyObject *other) if (result == NULL) return NULL; - tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_update, other, NULL); + tmp = _PyObject_CallMethodIdOneArg(result, &PyId_update, other); if (tmp == NULL) { Py_DECREF(result); return NULL; @@ -4219,7 +4219,7 @@ dictviews_xor(PyObject* self, PyObject *other) if (result == NULL) return NULL; - tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_symmetric_difference_update, other, NULL); + tmp = _PyObject_CallMethodIdOneArg(result, &PyId_symmetric_difference_update, other); if (tmp == NULL) { Py_DECREF(result); return NULL; diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 96021ee..8acf678 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -4145,8 +4145,8 @@ _PyType_GetSlotNames(PyTypeObject *cls) /* Use _slotnames function from the copyreg module to find the slots by this class and its bases. This function will cache the result in __slotnames__. */ - slotnames = _PyObject_CallMethodIdObjArgs(copyreg, &PyId__slotnames, - cls, NULL); + slotnames = _PyObject_CallMethodIdOneArg(copyreg, &PyId__slotnames, + (PyObject *)cls); Py_DECREF(copyreg); if (slotnames == NULL) return NULL; diff --git a/Python/_warnings.c b/Python/_warnings.c index b1762e6..ecee399 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -164,7 +164,7 @@ check_matched(PyObject *obj, PyObject *arg) } /* Otherwise assume a regex filter and call its match() method */ - result = _PyObject_CallMethodIdObjArgs(obj, &PyId_match, arg, NULL); + result = _PyObject_CallMethodIdOneArg(obj, &PyId_match, arg); if (result == NULL) return -1; diff --git a/Python/ceval.c b/Python/ceval.c index fdd2995..7c73591 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -2052,7 +2052,7 @@ main_loop: if (v == Py_None) retval = Py_TYPE(receiver)->tp_iternext(receiver); else - retval = _PyObject_CallMethodIdObjArgs(receiver, &PyId_send, v, NULL); + retval = _PyObject_CallMethodIdOneArg(receiver, &PyId_send, v); } Py_DECREF(v); if (retval == NULL) { diff --git a/Python/import.c b/Python/import.c index df25875..15f1d94 100644 --- a/Python/import.c +++ b/Python/import.c @@ -962,9 +962,8 @@ PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co, external= PyObject_GetAttrString(interp->importlib, "_bootstrap_external"); if (external != NULL) { - pathobj = _PyObject_CallMethodIdObjArgs(external, - &PyId__get_sourcefile, cpathobj, - NULL); + pathobj = _PyObject_CallMethodIdOneArg( + external, &PyId__get_sourcefile, cpathobj); Py_DECREF(external); } if (pathobj == NULL) @@ -1827,9 +1826,8 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals, */ spec = _PyObject_GetAttrId(mod, &PyId___spec__); if (_PyModuleSpec_IsInitializing(spec)) { - PyObject *value = _PyObject_CallMethodIdObjArgs(interp->importlib, - &PyId__lock_unlock_module, abs_name, - NULL); + PyObject *value = _PyObject_CallMethodIdOneArg( + interp->importlib, &PyId__lock_unlock_module, abs_name); if (value == NULL) { Py_DECREF(spec); goto error; @@ -1968,7 +1966,7 @@ PyImport_ReloadModule(PyObject *m) } } - reloaded_module = _PyObject_CallMethodIdObjArgs(imp, &PyId_reload, m, NULL); + reloaded_module = _PyObject_CallMethodIdOneArg(imp, &PyId_reload, m); Py_DECREF(imp); return reloaded_module; } diff --git a/Python/marshal.c b/Python/marshal.c index b2daff2c..cb11c8c 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -1653,7 +1653,7 @@ marshal_dump_impl(PyObject *module, PyObject *value, PyObject *file, s = PyMarshal_WriteObjectToString(value, version); if (s == NULL) return NULL; - res = _PyObject_CallMethodIdObjArgs(file, &PyId_write, s, NULL); + res = _PyObject_CallMethodIdOneArg(file, &PyId_write, s); Py_DECREF(s); return res; } diff --git a/Python/sysmodule.c b/Python/sysmodule.c index dc198a5..103a111 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -581,7 +581,7 @@ sys_displayhook_unencodable(PyThreadState *tstate, PyObject *outf, PyObject *o) buffer = _PyObject_GetAttrId(outf, &PyId_buffer); if (buffer) { - result = _PyObject_CallMethodIdObjArgs(buffer, &PyId_write, encoded, NULL); + result = _PyObject_CallMethodIdOneArg(buffer, &PyId_write, encoded); Py_DECREF(buffer); Py_DECREF(encoded); if (result == NULL) @@ -3114,9 +3114,7 @@ sys_pyfile_write_unicode(PyObject *unicode, PyObject *file) if (file == NULL) return -1; assert(unicode != NULL); - PyObject *margs[2] = {file, unicode}; - PyObject *result = _PyObject_VectorcallMethodId(&PyId_write, margs, - 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); + PyObject *result = _PyObject_CallMethodIdOneArg(file, &PyId_write, unicode); if (result == NULL) { return -1; } |