From: Raymond Hettinger Date: Sun, 4 Jan 2004 11:00:08 +0000 (+0000) Subject: Apply pre-sizing optimization to a broader class of objects. X-Git-Tag: v2.4a1~970 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b86269db458f63b95be8017e47671092be3b48d1;p=thirdparty%2FPython%2Fcpython.git Apply pre-sizing optimization to a broader class of objects. Formerly, the length was only fetched from sequence objects. Now, any object that reports its length can benefit from pre-sizing. --- diff --git a/Objects/abstract.c b/Objects/abstract.c index 1259ad48a2a8..342d9718798c 100644 --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -1448,15 +1448,11 @@ PySequence_List(PyObject *v) return NULL; /* Guess a result list size. */ - n = -1; /* unknown */ - if (PySequence_Check(v) && - v->ob_type->tp_as_sequence->sq_length) { - n = PySequence_Size(v); - if (n < 0) - PyErr_Clear(); - } - if (n < 0) + n = PyObject_Size(v); + if (n < 0) { + PyErr_Clear(); n = 8; /* arbitrary */ + } result = PyList_New(n); if (result == NULL) { Py_DECREF(it); diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 7fc6f572f458..a17c6d9c1f1e 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -153,15 +153,11 @@ builtin_filter(PyObject *self, PyObject *args) return NULL; /* Guess a result list size. */ - len = -1; /* unknown */ - if (PySequence_Check(seq) && - seq->ob_type->tp_as_sequence->sq_length) { - len = PySequence_Size(seq); - if (len < 0) - PyErr_Clear(); + len = PyObject_Size(seq); + if (len < 0) { + PyErr_Clear(); + len = 8; /* arbitrary */ } - if (len < 0) - len = 8; /* arbitrary */ /* Pre-allocate argument list tuple. */ arg = PyTuple_New(1);