Browse Source

bpo-37547: add _PyObject_CallMethodOneArg (GH-14685)

pull/14720/head
Jeroen Demeyer 7 years ago
committed by Inada Naoki
parent
commit
59ad110d7a
  1. 12
      Doc/c-api/object.rst
  2. 18
      Include/cpython/abstract.h
  3. 4
      Misc/NEWS.d/next/C API/2019-06-19-12-06-31.bpo-37337.gXIGyU.rst
  4. 23
      Modules/_abc.c
  5. 14
      Modules/_asynciomodule.c
  6. 2
      Modules/_ctypes/callproc.c
  7. 15
      Modules/_datetimemodule.c
  8. 2
      Modules/_elementtree.c
  9. 10
      Modules/_io/bufferedio.c
  10. 4
      Modules/_io/fileio.c
  11. 37
      Modules/_io/textio.c
  12. 4
      Modules/_io/winconsoleio.c
  13. 2
      Modules/_pickle.c
  14. 8
      Modules/_sqlite/connection.c
  15. 2
      Modules/arraymodule.c
  16. 4
      Modules/cjkcodecs/multibytecodec.c
  17. 8
      Objects/dictobject.c
  18. 4
      Objects/typeobject.c
  19. 2
      Python/_warnings.c
  20. 2
      Python/ceval.c
  21. 12
      Python/import.c
  22. 2
      Python/marshal.c
  23. 6
      Python/sysmodule.c

12
Doc/c-api/object.rst

@ -375,6 +375,18 @@ Object Protocol
.. versionadded:: 3.9 .. 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) .. c:function:: PyObject* _PyObject_Vectorcall(PyObject *callable, PyObject *const *args, size_t nargsf, PyObject *kwnames)
Call a callable Python object *callable*, using Call a callable Python object *callable*, using

18
Include/cpython/abstract.h

@ -163,6 +163,15 @@ _PyObject_CallMethodNoArgs(PyObject *self, PyObject *name)
1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); 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* /* Like PyObject_CallMethod(), but expect a _Py_Identifier*
as the method name. */ as the method name. */
PyAPI_FUNC(PyObject *) _PyObject_CallMethodId(PyObject *obj, PyAPI_FUNC(PyObject *) _PyObject_CallMethodId(PyObject *obj,
@ -198,6 +207,15 @@ _PyObject_CallMethodIdNoArgs(PyObject *self, _Py_Identifier *name)
1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); 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); PyAPI_FUNC(int) _PyObject_HasLen(PyObject *o);
/* Guess the size of object 'o' using len(o) or o.__length_hint__(). /* Guess the size of object 'o' using len(o) or o.__length_hint__().

4
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`.

23
Modules/_abc.c

@ -480,7 +480,6 @@ _abc__abc_instancecheck_impl(PyObject *module, PyObject *self,
/*[clinic end generated code: output=b8b5148f63b6b56f input=a4f4525679261084]*/ /*[clinic end generated code: output=b8b5148f63b6b56f input=a4f4525679261084]*/
{ {
PyObject *subtype, *result = NULL, *subclass = NULL; PyObject *subtype, *result = NULL, *subclass = NULL;
PyObject *margs[2];
_abc_data *impl = _get_impl(self); _abc_data *impl = _get_impl(self);
if (impl == NULL) { if (impl == NULL) {
return NULL; return NULL;
@ -515,16 +514,12 @@ _abc__abc_instancecheck_impl(PyObject *module, PyObject *self,
} }
} }
/* Fall back to the subclass check. */ /* 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; 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) { if (result == NULL) {
goto end; goto end;
} }
@ -536,10 +531,8 @@ _abc__abc_instancecheck_impl(PyObject *module, PyObject *self,
break; break;
case 0: case 0:
Py_DECREF(result); 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; break;
case 1: // Nothing to do. case 1: // Nothing to do.
break; break;
@ -620,8 +613,8 @@ _abc__abc_subclasscheck_impl(PyObject *module, PyObject *self,
} }
/* 3. Check the subclass hook. */ /* 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) { if (ok == NULL) {
goto end; goto end;
} }

14
Modules/_asynciomodule.c

@ -1842,8 +1842,8 @@ register_task(PyObject *task)
{ {
_Py_IDENTIFIER(add); _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) { if (res == NULL) {
return -1; return -1;
} }
@ -1857,8 +1857,8 @@ unregister_task(PyObject *task)
{ {
_Py_IDENTIFIER(discard); _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) { if (res == NULL) {
return -1; return -1;
} }
@ -2611,13 +2611,11 @@ task_step_impl(TaskObj *task, PyObject *exc)
result = _PyGen_Send((PyGenObject*)coro, Py_None); result = _PyGen_Send((PyGenObject*)coro, Py_None);
} }
else { else {
result = _PyObject_CallMethodIdObjArgs(coro, &PyId_send,
Py_None, NULL);
result = _PyObject_CallMethodIdOneArg(coro, &PyId_send, Py_None);
} }
} }
else { else {
result = _PyObject_CallMethodIdObjArgs(coro, &PyId_throw,
exc, NULL);
result = _PyObject_CallMethodIdOneArg(coro, &PyId_throw, exc);
if (clear_exc) { if (clear_exc) {
/* We created 'exc' during this call */ /* We created 'exc' during this call */
Py_DECREF(exc); Py_DECREF(exc);

2
Modules/_ctypes/callproc.c

@ -1699,7 +1699,7 @@ unpickle(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, "OO!", &typ, &PyTuple_Type, &state)) if (!PyArg_ParseTuple(args, "OO!", &typ, &PyTuple_Type, &state))
return NULL; return NULL;
obj = _PyObject_CallMethodIdObjArgs(typ, &PyId___new__, typ, NULL);
obj = _PyObject_CallMethodIdOneArg(typ, &PyId___new__, typ);
if (obj == NULL) if (obj == NULL)
return NULL; return NULL;

15
Modules/_datetimemodule.c

@ -1237,8 +1237,7 @@ call_tzname(PyObject *tzinfo, PyObject *tzinfoarg)
if (tzinfo == Py_None) if (tzinfo == Py_None)
Py_RETURN_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) if (result == NULL || result == Py_None)
return result; 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; return NULL;
} }
result = _PyObject_CallMethodIdObjArgs(time, &PyId_struct_time,
args, NULL);
result = _PyObject_CallMethodIdOneArg(time, &PyId_struct_time, args);
Py_DECREF(time); Py_DECREF(time);
Py_DECREF(args); Py_DECREF(args);
return result; return result;
@ -2894,8 +2892,7 @@ date_today(PyObject *cls, PyObject *dummy)
* time.time() delivers; if someone were gonzo about optimization, * time.time() delivers; if someone were gonzo about optimization,
* date.today() could get away with plain C time(). * 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); Py_DECREF(time);
return result; return result;
} }
@ -3209,8 +3206,8 @@ date_format(PyDateTime_Date *self, PyObject *args)
if (PyUnicode_GetLength(format) == 0) if (PyUnicode_GetLength(format) == 0)
return PyObject_Str((PyObject *)self); return PyObject_Str((PyObject *)self);
return _PyObject_CallMethodIdObjArgs((PyObject *)self, &PyId_strftime,
format, NULL);
return _PyObject_CallMethodIdOneArg((PyObject *)self, &PyId_strftime,
format);
} }
/* ISO methods. */ /* ISO methods. */
@ -5960,7 +5957,7 @@ datetime_astimezone(PyDateTime_DateTime *self, PyObject *args, PyObject *kw)
temp = (PyObject *)result; temp = (PyObject *)result;
result = (PyDateTime_DateTime *) result = (PyDateTime_DateTime *)
_PyObject_CallMethodIdObjArgs(tzinfo, &PyId_fromutc, temp, NULL);
_PyObject_CallMethodIdOneArg(tzinfo, &PyId_fromutc, temp);
Py_DECREF(temp); Py_DECREF(temp);
return result; return result;

2
Modules/_elementtree.c

@ -2679,7 +2679,7 @@ treebuilder_add_subelement(PyObject *element, PyObject *child)
} }
else { else {
PyObject *res; PyObject *res;
res = _PyObject_CallMethodIdObjArgs(element, &PyId_append, child, NULL);
res = _PyObject_CallMethodIdOneArg(element, &PyId_append, child);
if (res == NULL) if (res == NULL)
return -1; return -1;
Py_DECREF(res); Py_DECREF(res);

10
Modules/_io/bufferedio.c

@ -439,8 +439,8 @@ buffered_dealloc_warn(buffered *self, PyObject *source)
{ {
if (self->ok && self->raw) { if (self->ok && self->raw) {
PyObject *r; PyObject *r;
r = _PyObject_CallMethodIdObjArgs(self->raw, &PyId__dealloc_warn,
source, NULL);
r = _PyObject_CallMethodIdOneArg(self->raw, &PyId__dealloc_warn,
source);
if (r) if (r)
Py_DECREF(r); Py_DECREF(r);
else else
@ -1323,7 +1323,7 @@ _io__Buffered_truncate_impl(buffered *self, PyObject *pos)
goto end; goto end;
Py_CLEAR(res); 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) if (res == NULL)
goto end; goto end;
/* Reset cached position */ /* Reset cached position */
@ -1467,7 +1467,7 @@ _bufferedreader_raw_read(buffered *self, char *start, Py_ssize_t len)
raised (see issue #10956). raised (see issue #10956).
*/ */
do { 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()); } while (res == NULL && _PyIO_trap_eintr());
Py_DECREF(memobj); Py_DECREF(memobj);
if (res == NULL) if (res == NULL)
@ -1815,7 +1815,7 @@ _bufferedwriter_raw_write(buffered *self, char *start, Py_ssize_t len)
*/ */
do { do {
errno = 0; errno = 0;
res = PyObject_CallMethodObjArgs(self->raw, _PyIO_str_write, memobj, NULL);
res = _PyObject_CallMethodOneArg(self->raw, _PyIO_str_write, memobj);
errnum = errno; errnum = errno;
} while (res == NULL && _PyIO_trap_eintr()); } while (res == NULL && _PyIO_trap_eintr());
Py_DECREF(memobj); Py_DECREF(memobj);

4
Modules/_io/fileio.c

@ -145,8 +145,8 @@ _io_FileIO_close_impl(fileio *self)
PyObject *exc, *val, *tb; PyObject *exc, *val, *tb;
int rc; int rc;
_Py_IDENTIFIER(close); _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) { if (!self->closefd) {
self->fd = -1; self->fd = -1;
return res; return res;

37
Modules/_io/textio.c

@ -977,8 +977,8 @@ _textiowrapper_fix_encoder_state(textio *self)
if (cmp == 0) { if (cmp == 0) {
self->encoding_start_of_stream = 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) { if (res == NULL) {
return -1; return -1;
} }
@ -1155,8 +1155,8 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer,
PyObject *locale_module = _PyIO_get_locale_module(state); PyObject *locale_module = _PyIO_get_locale_module(state);
if (locale_module == NULL) if (locale_module == NULL)
goto catch_ImportError; 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); Py_DECREF(locale_module);
if (self->encoding == NULL) { if (self->encoding == NULL) {
catch_ImportError: catch_ImportError:
@ -1597,8 +1597,7 @@ _textiowrapper_writeflush(textio *self)
PyObject *ret; PyObject *ret;
do { 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()); } while (ret == NULL && _PyIO_trap_eintr());
Py_DECREF(b); Py_DECREF(b);
if (ret == NULL) if (ret == NULL)
@ -1668,8 +1667,7 @@ _io_TextIOWrapper_write_impl(textio *self, PyObject *text)
self->encoding_start_of_stream = 0; self->encoding_start_of_stream = 0;
} }
else else
b = PyObject_CallMethodObjArgs(self->encoder,
_PyIO_str_encode, text, NULL);
b = _PyObject_CallMethodOneArg(self->encoder, _PyIO_str_encode, text);
Py_DECREF(text); Py_DECREF(text);
if (b == NULL) if (b == NULL)
@ -1851,9 +1849,9 @@ textiowrapper_read_chunk(textio *self, Py_ssize_t size_hint)
if (chunk_size == NULL) if (chunk_size == NULL)
goto fail; goto fail;
input_chunk = PyObject_CallMethodObjArgs(self->buffer,
input_chunk = _PyObject_CallMethodOneArg(self->buffer,
(self->has_read1 ? _PyIO_str_read1: _PyIO_str_read), (self->has_read1 ? _PyIO_str_read1: _PyIO_str_read),
chunk_size, NULL);
chunk_size);
Py_DECREF(chunk_size); Py_DECREF(chunk_size);
if (input_chunk == NULL) if (input_chunk == NULL)
goto fail; goto fail;
@ -2414,8 +2412,8 @@ _textiowrapper_encoder_reset(textio *self, int start_of_stream)
self->encoding_start_of_stream = 1; self->encoding_start_of_stream = 1;
} }
else { 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; self->encoding_start_of_stream = 0;
} }
if (res == NULL) if (res == NULL)
@ -2554,8 +2552,7 @@ _io_TextIOWrapper_seek_impl(textio *self, PyObject *cookieObj, int whence)
posobj = PyLong_FromOff_t(cookie.start_pos); posobj = PyLong_FromOff_t(cookie.start_pos);
if (posobj == NULL) if (posobj == NULL)
goto fail; goto fail;
res = PyObject_CallMethodObjArgs(self->buffer,
_PyIO_str_seek, posobj, NULL);
res = _PyObject_CallMethodOneArg(self->buffer, _PyIO_str_seek, posobj);
Py_DECREF(posobj); Py_DECREF(posobj);
if (res == NULL) if (res == NULL)
goto fail; goto fail;
@ -2837,7 +2834,7 @@ _io_TextIOWrapper_tell_impl(textio *self)
} }
finally: finally:
res = _PyObject_CallMethodIdObjArgs(self->decoder, &PyId_setstate, saved_state, NULL);
res = _PyObject_CallMethodIdOneArg(self->decoder, &PyId_setstate, saved_state);
Py_DECREF(saved_state); Py_DECREF(saved_state);
if (res == NULL) if (res == NULL)
return NULL; return NULL;
@ -2851,7 +2848,7 @@ fail:
if (saved_state) { if (saved_state) {
PyObject *type, *value, *traceback; PyObject *type, *value, *traceback;
PyErr_Fetch(&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); _PyErr_ChainExceptions(type, value, traceback);
Py_DECREF(saved_state); Py_DECREF(saved_state);
Py_XDECREF(res); Py_XDECREF(res);
@ -2878,7 +2875,7 @@ _io_TextIOWrapper_truncate_impl(textio *self, PyObject *pos)
return NULL; return NULL;
Py_DECREF(res); Py_DECREF(res);
return PyObject_CallMethodObjArgs(self->buffer, _PyIO_str_truncate, pos, NULL);
return _PyObject_CallMethodOneArg(self->buffer, _PyIO_str_truncate, pos);
} }
static PyObject * static PyObject *
@ -3055,9 +3052,9 @@ _io_TextIOWrapper_close_impl(textio *self)
else { else {
PyObject *exc = NULL, *val, *tb; PyObject *exc = NULL, *val, *tb;
if (self->finalizing) { 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) if (res)
Py_DECREF(res); Py_DECREF(res);
else else

4
Modules/_io/winconsoleio.c

@ -204,8 +204,8 @@ _io__WindowsConsoleIO_close_impl(winconsoleio *self)
PyObject *exc, *val, *tb; PyObject *exc, *val, *tb;
int rc; int rc;
_Py_IDENTIFIER(close); _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) { if (!self->closehandle) {
self->handle = INVALID_HANDLE_VALUE; self->handle = INVALID_HANDLE_VALUE;
return res; return res;

2
Modules/_pickle.c

@ -5773,7 +5773,7 @@ instantiate(PyObject *cls, PyObject *args)
return NULL; return NULL;
} }
if (func == NULL) { if (func == NULL) {
return _PyObject_CallMethodIdObjArgs(cls, &PyId___new__, cls, NULL);
return _PyObject_CallMethodIdOneArg(cls, &PyId___new__, cls);
} }
Py_DECREF(func); Py_DECREF(func);
} }

8
Modules/_sqlite/connection.c

@ -1185,9 +1185,9 @@ pysqlite_connection_set_isolation_level(pysqlite_Connection* self, PyObject* iso
return -1; return -1;
} }
uppercase_level = _PyObject_CallMethodIdObjArgs(
uppercase_level = _PyObject_CallMethodIdOneArg(
(PyObject *)&PyUnicode_Type, &PyId_upper, (PyObject *)&PyUnicode_Type, &PyId_upper,
isolation_level, NULL);
isolation_level);
if (!uppercase_level) { if (!uppercase_level) {
return -1; return -1;
} }
@ -1648,8 +1648,8 @@ pysqlite_connection_create_collation(pysqlite_Connection* self, PyObject* args)
goto finally; 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) { if (!uppercase_name) {
goto finally; goto finally;
} }

2
Modules/arraymodule.c

@ -1507,7 +1507,7 @@ array_array_tofile(arrayobject *self, PyObject *f)
bytes = PyBytes_FromStringAndSize(ptr, size); bytes = PyBytes_FromStringAndSize(ptr, size);
if (bytes == NULL) if (bytes == NULL)
return NULL; return NULL;
res = _PyObject_CallMethodIdObjArgs(f, &PyId_write, bytes, NULL);
res = _PyObject_CallMethodIdOneArg(f, &PyId_write, bytes);
Py_DECREF(bytes); Py_DECREF(bytes);
if (res == NULL) if (res == NULL)
return NULL; return NULL;

4
Modules/cjkcodecs/multibytecodec.c

@ -1776,7 +1776,7 @@ mbstreamwriter_iwrite(MultibyteStreamWriterObject *self,
if (str == NULL) if (str == NULL)
return -1; return -1;
wr = _PyObject_CallMethodIdObjArgs(self->stream, &PyId_write, str, NULL);
wr = _PyObject_CallMethodIdOneArg(self->stream, &PyId_write, str);
Py_DECREF(str); Py_DECREF(str);
if (wr == NULL) if (wr == NULL)
return -1; return -1;
@ -1870,7 +1870,7 @@ _multibytecodec_MultibyteStreamWriter_reset_impl(MultibyteStreamWriterObject *se
if (PyBytes_Size(pwrt) > 0) { if (PyBytes_Size(pwrt) > 0) {
PyObject *wr; PyObject *wr;
wr = _PyObject_CallMethodIdObjArgs(self->stream, &PyId_write, pwrt);
wr = _PyObject_CallMethodIdOneArg(self->stream, &PyId_write, pwrt);
if (wr == NULL) { if (wr == NULL) {
Py_DECREF(pwrt); Py_DECREF(pwrt);
return NULL; return NULL;

8
Objects/dictobject.c

@ -4159,7 +4159,7 @@ dictviews_sub(PyObject* self, PyObject *other)
if (result == NULL) if (result == NULL)
return NULL; return NULL;
tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_difference_update, other, NULL);
tmp = _PyObject_CallMethodIdOneArg(result, &PyId_difference_update, other);
if (tmp == NULL) { if (tmp == NULL) {
Py_DECREF(result); Py_DECREF(result);
return NULL; return NULL;
@ -4179,7 +4179,7 @@ _PyDictView_Intersect(PyObject* self, PyObject *other)
if (result == NULL) if (result == NULL)
return NULL; return NULL;
tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_intersection_update, other, NULL);
tmp = _PyObject_CallMethodIdOneArg(result, &PyId_intersection_update, other);
if (tmp == NULL) { if (tmp == NULL) {
Py_DECREF(result); Py_DECREF(result);
return NULL; return NULL;
@ -4199,7 +4199,7 @@ dictviews_or(PyObject* self, PyObject *other)
if (result == NULL) if (result == NULL)
return NULL; return NULL;
tmp = _PyObject_CallMethodIdObjArgs(result, &PyId_update, other, NULL);
tmp = _PyObject_CallMethodIdOneArg(result, &PyId_update, other);
if (tmp == NULL) { if (tmp == NULL) {
Py_DECREF(result); Py_DECREF(result);
return NULL; return NULL;
@ -4219,7 +4219,7 @@ dictviews_xor(PyObject* self, PyObject *other)
if (result == NULL) if (result == NULL)
return 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) { if (tmp == NULL) {
Py_DECREF(result); Py_DECREF(result);
return NULL; return NULL;

4
Objects/typeobject.c

@ -4145,8 +4145,8 @@ _PyType_GetSlotNames(PyTypeObject *cls)
/* Use _slotnames function from the copyreg module to find the slots /* Use _slotnames function from the copyreg module to find the slots
by this class and its bases. This function will cache the result by this class and its bases. This function will cache the result
in __slotnames__. */ in __slotnames__. */
slotnames = _PyObject_CallMethodIdObjArgs(copyreg, &PyId__slotnames,
cls, NULL);
slotnames = _PyObject_CallMethodIdOneArg(copyreg, &PyId__slotnames,
(PyObject *)cls);
Py_DECREF(copyreg); Py_DECREF(copyreg);
if (slotnames == NULL) if (slotnames == NULL)
return NULL; return NULL;

2
Python/_warnings.c

@ -164,7 +164,7 @@ check_matched(PyObject *obj, PyObject *arg)
} }
/* Otherwise assume a regex filter and call its match() method */ /* 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) if (result == NULL)
return -1; return -1;

2
Python/ceval.c

@ -2052,7 +2052,7 @@ main_loop:
if (v == Py_None) if (v == Py_None)
retval = Py_TYPE(receiver)->tp_iternext(receiver); retval = Py_TYPE(receiver)->tp_iternext(receiver);
else else
retval = _PyObject_CallMethodIdObjArgs(receiver, &PyId_send, v, NULL);
retval = _PyObject_CallMethodIdOneArg(receiver, &PyId_send, v);
} }
Py_DECREF(v); Py_DECREF(v);
if (retval == NULL) { if (retval == NULL) {

12
Python/import.c

@ -962,9 +962,8 @@ PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co,
external= PyObject_GetAttrString(interp->importlib, external= PyObject_GetAttrString(interp->importlib,
"_bootstrap_external"); "_bootstrap_external");
if (external != NULL) { if (external != NULL) {
pathobj = _PyObject_CallMethodIdObjArgs(external,
&PyId__get_sourcefile, cpathobj,
NULL);
pathobj = _PyObject_CallMethodIdOneArg(
external, &PyId__get_sourcefile, cpathobj);
Py_DECREF(external); Py_DECREF(external);
} }
if (pathobj == NULL) if (pathobj == NULL)
@ -1827,9 +1826,8 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
*/ */
spec = _PyObject_GetAttrId(mod, &PyId___spec__); spec = _PyObject_GetAttrId(mod, &PyId___spec__);
if (_PyModuleSpec_IsInitializing(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) { if (value == NULL) {
Py_DECREF(spec); Py_DECREF(spec);
goto error; 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); Py_DECREF(imp);
return reloaded_module; return reloaded_module;
} }

2
Python/marshal.c

@ -1653,7 +1653,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_CallMethodIdObjArgs(file, &PyId_write, s, NULL);
res = _PyObject_CallMethodIdOneArg(file, &PyId_write, s);
Py_DECREF(s); Py_DECREF(s);
return res; return res;
} }

6
Python/sysmodule.c

@ -581,7 +581,7 @@ sys_displayhook_unencodable(PyThreadState *tstate, PyObject *outf, PyObject *o)
buffer = _PyObject_GetAttrId(outf, &PyId_buffer); buffer = _PyObject_GetAttrId(outf, &PyId_buffer);
if (buffer) { if (buffer) {
result = _PyObject_CallMethodIdObjArgs(buffer, &PyId_write, encoded, NULL);
result = _PyObject_CallMethodIdOneArg(buffer, &PyId_write, encoded);
Py_DECREF(buffer); Py_DECREF(buffer);
Py_DECREF(encoded); Py_DECREF(encoded);
if (result == NULL) if (result == NULL)
@ -3114,9 +3114,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 *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) { if (result == NULL) {
return -1; return -1;
} }

Loading…
Cancel
Save