From b66238477f26e3df8c28feae9562088d5fa638d1 Mon Sep 17 00:00:00 2001 From: "Michael D. Lowis" Date: Tue, 20 Sep 2022 20:40:06 -0400 Subject: [PATCH] minor refactoring. still need to fix array indexing --- cerise/backend/ssa/codegen.c | 24 +++---- cerise/tests/Module.m | 127 +++++++++++++++++------------------ 2 files changed, 73 insertions(+), 78 deletions(-) diff --git a/cerise/backend/ssa/codegen.c b/cerise/backend/ssa/codegen.c index 4c58fef..150da9e 100644 --- a/cerise/backend/ssa/codegen.c +++ b/cerise/backend/ssa/codegen.c @@ -248,23 +248,22 @@ char* binop_name(SsaNode* node) return name; } -void print_operand(Parser* p, SsaNode* expr, int is_const, SsaValue* value) +void print_oparg(Parser* p, SsaNode* expr) { - if (is_const) + if (expr->mode == MODE_CONST) { - print_const(SSA_LTYPE(expr), value); + print_const(expr->type, &expr->value); } else { - Symbol* s = symbol_getbyid(p, value->var.symid); + Symbol* s = symbol_getbyid(p, SSA_VAR(expr).symid); if (s->type && s->type->form == FORM_ARRAY) { printf("*"); } printf(" "); - print_ident(p, &(value->var)); - + print_ident(p, &(SSA_VAR(expr))); } } @@ -289,7 +288,7 @@ void print_op(Parser* p, SsaNode* expr) { printf(" store "); emit_type(SSA_LTYPE(expr)); - print_operand(p, expr, SSA_LCONST(expr), &(expr->left->value)); + print_oparg(p, expr->left); printf(", "); emit_type(SSA_TYPE(expr)); printf("* "); @@ -307,11 +306,8 @@ void print_op(Parser* p, SsaNode* expr) printf("* "); print_ident(p, &(SSA_LVAR(expr))); printf(", "); - emit_type(SSA_LTYPE(expr)->base); - printf(" 0, "); - emit_type(SSA_LTYPE(expr)->base); - printf(" "); - print_operand(p, expr, SSA_RCONST(expr), &(expr->right->value)); + printf("%%Int 0, %%Int"); + print_oparg(p, expr->right); puts(""); } else @@ -367,9 +363,9 @@ void print_op(Parser* p, SsaNode* expr) printf(" = %s ", binop_name(expr)); emit_type(SSA_LTYPE(expr)); printf(" "); - print_operand(p, expr, SSA_LCONST(expr), &(expr->left->value)); + print_oparg(p, expr->left); printf(", "); - print_operand(p, expr, SSA_RCONST(expr), &(expr->right->value)); + print_oparg(p, expr->right); printf("\n"); break; diff --git a/cerise/tests/Module.m b/cerise/tests/Module.m index b97a6da..431fba0 100644 --- a/cerise/tests/Module.m +++ b/cerise/tests/Module.m @@ -6,54 +6,54 @@ var vReal : Real vIntArray : array 42 of Int -#procedure TestReturnVoid() -#begin -#end -# -#procedure TestReturnIntLiteral() : Int -#begin -# return 0; -#end -# -#procedure TestReturnRealLiteral() : Real -#begin -# return 0.0; -#end -# -#procedure TestReturnBoolLiteral() : Bool -#begin -# return false; -#end -# -#procedure TestStoreLiterals() -#begin -# vBool = true; -# vInt = 42; -# vReal = 42.0; -#end -# -#procedure TestIntArithOps() -#begin -# vInt = vInt + 1; -# vInt = 1 + vInt; -# vInt = vInt + vInt; -# -# vInt = vInt - 1; -# vInt = 1 - vInt; -# vInt = vInt - vInt; -# -# vInt = vInt * 1; -# vInt = 1 * vInt; -# vInt = vInt * vInt; -# -# vInt = vInt / 1; -# vInt = 1 / vInt; -# vInt = vInt / vInt; -# -# vInt = vInt % 1; -# vInt = 1 % vInt; -# vInt = vInt % vInt; -#end +procedure TestReturnVoid() +begin +end + +procedure TestReturnIntLiteral() : Int +begin + return 0; +end + +procedure TestReturnRealLiteral() : Real +begin + return 0.0; +end + +procedure TestReturnBoolLiteral() : Bool +begin + return false; +end + +procedure TestStoreLiterals() +begin + vBool = true; + vInt = 42; + vReal = 42.0; +end + +procedure TestIntArithOps() +begin + vInt = vInt + 1; + vInt = 1 + vInt; + vInt = vInt + vInt; + + vInt = vInt - 1; + vInt = 1 - vInt; + vInt = vInt - vInt; + + vInt = vInt * 1; + vInt = 1 * vInt; + vInt = vInt * vInt; + + vInt = vInt / 1; + vInt = 1 / vInt; + vInt = vInt / vInt; + + vInt = vInt % 1; + vInt = 1 % vInt; + vInt = vInt % vInt; +end # #procedure TestIntCompOps() #begin @@ -132,29 +132,28 @@ var # vBool = vReal >= vReal; #end # -procedure TestIfStatements() -begin - if vInt == 1 then - vInt = 42; - end - - if vInt == 1 then - vInt = 42; - else - vInt = 24; - end -end - -#procedure TestArrayAccess() +#procedure TestIfStatements() #begin -# vIntArray[0] = vIntArray[1] + vIntArray[2]; +# if vInt == 1 then +# vInt = 42; +# end +# +# if vInt == 1 then +# vInt = 42; +# else +# vInt = 24; +# end #end +procedure TestArrayAccess() +begin + vIntArray[0] = vIntArray[1] + vIntArray[2]; +end + #procedure TestRecordAccess() #begin #end - #import # Foo # Bar3 = Bar2 -- 2.49.0