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)));
}
}
{
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("* ");
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
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;
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
# 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