From 9b3fe7ceb8aa0b0f174a17e6e13b5d325c974979 Mon Sep 17 00:00:00 2001 From: tslil Date: Tue, 5 May 2026 16:39:43 +0100 Subject: repair binding for nesting in for --- src/checker.rs | 1 + src/checker_signature.rs | 25 +++++++++---------------- 2 files changed, 10 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/checker.rs b/src/checker.rs index c381ba4..2474bab 100644 --- a/src/checker.rs +++ b/src/checker.rs @@ -16,6 +16,7 @@ impl CheckerState { let Programme(decls) = prog; for decl in decls { + debug!(%decl); self.reset_binders(); match decl { Decl::Set { name, set } => { diff --git a/src/checker_signature.rs b/src/checker_signature.rs index 0145e82..cc6cadc 100644 --- a/src/checker_signature.rs +++ b/src/checker_signature.rs @@ -371,9 +371,15 @@ impl CheckerState { // deal with left-nesting let mut ctx = self.clone(); - for Param { name, set } in inst_params { - ctx.make_element_binding(name.clone(), set.clone())?; - } + let inst_params: Vec = inst_params + .iter() + .map(|Param { name, set }| { + let set = ctx.check_set(set)?; + let canon = ctx.make_element_binding(name.clone(), set.clone())?; + Ok(Param { name: canon, set }) + }) + .collect::>()?; + let body = ctx.check_instance(body, None)?; let (inst_params, body) = if let Instance::For { params: inner_params, @@ -467,19 +473,6 @@ impl CheckerState { params: inst_params, }) } else { - let mut ctx = self.clone(); - let inst_params = inst_params - .iter() - .map(|Param { name, set }| { - let set = ctx.check_set(set)?; - let canon = ctx.make_element_binding(name.clone(), set.clone())?; - Ok(Param { - name: canon, - set: set, - }) - }) - .collect::, _>>()?; - let body = ctx.check_instance(&body, None)?; Ok(Instance::For { params: inst_params, body: Box::new(body), -- cgit v1.3.1