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 - [email protected]
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 )