]> git.xonotic.org Git - xonotic/gmqcc.git/commitdiff
TYPE_VARIANT in codegen, writing code from ast-test
authorWolfgang (Blub) Bumiller <blub@speed.at>
Wed, 9 May 2012 15:30:08 +0000 (17:30 +0200)
committerWolfgang (Blub) Bumiller <blub@speed.at>
Wed, 9 May 2012 15:30:08 +0000 (17:30 +0200)
ir.c
ir.h
test/ast-test.c

diff --git a/ir.c b/ir.c
index 30817a07bbfea1bcaade0081a19319b1f5e3a0aa..a9f0c9e1217b3231a54dc560f39f379467b9e031 100644 (file)
--- a/ir.c
+++ b/ir.c
@@ -2052,6 +2052,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 +2081,7 @@ bool ir_builder_generate(ir_builder *self, const char *filename)
             return false;
     }
 
-    code_write(filename);
-    return false;
+    return code_write(filename);
 }
 
 /***********************************************************************
diff --git a/ir.h b/ir.h
index 78ff3c27cee254f7d8b17aec0f833c368bec5023..3881c30fb618ab0e1c64a294221a0b94a054d617 100644 (file)
--- a/ir.h
+++ b/ir.h
@@ -275,6 +275,8 @@ ir_function* ir_builder_create_function(ir_builder*, const char *name);
 ir_value* ir_builder_get_global(ir_builder*, const char *fun);
 ir_value* ir_builder_create_global(ir_builder*, const char *name, int vtype);
 
+bool ir_builder_generate(ir_builder *self, const char *filename);
+
 void ir_builder_dump(ir_builder*, int (*oprintf)(const char*, ...));
 
 /* This code assumes 32 bit floats while generating binary */
index eb4e1e9c65f30bccebd51b393764b58c902ef56a..159c668fb9aa0156c38a6064599bbe09f1a9faac 100644 (file)
@@ -192,7 +192,7 @@ STATE(ASSIGN(STORE_F, vi, BIN(ADD_F, vi, f1)));
 ENDWHILE();
 
 ENDFUNCTION(main);
-    
+
     ir = ir_builder_new("ast_test");
     assert(ir);
 
@@ -216,6 +216,10 @@ ENDFUNCTION(main);
     /* dump */
     ir_builder_dump(ir, printf);
 
+    /* Now create a file */
+    if (!ir_builder_generate(ir, "test_ast.dat"))
+        printf("*** failed to generate code\n");
+
     /* ir cleanup */
     ir_builder_delete(ir);