Commit 0687e533 authored by Sidnei da Silva's avatar Sidnei da Silva

- Merge remaining changes from gsoc-python-2.5 branch. We now 'work' on Python 2.6

parent ca40e281
...@@ -103,6 +103,32 @@ CallMethodO(PyObject *self, PyObject *name, ...@@ -103,6 +103,32 @@ CallMethodO(PyObject *self, PyObject *name,
#define Build Py_BuildValue #define Build Py_BuildValue
/* For obscure reasons, we need to use tp_richcompare instead of tp_compare.
* The comparisons here all most naturally compute a cmp()-like result.
* This little helper turns that into a bool result for rich comparisons.
*/
static PyObject *
diff_to_bool(int diff, int op)
{
PyObject *result;
int istrue;
switch (op) {
case Py_EQ: istrue = diff == 0; break;
case Py_NE: istrue = diff != 0; break;
case Py_LE: istrue = diff <= 0; break;
case Py_GE: istrue = diff >= 0; break;
case Py_LT: istrue = diff < 0; break;
case Py_GT: istrue = diff > 0; break;
default:
assert(! "op unknown");
istrue = 0; /* To shut up compiler */
}
result = istrue ? Py_True : Py_False;
Py_INCREF(result);
return result;
}
/* Declarations for objects of type Wrapper */ /* Declarations for objects of type Wrapper */
typedef struct { typedef struct {
...@@ -758,6 +784,13 @@ Wrapper_compare(Wrapper *self, PyObject *w) ...@@ -758,6 +784,13 @@ Wrapper_compare(Wrapper *self, PyObject *w)
return r; return r;
} }
static PyObject *
Wrapper_richcompare(Wrapper *self, PyObject *w, int op)
{
int diff = Wrapper_compare(self, w);
return diff_to_bool(diff, op);
}
static PyObject * static PyObject *
Wrapper_repr(Wrapper *self) Wrapper_repr(Wrapper *self)
{ {
...@@ -1241,7 +1274,7 @@ static PyExtensionClass Wrappertype = { ...@@ -1241,7 +1274,7 @@ static PyExtensionClass Wrappertype = {
(printfunc)0, /*tp_print*/ (printfunc)0, /*tp_print*/
(getattrfunc)0, /*tp_getattr*/ (getattrfunc)0, /*tp_getattr*/
(setattrfunc)0, /*tp_setattr*/ (setattrfunc)0, /*tp_setattr*/
(cmpfunc)Wrapper_compare, /*tp_compare*/ (cmpfunc)0, /*tp_compare*/
(reprfunc)Wrapper_repr, /*tp_repr*/ (reprfunc)Wrapper_repr, /*tp_repr*/
&Wrapper_as_number, /*tp_as_number*/ &Wrapper_as_number, /*tp_as_number*/
&Wrapper_as_sequence, /*tp_as_sequence*/ &Wrapper_as_sequence, /*tp_as_sequence*/
...@@ -1259,7 +1292,7 @@ static PyExtensionClass Wrappertype = { ...@@ -1259,7 +1292,7 @@ static PyExtensionClass Wrappertype = {
"Wrapper object for implicit acquisition", /* Documentation string */ "Wrapper object for implicit acquisition", /* Documentation string */
/* tp_traverse */ (traverseproc)Wrapper_traverse, /* tp_traverse */ (traverseproc)Wrapper_traverse,
/* tp_clear */ (inquiry)Wrapper_clear, /* tp_clear */ (inquiry)Wrapper_clear,
/* tp_richcompare */ (richcmpfunc)0, /* tp_richcompare */ (richcmpfunc)Wrapper_richcompare,
/* tp_weaklistoffset */ (long)0, /* tp_weaklistoffset */ (long)0,
/* tp_iter */ (getiterfunc)0, /* tp_iter */ (getiterfunc)0,
/* tp_iternext */ (iternextfunc)0, /* tp_iternext */ (iternextfunc)0,
...@@ -1285,7 +1318,7 @@ static PyExtensionClass XaqWrappertype = { ...@@ -1285,7 +1318,7 @@ static PyExtensionClass XaqWrappertype = {
(printfunc)0, /*tp_print*/ (printfunc)0, /*tp_print*/
(getattrfunc)0, /*tp_getattr*/ (getattrfunc)0, /*tp_getattr*/
(setattrfunc)0, /*tp_setattr*/ (setattrfunc)0, /*tp_setattr*/
(cmpfunc)Wrapper_compare, /*tp_compare*/ (cmpfunc)0, /*tp_compare*/
(reprfunc)Wrapper_repr, /*tp_repr*/ (reprfunc)Wrapper_repr, /*tp_repr*/
&Wrapper_as_number, /*tp_as_number*/ &Wrapper_as_number, /*tp_as_number*/
&Wrapper_as_sequence, /*tp_as_sequence*/ &Wrapper_as_sequence, /*tp_as_sequence*/
...@@ -1303,7 +1336,7 @@ static PyExtensionClass XaqWrappertype = { ...@@ -1303,7 +1336,7 @@ static PyExtensionClass XaqWrappertype = {
"Wrapper object for implicit acquisition", /* Documentation string */ "Wrapper object for implicit acquisition", /* Documentation string */
/* tp_traverse */ (traverseproc)Wrapper_traverse, /* tp_traverse */ (traverseproc)Wrapper_traverse,
/* tp_clear */ (inquiry)Wrapper_clear, /* tp_clear */ (inquiry)Wrapper_clear,
/* tp_richcompare */ (richcmpfunc)0, /* tp_richcompare */ (richcmpfunc)Wrapper_richcompare,
/* tp_weaklistoffset */ (long)0, /* tp_weaklistoffset */ (long)0,
/* tp_iter */ (getiterfunc)0, /* tp_iter */ (getiterfunc)0,
/* tp_iternext */ (iternextfunc)0, /* tp_iternext */ (iternextfunc)0,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment