fix: don't include void nodes in eval result
This commit is contained in:
parent
b582d66fcf
commit
b1ddc907e6
2 changed files with 9 additions and 5 deletions
2
src/env/core.rs
vendored
2
src/env/core.rs
vendored
|
@ -282,7 +282,7 @@ pub(super) fn core() -> HashMap<String, Node> {
|
|||
|
||||
env.set(key, val.clone());
|
||||
|
||||
Ok(val)
|
||||
Ok(Node::Void)
|
||||
}),
|
||||
),
|
||||
(
|
||||
|
|
|
@ -7,13 +7,18 @@ use crate::error::Error;
|
|||
use crate::node::Node;
|
||||
|
||||
pub fn eval(env: &Environment, ast: Vec<Node>) -> Result<Vec<Node>> {
|
||||
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;
|
||||
}
|
||||
|
||||
Ok(res)
|
||||
exprs.push(res);
|
||||
}
|
||||
|
||||
Ok(exprs)
|
||||
}
|
||||
|
||||
pub fn eval_node(env: &Environment, ast_node: Node) -> Result<Node> {
|
||||
|
@ -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")]
|
||||
|
|
Loading…
Reference in a new issue