slang: Handle OOM condition in new_instruction().
[mesa.git] / src / mesa / shader / slang / slang_print.c
index ff9c62c929eccb0408686d3de6afcacd0160ee59..98c7877534feb5be6ffee78c29c7f2953ee65b4a 100644 (file)
@@ -4,7 +4,7 @@
  */
 
 
-#include "imports.h"
+#include "main/imports.h"
 #include "slang_compile.h"
 #include "slang_print.h"
 
@@ -156,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);
@@ -171,10 +171,12 @@ 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 at %p locals=%p outer=%p\n",
@@ -241,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) {
 
@@ -259,15 +261,15 @@ slang_print_tree(const slang_operation *op, int indent)
       break;
 
    case SLANG_OPER_BLOCK_NEW_SCOPE:
+   case SLANG_OPER_NON_INLINED_CALL:
       spaces(indent);
-      printf("{{ // new scope  locals=%p: ", (void*)op->locals);
-      {
-         int i;
-         for (i = 0; i < op->locals->num_variables; i++) {
-            printf("%s ", (char *) op->locals->variables[i]->a_name);
-         }
-         printf("\n");
+      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");
@@ -277,7 +279,7 @@ slang_print_tree(const slang_operation *op, int indent)
       assert(op->num_children == 0 || op->num_children == 1);
       {
          slang_variable *v;
-         v = _slang_locate_variable(op->locals, op->a_id, GL_TRUE);
+         v = _slang_variable_locate(op->locals, op->a_id, GL_TRUE);
          if (v) {
             const slang_variable_scope *scope;
             spaces(indent);
@@ -347,6 +349,13 @@ slang_print_tree(const slang_operation *op, int indent)
          slang_print_tree(&op->children[0], indent + 3);
       break;
 
+   case SLANG_OPER_RETURN_INLINED:
+      spaces(indent);
+      printf("RETURN_INLINED\n");
+      if (op->num_children > 0)
+         slang_print_tree(&op->children[0], indent + 3);
+      break;
+
    case SLANG_OPER_LABEL:
       spaces(indent);
       printf("LABEL %s\n", (char *) op->a_id);
@@ -378,28 +387,43 @@ slang_print_tree(const slang_operation *op, int indent)
    case SLANG_OPER_WHILE:
       assert(op->num_children == 2);
       spaces(indent);
+      printf("WHILE LOOP: locals = %p\n", (void *) op->locals);
+      indent += 3;
+      spaces(indent);
       printf("WHILE cond:\n");
       slang_print_tree(&op->children[0], indent + 3);
       spaces(indent);
       printf("WHILE body:\n");
       slang_print_tree(&op->children[1], indent + 3);
+      indent -= 3;
+      spaces(indent);
+      printf("END WHILE LOOP\n");
       break;
 
    case SLANG_OPER_DO:
+      spaces(indent);
+      printf("DO LOOP: locals = %p\n", (void *) op->locals);
+      indent += 3;
       spaces(indent);
       printf("DO body:\n");
       slang_print_tree(&op->children[0], indent + 3);
       spaces(indent);
       printf("DO cond:\n");
       slang_print_tree(&op->children[1], indent + 3);
+      indent -= 3;
+      spaces(indent);
+      printf("END DO LOOP\n");
       break;
 
    case SLANG_OPER_FOR:
+      spaces(indent);
+      printf("FOR LOOP: locals = %p\n", (void *) op->locals);
+      indent += 3;
       spaces(indent);
       printf("FOR init:\n");
       slang_print_tree(&op->children[0], indent + 3);
       spaces(indent);
-      printf("FOR while:\n");
+      printf("FOR condition:\n");
       slang_print_tree(&op->children[1], indent + 3);
       spaces(indent);
       printf("FOR step:\n");
@@ -407,6 +431,7 @@ slang_print_tree(const slang_operation *op, int indent)
       spaces(indent);
       printf("FOR body:\n");
       slang_print_tree(&op->children[3], indent + 3);
+      indent -= 3;
       spaces(indent);
       printf("ENDFOR\n");
       /*
@@ -461,7 +486,7 @@ slang_print_tree(const slang_operation *op, int indent)
                    (void *) scope,
                    (void *) op->locals,
                    (void *) op->locals->outer_scope);
-            assert(scope);
+            /*assert(scope);*/
          }
       }
       break;
@@ -619,7 +644,7 @@ slang_print_tree(const slang_operation *op, int indent)
    case SLANG_OPER_CALL:
 #if 0
          slang_function *fun
-            = _slang_locate_function(A->space.funcs, oper->a_id,
+            = _slang_function_locate(A->space.funcs, oper->a_id,
                                      oper->children,
                                      oper->num_children, &A->space, A->atoms);
 #endif
@@ -636,6 +661,11 @@ slang_print_tree(const slang_operation *op, int indent)
       printf(")\n");
       break;
 
+   case SLANG_OPER_METHOD:
+      spaces(indent);
+      printf("METHOD CALL %s.%s\n", (char *) op->a_obj, (char *) op->a_id);
+      break;
+
    case SLANG_OPER_FIELD:
       spaces(indent);
       printf("FIELD %s of\n", (char*) op->a_id);
@@ -665,15 +695,15 @@ 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);