]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/parser.cpp
Transform interface block contents into structs
[libs/gl.git] / source / glsl / parser.cpp
index c924606f09c018c33388b020ec23100aa5a291f4..fd782648083bdb05a1aa700ca65d4ab8f15aa926 100644 (file)
@@ -447,7 +447,8 @@ RefPtr<Expression> Parser::parse_expression(unsigned precedence)
                        if(token==i->token && (!left || i->type!=Operator::PREFIX) && (left || i->type!=Operator::POSTFIX))
                                oper = i;
 
-               if(token==";" || token==")" || token=="]" || token=="," || (oper && precedence && oper->precedence>=precedence))
+               bool lower_precedence = (oper && oper->type!=Operator::PREFIX && precedence && oper->precedence>=precedence);
+               if(token==";" || token==")" || token=="]" || token=="," || lower_precedence)
                {
                        if(left)
                                return left;
@@ -775,7 +776,8 @@ RefPtr<InterfaceBlock> Parser::parse_interface_block()
                throw parse_error(tokenizer.get_location(), iface->interface, "an interface qualifier");
 
        iface->name = expect_identifier();
-       parse_block(iface->members, true, &Parser::parse_variable_declaration_with_layout);
+       iface->members = new Block;
+       parse_block(*iface->members, true, &Parser::parse_variable_declaration_with_layout);
        if(!check(";"))
        {
                iface->instance_name = expect_identifier();