[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39696] trunk/blender/source/blender: sanity checks on operator exec/modal/invoke return values.
Campbell Barton
ideasman42 at gmail.com
Thu Aug 25 18:42:42 CEST 2011
Revision: 39696
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39696
Author: campbellbarton
Date: 2011-08-25 16:42:42 +0000 (Thu, 25 Aug 2011)
Log Message:
-----------
sanity checks on operator exec/modal/invoke return values.
Modified Paths:
--------------
trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h
trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
trunk/blender/source/blender/windowmanager/intern/wm_operators.c
Modified: trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h 2011-08-25 16:41:08 UTC (rev 39695)
+++ trunk/blender/source/blender/makesdna/DNA_windowmanager_types.h 2011-08-25 16:42:42 UTC (rev 39696)
@@ -320,15 +320,21 @@
} wmOperator;
-/* operator type exec(), invoke() modal(), return values */
-#define OPERATOR_RUNNING_MODAL 1
-#define OPERATOR_CANCELLED 2
-#define OPERATOR_FINISHED 4
+
+/* operator type return flags: exec(), invoke() modal(), return values */
+#define OPERATOR_RUNNING_MODAL (1<<0)
+#define OPERATOR_CANCELLED (1<<1)
+#define OPERATOR_FINISHED (1<<2)
/* add this flag if the event should pass through */
-#define OPERATOR_PASS_THROUGH 8
+#define OPERATOR_PASS_THROUGH (1<<3)
/* in case operator got executed outside WM code... like via fileselect */
-#define OPERATOR_HANDLED 16
+#define OPERATOR_HANDLED (1<<4)
+#define OPERATOR_FLAGS_ALL ((1<<5)-1)
+
+/* sanity checks for debug mode only */
+#define OPERATOR_RETVAL_CHECK(ret) BLI_assert(ret != 0 && (ret & OPERATOR_FLAGS_ALL) == ret)
+
/* wmOperator flag */
#define OP_GRAB_POINTER 1
Modified: trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_event_system.c 2011-08-25 16:41:08 UTC (rev 39695)
+++ trunk/blender/source/blender/windowmanager/intern/wm_event_system.c 2011-08-25 16:42:42 UTC (rev 39696)
@@ -531,6 +531,7 @@
wm->op_undo_depth++;
retval= op->type->exec(C, op);
+ OPERATOR_RETVAL_CHECK(retval);
if(op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
wm->op_undo_depth--;
@@ -690,6 +691,7 @@
wm->op_undo_depth++;
retval= op->type->invoke(C, op, event);
+ OPERATOR_RETVAL_CHECK(retval);
if(op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
wm->op_undo_depth--;
@@ -699,6 +701,7 @@
wm->op_undo_depth++;
retval= op->type->exec(C, op);
+ OPERATOR_RETVAL_CHECK(retval);
if(op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
wm->op_undo_depth--;
@@ -917,6 +920,7 @@
wm->op_undo_depth++;
retval= op->type->exec(C, op);
+ OPERATOR_RETVAL_CHECK(retval);
if(op->type->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
wm->op_undo_depth--;
@@ -1203,6 +1207,7 @@
wm->op_undo_depth++;
retval= ot->modal(C, op, event);
+ OPERATOR_RETVAL_CHECK(retval);
if(ot->flag & OPTYPE_UNDO && CTX_wm_manager(C) == wm)
wm->op_undo_depth--;
Modified: trunk/blender/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_operators.c 2011-08-25 16:41:08 UTC (rev 39695)
+++ trunk/blender/source/blender/windowmanager/intern/wm_operators.c 2011-08-25 16:42:42 UTC (rev 39696)
@@ -213,6 +213,7 @@
if(opm->type->exec) {
retval= opm->type->exec(C, opm);
+ OPERATOR_RETVAL_CHECK(retval);
if (retval & OPERATOR_FINISHED) {
MacroData *md = op->customdata;
@@ -237,6 +238,8 @@
else if(opm->type->exec)
retval= opm->type->exec(C, opm);
+ OPERATOR_RETVAL_CHECK(retval);
+
BLI_movelisttolist(&op->reports->list, &opm->reports->list);
if (retval & OPERATOR_FINISHED) {
@@ -265,6 +268,7 @@
printf("macro error, calling NULL modal()\n");
else {
retval = opm->type->modal(C, opm, event);
+ OPERATOR_RETVAL_CHECK(retval);
/* if this one is done but it's not the last operator in the macro */
if ((retval & OPERATOR_FINISHED) && opm->next) {
@@ -655,7 +659,9 @@
printf("WM_menu_invoke: %s \"%s\" is not an enum property\n", op->type->idname, RNA_property_identifier(prop));
}
else if (RNA_property_is_set(op->ptr, RNA_property_identifier(prop))) {
- return op->type->exec(C, op);
+ const int retval= op->type->exec(C, op);
+ OPERATOR_RETVAL_CHECK(retval);
+ return retval;
}
else {
pup= uiPupMenuBegin(C, op->type->name, ICON_NONE);
@@ -2345,7 +2351,6 @@
if(op->type->exec)
op->type->exec(C, op);
-
#ifdef GESTURE_MEMORY
circle_select_size= rect->xmax;
#endif
@@ -2566,7 +2571,6 @@
if(op->type->exec)
op->type->exec(C, op);
-
}
int WM_gesture_lasso_modal(bContext *C, wmOperator *op, wmEvent *event)
More information about the Bf-blender-cvs
mailing list