From: Wolfgang (Blub) Bumiller Date: Wed, 9 May 2012 15:30:08 +0000 (+0200) Subject: TYPE_VARIANT in codegen, writing code from ast-test X-Git-Tag: 0.1-rc1~485^2~12 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=dfc0f6fab36990819774d42b3939d70971296714;p=xonotic%2Fgmqcc.git TYPE_VARIANT in codegen, writing code from ast-test --- diff --git a/ir.c b/ir.c index 30817a0..a9f0c9e 100644 --- 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 78ff3c2..3881c30 100644 --- 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 */ diff --git a/test/ast-test.c b/test/ast-test.c index eb4e1e9..159c668 100644 --- a/test/ast-test.c +++ b/test/ast-test.c @@ -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);