From 4f57ed399f148b08deb9b5f8a5d0328239878964 Mon Sep 17 00:00:00 2001 From: sofia Date: Sun, 27 Jul 2025 18:35:02 +0300 Subject: [PATCH] Add formatting, fix typechecking for associated functions --- reid/src/mir/fmt.rs | 3 +++ reid/src/mir/typecheck/typecheck.rs | 5 +++++ reid/src/mir/typecheck/typeinference.rs | 5 +++++ 3 files changed, 13 insertions(+) diff --git a/reid/src/mir/fmt.rs b/reid/src/mir/fmt.rs index 387e22a..7d478a4 100644 --- a/reid/src/mir/fmt.rs +++ b/reid/src/mir/fmt.rs @@ -49,6 +49,9 @@ impl Display for Module { for typedef in &self.typedefs { writeln!(inner_f, "{}", typedef)?; } + for (ty, fun) in &self.associated_functions { + writeln!(inner_f, "(Assoc {}) {}", ty, fun)?; + } for fun in &self.functions { writeln!(inner_f, "{}", fun)?; } diff --git a/reid/src/mir/typecheck/typecheck.rs b/reid/src/mir/typecheck/typecheck.rs index 1f38329..0478079 100644 --- a/reid/src/mir/typecheck/typecheck.rs +++ b/reid/src/mir/typecheck/typecheck.rs @@ -68,6 +68,11 @@ impl<'t> Pass for TypeCheck<'t> { state.ok(res, binop.block_meta().unwrap_or(binop.signature())); } + for (_, function) in &mut module.associated_functions { + let res = function.typecheck(&self.refs, &mut state.inner()); + state.ok(res, function.block_meta()); + } + for function in &mut module.functions { let res = function.typecheck(&self.refs, &mut state.inner()); state.ok(res, function.block_meta()); diff --git a/reid/src/mir/typecheck/typeinference.rs b/reid/src/mir/typecheck/typeinference.rs index 926161b..d08dc33 100644 --- a/reid/src/mir/typecheck/typeinference.rs +++ b/reid/src/mir/typecheck/typeinference.rs @@ -120,6 +120,11 @@ impl<'t> Pass for TypeInference<'t> { state.ok(res, binop.block_meta().unwrap_or(binop.signature())); } + for (_, function) in &mut module.associated_functions { + let res = function.infer_types(&self.refs, &mut state.inner()); + state.ok(res, function.block_meta()); + } + for function in &mut module.functions { let res = function.infer_types(&self.refs, &mut state.inner()); state.ok(res, function.block_meta());