From af812fe348e25934363852a3fcfe0346d544e7cf Mon Sep 17 00:00:00 2001 From: Karol Stasiak Date: Tue, 6 Mar 2018 16:46:50 +0100 Subject: [PATCH] else if --- src/main/scala/millfork/parser/MfParser.scala | 2 +- .../scala/millfork/test/BasicSymonTest.scala | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/scala/millfork/parser/MfParser.scala b/src/main/scala/millfork/parser/MfParser.scala index 91956ad9..c7d47ae7 100644 --- a/src/main/scala/millfork/parser/MfParser.scala +++ b/src/main/scala/millfork/parser/MfParser.scala @@ -420,7 +420,7 @@ case class MfParser(filename: String, input: String, currentDirectory: String, o def ifStatement: P[ExecutableStatement] = for { condition <- "if" ~ !letterOrDigit ~/ HWS ~/ mlExpression(nonStatementLevel) thenBranch <- AWS ~/ executableStatements - elseBranch <- (AWS ~ "else" ~/ AWS ~/ executableStatements).? + elseBranch <- (AWS ~ "else" ~/ AWS ~/ (ifStatement.map(_ :: Nil) | executableStatements)).? } yield IfStatement(condition, thenBranch.toList, elseBranch.getOrElse(Nil).toList) def whileStatement: P[ExecutableStatement] = for { diff --git a/src/test/scala/millfork/test/BasicSymonTest.scala b/src/test/scala/millfork/test/BasicSymonTest.scala index 55ea9c31..32d4b00b 100644 --- a/src/test/scala/millfork/test/BasicSymonTest.scala +++ b/src/test/scala/millfork/test/BasicSymonTest.scala @@ -116,4 +116,21 @@ class BasicSymonTest extends FunSuite with Matchers { """.stripMargin) m.readWord(0xc000) should equal(344) } + + test("Else if") { + val m = EmuUnoptimizedRun( + """ + | byte output @$c000 + | void main () { + | if 1 == 2 { + | output = 3 + | } else if 1 == 1 { + | output = 4 + | } else { + | output = 65 + | } + | } + """.stripMargin) + m.readWord(0xc000) should equal(4) + } }