diff --git a/diff.patch b/diff.patch index 9d6af69..e91a54a 100644 --- a/diff.patch +++ b/diff.patch @@ -1,8 +1,16 @@ diff --git a/crates/ssd/src/generators/rhai.rs b/crates/ssd/src/generators/rhai.rs -index d4ba8e3..764211d 100644 +index d4ba8e3..0353358 100644 --- a/crates/ssd/src/generators/rhai.rs +++ b/crates/ssd/src/generators/rhai.rs -@@ -281,27 +281,64 @@ pub fn build_engine(messages: Rc>>, debug: bool) -> Engine { +@@ -261,6 +261,7 @@ fn script_array_contains(arr: Array, v: &Dynamic) -> bool { + #[allow(clippy::too_many_lines)] + pub fn build_engine(messages: Rc>>, debug: bool) -> Engine { + let mut engine = Engine::new(); ++ engine.set_max_expr_depths(128, 64); + // Register a token mapper function to allow module as identifier name + #[allow(deprecated)] + engine.on_parse_token(|token, _pos, _state| { +@@ -281,27 +282,65 @@ pub fn build_engine(messages: Rc>>, debug: bool) -> Engine { engine.register_global_module(package.as_shared_module()); engine.register_iterator::>(); @@ -31,7 +39,8 @@ index d4ba8e3..764211d 100644 + .register_iterator::>() + .register_iterator::<&Vec<&$T>>() + .register_iterator::>() -+ .register_iterator::<&Vec<&$T>>(); ++ .register_iterator::<&Vec<&$T>>() ++ .register_indexer_get(|v: &mut Vec<$T>, i: i64| v[i as usize].clone()); + }; + } + @@ -83,7 +92,7 @@ index d4ba8e3..764211d 100644 #[allow(clippy::items_after_statements)] fn script_first(tuple: &mut (A, B)) -> A { -@@ -336,6 +373,7 @@ pub fn build_engine(messages: Rc>>, debug: bool) -> Engine { +@@ -336,6 +375,7 @@ pub fn build_engine(messages: Rc>>, debug: bool) -> Engine { Enum, DataType, Service, @@ -91,7 +100,15 @@ index d4ba8e3..764211d 100644 Function, TypeName, EnumValue, -@@ -398,7 +436,7 @@ pub fn build_engine(messages: Rc>>, debug: bool) -> Engine { +@@ -354,6 +394,7 @@ pub fn build_engine(messages: Rc>>, debug: bool) -> Engine { + .register_get("name", SsdModule::namespace) + .register_get("imports", SsdModule::imports) + .register_get("data_types", SsdModule::data_types) ++ .register_get("types", SsdModule::data_types) + .register_get("enums", SsdModule::enums) + .register_get("services", SsdModule::services); + +@@ -398,7 +439,7 @@ pub fn build_engine(messages: Rc>>, debug: bool) -> Engine { engine .register_type::() @@ -100,7 +117,7 @@ index d4ba8e3..764211d 100644 .register_get("is_list", TypeName::is_list) .register_get("count", TypeName::count) .register_get("attributes", TypeName::attributes); -@@ -488,27 +526,77 @@ pub fn build_engine(messages: Rc>>, debug: bool) -> Engine { +@@ -488,27 +529,77 @@ pub fn build_engine(messages: Rc>>, debug: bool) -> Engine { .register_fn("all", script_all) .register_fn("none", script_none); @@ -195,7 +212,7 @@ index d4ba8e3..764211d 100644 macro_rules! register_string_concat_void { ($($T: ty),*) => {$({ let messages = messages.clone(); -@@ -682,7 +770,6 @@ pub fn generate_web( +@@ -682,7 +773,6 @@ pub fn generate_web( scope.push("module", module); scope.push_constant("defines", defines); scope.push_constant("NL", "\n"); @@ -203,7 +220,7 @@ index d4ba8e3..764211d 100644 engine.run_with_scope(&mut scope, script)?; let messages = messages.borrow(); Ok(messages.join("")) -@@ -716,7 +803,6 @@ pub fn generate( +@@ -716,7 +806,6 @@ pub fn generate( }; scope.push_constant("defines", defines); scope.push_constant("NL", "\n");