Mesa (glsl2): glsl2: When dumping IR for debug, indent nested blocks.

Eric Anholt anholt at kemper.freedesktop.org
Thu Jul 29 21:40:04 UTC 2010


Module: Mesa
Branch: glsl2
Commit: bf496862be1ba863285aa2c1a2262b2d764c3e53
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=bf496862be1ba863285aa2c1a2262b2d764c3e53

Author: Eric Anholt <eric at anholt.net>
Date:   Thu Jul 29 14:36:59 2010 -0700

glsl2: When dumping IR for debug, indent nested blocks.

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 |   53 ++++++++++++++++++++++++++++++++++++++--
 src/glsl/ir_print_visitor.h   |    7 +++--
 2 files changed, 54 insertions(+), 6 deletions(-)

diff --git a/src/glsl/ir_print_visitor.cpp b/src/glsl/ir_print_visitor.cpp
index 88a0a6f..7df9d8a 100644
--- a/src/glsl/ir_print_visitor.cpp
+++ b/src/glsl/ir_print_visitor.cpp
@@ -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");
 }
 
diff --git a/src/glsl/ir_print_visitor.h b/src/glsl/ir_print_visitor.h
index 3db42e2..4feeb8c 100644
--- a/src/glsl/ir_print_visitor.h
+++ b/src/glsl/ir_print_visitor.h
@@ -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 */




More information about the mesa-commit mailing list