Commit: ce022f45063482a2324ba358962804e1f4044a56
Author: Lukas Tönne
Date:   Wed May 18 11:28:50 2016 +0200
Branches: object_nodes
https://developer.blender.org/rBce022f45063482a2324ba358962804e1f4044a56

Use a TypeSpec pointer for structure fields rather than direct storage.

===================================================================

M       source/blender/blenvm/compile/node_graph.cc
M       source/blender/blenvm/compile/typedesc.cc
M       source/blender/blenvm/compile/typedesc.h
M       source/blender/blenvm/llvm/llvm_codegen.cc
M       source/blender/blenvm/llvm/llvm_types.cc

===================================================================

diff --git a/source/blender/blenvm/compile/node_graph.cc 
b/source/blender/blenvm/compile/node_graph.cc
index ea1af34..26d94d5 100644
--- a/source/blender/blenvm/compile/node_graph.cc
+++ b/source/blender/blenvm/compile/node_graph.cc
@@ -1219,48 +1219,45 @@ void NodeGraph::finalize()
 
 static void register_typedefs()
 {
-       TypeSpec *t;
        
-       t = TypeSpec::add_typedef("FLOAT", BVM_FLOAT);
+       TypeSpec *float_t = TypeSpec::add_typedef("FLOAT", BVM_FLOAT);
        
-       t = TypeSpec::add_typedef("FLOAT3", BVM_FLOAT3);
+       TypeSpec *float3_t = TypeSpec::add_typedef("FLOAT3", BVM_FLOAT3);
        
-       t = TypeSpec::add_typedef("FLOAT4", BVM_FLOAT4);
+       TypeSpec *float4_t = TypeSpec::add_typedef("FLOAT4", BVM_FLOAT4);
        
-       t = TypeSpec::add_typedef("INT", BVM_INT);
+       TypeSpec *int_t = TypeSpec::add_typedef("INT", BVM_INT);
        
-       t = TypeSpec::add_typedef("MATRIX44", BVM_MATRIX44);
+       TypeSpec *matrix44_t = TypeSpec::add_typedef("MATRIX44", BVM_MATRIX44);
        
-       t = TypeSpec::add_typedef("STRING", BVM_STRING);
+       TypeSpec *string_t = TypeSpec::add_typedef("STRING", BVM_STRING);
        
-       t = TypeSpec::add_typedef("RNAPOINTER", BVM_RNAPOINTER);
+       TypeSpec *rnapointer_t = TypeSpec::add_typedef("RNAPOINTER", 
BVM_RNAPOINTER);
        
-       t = TypeSpec::add_typedef("MESH", BVM_MESH);
+       TypeSpec *mesh_t = TypeSpec::add_typedef("MESH", BVM_MESH);
        
-       t = TypeSpec::add_typedef("DUPLIS", BVM_DUPLIS);
+       TypeSpec *duplis_t = TypeSpec::add_typedef("DUPLIS", BVM_DUPLIS);
        
        
-       t = TypeSpec::add_typedef("FLOAT_ARRAY", BVM_FLOAT, BVM_BUFFER_ARRAY);
+       TypeSpec::add_typedef("FLOAT_ARRAY", BVM_FLOAT, BVM_BUFFER_ARRAY);
        
-       t = TypeSpec::add_typedef("FLOAT3_ARRAY", BVM_FLOAT3, BVM_BUFFER_ARRAY);
+       TypeSpec::add_typedef("FLOAT3_ARRAY", BVM_FLOAT3, BVM_BUFFER_ARRAY);
        
-       t = TypeSpec::add_typedef("FLOAT4_ARRAY", BVM_FLOAT4, BVM_BUFFER_ARRAY);
+       TypeSpec::add_typedef("FLOAT4_ARRAY", BVM_FLOAT4, BVM_BUFFER_ARRAY);
        
-       t = TypeSpec::add_typedef("INT_ARRAY", BVM_INT, BVM_BUFFER_ARRAY);
+       TypeSpec::add_typedef("INT_ARRAY", BVM_INT, BVM_BUFFER_ARRAY);
        
-       t = TypeSpec::add_typedef("MATRIX44_ARRAY", BVM_MATRIX44, 
BVM_BUFFER_ARRAY);
+       TypeSpec::add_typedef("MATRIX44_ARRAY", BVM_MATRIX44, BVM_BUFFER_ARRAY);
        
-       t = TypeSpec::add_typedef("STRING_ARRAY", BVM_STRING, BVM_BUFFER_ARRAY);
+       TypeSpec::add_typedef("STRING_ARRAY", BVM_STRING, BVM_BUFFER_ARRAY);
        
-       t = TypeSpec::add_typedef("RNAPOINTER_ARRAY", BVM_RNAPOINTER, 
BVM_BUFFER_ARRAY);
+       TypeSpec::add_typedef("RNAPOINTER_ARRAY", BVM_RNAPOINTER, 
BVM_BUFFER_ARRAY);
        
-       t = TypeSpec::add_typedef("MESH_ARRAY", BVM_MESH, BVM_BUFFER_ARRAY);
+       TypeSpec::add_typedef("MESH_ARRAY", BVM_MESH, BVM_BUFFER_ARRAY);
        
-       t = TypeSpec::add_typedef("DUPLIS_ARRAY", BVM_DUPLIS, BVM_BUFFER_ARRAY);
+       TypeSpec::add_typedef("DUPLIS_ARRAY", BVM_DUPLIS, BVM_BUFFER_ARRAY);
        
-       
-       
-       (void)t;
+       UNUSED_VARS(float_t, float3_t, float4_t, matrix44_t, int_t, string_t, 
rnapointer_t, mesh_t, duplis_t);
 }
 
 OpCode get_opcode_from_node_type(const string &node)
diff --git a/source/blender/blenvm/compile/typedesc.cc 
b/source/blender/blenvm/compile/typedesc.cc
index f22554c..a599306 100644
--- a/source/blender/blenvm/compile/typedesc.cc
+++ b/source/blender/blenvm/compile/typedesc.cc
@@ -68,7 +68,7 @@ int StructSpec::find_field(const string &name) const
        return -1;
 }
 
-void StructSpec::add_field(const string &name, const TypeSpec &typespec)
+void StructSpec::add_field(const string &name, const TypeSpec *typespec)
 {
        m_fields.push_back(FieldSpec(name, typespec));
 }
@@ -182,7 +182,7 @@ size_t TypeSpec::size() const
        if (m_structure) {
                size_t size = 0;
                for (int i = 0; i < m_structure->num_fields(); ++i)
-                       size += m_structure->field(i).typespec.size();
+                       size += m_structure->field(i).typespec->size();
                return size;
        }
        else {
@@ -234,9 +234,9 @@ void TypeSpec::copy_value(void *to, const void *from) const
 {
        if (m_structure) {
                for (int i = 0; i < m_structure->num_fields(); ++i) {
-                       m_structure->field(i).typespec.copy_value(to, from);
+                       m_structure->field(i).typespec->copy_value(to, from);
                        
-                       size_t size = m_structure->field(i).typespec.size();
+                       size_t size = m_structure->field(i).typespec->size();
                        to = ((uint8_t *)to) + size;
                        from = ((uint8_t *)from) + size;
                }
diff --git a/source/blender/blenvm/compile/typedesc.h 
b/source/blender/blenvm/compile/typedesc.h
index 868288f..737b27f 100644
--- a/source/blender/blenvm/compile/typedesc.h
+++ b/source/blender/blenvm/compile/typedesc.h
@@ -208,7 +208,7 @@ private:
 
 struct StructSpec {
        struct FieldSpec {
-               FieldSpec(const string &name, const TypeSpec &typespec) :
+               FieldSpec(const string &name, const TypeSpec *typespec) :
                    name(name),
                    typespec(typespec)
                {}
@@ -219,7 +219,7 @@ struct StructSpec {
                }
                
                string name;
-               TypeSpec typespec;
+               const TypeSpec *typespec;
        };
        typedef std::vector<FieldSpec> FieldList;
        
@@ -233,7 +233,7 @@ struct StructSpec {
        int num_fields() const { return m_fields.size(); }
        const FieldSpec &field(int i) const { return m_fields[i]; }
        int find_field(const string &name) const;
-       void add_field(const string &name, const TypeSpec &typespec);
+       void add_field(const string &name, const TypeSpec *typespec);
        
 private:
        FieldList m_fields;
diff --git a/source/blender/blenvm/llvm/llvm_codegen.cc 
b/source/blender/blenvm/llvm/llvm_codegen.cc
index 41dc99e..d377d74 100644
--- a/source/blender/blenvm/llvm/llvm_codegen.cc
+++ b/source/blender/blenvm/llvm/llvm_codegen.cc
@@ -167,6 +167,7 @@ void 
LLVMCompilerBase::codegen_node_function_call(llvm::BasicBlock *block,
                const string &tname = output.socket->typedesc.name();
                const TypeSpec *typespec = 
output.socket->typedesc.get_typespec();
                Type *type = llvm_create_value_type(context(), tname, typespec);
+               BLI_assert(type != NULL);
                Value *value = builder.CreateAlloca(type);
                
                args.push_back(value);
diff --git a/source/blender/blenvm/llvm/llvm_types.cc 
b/source/blender/blenvm/llvm/llvm_types.cc
index a0bb4d8..c1eeb68 100644
--- a/source/blender/blenvm/llvm/llvm_types.cc
+++ b/source/blender/blenvm/llvm/llvm_types.cc
@@ -119,7 +119,7 @@ llvm::StructType *llvm_create_struct_type(llvm::LLVMContext 
&context, const stri
        
        std::vector<Type*> elemtypes;
        for (int i = 0; i < s->num_fields(); ++i) {
-               Type *ftype = llvm_create_value_type(context, s->field(i).name, 
&s->field(i).typespec);
+               Type *ftype = llvm_create_value_type(context, s->field(i).name, 
s->field(i).typespec);
                elemtypes.push_back(ftype);
        }

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

Reply via email to