ir_reader: Make assignment conditions optional.
[mesa.git] / src / glsl / ir_reader.cpp
index 11a8cb7ac2414ab0c996054a4e26f8a7dd55e9a6..40901dc6c92ea0cd16350dbd789aaf63f41d7644 100644 (file)
@@ -538,20 +538,25 @@ ir_reader::read_rvalue(s_expression *expr)
 ir_assignment *
 ir_reader::read_assignment(s_expression *expr)
 {
-   s_expression *cond_expr, *lhs_expr, *rhs_expr;
+   s_expression *cond_expr = NULL;
+   s_expression *lhs_expr, *rhs_expr;
    s_list       *mask_list;
 
-   s_pattern pat[] = { "assign", cond_expr, mask_list, lhs_expr, rhs_expr };
-   if (!MATCH(expr, pat)) {
-      ir_read_error(expr, "expected (assign <condition> (<write mask>) "
+   s_pattern pat4[] = { "assign",            mask_list, lhs_expr, rhs_expr };
+   s_pattern pat5[] = { "assign", cond_expr, mask_list, lhs_expr, rhs_expr };
+   if (!MATCH(expr, pat4) && !MATCH(expr, pat5)) {
+      ir_read_error(expr, "expected (assign [<condition>] (<write mask>) "
                          "<lhs> <rhs>)");
       return NULL;
    }
 
-   ir_rvalue *condition = read_rvalue(cond_expr);
-   if (condition == NULL) {
-      ir_read_error(NULL, "when reading condition of assignment");
-      return NULL;
+   ir_rvalue *condition = NULL;
+   if (cond_expr != NULL) {
+      condition = read_rvalue(cond_expr);
+      if (condition == NULL) {
+        ir_read_error(NULL, "when reading condition of assignment");
+        return NULL;
+      }
    }
 
    unsigned mask = 0;