From 4fb399a5e1106e4605740666f1c6561c18e56bfd Mon Sep 17 00:00:00 2001 From: Gleb Koval Date: Wed, 26 Feb 2025 19:14:12 +0000 Subject: [PATCH] feat: generate microWacc for printing booleans --- src/main/wacc/frontend/typeChecker.scala | 37 ++++++++++++++++-------- src/test/wacc/examples.scala | 2 +- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/main/wacc/frontend/typeChecker.scala b/src/main/wacc/frontend/typeChecker.scala index 8c11550..f571e11 100644 --- a/src/main/wacc/frontend/typeChecker.scala +++ b/src/main/wacc/frontend/typeChecker.scala @@ -216,21 +216,34 @@ object typeChecker { case ast.Print(expr, newline) => // This constraint should never fail, the scope-checker should have caught it already val exprTyped = checkValue(expr, Constraint.Unconstrained) - val format = exprTyped.ty match { - case KnownType.Bool | KnownType.String => "%s" - case KnownType.Char => "%c" - case KnownType.Int => "%d" - case _ => "%p" + val exprFormat = exprTyped.ty match { + case KnownType.Bool | KnownType.String => "%s" + case KnownType.Char => "%c" + case KnownType.Int => "%d" + case KnownType.Pair(_, _) | KnownType.Array(_) | ? => "%p" } - List( - microWacc.Call( - microWacc.Builtin.Printf, - List( - s"$format${if newline then "\n" else ""}".toMicroWaccCharArray, - exprTyped + val printfCall = { (value: microWacc.Expr) => + List( + microWacc.Call( + microWacc.Builtin.Printf, + List( + s"$exprFormat${if newline then "\n" else ""}".toMicroWaccCharArray, + value + ) ) ) - ) + } + exprTyped.ty match { + case KnownType.Bool => + List( + microWacc.If( + exprTyped, + printfCall("true".toMicroWaccCharArray), + printfCall("false".toMicroWaccCharArray) + ) + ) + case _ => printfCall(exprTyped) + } case ast.If(cond, thenStmt, elseStmt) => List( microWacc.If( diff --git a/src/test/wacc/examples.scala b/src/test/wacc/examples.scala index 2ef9100..0da3659 100644 --- a/src/test/wacc/examples.scala +++ b/src/test/wacc/examples.scala @@ -89,7 +89,7 @@ class ParallelExamplesSpec extends AnyFlatSpec with BeforeAndAfterAll { "^.*wacc-examples/valid/array.*$", // "^.*wacc-examples/valid/basic/exit.*$", // "^.*wacc-examples/valid/basic/skip.*$", - "^.*wacc-examples/valid/expressions.*$", + // "^.*wacc-examples/valid/expressions.*$", "^.*wacc-examples/valid/function/nested_functions.*$", "^.*wacc-examples/valid/function/simple_functions.*$", // "^.*wacc-examples/valid/if.*$",