From dfc0f6fab36990819774d42b3939d70971296714 Mon Sep 17 00:00:00 2001 From: "Wolfgang (Blub) Bumiller" Date: Wed, 9 May 2012 17:30:08 +0200 Subject: [PATCH 1/1] TYPE_VARIANT in codegen, writing code from ast-test --- ir.c | 9 +++++++-- ir.h | 2 ++ test/ast-test.c | 6 +++++- 3 files changed, 14 insertions(+), 3 deletions(-) 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); -- 2.39.2