Hi, During the porting of Zope2 to python2.5 , the failures in the module Acquisition is regarding the C-API changes. This failures can be removed by mapping the function Wrapper_compare to tp_richcompare which is now mapped in to the tp_compare in the extension file Acquisition/_Acquisition.c. Part of the new code I introduced was copied from datetimemodule.c from Python 2.5 . Right now its not showing any failures or errors with both python2.4 and python2.5.
The patch is http://svn.zope.org/Zope/branches/gsoc-python-2.5/?rev=87371&view=rev Please review this patch. Is this changes and the function from datetimemodule.c. If not is there any suggestions?
Index: lib/python/Acquisition/_Acquisition.c =================================================================== --- lib/python/Acquisition/_Acquisition.c (revision 87254) +++ lib/python/Acquisition/_Acquisition.c (working copy) @@ -103,6 +103,32 @@ #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 */ typedef struct { @@ -759,6 +785,14 @@ } static PyObject * +Wrapper_richcompare(Wrapper *self, PyObject *w, int op) +{ + int diff = Wrapper_compare(self, w); + return diff_to_bool(diff, op); +} + + +static PyObject * Wrapper_repr(Wrapper *self) { PyObject *r; @@ -1241,7 +1275,7 @@ (printfunc)0, /*tp_print*/ (getattrfunc)0, /*tp_getattr*/ (setattrfunc)0, /*tp_setattr*/ - (cmpfunc)Wrapper_compare, /*tp_compare*/ + (cmpfunc)0, /*tp_compare*/ (reprfunc)Wrapper_repr, /*tp_repr*/ &Wrapper_as_number, /*tp_as_number*/ &Wrapper_as_sequence, /*tp_as_sequence*/ @@ -1259,7 +1293,7 @@ "Wrapper object for implicit acquisition", /* Documentation string */ /* tp_traverse */ (traverseproc)Wrapper_traverse, /* tp_clear */ (inquiry)Wrapper_clear, - /* tp_richcompare */ (richcmpfunc)0, + /* tp_richcompare */ (richcmpfunc)Wrapper_richcompare, /* tp_weaklistoffset */ (long)0, /* tp_iter */ (getiterfunc)0, /* tp_iternext */ (iternextfunc)0,
_______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org http://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope )