aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>2008-06-17 21:25:35 +0000
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>2008-06-17 21:25:35 +0000
commit2ba198d2fbd8d4dd33d2c40af012d622eb03c18f (patch)
tree863cc1709d50fb8ea12a05281f5db766be4c4efe
parent35c8658a74d9b51c6c4755514b02fe3f9d6bb6b8 (diff)
downloadcpython-2ba198d2fbd8d4dd33d2c40af012d622eb03c18f.tar.gz
cpython-2ba198d2fbd8d4dd33d2c40af012d622eb03c18f.zip
Remove 2.6 compatibility code:
now heapqueue items must implement the "<" operator. The compatibility code could not work: all 3.0 objects have a __lt__ method (which returns NotImplemented) Twisted will have to adapt its DelayedCall class.
-rw-r--r--Lib/test/test_heapq.py6
-rw-r--r--Modules/_heapqmodule.c20
2 files changed, 4 insertions, 22 deletions
diff --git a/Lib/test/test_heapq.py b/Lib/test/test_heapq.py
index fba4fd71f85..484ab482887 100644
--- a/Lib/test/test_heapq.py
+++ b/Lib/test/test_heapq.py
@@ -198,7 +198,8 @@ class TestHeapC(TestHeap):
module = c_heapq
def test_comparison_operator(self):
- # Issue 3501: Make sure heapq works with both __lt__ and __le__
+ # Issue 3501: Make sure heapq works with both __lt__
+ # For python 3.0, __le__ alone is not enough
def hsort(data, comp):
data = [comp(x) for x in data]
self.module.heapify(data)
@@ -215,9 +216,8 @@ class TestHeapC(TestHeap):
return self.x >= other.x
data = [random.random() for i in range(100)]
target = sorted(data, reverse=True)
- print("HASATTR", hasattr(LE(0), "__lt__"), LE(0).__lt__)
self.assertEqual(hsort(data, LT), target)
- self.assertEqual(hsort(data, LE), target)
+ self.assertRaises(TypeError, data, LE)
#==============================================================================
diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c
index 4cf6c95bb81..7921823696f 100644
--- a/Modules/_heapqmodule.c
+++ b/Modules/_heapqmodule.c
@@ -8,28 +8,10 @@ annotated by François Pinard, and converted to C by Raymond Hettinger.
#include "Python.h"
-/* Older implementations of heapq used Py_LE for comparisons. Now, it uses
- Py_LT so it will match min(), sorted(), and bisect(). Unfortunately, some
- client code (Twisted for example) relied on Py_LE, so this little function
- restores compatability by trying both.
-*/
static int
cmp_lt(PyObject *x, PyObject *y)
{
- int cmp;
- static PyObject *lt = NULL;
-
- if (lt == NULL) {
- lt = PyUnicode_FromString("__lt__");
- if (lt == NULL)
- return -1;
- }
- if (PyObject_HasAttr(x, lt))
- return PyObject_RichCompareBool(x, y, Py_LT);
- cmp = PyObject_RichCompareBool(y, x, Py_LE);
- if (cmp != -1)
- cmp = 1 - cmp;
- return cmp;
+ return PyObject_RichCompareBool(x, y, Py_LT);
}
static int