RNA C++: fixes for lookup_int/lookup_string which were not working in some cases,
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Fri, 2 Nov 2012 13:36:20 +0000 (13:36 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Fri, 2 Nov 2012 13:36:20 +0000 (13:36 +0000)
and don't use ReportList for function arguments.

intern/cycles/blender/blender_util.h
source/blender/makesrna/intern/makesrna.c

index 079320e909ca5be7513610c99243c8663e919f9f..98460036d172a4842d9d32fb2d31742addd10d17 100644 (file)
@@ -39,7 +39,7 @@ CCL_NAMESPACE_BEGIN
 
 static inline BL::Mesh object_to_mesh(BL::Object self, BL::Scene scene, bool apply_modifiers, bool render)
 {
-       return self.to_mesh(NULL, scene, apply_modifiers, (render)? 2: 1);
+       return self.to_mesh(scene, apply_modifiers, (render)? 2: 1);
 }
 
 static inline void colorramp_to_array(BL::ColorRamp ramp, float4 *data, int size)
@@ -57,12 +57,12 @@ static inline void object_remove_mesh(BL::BlendData data, BL::Mesh mesh)
        /* TODO: BlendData.meshes ideally should be also a subclass of BlendDataMeshes */
        BL::BlendDataMeshes mesh_data(data.ptr);
 
-       mesh_data.remove(NULL, mesh);
+       mesh_data.remove(mesh);
 }
 
 static inline void object_create_duplilist(BL::Object self, BL::Scene scene)
 {
-       self.dupli_list_create(NULL, scene, 2);
+       self.dupli_list_create(scene, 2);
 }
 
 static inline void object_free_duplilist(BL::Object self)
index 31a6e82648abd17b56d8741a4e830eb33fdfdfc4..aa24dcb8b659f8ffe8bde915bc567d5ab95d84ca 100644 (file)
@@ -1730,9 +1730,6 @@ static void rna_def_struct_function_prototype_cpp(FILE *f, StructRNA *srna, Func
        if (func->flag & FUNC_USE_CONTEXT)
                WRITE_PARAM("Context C");
 
-       if (func->flag & FUNC_USE_REPORTS)
-               WRITE_PARAM("void *reports");
-
        for (dp = dfunc->cont.properties.first; dp; dp = dp->next) {
                int type, flag, pout;
                const char *ptrstr;
@@ -1907,7 +1904,7 @@ static void rna_def_struct_function_call_impl_cpp(FILE *f, StructRNA *srna, Func
                WRITE_PARAM("(::bContext *) C.ptr.data");
 
        if (func->flag & FUNC_USE_REPORTS)
-               WRITE_PARAM("(::ReportList *) reports");
+               WRITE_PARAM("NULL");
 
        dp = dfunc->cont.properties.first;
        for (; dp; dp = dp->next) {
@@ -3384,20 +3381,21 @@ static const char *cpp_classes = ""
 "      inline static int sname##_##identifier##_lookup_int_wrap(PointerRNA *ptr, int key, PointerRNA *r_ptr) \\\n"
 "      { \\\n"
 "              CollectionPropertyIterator iter; \\\n"
-"              int i = 0; \\\n"
+"              int i = 0, found = 0; \\\n"
 "              sname##_##identifier##_begin(&iter, ptr); \\\n"
 "              while (iter.valid) { \\\n"
 "                      if (i == key) { \\\n"
 "                              *r_ptr = iter.ptr; \\\n"
+"                              found = 1; \\\n"
 "                              break; \\\n"
 "                      } \\\n"
 "                      sname##_##identifier##_next(&iter); \\\n"
 "                      ++i; \\\n"
 "              } \\\n"
 "              sname##_##identifier##_end(&iter); \\\n"
-"              if (!iter.valid) \\\n"
+"              if (!found) \\\n"
 "                      memset(r_ptr, 0, sizeof(*r_ptr)); \\\n"
-"              return iter.valid; \\\n"
+"              return found; \\\n"
 "      } \n"
 "#define COLLECTION_PROPERTY_LOOKUP_INT_TRUE(sname, identifier) \\\n"
 "      inline static int sname##_##identifier##_lookup_int_wrap(PointerRNA *ptr, int key, PointerRNA *r_ptr) \\\n"
@@ -3522,10 +3520,10 @@ static const char *cpp_classes = ""
 ""
 "      int length()\n"
 "      { return Tlength(&ptr); }\n"
-"      T& operator[](int key)\n"
-"      { PointerRNA r_ptr; Tlookup_int(&ptr, key, &r_ptr); return *(T*)r_ptr.data; }\n"
-"      T& operator[](const std::string &key)\n"
-"      { PointerRNA r_ptr; Tlookup_string(&ptr, key.c_str(), &r_ptr); return *(T*)r_ptr.data; }\n"
+"      T operator[](int key)\n"
+"      { PointerRNA r_ptr; Tlookup_int(&ptr, key, &r_ptr); return T(r_ptr); }\n"
+"      T operator[](const std::string &key)\n"
+"      { PointerRNA r_ptr; Tlookup_string(&ptr, key.c_str(), &r_ptr); return T(r_ptr); }\n"
 "\n"
 "private:\n"
 "      PointerRNA ptr;\n"