This commit is contained in:
Biedermann Steve 2024-04-25 17:07:04 +02:00
parent 39f4aba804
commit f93f2cf996
1 changed files with 25 additions and 8 deletions

View File

@ -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<RefCell<Vec<String>>>, 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<RefCell<Vec<String>>>, 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<RefCell<Vec<String>>>, debug: bool) -> Engine {
engine.register_global_module(package.as_shared_module());
engine.register_iterator::<Vec<serde_value::Value>>();
@ -31,7 +39,8 @@ index d4ba8e3..764211d 100644
+ .register_iterator::<Vec<$T>>()
+ .register_iterator::<&Vec<&$T>>()
+ .register_iterator::<Vec<$T>>()
+ .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<A: Clone, B>(tuple: &mut (A, B)) -> A {
@@ -336,6 +373,7 @@ pub fn build_engine(messages: Rc<RefCell<Vec<String>>>, debug: bool) -> Engine {
@@ -336,6 +375,7 @@ pub fn build_engine(messages: Rc<RefCell<Vec<String>>>, 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<RefCell<Vec<String>>>, debug: bool) -> Engine {
@@ -354,6 +394,7 @@ pub fn build_engine(messages: Rc<RefCell<Vec<String>>>, 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<RefCell<Vec<String>>>, debug: bool) -> Engine {
engine
.register_type::<TypeName>()
@ -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<RefCell<Vec<String>>>, debug: bool) -> Engine {
@@ -488,27 +529,77 @@ pub fn build_engine(messages: Rc<RefCell<Vec<String>>>, 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");