diff --git a/kr/src/ast.rs b/kr/src/ast.rs index 533f79a..a3ec456 100644 --- a/kr/src/ast.rs +++ b/kr/src/ast.rs @@ -529,12 +529,15 @@ impl DCtx { let mut real_set = Rc::clone(&self.real_set); if (e.is_some() || prms.is_some()) { Rc::make_mut(&mut real_set).insert(id.clone()); + } else { + Rc::make_mut(&mut real_set).remove(&id); } let inner_env = if let Some(de) = de { let de_val = if let Some(e) = e { Rc::make_mut(&mut sus_env_stack).insert(id.clone(), Rc::clone(&e)); e } else { + Rc::make_mut(&mut sus_env_stack).remove(&id); Rc::new(MarkedForm::SuspendedEnvLookup { name: Some(de.clone()), id: id.clone() }) }; massoc(de, de_val, Rc::clone(se)) @@ -545,6 +548,7 @@ impl DCtx { Rc::make_mut(&mut sus_prm_stack).insert(id.clone(), Rc::clone(&prms)); prms } else { + Rc::make_mut(&mut sus_prm_stack).remove(&id); Rc::new(MarkedForm::SuspendedParamLookup { name: Some(p.clone()), id: id.clone(), cdr_num: 0, car: false }) }; massoc(p, p_val, inner_env) @@ -820,7 +824,9 @@ pub fn mark(form: Rc