[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52637] trunk/blender/source/blender/ python/bmesh/bmesh_py_ops_call.c: bmesh operator py api:

Campbell Barton ideasman42 at gmail.com
Wed Nov 28 16:07:58 CET 2012


Revision: 52637
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52637
Author:   campbellbarton
Date:     2012-11-28 15:07:57 +0000 (Wed, 28 Nov 2012)
Log Message:
-----------
bmesh operator py api:
- fix for incorrect bmesh operator type-check for mapping slots.
- fix for python causing an assert when invalid args are given.
- fix memory leak with some exceptions.

Modified Paths:
--------------
    trunk/blender/source/blender/python/bmesh/bmesh_py_ops_call.c

Modified: trunk/blender/source/blender/python/bmesh/bmesh_py_ops_call.c
===================================================================
--- trunk/blender/source/blender/python/bmesh/bmesh_py_ops_call.c	2012-11-28 14:15:54 UTC (rev 52636)
+++ trunk/blender/source/blender/python/bmesh/bmesh_py_ops_call.c	2012-11-28 15:07:57 UTC (rev 52637)
@@ -584,8 +584,6 @@
 							PyObject *py_key =  BPy_BMElem_CreatePyObject(bm,  ele_key);
 							PyObject *py_val =  BPy_BMElem_CreatePyObject(bm, *(void **)BMO_OP_SLOT_MAPPING_DATA(ele_val));
 
-							BLI_assert(slot->slot_subtype.elem & ((BPy_BMElem *)py_val)->ele->head.htype);
-
 							PyDict_SetItem(item, py_key, py_val);
 							Py_DECREF(py_key);
 							Py_DECREF(py_val);
@@ -714,19 +712,23 @@
 		Py_ssize_t pos = 0;
 		while (PyDict_Next(kw, &pos, &key, &value)) {
 			const char *slot_name = _PyUnicode_AsString(key);
-			BMOpSlot *slot = BMO_slot_get(bmop.slots_in, slot_name);
+			BMOpSlot *slot;
 
-			if (slot == NULL) {
+			if (!BMO_slot_exists(bmop.slots_in, slot_name)) {
 				PyErr_Format(PyExc_TypeError,
 				             "%.200s: keyword \"%.200s\" is invalid for this operator",
 				             self->opname, slot_name);
+				BMO_op_finish(bm, &bmop);
 				return NULL;
 			}
 
+			 slot = BMO_slot_get(bmop.slots_in, slot_name);
+
 			/* now assign the value */
 			if (bpy_slot_from_py(bm, &bmop, slot, value,
 			                     self->opname, slot_name) == -1)
 			{
+				BMO_op_finish(bm, &bmop);
 				return NULL;
 			}
 		}




More information about the Bf-blender-cvs mailing list