use crate::eval::value::{Value, PrimitiveProcedure, PrimitiveImpl, ThreadSafeEnvironment};
use crate::effects::Effect;
use std::sync::Arc;
pub struct StandardLibrary {
}
impl StandardLibrary {
pub fn new() -> Self {
Self {}
}
pub fn populate_environment(&self, env: &Arc<ThreadSafeEnvironment>) {
crate::stdlib::arithmetic::create_arithmetic_bindings(env);
crate::stdlib::bytevector::bind_bytevector_operations(env);
crate::stdlib::strings::create_string_bindings(env);
crate::stdlib::lists::create_list_bindings(env);
crate::stdlib::vectors::create_vector_bindings(env);
crate::stdlib::characters::create_character_bindings(env);
crate::stdlib::charset::create_charset_bindings(env);
crate::stdlib::io::create_io_bindings(env);
crate::stdlib::io_integration::create_io_integration_bindings(env);
crate::stdlib::control::create_control_bindings(env);
crate::stdlib::effects::create_effect_bindings(env);
crate::stdlib::exceptions::create_exception_bindings(env);
crate::stdlib::srfi23_enhanced::create_enhanced_srfi23_bindings(env);
crate::stdlib::parameters::install_parameter_functions(env);
crate::stdlib::records_simple::create_record_bindings(env);
crate::stdlib::srfi9_macro::install_define_record_type_macro(env);
crate::stdlib::system::create_system_bindings(env);
crate::stdlib::text::create_text_bindings(env);
crate::stdlib::text_regex::create_regex_bindings(env);
crate::stdlib::text_algorithms::create_text_algorithm_bindings(env);
crate::stdlib::text_srfi135::create_complete_srfi135_bindings(env);
crate::stdlib::concurrency::populate_environment(env);
crate::stdlib::sets::install_set_primitives(env);
crate::stdlib::bags::install_bag_primitives(env);
crate::stdlib::generators::create_generator_bindings(env);
super::bind_core_procedures(env);
}
pub fn builtins(&self) -> Vec<(&'static str, super::BuiltinProcedure)> {
vec![
("+", super::BuiltinProcedure::Add),
("-", super::BuiltinProcedure::Subtract),
("*", super::BuiltinProcedure::Multiply),
("/", super::BuiltinProcedure::Divide),
("=", super::BuiltinProcedure::Equal),
("<", super::BuiltinProcedure::LessThan),
(">", super::BuiltinProcedure::GreaterThan),
("cons", super::BuiltinProcedure::Cons),
("car", super::BuiltinProcedure::Car),
("cdr", super::BuiltinProcedure::Cdr),
("list", super::BuiltinProcedure::List),
("display", super::BuiltinProcedure::Display),
("newline", super::BuiltinProcedure::Newline),
("features", super::BuiltinProcedure::Features),
("current-second", super::BuiltinProcedure::CurrentSecond),
("current-jiffy", super::BuiltinProcedure::CurrentJiffy),
("jiffies-per-second", super::BuiltinProcedure::JiffiesPerSecond),
("command-line", super::BuiltinProcedure::CommandLine),
("get-environment-variable", super::BuiltinProcedure::GetEnvironmentVariable),
("get-environment-variables", super::BuiltinProcedure::GetEnvironmentVariables),
("exit", super::BuiltinProcedure::Exit),
("emergency-exit", super::BuiltinProcedure::EmergencyExit),
]
}
}
impl Default for StandardLibrary {
fn default() -> Self {
Self::new()
}
}