diff --git a/RELEASES.md b/RELEASES.md index 6fa1e36b..700a792f 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -19,6 +19,7 @@ Breaking changes ---------------- * `Module::set_fn`, `Module::set_raw_fn` and `Module::set_fn_XXX_mut` all take an additional parameter of `FnNamespace`. +* `Module::get_sub_module_mut` is removed. * `begin`, `end`, `unless` are now reserved keywords. * `EvalPackage` is removed in favor of `Engine::disable_symbol`. diff --git a/codegen/src/rhai_module.rs b/codegen/src/rhai_module.rs index 76d7648a..0d8cd0ba 100644 --- a/codegen/src/rhai_module.rs +++ b/codegen/src/rhai_module.rs @@ -162,6 +162,7 @@ pub(crate) fn generate_body( pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] diff --git a/codegen/src/test/module.rs b/codegen/src/test/module.rs index 56d3290c..7e0f7eb0 100644 --- a/codegen/src/test/module.rs +++ b/codegen/src/test/module.rs @@ -257,6 +257,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -291,6 +292,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -352,6 +354,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -413,6 +416,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -485,6 +489,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -577,6 +582,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -642,6 +648,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -714,6 +721,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -745,6 +753,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -778,6 +787,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -813,6 +823,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -848,6 +859,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -889,6 +901,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -945,6 +958,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -979,6 +993,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1041,6 +1056,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1103,6 +1119,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1168,6 +1185,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1209,6 +1227,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1253,6 +1272,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1294,6 +1314,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1337,6 +1358,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1399,6 +1421,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1463,6 +1486,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1528,6 +1552,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1597,6 +1622,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1663,6 +1689,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1733,6 +1760,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1802,6 +1830,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1874,6 +1903,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1888,6 +1918,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1928,6 +1959,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1944,6 +1976,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -1958,6 +1991,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -2024,6 +2058,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -2040,6 +2075,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -2054,6 +2090,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -2077,6 +2114,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -2091,6 +2129,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -2116,6 +2155,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -2132,6 +2172,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -2146,6 +2187,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] @@ -2167,6 +2209,7 @@ mod generate_tests { pub fn rhai_module_generate() -> Module { let mut m = Module::new(); rhai_generate_into_module(&mut m, false); + m.build_index(); m } #[allow(unused_mut)] diff --git a/doc/src/rust/modules/imp-resolver.md b/doc/src/rust/modules/imp-resolver.md index ff6b04d3..32a4361e 100644 --- a/doc/src/rust/modules/imp-resolver.md +++ b/doc/src/rust/modules/imp-resolver.md @@ -50,7 +50,7 @@ impl ModuleResolver for MyModuleResolver { // Return EvalAltResult::ErrorInModule upon loading error EvalAltResult::ErrorInModule(path.into(), Box::new(err), pos).into() )?; - my_module.build_index(); // index it + my_module.build_index(); // index it Rc::new(my_module) // make it shared } else { // Return EvalAltResult::ErrorModuleNotFound if the path is invalid diff --git a/src/module/mod.rs b/src/module/mod.rs index 4e548e14..6b2dc51c 100644 --- a/src/module/mod.rs +++ b/src/module/mod.rs @@ -2,9 +2,7 @@ use crate::ast::{FnAccess, IdentX}; use crate::dynamic::Variant; -use crate::fn_native::{ - shared_make_mut, shared_take_or_clone, CallableFunction, FnCallArgs, IteratorFn, SendSync, -}; +use crate::fn_native::{shared_take_or_clone, CallableFunction, FnCallArgs, IteratorFn, SendSync}; use crate::fn_register::by_value as cast_arg; use crate::stdlib::{ any::TypeId, @@ -399,23 +397,6 @@ impl Module { self.modules.get(name).map(|m| m.as_ref()) } - /// Get a mutable reference to a sub-module. - /// - /// # Example - /// - /// ``` - /// use rhai::Module; - /// - /// let mut module = Module::new(); - /// let sub_module = Module::new(); - /// module.set_sub_module("question", sub_module); - /// assert!(module.get_sub_module_mut("question").is_some()); - /// ``` - #[inline(always)] - pub fn get_sub_module_mut(&mut self, name: &str) -> Option<&mut Module> { - self.modules.get_mut(name).map(shared_make_mut) - } - /// Set a sub-module into the module. /// /// If there is an existing sub-module of the same name, it is replaced. @@ -1537,6 +1518,8 @@ impl Module { }); } + module.build_index(); + Ok(module) } @@ -1545,7 +1528,7 @@ impl Module { /// /// If the module is already indexed, this method has no effect. #[cfg(not(feature = "no_module"))] - pub fn build_index(&mut self) { + pub fn build_index(&mut self) -> &mut Self { // Collect a particular module. fn index_module<'a>( module: &'a Module, @@ -1645,6 +1628,8 @@ impl Module { self.all_type_iterators = type_iterators; self.indexed = true; } + + self } /// Does a type iterator exist in the entire module tree? diff --git a/src/module/resolvers/file.rs b/src/module/resolvers/file.rs index 17423536..c8146b3c 100644 --- a/src/module/resolvers/file.rs +++ b/src/module/resolvers/file.rs @@ -159,12 +159,10 @@ impl ModuleResolver for FileModuleResolver { _ => Box::new(EvalAltResult::ErrorInModule(path.to_string(), err, pos)), })?; - let mut m = Module::eval_ast_as_new(scope, &ast, engine).map_err(|err| { + let m = Module::eval_ast_as_new(scope, &ast, engine).map_err(|err| { Box::new(EvalAltResult::ErrorInModule(path.to_string(), err, pos)) })?; - m.build_index(); - module = Some(m.into()); module_ref = module.clone(); }; diff --git a/src/packages/mod.rs b/src/packages/mod.rs index a4c443ed..e9731ec2 100644 --- a/src/packages/mod.rs +++ b/src/packages/mod.rs @@ -131,6 +131,7 @@ macro_rules! def_package { pub fn new() -> Self { let mut module = $root::Module::new_with_capacity(1024); ::init(&mut module); + module.build_index(); Self(module.into()) } }