//! # 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)
}