Commit 72dccde8 authored by INADA Naoki's avatar INADA Naoki Committed by GitHub

bpo-29548: Fix some inefficient call API usage (GH-97)

parent 72e81d00
...@@ -3070,7 +3070,7 @@ slot_tp_del(PyObject *self) ...@@ -3070,7 +3070,7 @@ slot_tp_del(PyObject *self)
/* Execute __del__ method, if any. */ /* Execute __del__ method, if any. */
del = _PyObject_LookupSpecial(self, &PyId___tp_del__); del = _PyObject_LookupSpecial(self, &PyId___tp_del__);
if (del != NULL) { if (del != NULL) {
res = PyEval_CallObject(del, NULL); res = _PyObject_CallNoArg(del);
if (res == NULL) if (res == NULL)
PyErr_WriteUnraisable(del); PyErr_WriteUnraisable(del);
else else
......
...@@ -994,8 +994,7 @@ t_bootstrap(void *boot_raw) ...@@ -994,8 +994,7 @@ t_bootstrap(void *boot_raw)
_PyThreadState_Init(tstate); _PyThreadState_Init(tstate);
PyEval_AcquireThread(tstate); PyEval_AcquireThread(tstate);
nb_threads++; nb_threads++;
res = PyEval_CallObjectWithKeywords( res = PyObject_Call(boot->func, boot->args, boot->keyw);
boot->func, boot->args, boot->keyw);
if (res == NULL) { if (res == NULL) {
if (PyErr_ExceptionMatches(PyExc_SystemExit)) if (PyErr_ExceptionMatches(PyExc_SystemExit))
PyErr_Clear(); PyErr_Clear();
......
...@@ -2417,7 +2417,7 @@ PythonCmd(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[ ...@@ -2417,7 +2417,7 @@ PythonCmd(ClientData clientData, Tcl_Interp *interp, int argc, const char *argv[
} }
PyTuple_SET_ITEM(arg, i, s); PyTuple_SET_ITEM(arg, i, s);
} }
res = PyEval_CallObject(func, arg); res = PyObject_Call(func, arg, NULL);
Py_DECREF(arg); Py_DECREF(arg);
if (res == NULL) if (res == NULL)
...@@ -2661,16 +2661,13 @@ static void ...@@ -2661,16 +2661,13 @@ static void
FileHandler(ClientData clientData, int mask) FileHandler(ClientData clientData, int mask)
{ {
FileHandler_ClientData *data = (FileHandler_ClientData *)clientData; FileHandler_ClientData *data = (FileHandler_ClientData *)clientData;
PyObject *func, *file, *arg, *res; PyObject *func, *file, *res;
ENTER_PYTHON ENTER_PYTHON
func = data->func; func = data->func;
file = data->file; file = data->file;
arg = Py_BuildValue("(Oi)", file, (long) mask); res = PyObject_CallFunction(func, "Oi", file, mask);
res = PyEval_CallObject(func, arg);
Py_DECREF(arg);
if (res == NULL) { if (res == NULL) {
errorInCmd = 1; errorInCmd = 1;
PyErr_Fetch(&excInCmd, &valInCmd, &trbInCmd); PyErr_Fetch(&excInCmd, &valInCmd, &trbInCmd);
...@@ -2840,7 +2837,7 @@ TimerHandler(ClientData clientData) ...@@ -2840,7 +2837,7 @@ TimerHandler(ClientData clientData)
ENTER_PYTHON ENTER_PYTHON
res = PyEval_CallObject(func, NULL); res = _PyObject_CallNoArg(func);
Py_DECREF(func); Py_DECREF(func);
Py_DECREF(v); /* See Tktt_New() */ Py_DECREF(v); /* See Tktt_New() */
......
...@@ -1329,7 +1329,7 @@ PyNumber_Long(PyObject *o) ...@@ -1329,7 +1329,7 @@ PyNumber_Long(PyObject *o)
} }
trunc_func = _PyObject_LookupSpecial(o, &PyId___trunc__); trunc_func = _PyObject_LookupSpecial(o, &PyId___trunc__);
if (trunc_func) { if (trunc_func) {
result = PyEval_CallObject(trunc_func, NULL); result = _PyObject_CallNoArg(trunc_func);
Py_DECREF(trunc_func); Py_DECREF(trunc_func);
if (result == NULL || PyLong_CheckExact(result)) { if (result == NULL || PyLong_CheckExact(result)) {
return result; return result;
......
...@@ -49,6 +49,7 @@ PyFile_FromFd(int fd, const char *name, const char *mode, int buffering, const c ...@@ -49,6 +49,7 @@ PyFile_FromFd(int fd, const char *name, const char *mode, int buffering, const c
PyObject * PyObject *
PyFile_GetLine(PyObject *f, int n) PyFile_GetLine(PyObject *f, int n)
{ {
_Py_IDENTIFIER(readline);
PyObject *result; PyObject *result;
if (f == NULL) { if (f == NULL) {
...@@ -56,32 +57,18 @@ PyFile_GetLine(PyObject *f, int n) ...@@ -56,32 +57,18 @@ PyFile_GetLine(PyObject *f, int n)
return NULL; return NULL;
} }
{ if (n <= 0) {
PyObject *reader; result = _PyObject_CallMethodIdObjArgs(f, &PyId_readline, NULL);
PyObject *args; }
_Py_IDENTIFIER(readline); else {
result = _PyObject_CallMethodId(f, &PyId_readline, "i", n);
reader = _PyObject_GetAttrId(f, &PyId_readline); }
if (reader == NULL) if (result != NULL && !PyBytes_Check(result) &&
return NULL; !PyUnicode_Check(result)) {
if (n <= 0) Py_DECREF(result);
args = PyTuple_New(0); result = NULL;
else PyErr_SetString(PyExc_TypeError,
args = Py_BuildValue("(i)", n); "object.readline() returned non-string");
if (args == NULL) {
Py_DECREF(reader);
return NULL;
}
result = PyEval_CallObject(reader, args);
Py_DECREF(reader);
Py_DECREF(args);
if (result != NULL && !PyBytes_Check(result) &&
!PyUnicode_Check(result)) {
Py_DECREF(result);
result = NULL;
PyErr_SetString(PyExc_TypeError,
"object.readline() returned non-string");
}
} }
if (n < 0 && result != NULL && PyBytes_Check(result)) { if (n < 0 && result != NULL && PyBytes_Check(result)) {
...@@ -197,7 +184,7 @@ PyObject_AsFileDescriptor(PyObject *o) ...@@ -197,7 +184,7 @@ PyObject_AsFileDescriptor(PyObject *o)
} }
else if ((meth = _PyObject_GetAttrId(o, &PyId_fileno)) != NULL) else if ((meth = _PyObject_GetAttrId(o, &PyId_fileno)) != NULL)
{ {
PyObject *fno = PyEval_CallObject(meth, NULL); PyObject *fno = _PyObject_CallNoArg(meth);
Py_DECREF(meth); Py_DECREF(meth);
if (fno == NULL) if (fno == NULL)
return -1; return -1;
......
...@@ -4348,7 +4348,7 @@ _common_reduce(PyObject *self, int proto) ...@@ -4348,7 +4348,7 @@ _common_reduce(PyObject *self, int proto)
if (!copyreg) if (!copyreg)
return NULL; return NULL;
res = PyEval_CallMethod(copyreg, "_reduce_ex", "(Oi)", self, proto); res = PyObject_CallMethod(copyreg, "_reduce_ex", "Oi", self, proto);
Py_DECREF(copyreg); Py_DECREF(copyreg);
return res; return res;
......
...@@ -461,7 +461,7 @@ proxy_checkref(PyWeakReference *proxy) ...@@ -461,7 +461,7 @@ proxy_checkref(PyWeakReference *proxy)
WRAP_BINARY(proxy_getattr, PyObject_GetAttr) WRAP_BINARY(proxy_getattr, PyObject_GetAttr)
WRAP_UNARY(proxy_str, PyObject_Str) WRAP_UNARY(proxy_str, PyObject_Str)
WRAP_TERNARY(proxy_call, PyEval_CallObjectWithKeywords) WRAP_TERNARY(proxy_call, PyObject_Call)
static PyObject * static PyObject *
proxy_repr(PyWeakReference *proxy) proxy_repr(PyWeakReference *proxy)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment