Formerly, the length was only fetched from sequence objects.
Now, any object that reports its length can benefit from pre-sizing.
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);
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);