diff --git a/src/interpreter/program.rs b/src/interpreter/program.rs index f34236e..bace577 100644 --- a/src/interpreter/program.rs +++ b/src/interpreter/program.rs @@ -31,6 +31,13 @@ impl ProgramInstance where E: UserError { }) } + /// Create a new program instance with a custom env module + pub fn with_env_module(env_module: Arc>) -> Self { + ProgramInstance { + essence: Arc::new(ProgramInstanceEssence::with_env_module(env_module)), + } + } + /// Instantiate module with validation. pub fn add_module<'a>(&self, name: &str, module: Module, externals: Option<&'a HashMap + 'a>>>) -> Result>, Error> { let mut module_instance = ModuleInstance::new(Arc::downgrade(&self.essence), name.into(), module)?; @@ -62,14 +69,19 @@ impl ProgramInstanceEssence where E: UserError { } pub fn with_env_params(env_params: env::EnvParams) -> Result> { - let mut modules = HashMap::new(); - let env_module: Arc> = Arc::new(env_module(env_params)?); - modules.insert("env".into(), env_module); - Ok(ProgramInstanceEssence { - modules: RwLock::new(modules), - }) + let env_mod = env_module(env_params)?; + Ok(ProgramInstanceEssence::with_env_module(Arc::new(env_mod))) } + pub fn with_env_module(env_module: Arc>) -> Self { + let mut modules = HashMap::new(); + modules.insert("env".into(), env_module); + ProgramInstanceEssence { + modules: RwLock::new(modules), + } + } + + /// Get module reference. pub fn module(&self, name: &str) -> Option>> { self.modules.read().get(name).cloned()