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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy