From 34569248d33782adacb7b5bce38bbd0c9f522681 Mon Sep 17 00:00:00 2001 From: minneelyyyy Date: Thu, 17 Oct 2024 16:05:52 -0400 Subject: [PATCH] fix parse error on undefined variables --- src/parser.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/parser.rs b/src/parser.rs index 3b5646b..5c52f30 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -157,15 +157,21 @@ impl ParseTree { .ok_or(ParseError::UnexpectedEndInput)? .map_err(|e| ParseError::TokenizeError(e))?; + let body = Box::new(ParseTree::parse(tokens, globals, locals)?); + if let Token::Identifier(ident) = token { + let locals = locals.to_mut(); + + locals.insert(ident.clone(), Object::Variable(Evaluation::Computed(Value::Nil))); + match op { - Op::Equ => Ok(ParseTree::Equ(ident.clone(), - Box::new(ParseTree::parse(tokens, globals, locals)?), - Box::new(ParseTree::parse(tokens, globals, locals)?) + Op::Equ => Ok(ParseTree::Equ(ident, + body, + Box::new(ParseTree::parse(tokens, globals, &mut Cow::Borrowed(&locals))?) )), - Op::LazyEqu => Ok(ParseTree::LazyEqu(ident.clone(), - Box::new(ParseTree::parse(tokens, globals, locals)?), - Box::new(ParseTree::parse(tokens, globals, locals)?) + Op::LazyEqu => Ok(ParseTree::LazyEqu(ident, + body, + Box::new(ParseTree::parse(tokens, globals, &mut Cow::Borrowed(&locals))?) )), _ => panic!("Operator literally changed under your nose"), }