From c1c5d0201143ec5eed256dbd3c2e9749048aa23f Mon Sep 17 00:00:00 2001 From: minneelyyyy Date: Thu, 17 Oct 2024 00:48:54 -0400 Subject: [PATCH] fix lambda parsing --- src/parser.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/parser.rs b/src/parser.rs index 338928b..c9c1572 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -258,7 +258,18 @@ impl ParseTree { Op::LambdaDefine(arg_count) => { let mut f = ParseTree::parse_lambda(tokens, arg_count)?; - f.body = Some(Box::new(ParseTree::parse(tokens, globals, locals)?)); + let locals = locals.to_mut(); + + for (name, t) in std::iter::zip(f.arg_names.clone().unwrap(), f.t.1.clone()) { + match t { + Type::Function(t) => { + locals.insert(name.clone(), Function::named(&name, t, None, None)); + } + _ => (), + } + } + + f.body = Some(Box::new(ParseTree::parse(tokens, globals, &mut Cow::Borrowed(&locals))?)); Ok(ParseTree::LambdaDefinition(f)) }