summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2008-10-08 18:47:17 (GMT)
committerGeorg Brandl <georg@python.org>2008-10-08 18:47:17 (GMT)
commitf3776a17effc7542826e1453b082ca0877722464 (patch)
tree707a0fa81eda3e0cf4277c66a9a5b1b2ceea29f6
parent06a138690231f62b3624766e09212cc01d7b5faa (diff)
downloadcpython-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.py11
-rw-r--r--Misc/NEWS2
-rw-r--r--Modules/_bisectmodule.c4
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
diff --git a/Misc/NEWS b/Misc/NEWS
index 50494f4..dc43554 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -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 {