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")]