call_method(), call_maybe(): fix a performance bug: the argument

pointing to a static variable to hold the object form of the string
was never used, causing endless calls to PyString_InternFromString().
One particular test (with lots of __getitem__ calls) became a third
faster with this!
This commit is contained in:
Guido van Rossum 2001-10-03 00:50:18 +00:00
parent ed554f6fc7
commit da21c0110b

View file

@ -378,18 +378,15 @@ call_method(PyObject *o, char *name, PyObject **nameobj, char *format, ...)
{ {
va_list va; va_list va;
PyObject *args, *func = 0, *retval; PyObject *args, *func = 0, *retval;
PyObject *dummy_str = NULL;
va_start(va, format); va_start(va, format);
func = lookup_maybe(o, name, &dummy_str); func = lookup_maybe(o, name, nameobj);
if (func == NULL) { if (func == NULL) {
va_end(va); va_end(va);
if (!PyErr_Occurred()) if (!PyErr_Occurred())
PyErr_SetObject(PyExc_AttributeError, dummy_str); PyErr_SetObject(PyExc_AttributeError, *nameobj);
Py_XDECREF(dummy_str);
return NULL; return NULL;
} }
Py_DECREF(dummy_str);
if (format && *format) if (format && *format)
args = Py_VaBuildValue(format, va); args = Py_VaBuildValue(format, va);
@ -417,11 +414,9 @@ call_maybe(PyObject *o, char *name, PyObject **nameobj, char *format, ...)
{ {
va_list va; va_list va;
PyObject *args, *func = 0, *retval; PyObject *args, *func = 0, *retval;
PyObject *dummy_str = NULL;
va_start(va, format); va_start(va, format);
func = lookup_maybe(o, name, &dummy_str); func = lookup_maybe(o, name, nameobj);
Py_XDECREF(dummy_str);
if (func == NULL) { if (func == NULL) {
va_end(va); va_end(va);
if (!PyErr_Occurred()) { if (!PyErr_Occurred()) {