mesa: Prefix main includes with dir to avoid conflicts.
[mesa.git] / src / mesa / shader / slang / slang_print.c
index 4be9041c78744014da3d7f8bd9c0dd9cfacdbcd1..4422f70159f44f7a4400666076e34a4df302e033 100644 (file)
@@ -4,7 +4,7 @@
  */
 
 
-#include "imports.h"
+#include "main/imports.h"
 #include "slang_compile.h"
 #include "slang_print.h"
 
@@ -101,6 +101,24 @@ print_type(const slang_fully_specified_type *t)
    case SLANG_SPEC_MAT4:
       printf("mat4");
       break;
+   case SLANG_SPEC_MAT23:
+      printf("mat2x3");
+      break;
+   case SLANG_SPEC_MAT32:
+      printf("mat3x2");
+      break;
+   case SLANG_SPEC_MAT24:
+      printf("mat2x4");
+      break;
+   case SLANG_SPEC_MAT42:
+      printf("mat4x2");
+      break;
+   case SLANG_SPEC_MAT34:
+      printf("mat3x4");
+      break;
+   case SLANG_SPEC_MAT43:
+      printf("mat4x3");
+      break;
    case SLANG_SPEC_SAMPLER1D:
       printf("sampler1D");
       break;
@@ -138,7 +156,7 @@ print_variable(const slang_variable *v, int indent)
    spaces(indent);
    printf("VAR ");
    print_type(&v->type);
-   printf(" %s", (char *) v->a_name);
+   printf(" %s (at %p)", (char *) v->a_name, (void *) v);
    if (v->initializer) {
       printf(" :=\n");
       slang_print_tree(v->initializer, indent + 3);
@@ -153,9 +171,17 @@ static void
 print_binary(const slang_operation *op, const char *oper, int indent)
 {
    assert(op->num_children == 2);
+#if 0
+   printf("binary at %p locals=%p outer=%p\n",
+          (void *) op,
+          (void *) op->locals,
+          (void *) op->locals->outer_scope);
+#endif
    slang_print_tree(&op->children[0], indent + 3);
    spaces(indent);
-   printf("%s\n", oper);
+   printf("%s at %p locals=%p outer=%p\n",
+          oper, (void *) op, (void *) op->locals,
+          (void *) op->locals->outer_scope);
    slang_print_tree(&op->children[1], indent + 3);
 }
 
@@ -164,14 +190,16 @@ static void
 print_generic2(const slang_operation *op, const char *oper,
                const char *s, int indent)
 {
-   int i;
+   GLuint i;
    if (oper) {
       spaces(indent);
-      printf("[%p locals %p] %s %s\n", (void*) op, (void*) op->locals, oper, s);
+      printf("%s %s at %p locals=%p outer=%p\n",
+             oper, s, (void *) op, (void *) op->locals, 
+             (void *) op->locals->outer_scope);
    }
    for (i = 0; i < op->num_children; i++) {
       spaces(indent);
-      printf("//child %d:\n", i);
+      printf("//child %u of %u:\n", i, op->num_children);
       slang_print_tree(&op->children[i], indent);
    }
 }
@@ -215,7 +243,7 @@ find_var(const slang_variable_scope *s, slang_atom name)
 void
 slang_print_tree(const slang_operation *op, int indent)
 {
-   int i;
+   GLuint i;
 
    switch (op->type) {
 
@@ -226,7 +254,7 @@ slang_print_tree(const slang_operation *op, int indent)
 
    case SLANG_OPER_BLOCK_NO_NEW_SCOPE:
       spaces(indent);
-      printf("{ locals %p  outer %p\n", (void*)op->locals, (void*)op->locals->outer_scope);
+      printf("{ locals=%p  outer=%p\n", (void*)op->locals, (void*)op->locals->outer_scope);
       print_generic(op, NULL, indent+3);
       spaces(indent);
       printf("}\n");
@@ -234,7 +262,13 @@ slang_print_tree(const slang_operation *op, int indent)
 
    case SLANG_OPER_BLOCK_NEW_SCOPE:
       spaces(indent);
-      printf("{{ // new scope  locals %p\n", (void*)op->locals);
+      printf("{{ // new scope  locals=%p outer=%p: ",
+             (void *) op->locals,
+             (void *) op->locals->outer_scope);
+      for (i = 0; i < op->locals->num_variables; i++) {
+         printf("%s ", (char *) op->locals->variables[i]->a_name);
+      }
+      printf("\n");
       print_generic(op, NULL, indent+3);
       spaces(indent);
       printf("}}\n");
@@ -246,14 +280,16 @@ slang_print_tree(const slang_operation *op, int indent)
          slang_variable *v;
          v = _slang_locate_variable(op->locals, op->a_id, GL_TRUE);
          if (v) {
+            const slang_variable_scope *scope;
             spaces(indent);
             printf("DECL (locals=%p outer=%p) ", (void*)op->locals, (void*) op->locals->outer_scope);
             print_type(&v->type);
             printf(" %s (%p)", (char *) op->a_id,
                    (void *) find_var(op->locals, op->a_id));
 
-            printf(" (in scope %p) ",
-                   (void *) find_scope(op->locals, op->a_id));
+            scope = find_scope(op->locals, op->a_id);
+            printf(" (in scope %p) ", (void *) scope);
+            assert(scope);
             if (op->num_children == 1) {
                printf(" :=\n");
                slang_print_tree(&op->children[0], indent + 3);
@@ -274,18 +310,20 @@ slang_print_tree(const slang_operation *op, int indent)
             */
          }
          else {
-            abort();
             spaces(indent);
             printf("DECL %s (anonymous variable!!!!)\n", (char *) op->a_id);
-            /*abort();*/
          }
       }
       break;
 
    case SLANG_OPER_ASM:
       spaces(indent);
-      printf("ASM: %s\n", (char*) op->a_id);
-      print_generic(op, NULL, indent+3);
+      printf("ASM: %s at %p locals=%p outer=%p\n",
+             (char *) op->a_id,
+             (void *) op,
+             (void *) op->locals,
+             (void *) op->locals->outer_scope);
+      print_generic(op, "ASM", indent+3);
       break;
 
    case SLANG_OPER_BREAK:
@@ -310,11 +348,6 @@ slang_print_tree(const slang_operation *op, int indent)
          slang_print_tree(&op->children[0], indent + 3);
       break;
 
-   case SLANG_OPER_GOTO:
-      spaces(indent);
-      printf("GOTO %s\n", (char *) op->a_id);
-      break;
-
    case SLANG_OPER_LABEL:
       spaces(indent);
       printf("LABEL %s\n", (char *) op->a_id);
@@ -322,7 +355,9 @@ slang_print_tree(const slang_operation *op, int indent)
 
    case SLANG_OPER_EXPRESSION:
       spaces(indent);
-      printf("EXPR:  locals %p\n", (void*) op->locals);
+      printf("EXPR:  locals=%p outer=%p\n",
+             (void *) op->locals,
+             (void *) op->locals->outer_scope);
       /*print_generic(op, "SLANG_OPER_EXPRESSION", indent);*/
       slang_print_tree(&op->children[0], indent + 3);
       break;
@@ -411,13 +446,25 @@ slang_print_tree(const slang_operation *op, int indent)
       break;
 
    case SLANG_OPER_IDENTIFIER:
-      spaces(indent);
-      if (op->var && op->var->a_name)
-         printf("VAR %s  (in scope %p)\n", (char *) op->var->a_name,
-                (void *) find_scope(op->locals, op->a_id));
-      else
-         printf("VAR' %s  (in scope %p)\n", (char *) op->a_id,
-                (void *) find_scope(op->locals, op->a_id));
+      {
+         const slang_variable_scope *scope;
+         spaces(indent);
+         if (op->var && op->var->a_name) {
+            scope = find_scope(op->locals, op->var->a_name);
+            printf("VAR %s  (in scope %p)\n", (char *) op->var->a_name,
+                   (void *) scope);
+            assert(scope);
+         }
+         else {
+            scope = find_scope(op->locals, op->a_id);
+            printf("VAR' %s  (in scope %p) locals=%p outer=%p\n",
+                   (char *) op->a_id,
+                   (void *) scope,
+                   (void *) op->locals,
+                   (void *) op->locals->outer_scope);
+            assert(scope);
+         }
+      }
       break;
 
    case SLANG_OPER_SEQUENCE:
@@ -426,7 +473,9 @@ slang_print_tree(const slang_operation *op, int indent)
 
    case SLANG_OPER_ASSIGN:
       spaces(indent);
-      printf("ASSIGNMENT  locals %p\n", (void*)op->locals);
+      printf("ASSIGNMENT  locals=%p outer=%p\n",
+             (void *) op->locals,
+             (void *) op->locals->outer_scope);
       print_binary(op, ":=", indent);
       break;
 
@@ -562,7 +611,9 @@ slang_print_tree(const slang_operation *op, int indent)
 
    case SLANG_OPER_SUBSCRIPT:
       spaces(indent);
-      printf("SLANG_OPER_SUBSCRIPT\n");
+      printf("SLANG_OPER_SUBSCRIPT locals=%p outer=%p\n",
+             (void *) op->locals,
+             (void *) op->locals->outer_scope);
       print_generic(op, NULL, indent+3);
       break;
 
@@ -615,21 +666,22 @@ slang_print_tree(const slang_operation *op, int indent)
 void
 slang_print_function(const slang_function *f, GLboolean body)
 {
-   int i;
+   GLuint i;
 
 #if 0
    if (_mesa_strcmp((char *) f->header.a_name, "main") != 0)
      return;
 #endif
 
-   printf("FUNCTION %s (\n",
-          (char *) f->header.a_name);
+   printf("FUNCTION %s ( scope=%p\n",
+          (char *) f->header.a_name, (void *) f->parameters);
 
    for (i = 0; i < f->param_count; i++) {
       print_variable(f->parameters->variables[i], 3);
    }
 
-   printf(")\n");
+   printf(") param scope = %p\n", (void *) f->parameters);
+
    if (body && f->body)
       slang_print_tree(f->body, 0);
 }
@@ -793,7 +845,7 @@ int
 slang_checksum_tree(const slang_operation *op)
 {
    int s = op->num_children;
-   int i;
+   GLuint i;
 
    for (i = 0; i < op->num_children; i++) {
       s += slang_checksum_tree(&op->children[i]);