[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [22961] branches/blender2.5/blender/source : remove Py_CmpToRich (copy of py3.0 function), instead only support == and != for PyRNA and KX_PySequence types.

Campbell Barton ideasman42 at gmail.com
Thu Sep 3 03:52:12 CEST 2009


Revision: 22961
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=22961
Author:   campbellbarton
Date:     2009-09-03 03:52:10 +0200 (Thu, 03 Sep 2009)

Log Message:
-----------
remove Py_CmpToRich (copy of py3.0 function), instead only support == and != for PyRNA and KX_PySequence types.
 mesh1 > mesh2 # will raise an error.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
    branches/blender2.5/blender/source/blender/python/intern/bpy_util.c
    branches/blender2.5/blender/source/blender/python/intern/bpy_util.h
    branches/blender2.5/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
    branches/blender2.5/blender/source/gameengine/Ketsji/KX_PythonSeq.cpp

Modified: branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c
===================================================================
--- branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c	2009-09-02 23:24:19 UTC (rev 22960)
+++ branches/blender2.5/blender/source/blender/python/intern/bpy_rna.c	2009-09-03 01:52:10 UTC (rev 22961)
@@ -144,25 +144,64 @@
 	return (a->prop==b->prop && a->ptr.data==b->ptr.data ) ? 0 : -1;
 }
 
-/* For some reason python3 needs these :/ */
-static PyObject *pyrna_struct_richcmp(BPy_StructRNA * a, BPy_StructRNA * b, int op)
+static PyObject *pyrna_struct_richcmp(PyObject *a, PyObject *b, int op)
 {
-	int cmp_result= -1; /* assume false */
-	if (BPy_StructRNA_Check(a) && BPy_StructRNA_Check(b)) {
-		cmp_result= pyrna_struct_compare(a, b);
+	PyObject *res;
+	int ok= -1; /* zero is true */
+
+	if (BPy_StructRNA_Check(a) && BPy_StructRNA_Check(b))
+		ok= pyrna_struct_compare((BPy_StructRNA *)a, (BPy_StructRNA *)b);
+
+	switch (op) {
+	case Py_NE:
+		ok = !ok; /* pass through */
+	case Py_EQ:
+		res = ok ? Py_False : Py_True;
+		break;
+
+	case Py_LT:
+	case Py_LE:
+	case Py_GT:
+	case Py_GE:
+		res = Py_NotImplemented;
+		break;
+	default:
+		PyErr_BadArgument();
+		return NULL;
 	}
 
-	return Py_CmpToRich(op, cmp_result);
+	Py_INCREF(res);
+	return res;
 }
 
-static PyObject *pyrna_prop_richcmp(BPy_PropertyRNA * a, BPy_PropertyRNA * b, int op)
+static PyObject *pyrna_prop_richcmp(PyObject *a, PyObject *b, int op)
 {
-	int cmp_result= -1; /* assume false */
-	if (BPy_PropertyRNA_Check(a) && BPy_PropertyRNA_Check(b)) {
-		cmp_result= pyrna_prop_compare(a, b);
+	PyObject *res;
+	int ok= -1; /* zero is true */
+
+	if (BPy_PropertyRNA_Check(a) && BPy_PropertyRNA_Check(b))
+		ok= pyrna_prop_compare((BPy_PropertyRNA *)a, (BPy_PropertyRNA *)b);
+
+	switch (op) {
+	case Py_NE:
+		ok = !ok; /* pass through */
+	case Py_EQ:
+		res = ok ? Py_False : Py_True;
+		break;
+
+	case Py_LT:
+	case Py_LE:
+	case Py_GT:
+	case Py_GE:
+		res = Py_NotImplemented;
+		break;
+	default:
+		PyErr_BadArgument();
+		return NULL;
 	}
 
-	return Py_CmpToRich(op, cmp_result);
+	Py_INCREF(res);
+	return res;
 }
 
 /*----------------------repr--------------------------------------------*/

Modified: branches/blender2.5/blender/source/blender/python/intern/bpy_util.c
===================================================================
--- branches/blender2.5/blender/source/blender/python/intern/bpy_util.c	2009-09-02 23:24:19 UTC (rev 22960)
+++ branches/blender2.5/blender/source/blender/python/intern/bpy_util.c	2009-09-03 01:52:10 UTC (rev 22961)
@@ -122,44 +122,6 @@
 	return 0; /* ok */
 }
 
-
-/* Copied from pythons 3's Object.c */
-PyObject *
-Py_CmpToRich(int op, int cmp)
-{
-	PyObject *res;
-	int ok;
-
-	if (PyErr_Occurred())
-		return NULL;
-	switch (op) {
-	case Py_LT:
-		ok = cmp <  0;
-		break;
-	case Py_LE:
-		ok = cmp <= 0;
-		break;
-	case Py_EQ:
-		ok = cmp == 0;
-		break;
-	case Py_NE:
-		ok = cmp != 0;
-		break;
-	case Py_GT:
-		ok = cmp >  0;
-		break;
-	case Py_GE:
-		ok = cmp >= 0;
-		break;
-	default:
-		PyErr_BadArgument();
-		return NULL;
-	}
-	res = ok ? Py_True : Py_False;
-	Py_INCREF(res);
-	return res;
-}
-
 /* for debugging */
 void PyObSpit(char *name, PyObject *var) {
 	fprintf(stderr, "<%s> : ", name);

Modified: branches/blender2.5/blender/source/blender/python/intern/bpy_util.h
===================================================================
--- branches/blender2.5/blender/source/blender/python/intern/bpy_util.h	2009-09-02 23:24:19 UTC (rev 22960)
+++ branches/blender2.5/blender/source/blender/python/intern/bpy_util.h	2009-09-03 01:52:10 UTC (rev 22961)
@@ -50,8 +50,6 @@
 void PyLineSpit(void);
 void BPY_getFileAndNum(char **filename, int *lineno);
 
-PyObject *Py_CmpToRich(int op, int cmp);
-
 PyObject *BPY_exception_buffer(void);
 
 /* own python like utility function */

Modified: branches/blender2.5/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
===================================================================
--- branches/blender2.5/blender/source/gameengine/Ketsji/KX_PythonInit.cpp	2009-09-02 23:24:19 UTC (rev 22960)
+++ branches/blender2.5/blender/source/gameengine/Ketsji/KX_PythonInit.cpp	2009-09-03 01:52:10 UTC (rev 22961)
@@ -2016,44 +2016,3 @@
 {
 	gp_GamePythonPathOrig[0] = '\0';
 }
-
-
-/* Copied from pythons 3's Object.c
- * also in blenders bpy_uitl.c, mailed the python-dev
- * list about enabling something like this again for py3 */
-PyObject *
-Py_CmpToRich(int op, int cmp)
-{
-	PyObject *res;
-	int ok;
-
-	if (PyErr_Occurred())
-		return NULL;
-	switch (op) {
-	case Py_LT:
-		ok = cmp <  0;
-		break;
-	case Py_LE:
-		ok = cmp <= 0;
-		break;
-	case Py_EQ:
-		ok = cmp == 0;
-		break;
-	case Py_NE:
-		ok = cmp != 0;
-		break;
-	case Py_GT:
-		ok = cmp >  0;
-		break;
-	case Py_GE:
-		ok = cmp >= 0;
-		break;
-	default:
-		PyErr_BadArgument();
-		return NULL;
-	}
-	res = ok ? Py_True : Py_False;
-	Py_INCREF(res);
-	return res;
-}
-

Modified: branches/blender2.5/blender/source/gameengine/Ketsji/KX_PythonSeq.cpp
===================================================================
--- branches/blender2.5/blender/source/gameengine/Ketsji/KX_PythonSeq.cpp	2009-09-02 23:24:19 UTC (rev 22960)
+++ branches/blender2.5/blender/source/gameengine/Ketsji/KX_PythonSeq.cpp	2009-09-03 01:52:10 UTC (rev 22961)
@@ -340,24 +340,42 @@
 }
 
 
-static int KX_PythonSeq_compare( KX_PythonSeq * a, KX_PythonSeq * b ) /* TODO - python3.x wants richcmp */
+static int KX_PythonSeq_compare( KX_PythonSeq * a, KX_PythonSeq * b )
 {
 	return ( a->type == b->type && a->base == b->base) ? 0 : -1;	
 }
 
-extern PyObject *Py_CmpToRich(int op, int cmp);
-
 static PyObject *KX_PythonSeq_richcmp(PyObject *a, PyObject *b, int op)
 {
-	int cmp_result= -1; /* assume false */
+	PyObject *res;
+	int ok= -1; /* zero is true */
+
+	if(BPy_KX_PythonSeq_Check(a) && BPy_KX_PythonSeq_Check(b))
+		ok= KX_PythonSeq_compare((KX_PythonSeq *)a, (KX_PythonSeq *)b);
 	
-	if(BPy_KX_PythonSeq_Check(a) && BPy_KX_PythonSeq_Check(b)) {
-		cmp_result= KX_PythonSeq_compare((KX_PythonSeq *)a, (KX_PythonSeq *)b);
+	switch (op) {
+	case Py_NE:
+		ok = !ok; /* pass through */
+	case Py_EQ:
+		res = ok ? Py_False : Py_True;
+		break;
+
+	case Py_LT:
+	case Py_LE:
+	case Py_GT:
+	case Py_GE:
+		res = Py_NotImplemented;
+		break;
+	default:
+		PyErr_BadArgument();
+		return NULL;
 	}
 	
-	return Py_CmpToRich(op, cmp_result);
+	Py_INCREF(res);
+	return res;
 }
 
+
 /*
  * repr function
  * convert to a list and get its string value





More information about the Bf-blender-cvs mailing list