ksl 0.1.30

KSL core library and interpreter
Documentation
//! # ksl::builtin::block
//!
//! Built-in function `Block`.

use crate::{Dict, Environment, Scope, eval::apply::eval_apply, value::Value};

pub(crate) fn builtin(args: &[Value], env: Environment) -> Result<Value, std::sync::Arc<str>> {
    // isolate environment
    let block_env = std::sync::Arc::new(Scope {
        store: parking_lot::RwLock::new(Dict::default()),
        parent: Some(env),
    });

    // eval sentences
    let mut final_result = Value::Unit;
    for arg in args.iter() {
        final_result = eval_apply(arg, block_env.clone())?;
    }

    Ok(final_result)
}