aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEdvard Thörnros <edvard.thornros@gmail.com>2021-01-12 19:44:45 +0100
committerEdvard Thörnros <edvard.thornros@gmail.com>2021-01-12 19:44:45 +0100
commit3a1e2316e467c85340f353b47d6fe92a02dc112a (patch)
tree387452018c3426de9d34e07d76305dc9db652e41
parentf34d41db5b8f72d3b82fa1c4e9fe3ad71f509d52 (diff)
downloadsylt-3a1e2316e467c85340f353b47d6fe92a02dc112a.tar.gz
Fix edge case in for-loop increment statements
-rw-r--r--src/compiler.rs9
-rw-r--r--src/vm.rs2
2 files changed, 9 insertions, 2 deletions
diff --git a/src/compiler.rs b/src/compiler.rs
index 4bb2469..0dfa1a3 100644
--- a/src/compiler.rs
+++ b/src/compiler.rs
@@ -415,7 +415,14 @@ impl Compiler {
expect!(self, Token::Comma, "Expect ',' between initalizer and loop expression.");
let inc = block.curr();
- self.statement(block);
+ {
+ let h = self.stack.len();
+ self.statement(block);
+ for _ in h..self.stack.len() {
+ block.add(Op::Pop, self.line());
+ }
+ self.stack.truncate(h);
+ }
block.add(Op::Jmp(cond), self.line());
// patch_jmp!(Op::Jmp, cond_cont => block.curr());
diff --git a/src/vm.rs b/src/vm.rs
index 2dadc5e..d0b9190 100644
--- a/src/vm.rs
+++ b/src/vm.rs
@@ -153,7 +153,7 @@ impl VM {
}
pub fn run(&mut self) -> Result<(), Error>{
- const PRINT_WHILE_RUNNING: bool = true;
+ const PRINT_WHILE_RUNNING: bool = false;
const PRINT_BLOCK: bool = true;
if PRINT_BLOCK {