diff options
| author | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-01-12 19:44:45 +0100 |
|---|---|---|
| committer | Edvard Thörnros <edvard.thornros@gmail.com> | 2021-01-12 19:44:45 +0100 |
| commit | 3a1e2316e467c85340f353b47d6fe92a02dc112a (patch) | |
| tree | 387452018c3426de9d34e07d76305dc9db652e41 /src | |
| parent | f34d41db5b8f72d3b82fa1c4e9fe3ad71f509d52 (diff) | |
| download | sylt-3a1e2316e467c85340f353b47d6fe92a02dc112a.tar.gz | |
Fix edge case in for-loop increment statements
Diffstat (limited to 'src')
| -rw-r--r-- | src/compiler.rs | 9 | ||||
| -rw-r--r-- | src/vm.rs | 2 |
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()); @@ -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 { |
