ir_reader: Make assignment conditions optional.
authorKenneth Graunke <kenneth@whitecape.org>
Sat, 1 Jan 2011 11:37:02 +0000 (03:37 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 13 Jan 2011 07:55:34 +0000 (23:55 -0800)
You can now simply write (assign (xy) <lhs> <rhs>) instead of the
verbose (assign (constant bool (1)) (xy) <lhs> <rhs>).

src/glsl/ir_print_visitor.cpp
src/glsl/ir_reader.cpp

index 0aa0b0a5d32f3a7f0e54a37eb86aba174c0cd2be..c56bafd00c5430fd019614d6267df9145d0ea3ef 100644 (file)
@@ -281,9 +281,6 @@ void ir_print_visitor::visit(ir_assignment *ir)
 
    if (ir->condition)
       ir->condition->accept(this);
-   else
-      printf("(constant bool (1))");
-
 
    char mask[5];
    unsigned j = 0;
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;