diff options
author | Georg Brandl <georg@python.org> | 2008-10-08 18:47:17 (GMT) |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2008-10-08 18:47:17 (GMT) |
commit | f3776a17effc7542826e1453b082ca0877722464 (patch) | |
tree | 707a0fa81eda3e0cf4277c66a9a5b1b2ceea29f6 | |
parent | 06a138690231f62b3624766e09212cc01d7b5faa (diff) | |
download | cpython-f3776a17effc7542826e1453b082ca0877722464.zip cpython-f3776a17effc7542826e1453b082ca0877722464.tar.gz cpython-f3776a17effc7542826e1453b082ca0877722464.tar.bz2 |
#3935: properly support list subclasses in the C impl. of bisect.
Patch reviewed by Raymond.
-rw-r--r-- | Lib/test/test_bisect.py | 11 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Modules/_bisectmodule.c | 4 |
3 files changed, 15 insertions, 2 deletions
diff --git a/Lib/test/test_bisect.py b/Lib/test/test_bisect.py index 7776cc8..66bae48 100644 --- a/Lib/test/test_bisect.py +++ b/Lib/test/test_bisect.py @@ -196,6 +196,17 @@ class TestInsort(unittest.TestCase): def test_backcompatibility(self): self.assertEqual(self.module.insort, self.module.insort_right) + def test_listDerived(self): + class List(list): + data = [] + def insert(self, index, item): + self.data.insert(index, item) + + lst = List() + self.module.insort_left(lst, 10) + self.module.insort_right(lst, 5) + self.assertEqual([5, 10], lst.data) + class TestInsortPython(TestInsort): module = py_bisect @@ -20,6 +20,8 @@ Core and Builtins Library ------- +- Issue #3935: Properly support list subclasses in bisect's C implementation. + - Issue #4014: Don't claim that Python has an Alpha release status, in addition to claiming it is Mature. diff --git a/Modules/_bisectmodule.c b/Modules/_bisectmodule.c index 4469dc0..fc54954 100644 --- a/Modules/_bisectmodule.c +++ b/Modules/_bisectmodule.c @@ -82,7 +82,7 @@ insort_right(PyObject *self, PyObject *args, PyObject *kw) index = internal_bisect_right(list, item, lo, hi); if (index < 0) return NULL; - if (PyList_Check(list)) { + if (PyList_CheckExact(list)) { if (PyList_Insert(list, index, item) < 0) return NULL; } else { @@ -183,7 +183,7 @@ insort_left(PyObject *self, PyObject *args, PyObject *kw) index = internal_bisect_left(list, item, lo, hi); if (index < 0) return NULL; - if (PyList_Check(list)) { + if (PyList_CheckExact(list)) { if (PyList_Insert(list, index, item) < 0) return NULL; } else { |