From 61b7fc5efc4e4d69ffb075582b5bebd6ec80285e Mon Sep 17 00:00:00 2001
From: maartin0 <maartin00000@gmail.com>
Date: Thu, 17 Oct 2024 16:28:38 +0100
Subject: [PATCH] fix subtle bug where a line was skipped after every block

---
 bare.sh     |  6 ++++--
 example.bb  | 10 ++++++++++
 example2.bb | 25 +++++++++++++++++++++++++
 3 files changed, 39 insertions(+), 2 deletions(-)
 create mode 100644 example.bb
 create mode 100644 example2.bb

diff --git a/bare.sh b/bare.sh
index de81394..7964d32 100755
--- a/bare.sh
+++ b/bare.sh
@@ -497,7 +497,6 @@ read_block() {
         # Check if we can exit the block
         if [ "$depth" -lt 0 ]; then
             next_line # consume "end;"
-            interpreter_debug "Finished block section, consuming target '$pattern'"
             return 0
         elif [ "$depth" -le 0 ] && echo "$block_line" | grep "$pattern" >/dev/null; then
             # Don't consume custom targets
@@ -553,6 +552,7 @@ interpret() {
                 while test_predicate "$predicate"; do
                     call_self "$path"
                 done
+                interpret && return
             ;;
             "if "*)
                 path="$(get_block_name "if")"
@@ -582,11 +582,13 @@ interpret() {
                 done
                 # Delete last generated executable if it's blank
                 [ -z "$(cat "$path")" ] && rm "$path"
+                interpret && return
             ;;
             "function "*)
                 name="$(echo "$line" | trim_line | sed 's/function \(.*\) do/\1/')"
                 [ -z "$name" ] && interpreter_die "Invalid function name '$name'"
                 read_block > "$FULL_PATH/$name.$EXTENSION"
+                interpret && return
             ;;
             "set "*)
                 set_var "$(echo "$line" | nth_arg 2)" "$(evaluate_format "$(echo "$line" | nth_arg 3-)")"
@@ -614,7 +616,7 @@ interpret() {
 # Start
 if [ "$TIME_EXECUTION" -eq 0 ]; then
     interpret
-    debug "Done"
+    interpreter_debug "Done"
 else
     start="$(get_millis)"
     interpret
diff --git a/example.bb b/example.bb
new file mode 100644
index 0000000..7052a69
--- /dev/null
+++ b/example.bb
@@ -0,0 +1,10 @@
+clear X;
+incr X;
+incr X;
+incr X;
+
+while X not 0 do;
+   decr X;
+end;
+
+debug X;
\ No newline at end of file
diff --git a/example2.bb b/example2.bb
new file mode 100644
index 0000000..f16db74
--- /dev/null
+++ b/example2.bb
@@ -0,0 +1,25 @@
+clear X;
+incr X;
+incr X;
+clear Y;
+incr Y;
+incr Y;
+incr Y;
+clear Z;
+while X not 0 do;
+   clear W;
+   while Y not 0 do;
+      incr Z;
+      incr W;
+      decr Y;
+   end;
+   while W not 0 do;
+      incr Y;
+      decr W;
+   end;
+   decr X;
+end;
+
+debug X;
+debug Y;
+debug Z;
\ No newline at end of file
-- 
GitLab