]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/generate.cpp
Rename InterfaceBlock::name to block_name for clarity
[libs/gl.git] / source / glsl / generate.cpp
index 6430f9d8a0e53d630e284f64ef4ab869a2f85925..d4623a7fd85064acf8eb0860c9e9dae149e2798c 100644 (file)
@@ -182,7 +182,7 @@ void TypeResolver::visit(InterfaceBlock &iface)
 
                StructDeclaration *strct = new StructDeclaration;
                strct->source = INTERNAL_SOURCE;
-               strct->name = format("_%s_%s", iface.interface, iface.name);
+               strct->name = format("_%s_%s", iface.interface, iface.block_name);
                strct->members.body.splice(strct->members.body.begin(), iface.members->body);
                stage->content.body.insert(type_insert_point, strct);
                stage->types.insert(make_pair(strct->name, strct));
@@ -488,7 +488,7 @@ void VariableResolver::visit(InterfaceBlock &iface)
 {
        /* Block names can be reused in different interfaces.  Prefix the name with
        the first character of the interface to avoid conflicts. */
-       stage->interface_blocks.insert(make_pair(iface.interface+iface.name, &iface));
+       stage->interface_blocks.insert(make_pair(iface.interface+iface.block_name, &iface));
        if(!iface.instance_name.empty())
                stage->interface_blocks.insert(make_pair("_"+iface.instance_name, &iface));
 
@@ -579,8 +579,7 @@ void ExpressionResolver::convert_to(RefPtr<Expression> &expr, BasicTypeDeclarati
        RefPtr<FunctionCall> call = new FunctionCall;
        call->name = type.name;
        call->constructor = true;
-       call->arguments.push_back(0);
-       call->arguments.back() = expr;
+       call->arguments.push_back_nocopy(expr);
        call->type = &type;
        expr = call;
 }
@@ -908,6 +907,9 @@ void ExpressionResolver::visit(TernaryExpression &ternary)
        {
                BasicTypeDeclaration *basic_true = dynamic_cast<BasicTypeDeclaration *>(ternary.true_expr->type);
                BasicTypeDeclaration *basic_false = dynamic_cast<BasicTypeDeclaration *>(ternary.false_expr->type);
+               if(!basic_true || !basic_false)
+                       return;
+
                Compatibility compat = get_compatibility(*basic_true, *basic_false);
                if(compat==NOT_COMPATIBLE)
                        return;
@@ -1012,7 +1014,7 @@ void ExpressionResolver::visit_constructor(FunctionCall &call)
                                        stage inline it if that's reasonable. */
                                        RefPtr<VariableDeclaration> temporary = new VariableDeclaration;
                                        temporary->type = args.front().type->name;
-                                       temporary->name = get_unused_variable_name(*current_block, "_temp", string());
+                                       temporary->name = get_unused_variable_name(*current_block, "_temp");
                                        temporary->init_expression = call.arguments.front();
                                        current_block->body.insert(insert_point, temporary);
 
@@ -1343,12 +1345,12 @@ VariableDeclaration *InterfaceGenerator::generate_interface(VariableDeclaration
 
 InterfaceBlock *InterfaceGenerator::generate_interface(InterfaceBlock &out_block)
 {
-       if(stage->interface_blocks.count("in"+out_block.name))
+       if(stage->interface_blocks.count("in"+out_block.block_name))
                return 0;
 
        InterfaceBlock *in_block = new InterfaceBlock;
        in_block->interface = "in";
-       in_block->name = out_block.name;
+       in_block->block_name = out_block.block_name;
        in_block->members = new Block;
        in_block->instance_name = out_block.instance_name;
        if(stage->type==Stage::GEOMETRY)
@@ -1369,7 +1371,7 @@ InterfaceBlock *InterfaceGenerator::generate_interface(InterfaceBlock &out_block
        }
 
        iface_target_block->body.insert(iface_insert_point, in_block);
-       stage->interface_blocks.insert(make_pair("in"+in_block->name, in_block));
+       stage->interface_blocks.insert(make_pair("in"+in_block->block_name, in_block));
        if(!in_block->instance_name.empty())
                stage->interface_blocks.insert(make_pair("_"+in_block->instance_name, in_block));
 
@@ -1500,7 +1502,7 @@ void InterfaceGenerator::visit(InterfaceBlock &iface)
                if(!iface.linked_block && stage->previous)
                {
                        const map<string, InterfaceBlock *> &prev_blocks = stage->previous->interface_blocks;
-                       map<string, InterfaceBlock *>::const_iterator i = prev_blocks.find("out"+iface.name);
+                       map<string, InterfaceBlock *>::const_iterator i = prev_blocks.find("out"+iface.block_name);
                        if(i!=prev_blocks.end())
                        {
                                iface.linked_block = i->second;