glsl2: When dumping IR for debug, indent nested blocks.
authorEric Anholt <eric@anholt.net>
Thu, 29 Jul 2010 21:36:59 +0000 (14:36 -0700)
committerEric Anholt <eric@anholt.net>
Thu, 29 Jul 2010 21:38:04 +0000 (14:38 -0700)
No more trying to match parens in my head when looking at the body of
a short function containing an if statement.

src/glsl/ir_print_visitor.cpp
src/glsl/ir_print_visitor.h

index 88a0a6f0c8857255e82a944c3e223ee98a7e2373..7df9d8adcda5a6512459992cb48d7bdd2ebdd907 100644 (file)
@@ -65,6 +65,13 @@ _mesa_print_ir(exec_list *instructions,
    printf("\n)");
 }
 
+
+void ir_print_visitor::indent(void)
+{
+   for (int i = 0; i < indentation; i++)
+      printf("  ");
+}
+
 static void
 print_type(const glsl_type *t)
 {
@@ -102,23 +109,43 @@ void ir_print_visitor::visit(ir_variable *ir)
 void ir_print_visitor::visit(ir_function_signature *ir)
 {
    printf("(signature ");
+   indentation++;
+
    print_type(ir->return_type);
-   printf("\n  (parameters\n");
+   printf("\n");
+   indent();
+
+   printf("(parameters\n");
+   indentation++;
+
    foreach_iter(exec_list_iterator, iter, ir->parameters) {
       ir_variable *const inst = (ir_variable *) iter.get();
 
+      indent();
       inst->accept(this);
       printf("\n");
    }
-   printf("  )\n(");
+   indentation--;
+
+   indent();
+   printf(")\n");
+
+   indent();
+
+   printf("(\n");
+   indentation++;
 
    foreach_iter(exec_list_iterator, iter, ir->body) {
       ir_instruction *const inst = (ir_instruction *) iter.get();
 
+      indent();
       inst->accept(this);
       printf("\n");
    }
+   indentation--;
+   indent();
    printf("))\n");
+   indentation--;
 }
 
 
@@ -135,13 +162,16 @@ void ir_print_visitor::visit(ir_function *ir)
       return;
 
    printf("(function %s\n", ir->name);
+   indentation++;
    foreach_iter(exec_list_iterator, iter, *ir) {
       ir_function_signature *const sig = (ir_function_signature *) iter.get();
 
+      indent();
       sig->accept(this);
       printf("\n");
    }
-
+   indentation--;
+   indent();
    printf(")\n\n");
 }
 
@@ -352,21 +382,33 @@ ir_print_visitor::visit(ir_if *ir)
    ir->condition->accept(this);
 
    printf("(\n");
+   indentation++;
+
    foreach_iter(exec_list_iterator, iter, ir->then_instructions) {
       ir_instruction *const inst = (ir_instruction *) iter.get();
 
+      indent();
       inst->accept(this);
       printf("\n");
    }
+
+   indentation--;
+   indent();
    printf(")\n");
 
+   indent();
    printf("(\n");
+   indentation++;
+
    foreach_iter(exec_list_iterator, iter, ir->else_instructions) {
       ir_instruction *const inst = (ir_instruction *) iter.get();
 
+      indent();
       inst->accept(this);
       printf("\n");
    }
+   indentation--;
+   indent();
    printf("))\n");
 }
 
@@ -387,12 +429,17 @@ ir_print_visitor::visit(ir_loop *ir)
    if (ir->increment != NULL)
       ir->increment->accept(this);
    printf(") (\n");
+   indentation++;
+
    foreach_iter(exec_list_iterator, iter, ir->body_instructions) {
       ir_instruction *const inst = (ir_instruction *) iter.get();
 
+      indent();
       inst->accept(this);
       printf("\n");
    }
+   indentation--;
+   indent();
    printf("))\n");
 }
 
index 3db42e24ca38c75f7a8fc7a72e9e3d98ea9474cd..4feeb8c184dd79580ea612cbc3da2d7622ddbf21 100644 (file)
@@ -38,9 +38,8 @@ extern void _mesa_print_ir(exec_list *instructions,
 class ir_print_visitor : public ir_visitor {
 public:
    ir_print_visitor()
-      : deref_depth(0)
    {
-      /* empty */
+      indentation = 0;
    }
 
    virtual ~ir_print_visitor()
@@ -48,6 +47,8 @@ public:
       /* empty */
    }
 
+   void indent(void);
+
    /**
     * \name Visit methods
     *
@@ -76,7 +77,7 @@ public:
    /*@}*/
 
 private:
-   int deref_depth;
+   int indentation;
 };
 
 #endif /* IR_PRINT_VISITOR_H */