From 625fc0d8118a35b22003353ab6dc84e37de76257 Mon Sep 17 00:00:00 2001 From: Toni Date: Wed, 18 Mar 2026 19:08:10 +0100 Subject: [PATCH] typecheck_expr doesnt need to mutate the TypeChecker --- src/codegen_x86_64.rs | 2 +- src/typechecker.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/codegen_x86_64.rs b/src/codegen_x86_64.rs index 9fecc46..dd6ad99 100644 --- a/src/codegen_x86_64.rs +++ b/src/codegen_x86_64.rs @@ -564,7 +564,7 @@ _builtin_environ: } else { let var = match env.get_var(&name.lexeme) { Some(x) => x, - None => unreachable!(), + None => unreachable!("this should be caught in the typechecker"), }; emit!( &mut self.output, diff --git a/src/typechecker.rs b/src/typechecker.rs index 3ec74a4..07fb7a7 100644 --- a/src/typechecker.rs +++ b/src/typechecker.rs @@ -219,7 +219,7 @@ impl<'a> TypeChecker<'a> { Ok(()) } - pub fn typecheck_expr(&mut self, env: &mut Env, expr: &Expr) -> Result { + pub fn typecheck_expr(&self, env: &mut Env, expr: &Expr) -> Result { match expr { Expr::Binary { left, op, right } => { let left_type = self.typecheck_expr(env, left)?; @@ -370,7 +370,7 @@ impl<'a> TypeChecker<'a> { } => { if let Expr::Variable(callee_name) = &**callee { if self.analyzer.functions.contains_key(&callee_name.lexeme) { - let fn_type = &self.analyzer.functions[&callee_name.lexeme].clone(); + let fn_type = &self.analyzer.functions[&callee_name.lexeme]; // its a function (defined/builtin/extern) if let Some(params) = fn_type.params.clone() { for (i, arg) in args.iter().enumerate() {