Skip to content

Commit 5f447e5

Browse files
committed
refactor richcompare
1 parent 258cb3b commit 5f447e5

File tree

1 file changed

+12
-16
lines changed

1 file changed

+12
-16
lines changed

stringdtype/stringdtype/src/dtype.c

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -483,34 +483,30 @@ static PyMemberDef StringDType_members[] = {
483483
static PyObject *
484484
StringDType_richcompare(PyObject *self, PyObject *other, int op)
485485
{
486-
PyTypeObject *stype = Py_TYPE(self);
487-
PyTypeObject *otype = Py_TYPE(other);
488-
489-
if (stype != otype) {
486+
// this isn't very friendly to subclasses
487+
if (!((op == Py_EQ) || (op == Py_NE)) ||
488+
(Py_TYPE(other) != (PyTypeObject *)&StringDType)) {
490489
Py_INCREF(Py_NotImplemented);
491490
return Py_NotImplemented;
492491
}
493492

493+
// we know both are instances of StringDType so this is safe
494494
StringDTypeObject *sself = (StringDTypeObject *)self;
495495
StringDTypeObject *sother = (StringDTypeObject *)other;
496496

497497
int eq = (sself->na_object == sother->na_object) &&
498498
(sself->coerce == sother->coerce);
499-
if (op == Py_EQ) {
500-
if (eq) {
501-
return Py_True;
502-
}
503-
return Py_False;
499+
500+
PyObject *ret = Py_NotImplemented;
501+
if ((op == Py_EQ && eq) || (op == Py_NE && !eq)) {
502+
ret = Py_True;
504503
}
505-
if (op == Py_NE) {
506-
if (eq) {
507-
return Py_False;
508-
}
509-
return Py_True;
504+
else {
505+
ret = Py_False;
510506
}
511507

512-
Py_INCREF(Py_NotImplemented);
513-
return Py_NotImplemented;
508+
Py_INCREF(ret);
509+
return ret;
514510
}
515511

516512
/*

0 commit comments

Comments
 (0)