]> granicus.if.org Git - python/commitdiff
Apply pre-sizing optimization to a broader class of objects.
authorRaymond Hettinger <python@rcn.com>
Sun, 4 Jan 2004 11:00:08 +0000 (11:00 +0000)
committerRaymond Hettinger <python@rcn.com>
Sun, 4 Jan 2004 11:00:08 +0000 (11:00 +0000)
Formerly, the length was only fetched from sequence objects.
Now, any object that reports its length can benefit from pre-sizing.

Objects/abstract.c
Python/bltinmodule.c

index 1259ad48a2a8b3e62f3714a2c729199f6de6de62..342d9718798c2f02c1c015279413dc4cc54f5158 100644 (file)
@@ -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);
index 7fc6f572f458e6c6488fae9d05d8bcac43b2fc52..a17c6d9c1f1edcec7f30309b5a94e00cac903e5e 100644 (file)
@@ -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);