Factor ast_type_specifier code out to ast_type.cpp
[mesa.git] / ir_print_visitor.cpp
index 365ff5933e3b561fea7492cbeab8cf7fe6105a4b..b1c718d99ea512b99c9c743d917ce61b9155d03c 100644 (file)
  */
 #include <cstdio>
 #include "ir_print_visitor.h"
+#include "glsl_types.h"
+
+static void
+print_type(const glsl_type *t)
+{
+   if (t->base_type == GLSL_TYPE_ARRAY) {
+      printf("array\n");
+      printf("    (");
+      print_type(t->fields.array);
+      printf(")\n");
+
+      printf("    (%u)\n", t->length);
+      printf(")");
+   } else if (t->base_type == GLSL_TYPE_STRUCT) {
+      printf("struct (%s %u\n", t->name ? t->name : "@", t->length);
+      printf("    (FINISHME: structure fields go here)\n");
+      printf(")");
+   } else {
+      printf("%s", t->name);
+   }
+}
+
 
 void ir_print_visitor::visit(ir_variable *ir)
 {
@@ -35,7 +57,10 @@ void ir_print_visitor::visit(ir_variable *ir)
    printf("    (%s%s%s%s)\n",
          cent, inv, mode[ir->mode], interp[ir->interpolation]);
 
-   printf("    (FINISHME: type goes here)\n");
+   printf("    (");
+   print_type(ir->type);
+   printf(")\n");
+
    printf("    (%s)\n", ir->name);
    printf(")\n");
 }
@@ -98,6 +123,22 @@ void ir_print_visitor::visit(ir_assignment *ir)
 
 void ir_print_visitor::visit(ir_constant *ir)
 {
-   printf("%s:%d:\n", __func__, __LINE__);
    (void) ir;
+
+   printf("(constant\n");
+   printf("    (");
+   print_type(ir->type);
+   printf(")\n");
+   printf("    (FINISHME: value goes here)\n");
+   printf(")\n");
+}
+
+
+void
+ir_print_visitor::visit(ir_call *ir)
+{
+   (void) ir;
+
+   printf("(call FINISHME: function name here\n");
+   printf("    (FINISHME: function paramaters here))\n");
 }