From cb9796fa87a130e50f61a8f0c1399ef0069a9720 Mon Sep 17 00:00:00 2001 From: Gleb Koval Date: Sun, 2 Feb 2025 00:00:09 +0000 Subject: [PATCH] feat: show exact statement which must be returning at the end of a function --- src/main/wacc/ast.scala | 14 ++++++++++---- src/main/wacc/parser.scala | 10 +++++----- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/wacc/ast.scala b/src/main/wacc/ast.scala index 1fe26b7..b28bee2 100644 --- a/src/main/wacc/ast.scala +++ b/src/main/wacc/ast.scala @@ -105,10 +105,16 @@ object ast { x3: => Parsley[List[Param]], x4: => Parsley[NonEmptyList[Stmt]] ): Parsley[FuncDecl] = - super.apply(x1, x2, x3, x4).guardAgainst { - case FuncDecl(_, _, _, body) if !body.isReturning => - Seq("Function must return on all paths") - } + super.apply( + x1, + x2, + x3, + x4.guardAgainst { + case body if !body.isReturning => + println(body) + Seq("All functions must end in a returning statement") + } + ) } case class Param(paramType: Type, name: Ident) diff --git a/src/main/wacc/parser.scala b/src/main/wacc/parser.scala index 237b6b5..04e70c1 100644 --- a/src/main/wacc/parser.scala +++ b/src/main/wacc/parser.scala @@ -75,15 +75,15 @@ object parser { // Statements private lazy val `` = Program( - "begin" ~> many(atomic(``)), + "begin" ~> many(``), `` <~ "end" ) private lazy val `` = FuncDecl( - ``, - `` <~ "(", + atomic(``), + atomic(``) <~ "(", sepBy(``, ",") <~ ")" <~ "is", - `` <~ "end" - ) + `` + ) <~ "end" private lazy val `` = Param(``, ``) private lazy val ``: Parsley[NonEmptyList[Stmt]] = sepBy1(``, ";")