[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33961] trunk/blender/source/blender/ makesrna: Continue from my commit r33952, which disallowed floats to be wrapped as ints.

Campbell Barton ideasman42 at gmail.com
Fri Dec 31 05:12:21 CET 2010


Revision: 33961
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33961
Author:   campbellbarton
Date:     2010-12-31 05:12:20 +0100 (Fri, 31 Dec 2010)

Log Message:
-----------
Continue from my commit r33952, which disallowed floats to be wrapped as ints.
this missed some cases, now also disallow ints to be wrapped as floats.

This commit also exposed a number of cases where ints/floats were incorrectly wrapped.
Bugs like [#25416] wont slip through the cracks anymore.

Modified Paths:
--------------
    trunk/blender/source/blender/makesrna/RNA_define.h
    trunk/blender/source/blender/makesrna/intern/makesrna.c
    trunk/blender/source/blender/makesrna/intern/rna_define.c
    trunk/blender/source/blender/makesrna/intern/rna_fcurve.c
    trunk/blender/source/blender/makesrna/intern/rna_mesh.c
    trunk/blender/source/blender/makesrna/intern/rna_property.c
    trunk/blender/source/blender/makesrna/intern/rna_scene.c
    trunk/blender/source/blender/makesrna/intern/rna_text.c

Modified: trunk/blender/source/blender/makesrna/RNA_define.h
===================================================================
--- trunk/blender/source/blender/makesrna/RNA_define.h	2010-12-31 04:09:15 UTC (rev 33960)
+++ trunk/blender/source/blender/makesrna/RNA_define.h	2010-12-31 04:12:20 UTC (rev 33961)
@@ -197,6 +197,12 @@
 void RNA_def_property_free_pointers(PropertyRNA *prop);
 int RNA_def_property_free_identifier(StructOrFunctionRNA *cont_, const char *identifier);
 
+/* utilities */
+const char *RNA_property_typename(PropertyType type);
+#define IS_DNATYPE_FLOAT_COMPAT(_str) (strcmp(_str, "float") == 0 || strcmp(_str, "double") == 0)
+#define IS_DNATYPE_INT_COMPAT(_str) (strcmp(_str, "int") == 0 || strcmp(_str, "short") == 0 || strcmp(_str, "char") == 0)
+
+
 #ifdef __cplusplus
 }
 #endif

Modified: trunk/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/makesrna.c	2010-12-31 04:09:15 UTC (rev 33960)
+++ trunk/blender/source/blender/makesrna/intern/makesrna.c	2010-12-31 04:12:20 UTC (rev 33961)
@@ -45,8 +45,6 @@
 #endif
 #endif
 
-static const char *rna_property_typename(PropertyType type);
-
 /* Replace if different */
 #define TMP_EXT ".tmp"
 
@@ -463,6 +461,28 @@
 			DefRNA.error= 1;
 			return NULL;
 		}
+
+		/* typecheck,  */
+		if(dp->dnatype && *dp->dnatype) {
+
+			if(prop->type == PROP_FLOAT) {
+				if(IS_DNATYPE_FLOAT_COMPAT(dp->dnatype) == 0) {
+					if(prop->subtype != PROP_COLOR_GAMMA) { /* colors are an exception. these get translated */
+						fprintf(stderr, "rna_def_property_get_func1: %s.%s is a '%s' but wrapped as type '%s'.\n", srna->identifier, prop->identifier, dp->dnatype, RNA_property_typename(prop->type));
+						DefRNA.error= 1;
+						return NULL;
+					}
+				}
+			}
+			else if(prop->type == PROP_INT || prop->type == PROP_BOOLEAN || prop->type == PROP_ENUM) {
+				if(IS_DNATYPE_INT_COMPAT(dp->dnatype) == 0) {
+					fprintf(stderr, "rna_def_property_get_func2: %s.%s is a '%s' but wrapped as type '%s'.\n", srna->identifier, prop->identifier, dp->dnatype, RNA_property_typename(prop->type));
+					DefRNA.error= 1;
+					return NULL;
+				}
+			}
+		}
+
 	}
 
 	func= rna_alloc_function_name(srna->identifier, prop->identifier, "get");
@@ -646,13 +666,6 @@
 			}
 			return NULL;
 		}
-
-		/* error check to ensure floats are not wrapped as ints/bools */
-		if(dp->dnatype && (strcmp(dp->dnatype, "float") == 0 || strcmp(dp->dnatype, "double") == 0) && prop->type != PROP_FLOAT) {
-			fprintf(stderr, "rna_def_property_set_func: %s.%s is a float but wrapped as type '%s'.\n", srna->identifier, prop->identifier, rna_property_typename(prop->type));
-			DefRNA.error= 1;
-			return NULL;
-		}
 	}
 
 	func= rna_alloc_function_name(srna->identifier, prop->identifier, "set");
@@ -1710,20 +1723,6 @@
 	}
 }
 
-static const char *rna_property_typename(PropertyType type)
-{
-	switch(type) {
-		case PROP_BOOLEAN: return "PROP_BOOLEAN";
-		case PROP_INT: return "PROP_INT";
-		case PROP_FLOAT: return "PROP_FLOAT";
-		case PROP_STRING: return "PROP_STRING";
-		case PROP_ENUM: return "PROP_ENUM";
-		case PROP_POINTER: return "PROP_POINTER";
-		case PROP_COLLECTION: return "PROP_COLLECTION";
-		default: return "PROP_UNKNOWN";
-	}
-}
-
 static const char *rna_property_subtypename(PropertySubType type)
 {
 	switch(type) {
@@ -2106,7 +2105,7 @@
 	rna_print_c_string(f, prop->name); fprintf(f, ",\n\t");
 	rna_print_c_string(f, prop->description); fprintf(f, ",\n\t");
 	fprintf(f, "%d,\n", prop->icon);
-	fprintf(f, "\t%s, %s|%s, %s, %d, {%d, %d, %d}, %d,\n", rna_property_typename(prop->type), rna_property_subtypename(prop->subtype), rna_property_subtype_unit(prop->subtype), rna_function_string(prop->getlength), prop->arraydimension, prop->arraylength[0], prop->arraylength[1], prop->arraylength[2], prop->totarraylength);
+	fprintf(f, "\t%s, %s|%s, %s, %d, {%d, %d, %d}, %d,\n", RNA_property_typename(prop->type), rna_property_subtypename(prop->subtype), rna_property_subtype_unit(prop->subtype), rna_function_string(prop->getlength), prop->arraydimension, prop->arraylength[0], prop->arraylength[1], prop->arraylength[2], prop->totarraylength);
 	fprintf(f, "\t%s%s, %d, %s, %s,\n", (prop->flag & PROP_CONTEXT_UPDATE)? "(UpdateFunc)": "", rna_function_string(prop->update), prop->noteflag, rna_function_string(prop->editable), rna_function_string(prop->itemeditable));
 
 	if(prop->flag & PROP_RAW_ACCESS) rna_set_raw_offset(f, srna, prop);

Modified: trunk/blender/source/blender/makesrna/intern/rna_define.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_define.c	2010-12-31 04:09:15 UTC (rev 33960)
+++ trunk/blender/source/blender/makesrna/intern/rna_define.c	2010-12-31 04:12:20 UTC (rev 33961)
@@ -1492,8 +1492,19 @@
 		return;
 	}
 
-	if((dp=rna_def_property_sdna(prop, structname, propname)))
+	if((dp=rna_def_property_sdna(prop, structname, propname))) {
+
+		if(DefRNA.silent == 0) {
+			/* error check to ensure floats are not wrapped as ints/bools */
+			if(dp->dnatype && *dp->dnatype && IS_DNATYPE_INT_COMPAT(dp->dnatype) == 0) {
+				fprintf(stderr, "RNA_def_property_boolean_sdna: %s.%s is a '%s' but wrapped as type '%s'.\n", srna->identifier, prop->identifier, dp->dnatype, RNA_property_typename(prop->type));
+				DefRNA.error= 1;
+				return;
+			}
+		}
+
 		dp->booleanbit= bit;
+	}
 }
 
 void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int booleanbit)
@@ -1526,6 +1537,16 @@
 	}
 
 	if((dp= rna_def_property_sdna(prop, structname, propname))) {
+
+		/* error check to ensure floats are not wrapped as ints/bools */
+		if(DefRNA.silent == 0) {
+			if(dp->dnatype && *dp->dnatype && IS_DNATYPE_INT_COMPAT(dp->dnatype) == 0) {
+				fprintf(stderr, "RNA_def_property_int_sdna: %s.%s is a '%s' but wrapped as type '%s'.\n", srna->identifier, prop->identifier, dp->dnatype, RNA_property_typename(prop->type));
+				DefRNA.error= 1;
+				return;
+			}
+		}
+
 		/* SDNA doesn't pass us unsigned unfortunately .. */
 		if(dp->dnatype && strcmp(dp->dnatype, "char") == 0) {
 			iprop->hardmin= iprop->softmin= CHAR_MIN;
@@ -1550,6 +1571,7 @@
 
 void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
 {
+	PropertyDefRNA *dp;
 	StructRNA *srna= DefRNA.laststruct;
 
 	if(!DefRNA.preprocess) {
@@ -1563,6 +1585,19 @@
 		return;
 	}
 
+	if((dp= rna_def_property_sdna(prop, structname, propname))) {
+		/* silent is for internal use */
+		if(DefRNA.silent == 0) {
+			if(dp->dnatype && *dp->dnatype && IS_DNATYPE_FLOAT_COMPAT(dp->dnatype) == 0) {
+				if(prop->subtype != PROP_COLOR_GAMMA) { /* colors are an exception. these get translated */
+					fprintf(stderr, "RNA_def_property_float_sdna: %s.%s is a '%s' but wrapped as type '%s'.\n", srna->identifier, prop->identifier, dp->dnatype, RNA_property_typename(prop->type));
+					DefRNA.error= 1;
+					return;
+				}
+			}
+		}
+	}
+
 	rna_def_property_sdna(prop, structname, propname);
 }
 
@@ -2799,3 +2834,17 @@
 }
 #endif
 
+const char *RNA_property_typename(PropertyType type)
+{
+	switch(type) {
+		case PROP_BOOLEAN: return "PROP_BOOLEAN";
+		case PROP_INT: return "PROP_INT";
+		case PROP_FLOAT: return "PROP_FLOAT";
+		case PROP_STRING: return "PROP_STRING";
+		case PROP_ENUM: return "PROP_ENUM";
+		case PROP_POINTER: return "PROP_POINTER";
+		case PROP_COLLECTION: return "PROP_COLLECTION";
+	}
+
+	return "PROP_UNKNOWN";
+}

Modified: trunk/blender/source/blender/makesrna/intern/rna_fcurve.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_fcurve.c	2010-12-31 04:09:15 UTC (rev 33960)
+++ trunk/blender/source/blender/makesrna/intern/rna_fcurve.c	2010-12-31 04:12:20 UTC (rev 33961)
@@ -747,8 +747,8 @@
 	RNA_def_property_ui_text(prop, "Before Mode", "Cycling mode to use before first keyframe");
 	RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
 	
-	prop= RNA_def_property(srna, "cycles_before", PROP_FLOAT, PROP_NONE);
-	RNA_def_property_float_sdna(prop, NULL, "before_cycles");
+	prop= RNA_def_property(srna, "cycles_before", PROP_INT, PROP_NONE);
+	RNA_def_property_int_sdna(prop, NULL, "before_cycles");
 	RNA_def_property_ui_text(prop, "Before Cycles", "Maximum number of cycles to allow before first keyframe. (0 = infinite)");
 	RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
 	
@@ -759,8 +759,8 @@
 	RNA_def_property_ui_text(prop, "After Mode", "Cycling mode to use after last keyframe");
 	RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
 	
-	prop= RNA_def_property(srna, "cycles_after", PROP_FLOAT, PROP_NONE);
-	RNA_def_property_float_sdna(prop, NULL, "after_cycles");
+	prop= RNA_def_property(srna, "cycles_after", PROP_INT, PROP_NONE);
+	RNA_def_property_int_sdna(prop, NULL, "after_cycles");
 	RNA_def_property_ui_text(prop, "After Cycles", "Maximum number of cycles to allow after last keyframe. (0 = infinite)");
 	RNA_def_property_update(prop, NC_ANIMATION|ND_KEYFRAME|NA_EDITED, NULL);
 }

Modified: trunk/blender/source/blender/makesrna/intern/rna_mesh.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_mesh.c	2010-12-31 04:09:15 UTC (rev 33960)
+++ trunk/blender/source/blender/makesrna/intern/rna_mesh.c	2010-12-31 04:12:20 UTC (rev 33961)
@@ -1135,7 +1135,9 @@
 	RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
 
 	prop= RNA_def_property(srna, "normal", PROP_FLOAT, PROP_DIRECTION);
-	RNA_def_property_float_sdna(prop, NULL, "no");
+	// RNA_def_property_float_sdna(prop, NULL, "no");
+	RNA_def_property_array(prop, 3);
+	RNA_def_property_range(prop, -1.0f, 1.0f);
 	RNA_def_property_float_funcs(prop, "rna_MeshVertex_normal_get", "rna_MeshVertex_normal_set", NULL);
 	RNA_def_property_ui_text(prop, "Normal", "Vertex Normal");
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_property.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_property.c	2010-12-31 04:09:15 UTC (rev 33960)
+++ trunk/blender/source/blender/makesrna/intern/rna_property.c	2010-12-31 04:12:20 UTC (rev 33961)
@@ -154,7 +154,7 @@
 	RNA_def_struct_sdna(srna, "bProperty");
 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list