]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/parser.cpp
Track composite assignments and references in UnusedVariableRemover
[libs/gl.git] / source / glsl / parser.cpp
index a2e3296d81b9c52ff70139a3cf91f747aed03485..56e4b1b50fcf75573230c949256e0c5c33655d64 100644 (file)
@@ -268,11 +268,19 @@ RefPtr<Statement> Parser::parse_global_declaration()
                if(is_interface_qualifier(token) && tokenizer.peek_token(1)==";")
                {
                        RefPtr<InterfaceLayout> iface_lo = create_node<InterfaceLayout>();
+                       iface_lo->layout.source = layout->source;
+                       iface_lo->layout.line = layout->line;
                        iface_lo->layout.qualifiers = layout->qualifiers;
                        iface_lo->interface = tokenizer.parse_token();
                        tokenizer.expect(";");
                        return iface_lo;
                }
+               else if(is_interface_qualifier(token) && tokenizer.peek_token(2)=="{")
+               {
+                       RefPtr<InterfaceBlock> iface = parse_interface_block();
+                       iface->layout = layout;
+                       return iface;
+               }
                else
                {
                        RefPtr<VariableDeclaration> var = parse_variable_declaration();
@@ -575,7 +583,6 @@ RefPtr<FunctionCall> Parser::parse_function_call(const VariableReference &var)
 {
        RefPtr<FunctionCall> call = create_node<FunctionCall>();
        call->name = var.name;
-       call->constructor = is_type(call->name);
        call->oper = &Operator::get_operator("(", Operator::POSTFIX);
        tokenizer.expect("(");
        while(tokenizer.peek_token()!=")")
@@ -793,7 +800,7 @@ RefPtr<InterfaceBlock> Parser::parse_interface_block()
        if(!is_interface_qualifier(iface->interface))
                throw parse_error(tokenizer.get_location(), iface->interface, "an interface qualifier");
 
-       iface->name = expect_identifier();
+       iface->block_name = expect_identifier();
        iface->members = new Block;
        parse_block(*iface->members, true, &Parser::parse_variable_declaration_with_layout);
        if(!check(";"))