]> git.mdlowis.com Git - proto/obnc.git/commitdiff
minor refactoring. still need to fix array indexing
authorMichael D. Lowis <mike@mdlowis.com>
Wed, 21 Sep 2022 00:40:06 +0000 (20:40 -0400)
committerMichael D. Lowis <mike@mdlowis.com>
Wed, 21 Sep 2022 00:40:06 +0000 (20:40 -0400)
cerise/backend/ssa/codegen.c
cerise/tests/Module.m

index 4c58fefdf9116aab06894eb3a98c3ce5a3a47dd9..150da9ec6c6d67f4687a8892d79e05d4b86662ce 100644 (file)
@@ -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;
 
index b97a6da0aef48eebd875bc60bf0aca873b36e194..431fba049e100213543d349ae2b98e7b2964b315 100644 (file)
@@ -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