]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programparser.cpp
Overhaul assignment tracking to work properly with conditionals
[libs/gl.git] / source / programparser.cpp
index 36cc6e081b1da26d5ef745b9bd7a66e8ff7099b5..f003a835b56b0352e7abe2387bcaff24792d87ce 100644 (file)
@@ -522,7 +522,7 @@ Expression *ProgramParser::parse_expression(unsigned precedence)
 
 BinaryExpression *ProgramParser::parse_binary(Expression *left, const Operator *oper)
 {
-       RefPtr<BinaryExpression> binary = new BinaryExpression;
+       RefPtr<BinaryExpression> binary = (oper->precedence==16 ? new Assignment : new BinaryExpression);
        binary->left = left;
        binary->oper = parse_token();
        if(binary->oper=="[")
@@ -533,7 +533,6 @@ BinaryExpression *ProgramParser::parse_binary(Expression *left, const Operator *
        }
        else
                binary->right = parse_expression(oper->precedence+(oper->assoc==RIGHT_TO_LEFT));
-       binary->assignment = (oper->precedence==16);
        return binary.release();
 }
 
@@ -650,7 +649,16 @@ InterfaceBlock *ProgramParser::parse_interface_block()
 
        iface->name = expect_identifier();
        parse_block(iface->members, true);
-       expect(";");
+       if(!check(";"))
+       {
+               iface->instance_name = expect_identifier();
+               if(check("["))
+               {
+                       iface->array = true;
+                       expect("]");
+               }
+               expect(";");
+       }
 
        return iface.release();
 }