mod builtin;
pub mod eval;
mod token;
pub mod value;
pub use builtin::BULTIN_FUNCTIONS;
pub use builtin::FALSE_SYMBOL;
pub use builtin::MODULE_NAME_ENV;
pub use builtin::MODULE_PATH_ENV;
pub use builtin::TRUE_SYMBOL;
use crate::value::Value;
pub type Environment = std::collections::HashMap<String, Value>;
pub fn init_environment() -> Environment {
let mut env = Environment::new();
for &func in BULTIN_FUNCTIONS.iter() {
let _ = env.insert(String::from(func), Value::Builtin(func));
}
let _ = env.insert(String::from(MODULE_PATH_ENV), Value::List(Vec::new()));
env
}
fn is_number_eq(n1: f64, n2: f64) -> bool { (n1 - n2).abs() <= 1.9073486328125e-6 }
fn expand_tilde(path: String) -> Option<String> {
if path.starts_with('~') {
Some(
(match std::env::var(if cfg!(target_os = "windows") {
"USERPROFILE"
} else {
"HOME"
}) {
Ok(p) => p,
Err(_) => {
eprintln!(concat!(
"Error[ksl::eval::eval_apply]: ",
"Unable to retrieve user home directory path."
));
return None;
}
}) + &path[1..],
)
} else {
Some(path)
}
}