From b1ddc907e60369b84317139915995a24ac356434 Mon Sep 17 00:00:00 2001 From: Roman Godmaire Date: Sat, 4 May 2024 18:44:38 -0400 Subject: [PATCH] fix: don't include void nodes in eval result --- src/env/core.rs | 2 +- src/evaluator.rs | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/env/core.rs b/src/env/core.rs index 6f7c63c..9acf4d0 100644 --- a/src/env/core.rs +++ b/src/env/core.rs @@ -282,7 +282,7 @@ pub(super) fn core() -> HashMap { env.set(key, val.clone()); - Ok(val) + Ok(Node::Void) }), ), ( diff --git a/src/evaluator.rs b/src/evaluator.rs index c7a0896..9dec797 100644 --- a/src/evaluator.rs +++ b/src/evaluator.rs @@ -7,13 +7,18 @@ use crate::error::Error; use crate::node::Node; pub fn eval(env: &Environment, ast: Vec) -> Result> { - let mut res = Vec::new(); + let mut exprs = Vec::new(); for node in ast { - res.push(eval_node(env, node)?); + let res = eval_node(env, node)?; + if let Node::Void = res { + continue; + } + + exprs.push(res); } - Ok(res) + Ok(exprs) } pub fn eval_node(env: &Environment, ast_node: Node) -> Result { @@ -133,7 +138,6 @@ mod test { #[case("(count {})", "0")] #[case("(count {:a 1})", "1")] // Environment manipulation - #[case("(define! asdf (+ 2 2)) (+ asdf 2)", "4\n6")] #[case("(let* (a 2) (+ a 2))", "4")] // Branching #[case("(if true true false)", "true")]