From fbd5a841b37a8091c8f8ebac48aa5ea872874b68 Mon Sep 17 00:00:00 2001 From: mike lowis Date: Wed, 26 May 2021 21:31:37 -0400 Subject: [PATCH] wrapped up initial record support --- cerise/backend/c99/codegen.c | 15 ++++++++++++++- cerise/backend/test/codegen.c | 10 ++++++++++ cerise/backend/x86_64/codegen.c | 10 ++++++++++ cerise/inc/cerise.h | 2 ++ cerise/src/grammar.c | 4 +++- cerise/tests/Module.m | 2 +- 6 files changed, 40 insertions(+), 3 deletions(-) diff --git a/cerise/backend/c99/codegen.c b/cerise/backend/c99/codegen.c index 4d22b4a..5e90fd1 100644 --- a/cerise/backend/c99/codegen.c +++ b/cerise/backend/c99/codegen.c @@ -118,7 +118,6 @@ static void declare_var(Parser* p, Symbol* sym, int isref) make_var(p, sym, isref); } - static int declare_temp(Parser* p, Type* type, int isref) { char name[32]; @@ -227,6 +226,20 @@ static void unary_op(Parser* p, int op, Item* a) /* Public Interface *****************************************************************************/ + +void codegen_startmod(Parser* p) +{ + (void)p; + printf("typedef _Bool Bool;\n"); + printf("typedef long Int;\n"); + printf("typedef double Real;\n"); +} + +void codegen_endmod(Parser* p) +{ + (void)p; +} + void codegen_setint(Item* item, Type* type, long long val) { item->mode = ITEM_CONST; diff --git a/cerise/backend/test/codegen.c b/cerise/backend/test/codegen.c index 91ebd32..c57491a 100644 --- a/cerise/backend/test/codegen.c +++ b/cerise/backend/test/codegen.c @@ -22,6 +22,16 @@ Type StringType = { .size = -1 }; +void codegen_startmod(Parser* p) +{ + (void)p; +} + +void codegen_endmod(Parser* p) +{ + (void)p; +} + void codegen_setint(Item* item, Type* type, long long val) { item->mode = ITEM_CONST; diff --git a/cerise/backend/x86_64/codegen.c b/cerise/backend/x86_64/codegen.c index 85023cb..c89e471 100644 --- a/cerise/backend/x86_64/codegen.c +++ b/cerise/backend/x86_64/codegen.c @@ -153,6 +153,16 @@ Type StringType = { .size = -1 }; +void codegen_startmod(Parser* p) +{ + (void)p; +} + +void codegen_endmod(Parser* p) +{ + (void)p; +} + void codegen_setint(Item* item, Type* type, long long val) { item->mode = ITEM_CONST; diff --git a/cerise/inc/cerise.h b/cerise/inc/cerise.h index 59c1ec6..f05cf0b 100644 --- a/cerise/inc/cerise.h +++ b/cerise/inc/cerise.h @@ -203,6 +203,8 @@ void dump_type(Type* a); *****************************************************************************/ extern Type BoolType, IntType, RealType, StringType; +void codegen_startmod(Parser* p); +void codegen_endmod(Parser* p); void codegen_setint(Item* item, Type* type, long long val); void codegen_setreal(Item* item, double val); void codegen_setstr(Item* item, char* val); diff --git a/cerise/src/grammar.c b/cerise/src/grammar.c index 595a809..b1e38d9 100644 --- a/cerise/src/grammar.c +++ b/cerise/src/grammar.c @@ -655,8 +655,8 @@ RULE(proc_decl) } expect(p, END); - symbol_closescope(p); codegen_endproc(p); + symbol_closescope(p); } RULE(import_list) @@ -772,8 +772,10 @@ void compile(char* fname) }, .curr_reg = 0 }; + codegen_startmod(p); module(p, &(Item){0}); codegen_main(p); + codegen_endmod(p); } /* Grammar Unit Tests diff --git a/cerise/tests/Module.m b/cerise/tests/Module.m index 64f8e5c..60afadf 100644 --- a/cerise/tests/Module.m +++ b/cerise/tests/Module.m @@ -42,7 +42,7 @@ begin end begin - a = true; +# a = true; # a = A; # b = 24; # b = B; -- 2.49.0