fix parse error on undefined variables

This commit is contained in:
2024-10-17 16:05:52 -04:00
parent d1082cb159
commit 34569248d3

View File

@@ -157,15 +157,21 @@ impl ParseTree {
.ok_or(ParseError::UnexpectedEndInput)? .ok_or(ParseError::UnexpectedEndInput)?
.map_err(|e| ParseError::TokenizeError(e))?; .map_err(|e| ParseError::TokenizeError(e))?;
let body = Box::new(ParseTree::parse(tokens, globals, locals)?);
if let Token::Identifier(ident) = token { if let Token::Identifier(ident) = token {
let locals = locals.to_mut();
locals.insert(ident.clone(), Object::Variable(Evaluation::Computed(Value::Nil)));
match op { match op {
Op::Equ => Ok(ParseTree::Equ(ident.clone(), Op::Equ => Ok(ParseTree::Equ(ident,
Box::new(ParseTree::parse(tokens, globals, locals)?), body,
Box::new(ParseTree::parse(tokens, globals, locals)?) Box::new(ParseTree::parse(tokens, globals, &mut Cow::Borrowed(&locals))?)
)), )),
Op::LazyEqu => Ok(ParseTree::LazyEqu(ident.clone(), Op::LazyEqu => Ok(ParseTree::LazyEqu(ident,
Box::new(ParseTree::parse(tokens, globals, locals)?), body,
Box::new(ParseTree::parse(tokens, globals, locals)?) Box::new(ParseTree::parse(tokens, globals, &mut Cow::Borrowed(&locals))?)
)), )),
_ => panic!("Operator literally changed under your nose"), _ => panic!("Operator literally changed under your nose"),
} }