Skip to content

Commit

Permalink
chore: update
Browse files Browse the repository at this point in the history
  • Loading branch information
zhangyuang committed Nov 6, 2023
1 parent 1278745 commit 32a3dbd
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 232 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -206,3 +206,4 @@ index.d.ts
src/main.rs
Headers
tencent-test.js
src/foo.rs
12 changes: 9 additions & 3 deletions cpp/sum.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ extern "C" Person *createPerson() {

return person;
}
typedef void (*FunctionPointer)(int a, bool b, char *c);
typedef void (*FunctionPointer)(int a, bool b, char *c, char **d, int *e);

extern "C" void callFunction(FunctionPointer func) {
printf("callFunction");
Expand All @@ -102,8 +102,14 @@ extern "C" void callFunction(FunctionPointer func) {
char *c = (char *)malloc(14 * sizeof(char));
strcpy(c, "Hello, World!");
// double a = 100.11;

func(a, b, c);
char **stringArray = (char **)malloc(sizeof(char *) * 2);
stringArray[0] = strdup("Hello");
stringArray[1] = strdup("world");
int *i32Array = (int *)malloc(sizeof(int) * 3);
i32Array[0] = 101;
i32Array[1] = 202;
i32Array[2] = 303;
func(a, b, c, stringArray, i32Array);
}

extern "C" void bufferToFill(double bufferToFill[3]) {
Expand Down
228 changes: 3 additions & 225 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -234,231 +234,9 @@ unsafe fn load(
let args_len = func_args_type.get_array_length().unwrap();
let func_args_type_ptr = Box::into_raw(Box::new(func_args_type));
let js_function_ptr = Box::into_raw(Box::new(js_function));

// let res = match args_len {
// 1 => {
// let lambda = |a: *mut c_void| {
// let arg_arr = [a];
// let value: Vec<JsUnknown> = (0..1)
// .map(|index| {
// let c_param = arg_arr[index as usize];
// let arg_type = (*func_args_type_ptr)
// .get_element::<JsUnknown>(index)
// .unwrap();
// let param = get_js_function_call_value(&env, arg_type, c_param);
// param
// })
// .collect();
// (*js_function_ptr).call(None, &value).unwrap();
// };
// let closure = Box::into_raw(Box::new(Closure1::new(&lambda)));
// return std::mem::transmute((*closure).code_ptr());
// }
// 2 => {
// let lambda = move |a: *mut c_void, b: *mut c_void| {
// let arg_arr = [a, b];
// let value: Vec<JsUnknown> = (0..2)
// .map(|index| {
// let c_param = arg_arr[index as usize];
// let arg_type = (*func_args_type_ptr)
// .get_element::<JsUnknown>(index)
// .unwrap();
// let param = get_js_function_call_value(&env, arg_type, c_param);
// param
// })
// .collect();
// (*js_function_ptr).call(None, &value).unwrap();
// };
// let closure = Box::into_raw(Box::new(ClosureOnce2::new(lambda)));
// return std::mem::transmute((*closure).code_ptr());
// }
// 3 => {
// let lambda = move |a: *mut c_void, b: *mut c_void, c: *mut c_void| {
// let func_args_type_ptr = &*func_args_type_ptr;
// let js_function_ptr = &*js_function_ptr;
// let arg_arr = [a, b, c];
// let value: Vec<JsUnknown> = (0..3)
// .map(|index| {
// let c_param = arg_arr[index as usize];
// let arg_type = (func_args_type_ptr)
// .get_element::<JsUnknown>(index)
// .unwrap();
// let param = get_js_function_call_value(&env, arg_type, c_param);
// param
// })
// .collect();
// (js_function_ptr).call(None, &value).unwrap();
// };
// let closure = Box::into_raw(Box::new(ClosureOnce3::new(lambda)));
// return std::mem::transmute((*closure).code_ptr());
// }
// 4 => {
// let lambda = |a: *mut c_void, b: *mut c_void, c: *mut c_void, d: *mut c_void| {
// let arg_arr = [a, b, c, d];
// let value: Vec<JsUnknown> = (0..4)
// .map(|index| {
// let c_param = arg_arr[index as usize];
// let arg_type = (*func_args_type_ptr)
// .get_element::<JsUnknown>(index)
// .unwrap();
// let param = get_js_function_call_value(&env, arg_type, c_param);
// param
// })
// .collect();
// (*js_function_ptr).call(None, &value).unwrap();
// };
// let closure = Box::into_raw(Box::new(Closure4::new(&lambda)));
// return std::mem::transmute((*closure).code_ptr());
// }
// 5 => {
// let lambda =
// |a: *mut c_void, b: *mut c_void, c: *mut c_void, d: *mut c_void, e: *mut c_void| {
// let arg_arr = [a, b, c, d, e];
// let value: Vec<JsUnknown> = (0..5)
// .map(|index| {
// let c_param = arg_arr[index as usize];
// let arg_type = (*func_args_type_ptr)
// .get_element::<JsUnknown>(index)
// .unwrap();
// let param = get_js_function_call_value(&env, arg_type, c_param);
// param
// })
// .collect();
// (*js_function_ptr).call(None, &value).unwrap();
// };
// let closure = Box::into_raw(Box::new(Closure5::new(&lambda)));
// return std::mem::transmute((*closure).code_ptr());
// }
// 6 => {
// let lambda = |a: *mut c_void,
// b: *mut c_void,
// c: *mut c_void,
// d: *mut c_void,
// e: *mut c_void,
// f: *mut c_void| {
// let arg_arr = [a, b, c, d, e, f];
// let value: Vec<JsUnknown> = (0..6)
// .map(|index| {
// let c_param = arg_arr[index as usize];
// let arg_type = (*func_args_type_ptr)
// .get_element::<JsUnknown>(index)
// .unwrap();
// let param = get_js_function_call_value(&env, arg_type, c_param);
// param
// })
// .collect();
// (*js_function_ptr).call(None, &value).unwrap();
// };
// let closure = Box::into_raw(Box::new(Closure6::new(&lambda)));
// return std::mem::transmute((*closure).code_ptr());
// }
// 7 => {
// let lambda = |a: *mut c_void,
// b: *mut c_void,
// c: *mut c_void,
// d: *mut c_void,
// e: *mut c_void,
// f: *mut c_void,
// g: *mut c_void| {
// let arg_arr = [a, b, c, d, e, f, g];
// let value: Vec<JsUnknown> = (0..7)
// .map(|index| {
// let c_param = arg_arr[index as usize];
// let arg_type = (*func_args_type_ptr)
// .get_element::<JsUnknown>(index)
// .unwrap();
// let param = get_js_function_call_value(&env, arg_type, c_param);
// param
// })
// .collect();
// (*js_function_ptr).call(None, &value).unwrap();
// };
// let closure = Box::into_raw(Box::new(Closure7::new(&lambda)));
// return std::mem::transmute((*closure).code_ptr());
// }
// 8 => {
// let lambda = |a: *mut c_void,
// b: *mut c_void,
// c: *mut c_void,
// d: *mut c_void,
// e: *mut c_void,
// f: *mut c_void,
// g: *mut c_void,
// h: *mut c_void| {
// let arg_arr = [a, b, c, d, e, f, g, h];
// let value: Vec<JsUnknown> = (0..8)
// .map(|index| {
// let c_param = arg_arr[index as usize];
// let arg_type = (*func_args_type_ptr)
// .get_element::<JsUnknown>(index)
// .unwrap();
// let param = get_js_function_call_value(&env, arg_type, c_param);
// param
// })
// .collect();
// (*js_function_ptr).call(None, &value).unwrap();
// };
// let closure = Box::into_raw(Box::new(Closure8::new(&lambda)));
// return std::mem::transmute((*closure).code_ptr());
// }
// 9 => {
// let lambda = |a: *mut c_void,
// b: *mut c_void,
// c: *mut c_void,
// d: *mut c_void,
// e: *mut c_void,
// f: *mut c_void,
// g: *mut c_void,
// h: *mut c_void,
// i: *mut c_void| {
// let arg_arr = [a, b, c, d, e, f, g, h, i];
// let value: Vec<JsUnknown> = (0..9)
// .map(|index| {
// let c_param = arg_arr[index as usize];
// let arg_type = (*func_args_type_ptr)
// .get_element::<JsUnknown>(index)
// .unwrap();
// let param = get_js_function_call_value(&env, arg_type, c_param);
// param
// })
// .collect();
// (*js_function_ptr).call(None, &value).unwrap();
// };
// let closure = Box::into_raw(Box::new(Closure9::new(&lambda)));
// return std::mem::transmute((*closure).code_ptr());
// }
// 10 => {
// let lambda = |a: *mut c_void,
// b: *mut c_void,
// c: *mut c_void,
// d: *mut c_void,
// e: *mut c_void,
// f: *mut c_void,
// g: *mut c_void,
// h: *mut c_void,
// i: *mut c_void,
// j: *mut c_void| {
// let arg_arr = [a, b, c, d, e, f, g, h, i];
// let value: Vec<JsUnknown> = (0..10)
// .map(|index| {
// let c_param = arg_arr[index as usize];
// let arg_type = (*func_args_type_ptr)
// .get_element::<JsUnknown>(index)
// .unwrap();
// let param = get_js_function_call_value(&env, arg_type, c_param);
// param
// })
// .collect();
// (*js_function_ptr).call(None, &value).unwrap();
// };
// let closure = Box::into_raw(Box::new(Closure10::new(&lambda)));
// return std::mem::transmute((*closure).code_ptr());
// }
// _ => std::ptr::null_mut() as *mut c_void,
// };

// return res;

if args_len > 10 {
panic!("The number of function parameters needs to be less than or equal to 10")
}
let res = match_args_len!(args_len, func_args_type_ptr, js_function_ptr, &env,
1 => ClosureOnce1, a
,2 => ClosureOnce2, a,b
Expand Down
6 changes: 5 additions & 1 deletion src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ pub unsafe fn get_js_function_call_value(
.unwrap()
.into_unknown();
}

DataType::Double => {
println!("{:?}", func_arg_ptr);
return env.create_double(1.1).unwrap().into_unknown();
Expand Down Expand Up @@ -78,7 +79,10 @@ pub unsafe fn get_js_function_call_value(
let arr = create_array_from_pointer(func_arg_ptr as *mut c_double, array_len);
rs_array_to_js_array(env, ArrayType::Double(arr)).into_unknown()
}
_ => panic!("{:?} as function args is unsupported ", array_type),
_ => panic!(
"{:?} as function parameter is unsupported so far",
array_type
),
}
} else {
create_object_from_pointer(env, func_arg_ptr, args_type).into_unknown()
Expand Down
12 changes: 9 additions & 3 deletions test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -151,19 +151,25 @@ const unitTest = () => {
boolTrue: true,
boolFalse: false
})
const func = (a, b, c) => {
console.log('func param1', a, b, c,)
const func = (a, b, c, d, e) => {
console.log('func param1', a, b, c, d, e)
equal(a, 100)
equal(b, false)
equal(c, 'Hello, World!')
deepStrictEqual(d, ['Hello', 'world'])
deepStrictEqual(e, [101, 202, 303])
}

load({
library: 'libsum',
funcName: 'callFunction',
retType: DataType.Void,
paramsType: [funcConstructor({
paramsType: [DataType.I32, DataType.Boolean, DataType.String],
paramsType: [DataType.I32, DataType.Boolean, DataType.String,
arrayConstructor({ type: DataType.StringArray, length: 2 }),
arrayConstructor({ type: DataType.I32Array, length: 3 }),
arrayConstructor({ type: DataType.I32Array, length: 3 })
],
retType: DataType.Void
})],
paramsValue: [func],
Expand Down

0 comments on commit 32a3dbd

Please sign in to comment.