mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
Squash a few calls to the hideously expensive PyObject_CallObject(o,a)
-- replace then with slightly faster PyObject_Call(o,a,NULL). (The difference is that the latter requires a to be a tuple; the former allows other values and wraps them in a tuple if necessary; it involves two more levels of C function calls to accomplish all that.)
This commit is contained in:
parent
c13f724af0
commit
84b2bed435
5 changed files with 37 additions and 12 deletions
|
@ -327,12 +327,16 @@ fp_readl(char *s, int size, struct tok_state *tok)
|
|||
#ifndef Py_USING_UNICODE
|
||||
/* In a non-Unicode built, this should never be called. */
|
||||
Py_FatalError("fp_readl should not be called in this build.");
|
||||
return NULL;
|
||||
return NULL; /* Keep compiler happy (not reachable) */
|
||||
#else
|
||||
PyObject* utf8;
|
||||
PyObject* buf = tok->decoding_buffer;
|
||||
if (buf == NULL) {
|
||||
buf = PyObject_CallObject(tok->decoding_readline, NULL);
|
||||
PyObject *args = PyTuple_New(0);
|
||||
if (args == NULL)
|
||||
return error_ret(tok);
|
||||
buf = PyObject_Call(tok->decoding_readline, args, NULL);
|
||||
Py_DECREF(args);
|
||||
if (buf == NULL)
|
||||
return error_ret(tok);
|
||||
} else {
|
||||
|
@ -464,7 +468,14 @@ decoding_feof(struct tok_state *tok)
|
|||
} else {
|
||||
PyObject* buf = tok->decoding_buffer;
|
||||
if (buf == NULL) {
|
||||
buf = PyObject_CallObject(tok->decoding_readline, NULL);
|
||||
PyObject *args = PyTuple_New(0);
|
||||
if (args == NULL) {
|
||||
error_ret(tok);
|
||||
return 1;
|
||||
}
|
||||
buf = PyObject_Call(tok->decoding_readline,
|
||||
args, NULL);
|
||||
Py_DECREF(args);
|
||||
if (buf == NULL) {
|
||||
error_ret(tok);
|
||||
return 1;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue