Revert previous two checkins to repair test failure.
The special-case code that was removed could return a value indicating
success but leave an exception set. test_fileinput failed in a debug
build as a result.
diff --git a/Objects/listobject.c b/Objects/listobject.c
index c630f17..c9e6604 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -2234,13 +2234,6 @@
return PyObject_RichCompare(vl->ob_item[i], wl->ob_item[i], op);
}
-/* empirically determined threshold for activating an optimisation
- * in list_fill() - 100 seems close to optimum for current CPUs and
- * compilers, as of December '03.
- * see also comment in list_fill().
- */
-#define LISTFILL_OPT_THRESHOLD 100
-
/* Adapted from newer code by Tim */
static int
list_fill(PyListObject *result, PyObject *v)
@@ -2255,23 +2248,12 @@
n = result->ob_size;
- /* Special-case list(a_list), for speed:
- * - if the source has 0 elements, there's nothing to copy.
- * - if the source has more than a threshold number of elements
- * slice assignment is a faster way of filling the target
- * (the exact threshold is subject to empirical determination).
- * Also special case any other zero length sequence, including
- * subclasses of list, there being nothing to copy.
- */
- if (PyList_CheckExact(v)) {
- i = PyList_GET_SIZE(v);
- if (i == 0)
- return 0;
- if (i > LISTFILL_OPT_THRESHOLD)
- return list_ass_slice(result, 0, n, v);
- } else
- if (PySequence_Check(v) && PySequence_Size(v) == 0)
- return 0;
+ /* Special-case list(a_list), for speed. */
+ if (PyList_Check(v)) {
+ if (v == (PyObject *)result)
+ return 0; /* source is destination, we're done */
+ return list_ass_slice(result, 0, n, v);
+ }
/* Empty previous contents */
if (n != 0) {