]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - ir.c
Merge branch 'irgen'
[xonotic/gmqcc.git] / ir.c
diff --git a/ir.c b/ir.c
index 30817a07bbfea1bcaade0081a19319b1f5e3a0aa..848e488e4d52e053b63fb33e6dbed1b11ce11685 100644 (file)
--- a/ir.c
+++ b/ir.c
@@ -1937,8 +1937,10 @@ static bool gen_function_code(ir_function *self)
     if (block->generated)
         return true;
 
-    if (!gen_blocks_recursive(self, block))
+    if (!gen_blocks_recursive(self, block)) {
+        printf("failed to generate blocks for '%s'\n", self->name);
         return false;
+    }
     return true;
 }
 
@@ -1975,13 +1977,17 @@ static bool gen_global_function(ir_builder *ir, ir_value *global)
     fun.locals = irfun->locals_count;
     fun.firstlocal = code_globals_elements;
     for (i = 0; i < irfun->locals_count; ++i) {
-        if (!ir_builder_gen_global(ir, irfun->locals[i]))
+        if (!ir_builder_gen_global(ir, irfun->locals[i])) {
+            printf("Failed to generate global %s\n", irfun->locals[i]->name);
             return false;
+        }
     }
 
     fun.entry      = code_statements_elements;
-    if (!gen_function_code(irfun))
+    if (!gen_function_code(irfun)) {
+        printf("Failed to generate code for function %s\n", irfun->name);
         return false;
+    }
 
     return (code_functions_add(fun) >= 0);
 }
@@ -2052,6 +2058,12 @@ static bool ir_builder_gen_global(ir_builder *self, ir_value *global)
         if (code_defs_add(def) < 0)
             return false;
         return gen_global_function(self, global);
+    case TYPE_VARIANT:
+        /* assume biggest type */
+            global->code.globaladdr = code_globals_add(0);
+            code_globals_add(0);
+            code_globals_add(0);
+            return true;
     default:
         /* refuse to create 'void' type or any other fancy business. */
         printf("Invalid type for global variable %s\n", global->name);
@@ -2075,8 +2087,8 @@ bool ir_builder_generate(ir_builder *self, const char *filename)
             return false;
     }
 
-    code_write(filename);
-    return false;
+    printf("writing '%s'...\n", filename);
+    return code_write(filename);
 }
 
 /***********************************************************************