Skip to content

Commit b709a4b

Browse files
committed
Ditch obsolete tp_compare implementation.
We can use tp_richcompare for all supported Python versions.
1 parent 4b5ae6d commit b709a4b

File tree

3 files changed

+39
-64
lines changed

3 files changed

+39
-64
lines changed

src/runtime/classbase.cs

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public virtual IntPtr type_subscript(IntPtr idx)
6767
//====================================================================
6868
// Standard comparison implementation for instances of reflected types.
6969
//====================================================================
70-
#if (PYTHON32 || PYTHON33 || PYTHON34 || PYTHON35)
70+
7171
public static IntPtr tp_richcompare(IntPtr ob, IntPtr other, int op) {
7272
CLRObject co1;
7373
CLRObject co2;
@@ -169,27 +169,6 @@ public static IntPtr tp_richcompare(IntPtr ob, IntPtr other, int op) {
169169
return Runtime.PyNotImplemented;
170170
}
171171
}
172-
#else
173-
public static int tp_compare(IntPtr ob, IntPtr other)
174-
{
175-
if (ob == other)
176-
{
177-
return 0;
178-
}
179-
180-
CLRObject co1 = GetManagedObject(ob) as CLRObject;
181-
CLRObject co2 = GetManagedObject(other) as CLRObject;
182-
Object o1 = co1.inst;
183-
Object o2 = co2.inst;
184-
185-
if (Object.Equals(o1, o2))
186-
{
187-
return 0;
188-
}
189-
return -1;
190-
}
191-
#endif
192-
193172

194173
//====================================================================
195174
// Standard iteration support for instances of reflected types. This

src/runtime/runtime.cs

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -232,13 +232,13 @@ internal static void Initialize()
232232
}
233233

234234
#if (PYTHON32 || PYTHON33 || PYTHON34 || PYTHON35)
235-
IntPtr op = Runtime.PyImport_ImportModule("builtins");
236-
IntPtr dict = Runtime.PyObject_GetAttrString(op, "__dict__");
237-
PyNotImplemented = Runtime.PyObject_GetAttrString(op, "NotImplemented");
235+
IntPtr op = Runtime.PyImport_ImportModule("builtins");
236+
IntPtr dict = Runtime.PyObject_GetAttrString(op, "__dict__");
238237
#else
239238
IntPtr dict = Runtime.PyImport_GetModuleDict();
240239
IntPtr op = Runtime.PyDict_GetItemString(dict, "__builtin__");
241240
#endif
241+
PyNotImplemented = Runtime.PyObject_GetAttrString(op, "NotImplemented");
242242
PyBaseObjectType = Runtime.PyObject_GetAttrString(op, "object");
243243

244244
PyModuleType = Runtime.PyObject_Type(op);
@@ -255,8 +255,8 @@ internal static void Initialize()
255255
Runtime.XDecref(op);
256256

257257
#if (PYTHON32 || PYTHON33 || PYTHON34 || PYTHON35)
258-
Runtime.XDecref(dict);
259-
Runtime.XDecref(op);
258+
Runtime.XDecref(dict);
259+
Runtime.XDecref(op);
260260
#endif
261261

262262
op = Runtime.PyString_FromString("string");
@@ -268,9 +268,9 @@ internal static void Initialize()
268268
Runtime.XDecref(op);
269269

270270
#if (PYTHON32 || PYTHON33 || PYTHON34 || PYTHON35)
271-
op = Runtime.PyBytes_FromString("bytes");
272-
PyBytesType = Runtime.PyObject_Type(op);
273-
Runtime.XDecref(op);
271+
op = Runtime.PyBytes_FromString("bytes");
272+
PyBytesType = Runtime.PyObject_Type(op);
273+
Runtime.XDecref(op);
274274
#endif
275275

276276
op = Runtime.PyTuple_New(0);
@@ -389,17 +389,18 @@ internal static int AtExit()
389389
internal static IntPtr PyTypeType;
390390

391391
#if (PYTHON32 || PYTHON33 || PYTHON34 || PYTHON35)
392-
internal static IntPtr PyBytesType;
393-
internal static IntPtr PyNotImplemented;
394-
internal const int Py_LT = 0;
395-
internal const int Py_LE = 1;
396-
internal const int Py_EQ = 2;
397-
internal const int Py_NE = 3;
398-
internal const int Py_GT = 4;
399-
internal const int Py_GE = 5;
400-
internal static IntPtr _PyObject_NextNotImplemented;
392+
internal static IntPtr PyBytesType;
393+
internal static IntPtr _PyObject_NextNotImplemented;
401394
#endif
402395

396+
internal static IntPtr PyNotImplemented;
397+
internal const int Py_LT = 0;
398+
internal const int Py_LE = 1;
399+
internal const int Py_EQ = 2;
400+
internal const int Py_NE = 3;
401+
internal const int Py_GT = 4;
402+
internal const int Py_GE = 5;
403+
403404
internal static IntPtr PyTrue;
404405
internal static IntPtr PyFalse;
405406
internal static IntPtr PyNone;

src/tests/test_class.py

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -210,39 +210,34 @@ def testComparisons(self):
210210
self.assertEqual(d1 == d2, False)
211211
self.assertEqual(d1 != d2, True)
212212

213-
if six.PY3:
214-
self.assertEqual(d1 < d2, True)
215-
self.assertEqual(d1 <= d2, True)
216-
self.assertEqual(d1 >= d2, False)
217-
self.assertEqual(d1 > d2, False)
213+
self.assertEqual(d1 < d2, True)
214+
self.assertEqual(d1 <= d2, True)
215+
self.assertEqual(d1 >= d2, False)
216+
self.assertEqual(d1 > d2, False)
218217

219218
self.assertEqual(d1 == d1, True)
220219
self.assertEqual(d1 != d1, False)
221220

222-
if six.PY3:
223-
self.assertEqual(d1 < d1, False)
224-
self.assertEqual(d1 <= d1, True)
225-
self.assertEqual(d1 >= d1, True)
226-
self.assertEqual(d1 > d1, False)
221+
self.assertEqual(d1 < d1, False)
222+
self.assertEqual(d1 <= d1, True)
223+
self.assertEqual(d1 >= d1, True)
224+
self.assertEqual(d1 > d1, False)
227225

228226
self.assertEqual(d2 == d1, False)
229227
self.assertEqual(d2 != d1, True)
230228

231-
if six.PY3:
232-
self.assertEqual(d2 < d1, False)
233-
self.assertEqual(d2 <= d1, False)
234-
self.assertEqual(d2 >= d1, True)
235-
self.assertEqual(d2 > d1, True)
236-
237-
if six.PY3:
238-
self.assertRaises(TypeError, lambda: d1 < None)
239-
self.assertRaises(TypeError, lambda: d1 < System.Guid())
240-
241-
if six.PY3:
242-
# ClassTest does not implement IComparable
243-
c1 = ClassTest()
244-
c2 = ClassTest()
245-
self.assertRaises(TypeError, lambda: c1 < c2)
229+
self.assertEqual(d2 < d1, False)
230+
self.assertEqual(d2 <= d1, False)
231+
self.assertEqual(d2 >= d1, True)
232+
self.assertEqual(d2 > d1, True)
233+
234+
self.assertRaises(TypeError, lambda: d1 < None)
235+
self.assertRaises(TypeError, lambda: d1 < System.Guid())
236+
237+
# ClassTest does not implement IComparable
238+
c1 = ClassTest()
239+
c2 = ClassTest()
240+
self.assertRaises(TypeError, lambda: c1 < c2)
246241

247242

248243
class ClassicClass:

0 commit comments

Comments
 (0)