[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