Reverted r87944 - issue #5109 should not have been backported

This commit is contained in:
Alexander Belopolsky 2011-01-11 22:35:58 +00:00
parent 830c85d0ba
commit 4ea1aacb94
3 changed files with 5 additions and 29 deletions

View File

@ -239,11 +239,6 @@ class BaseTest(unittest.TestCase):
if a.itemsize>1:
self.assertRaises(ValueError, b.fromstring, "x")
def test_fromarray(self):
a = array.array(self.typecode, self.example)
b = array.array(self.typecode, a)
self.assertEqual(a, b)
def test_repr(self):
a = array.array(self.typecode, 2*self.example)
self.assertEqual(a, eval(repr(a), {"array": array.array}))
@ -963,11 +958,6 @@ class NumberTest(BaseTest):
self.assertRaises(AttributeError, setattr, a, "color", "blue")
def test_frombytearray(self):
a = array.array('b', range(10))
b = array.array(self.typecode, a)
self.assertEqual(a, b)
class SignedNumberTest(NumberTest):
example = [-1, 0, 1, 42, 0x7f]
smallerexample = [-1, 0, 1, 42, 0x7e]

View File

@ -973,9 +973,6 @@ Library
Extension Modules
-----------------
- Issue #5109: array.array constructor will now use fast code when
initial data is provided in an array object with correct type.
- Issue #7384: If the system readline library is linked against ncurses,
the curses module must be linked against ncurses as well. Otherwise it
is not safe to load both the readline and curses modules in an application.

View File

@ -1925,10 +1925,7 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
if (!(initial == NULL || PyList_Check(initial)
|| PyString_Check(initial) || PyTuple_Check(initial)
|| PyTuple_Check(initial)
|| ((c=='u') && PyUnicode_Check(initial))
|| (array_Check(initial)
&& c == ((arrayobject*)initial)->ob_descr->typecode))) {
|| (c == 'u' && PyUnicode_Check(initial)))) {
it = PyObject_GetIter(initial);
if (it == NULL)
return NULL;
@ -1944,20 +1941,17 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
PyObject *a;
Py_ssize_t len;
if (initial == NULL)
if (initial == NULL || !(PyList_Check(initial)
|| PyTuple_Check(initial)))
len = 0;
else if (PyList_Check(initial))
len = PyList_GET_SIZE(initial);
else if (PyTuple_Check(initial) || array_Check(initial))
len = Py_SIZE(initial);
else
len = 0;
len = PySequence_Size(initial);
a = newarrayobject(type, len, descr);
if (a == NULL)
return NULL;
if (len > 0 && !array_Check(initial)) {
if (len > 0) {
Py_ssize_t i;
for (i = 0; i < len; i++) {
PyObject *v =
@ -2007,11 +2001,6 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
}
#endif
}
else if (initial != NULL && array_Check(initial)) {
arrayobject *self = (arrayobject *)a;
arrayobject *other = (arrayobject *)initial;
memcpy(self->ob_item, other->ob_item, len * other->ob_descr->itemsize);
}
if (it != NULL) {
if (array_iter_extend((arrayobject *)a, it) == -1) {
Py_DECREF(it);