]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/generate.cpp
Fix VariableResolver doing bogus things on certain invalid constructs
[libs/gl.git] / source / glsl / generate.cpp
index 9adfb93d5cbfab11984c6bcf5f5a6a8315f6d494..ac3a4b75e7f7f9d62aa3925f01be9d6eeb94f8c4 100644 (file)
@@ -228,6 +228,13 @@ void VariableResolver::visit(MemberAccess &memacc)
        }
 }
 
+void VariableResolver::visit(UnaryExpression &unary)
+{
+       TraversingVisitor::visit(unary);
+       r_members = 0;
+       r_iface_ref = 0;
+}
+
 void VariableResolver::visit(BinaryExpression &binary)
 {
        if(binary.oper->token[0]=='[')
@@ -241,13 +248,14 @@ void VariableResolver::visit(BinaryExpression &binary)
                binary.left->visit(*this);
                if(r_iface_ref)
                        binary.left = r_iface_ref;
-               r_iface_ref = 0;
        }
        else
        {
                TraversingVisitor::visit(binary);
                r_members = 0;
        }
+
+       r_iface_ref = 0;
 }
 
 void VariableResolver::visit(Assignment &assign)
@@ -263,6 +271,15 @@ void VariableResolver::visit(Assignment &assign)
 
        assign.self_referencing = (r_self_referencing || assign.oper->token[0]!='=');
        assign.target_declaration = r_assignment_target;
+       r_members = 0;
+       r_iface_ref = 0;
+}
+
+void VariableResolver::visit(FunctionCall &call)
+{
+       TraversingVisitor::visit(call);
+       r_members = 0;
+       r_iface_ref = 0;
 }
 
 void VariableResolver::visit(StructDeclaration &strct)