1mod common;
2pub mod unary;
3pub mod partial;
4mod multi;
5
6use mumu::{
7 parser::interpreter::Interpreter,
8 parser::types::{Value, FunctionValue},
9};
10use std::sync::{Arc, Mutex};
11
12#[no_mangle]
13pub unsafe extern "C" fn Cargo_lock(
14 interp_ptr: *mut std::ffi::c_void,
15 _extra_str: *const std::ffi::c_void,
16) -> i32 {
17 let interp = &mut *(interp_ptr as *mut Interpreter);
18
19 macro_rules! reg {
20 ($name:expr, $f:expr) => {{
21 let func = Arc::new(Mutex::new($f));
22 interp.register_dynamic_function($name, func);
23 interp.set_variable($name, Value::Function(Box::new(FunctionValue::Named($name.into()))));
24 }};
25 }
26
27 reg!("string:lower", unary::string_lower_bridge);
29 reg!("string:upper", unary::string_upper_bridge);
30 reg!("string:length", unary::string_length_bridge);
31 reg!("string:to_string", unary::string_to_string_bridge);
32 reg!("string:trim", unary::string_trim_bridge);
33
34 reg!("string:concat", partial::string_concat_bridge);
36 reg!("string:split", partial::string_split_bridge);
37 reg!("string:join", partial::string_join_bridge);
38 reg!("string:replace", partial::string_replace_bridge);
39 reg!("string:contains", partial::string_contains_bridge);
40 reg!("string:starts_with", partial::string_starts_with_bridge);
41 reg!("string:ends_with", partial::string_ends_with_bridge);
42 reg!("string:slice", partial::string_slice_bridge);
43 reg!("string:repeat", partial::string_repeat_bridge);
44 reg!("string:index_of", partial::string_index_of_bridge);
45 reg!("string:last_index_of", partial::string_last_index_of_bridge);
46
47 0
48}