From cd1e464c11fb84ef8319e52019c23c0a91d5e3a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edvard=20Th=C3=B6rnros?= Date: Wed, 10 Feb 2021 22:12:31 +0100 Subject: fix the assignment --- src/compiler.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/compiler.rs b/src/compiler.rs index 7f0d32d..a7fc30b 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -799,7 +799,11 @@ impl Compiler { if let Some(var) = self.find_variable(&name) { if let Some(op) = op { - add_op(self, block, Op::Copy); + if var.upvalue { + add_op(self, block, Op::ReadUpvalue(var.slot)); + } else { + add_op(self, block, Op::ReadLocal(var.slot)); + } self.expression(block); add_op(self, block, op); } else { -- cgit v1.2.1 From 9596dadf3ad99aefec2547f4f8294d772811d8be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edvard=20Th=C3=B6rnros?= Date: Wed, 10 Feb 2021 22:12:41 +0100 Subject: add regression tests --- src/lib.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'src') diff --git a/src/lib.rs b/src/lib.rs index ae45c45..d8d9505 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1050,4 +1050,33 @@ a.a <=> 0" simple: "a := 1 // blargh \na += 1 // blargh \n a <=> 2 // HARGH", expressions: "1 + 1 // blargh \n 2 // blargh \n // HARGH \n", ); + + test_multiple!( + assignment_op_regression, + simple_add: " +a := 0 +b := 99999 +a += 1 +a <=> 1 +", + + simple_sub: " +a := 0 +b := 99999 +a -= 1 +a <=> -1 +", + + strange: " +a := 0 +{ + b := 99999 + { + a := 99999 + } + a -= 1 +} +a <=> -1 +", + ); } -- cgit v1.2.1