From c580ba33ea82b4f4eb9f8273caab01f74102cac4 Mon Sep 17 00:00:00 2001 From: Karol Stasiak Date: Wed, 26 Jun 2019 18:31:45 +0200 Subject: [PATCH] Fix nested #ifs --- CHANGELOG.md | 2 ++ src/main/scala/millfork/parser/Preprocessor.scala | 4 ++-- src/test/scala/millfork/test/BasicSymonTest.scala | 9 +++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c39dec7a..dc5b09c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -74,6 +74,8 @@ * Fixed `#pragma` not respecting `#if`. +* Fixed nested `#if`s. + * Fixed `@long` and `@long_be` array filters. * Fixed for-each loops with non-constant arrays. diff --git a/src/main/scala/millfork/parser/Preprocessor.scala b/src/main/scala/millfork/parser/Preprocessor.scala index f8a2487c..7da9877a 100644 --- a/src/main/scala/millfork/parser/Preprocessor.scala +++ b/src/main/scala/millfork/parser/Preprocessor.scala @@ -119,7 +119,7 @@ object Preprocessor { enabled = false } else { val value = evalParam(param, pos) - enabled = value != 0 + enabled = i.enabledBefore && value != 0 ifStack.push(ifStack.pop().copy(hadEnabled = enabled)) } } @@ -132,7 +132,7 @@ object Preprocessor { if (i.hadEnabled) { enabled = false } else { - enabled = !enabled + enabled = i.enabledBefore && !enabled } ifStack.push(ifStack.pop().copy(hadEnabled = true, hadElse = true)) } diff --git a/src/test/scala/millfork/test/BasicSymonTest.scala b/src/test/scala/millfork/test/BasicSymonTest.scala index d922c6d1..55ee7a88 100644 --- a/src/test/scala/millfork/test/BasicSymonTest.scala +++ b/src/test/scala/millfork/test/BasicSymonTest.scala @@ -229,6 +229,15 @@ class BasicSymonTest extends FunSuite with Matchers { | #error A should be defined | #endif | + | #if 0 + | #error inside if 0 + | #if 0 + | #error inside second if 0 + | #else + | #error really shouldn't happen + | #endif + | #endif + | | #if 1 + 1 == 2 | #info 1 | #if 1 == 3