summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Belopolsky <alexander.belopolsky@gmail.com>2011-01-11 22:35:58 (GMT)
committerAlexander Belopolsky <alexander.belopolsky@gmail.com>2011-01-11 22:35:58 (GMT)
commit4ea1aacb9438bee068767e93098c11ac7a9c7388 (patch)
tree1f09715f14f89e62fc517e6b80ceeee12667ef91
parent830c85d0bacc2366af8b75becca021e00e976298 (diff)
downloadcpython-4ea1aacb9438bee068767e93098c11ac7a9c7388.zip
cpython-4ea1aacb9438bee068767e93098c11ac7a9c7388.tar.gz
cpython-4ea1aacb9438bee068767e93098c11ac7a9c7388.tar.bz2
Reverted r87944 - issue #5109 should not have been backported
-rwxr-xr-xLib/test/test_array.py10
-rw-r--r--Misc/NEWS3
-rw-r--r--Modules/arraymodule.c21
3 files changed, 5 insertions, 29 deletions
diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py
index d92205b..4d56f54 100755
--- a/Lib/test/test_array.py
+++ b/Lib/test/test_array.py
@@ -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]
diff --git a/Misc/NEWS b/Misc/NEWS
index f3e3c1f..ab47022 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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.
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index ba07e02..1602e48 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -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);