From d96ca7b986573a98cefdb67026516fd014a93c71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Sun, 7 Mar 2021 16:07:36 +0100 Subject: fix parameters colliding with global variables --- src/compiler.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/compiler.rs b/src/compiler.rs index 116e3d2..b5d05d6 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -1124,17 +1124,19 @@ impl Compiler { } fn define(&mut self, mut var: Variable) -> Result { - if let Some(var) = self.find_variable(&var.name) { - if var.scope == self.frame().scope { + let frame = self.frame(); + + if let Some(res) = frame.find_local(&var.name).or(frame.find_upvalue(&var.name)) { + if res.scope == frame.scope { error!(self, format!("Multiple definitions of '{}' in this block.", - var.name)); + res.name)); return Err(()); } } let slot = self.stack().len(); var.slot = slot; - var.scope = self.frame().scope; + var.scope = frame.scope; var.line = self.line(); self.stack_mut().push(var); Ok(slot) -- cgit v1.2.1