[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19737] branches/blender2.5/blender/source /blender/makesrna/intern: RNA:
Brecht Van Lommel
brecht at blender.org
Wed Apr 15 17:12:43 CEST 2009
Revision: 19737
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19737
Author: blendix
Date: 2009-04-15 17:12:42 +0200 (Wed, 15 Apr 2009)
Log Message:
-----------
RNA:
* For RNA wrapped functions, the prototypes of the original
function being wrapped is now generated as well. This is
an extra check to ensure that the function is correctly
wrapped. It's printed after the function is used to still
get proper warnings in case the #include for it is missing.
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c 2009-04-15 15:10:31 UTC (rev 19736)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c 2009-04-15 15:12:42 UTC (rev 19737)
@@ -1165,7 +1165,7 @@
fprintf(f, "}\n\n");
- dfunc->call= funcname;
+ dfunc->gencall= funcname;
}
static void rna_auto_types()
@@ -1345,6 +1345,65 @@
fprintf(f, "\n");
}
+static void rna_generate_static_parameter_prototypes(BlenderRNA *brna, StructRNA *srna, FunctionDefRNA *dfunc, FILE *f)
+{
+ FunctionRNA *func;
+ PropertyDefRNA *dparm;
+ StructDefRNA *dsrna;
+
+ dsrna= rna_find_struct_def(srna);
+ func= dfunc->func;
+
+ for(dparm= dfunc->cont.properties.first; dparm; dparm= dparm->next) {
+ if(dparm->prop==func->ret) {
+ if(dparm->prop->arraylength)
+ fprintf(f, "XXX no array return types yet"); /* XXX not supported */
+ else if(dparm->prop->type == PROP_POINTER)
+ fprintf(f, "%s%s *", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop));
+ else
+ fprintf(f, "%s%s ", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop));
+
+ break;
+ }
+ }
+
+ if(!dparm)
+ fprintf(f, "void ");
+
+ fprintf(f, "%s(", dfunc->call);
+
+ if(dsrna->dnaname) fprintf(f, "struct %s *_self", dsrna->dnaname);
+ else fprintf(f, "struct %s *_self", srna->identifier);
+
+ for(dparm= dfunc->cont.properties.first; dparm; dparm= dparm->next) {
+ if(dparm->prop==func->ret) ;
+ else if(dparm->prop->arraylength)
+ fprintf(f, ", %s%s %s[%d]", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop), dparm->prop->identifier, dparm->prop->arraylength);
+ else if(dparm->prop->type == PROP_POINTER)
+ fprintf(f, ", %s%s *%s", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop), dparm->prop->identifier);
+ else
+ fprintf(f, ", %s%s %s", rna_type_struct(dparm->prop), rna_parameter_type_name(dparm->prop), dparm->prop->identifier);
+ }
+
+ fprintf(f, ");\n");
+}
+
+static void rna_generate_static_function_prototypes(BlenderRNA *brna, StructRNA *srna, FILE *f)
+{
+ FunctionRNA *func;
+ FunctionDefRNA *dfunc;
+
+ fprintf(f, "/* Repeated prototypes to detect errors */\n\n");
+
+ for(func= srna->functions.first; func; func= func->cont.next) {
+ dfunc= rna_find_function_def(func);
+ if(dfunc->call)
+ rna_generate_static_parameter_prototypes(brna, srna, dfunc, f);
+ }
+
+ fprintf(f, "\n");
+}
+
static void rna_generate_property(FILE *f, StructRNA *srna, const char *nest, PropertyRNA *prop)
{
char *strnest= "", *errnest= "";
@@ -1580,7 +1639,7 @@
rna_print_c_string(f, func->description); fprintf(f, ",\n");
dfunc= rna_find_function_def(func);
- if(dfunc->call) fprintf(f, "\t%s,\n", dfunc->call);
+ if(dfunc->gencall) fprintf(f, "\t%s,\n", dfunc->gencall);
else fprintf(f, "\tNULL,\n");
if(func->ret) fprintf(f, "\t(PropertyRNA*)&rna_%s_%s_%s\n", srna->identifier, func->identifier, func->ret->identifier);
@@ -1750,11 +1809,15 @@
for(dp=ds->cont.properties.first; dp; dp=dp->next)
rna_def_property_funcs(f, ds->srna, dp);
- for(ds=DefRNA.structs.first; ds; ds=ds->cont.next)
- if(!filename || ds->filename == filename)
+ for(ds=DefRNA.structs.first; ds; ds=ds->cont.next) {
+ if(!filename || ds->filename == filename) {
for(dfunc=ds->functions.first; dfunc; dfunc= dfunc->cont.next)
rna_def_function_funcs(f, ds, dfunc);
+ rna_generate_static_function_prototypes(brna, ds->srna, f);
+ }
+ }
+
for(ds=DefRNA.structs.first; ds; ds=ds->cont.next)
if(!filename || ds->filename == filename)
rna_generate_struct(brna, ds->srna, f);
Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h 2009-04-15 15:10:31 UTC (rev 19736)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_internal.h 2009-04-15 15:12:42 UTC (rev 19737)
@@ -47,6 +47,7 @@
FunctionRNA *func;
const char *srna;
const char *call;
+ const char *gencall;
} FunctionDefRNA;
typedef struct PropertyDefRNA {
More information about the Bf-blender-cvs
mailing list