diff --git a/src/compiler/assembly_generator.rs b/src/compiler/assembly_generator.rs index 4935399..365a0e3 100644 --- a/src/compiler/assembly_generator.rs +++ b/src/compiler/assembly_generator.rs @@ -236,9 +236,9 @@ impl Locals { } pub fn get_ref(&self, var: &IrVar) -> &str { - self.var_to_location.get(var).expect(&format!( - "Tried to use non-existant var '{var}' in assembly generation!" - )) + self.var_to_location.get(var).unwrap_or_else(|| { + panic!("Tried to use non-existant var '{var}' in assembly generation!") + }) } pub fn stack_used(&self) -> i64 { diff --git a/src/compiler/ir_generator.rs b/src/compiler/ir_generator.rs index 6b900be..fdccb35 100644 --- a/src/compiler/ir_generator.rs +++ b/src/compiler/ir_generator.rs @@ -333,9 +333,11 @@ fn visit_ast_node<'source>( } Block(expressions) => { let mut result_var = add_var(&Type::Unit, types); + symbols.push_level(); for expression in expressions { result_var = visit_ast_node(expression, types, symbols, instructions, labels); } + symbols.remove_level(); result_var } }