Hi,
2015-04-27 16:02 GMT+02:00 Petr Viktorin <[email protected]>:
> A macro like this would reduce boilerplate in stdlib and third-party C
> extensions. It would ease porting C extensions to Python 3, where rich
> comparison is mandatory.
It would be nice to have a six module for C extensions. I'm quite sure
that many projects are already full of #ifdef PYTHON3 ... #else ...
#endif macros.
> #define Py_RETURN_RICHCOMPARE(val1, val2, op) \
> do { \
> switch (op) { \
> case Py_EQ: if ((val1) == (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \
> case Py_NE: if ((val1) != (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \
> case Py_LT: if ((val1) < (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \
> case Py_GT: if ((val1) > (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \
> case Py_LE: if ((val1) <= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \
> case Py_GE: if ((val1) >= (val2)) Py_RETURN_TRUE; Py_RETURN_FALSE; \
> } \
> Py_RETURN_NOTIMPLEMENTED; \
> } while (0)
I would prefer a function for that:
PyObject *Py_RichCompare(long val1, long2, int op);
You should also handle invalid operator. PyUnicode_RichCompare() calls
PyErr_BadArgument() in this case.
Anyway, please open an issue for this idea.
Victor
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com