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)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to