From 4db5a471562130947830ad3edc127a7a994f8e7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Tue, 12 Jan 2021 23:35:47 +0100 Subject: test for-loops and scope loop variables --- src/compiler.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src/compiler.rs') diff --git a/src/compiler.rs b/src/compiler.rs index f84f9f8..b7e946c 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -380,9 +380,14 @@ impl Compiler { } } + //TODO de-complexify fn for_loop(&mut self, block: &mut Block) { expect!(self, Token::For, "Expected 'for' at start of for-loop."); + // push outer scope for loop variable + self.level += 1; + let h = self.stack.len(); + // Definition match self.peek_four() { (Token::Identifier(name), Token::Identifier(typ), Token::ColonEqual, ..) => { @@ -433,8 +438,12 @@ impl Compiler { block.patch(Op::JmpFalse(block.curr()), cond_out); - // Loop variable - block.add(Op::Pop, self.line()); + // pop outer scope + self.level -= 1; + for _ in h..self.stack.len() { + block.add(Op::Pop, self.line()); + } + self.stack.truncate(h); } fn statement(&mut self, block: &mut Block) { -- cgit v1.2.1