[TS] Split C -> JS function calls based on u32/u64 parameters/return
[ldk-java] / ts / js-wasm.h
1 #ifndef JS_H
2 #include <stdint.h>
3 #include <stddef.h>
4
5 extern size_t strlen(const char *s);
6
7 // We only support two call types - u32 and u64. u32 is mapped to a JavaScript
8 // "number" whereas u64 is mapped to a JavaScript "bigint". Ultimately it all
9 // calls through to the same function, but at the FFI boundary itself we have
10 // to use proper types.
11
12 typedef uint32_t JSValue;
13 extern uint64_t js_invoke_function_u(JSValue,JSValue,JSValue,JSValue,JSValue,JSValue,JSValue,JSValue,JSValue,JSValue,JSValue,JSValue) __attribute__((import_name("js_invoke_function_u")));
14 extern uint64_t js_invoke_function_b(JSValue,JSValue,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t,uint64_t) __attribute__((import_name("js_invoke_function_b")));
15
16 static inline JSValue js_invoke_function_u_(JSValue obj, JSValue fn){
17   return js_invoke_function_u(obj,fn,0,0,0,0,0,0,0,0,0,0);
18 }
19 static inline JSValue js_invoke_function_u_u(JSValue obj, JSValue fn, JSValue a){
20   return js_invoke_function_u(obj,fn,a,0,0,0,0,0,0,0,0,0);
21 }
22 static inline JSValue js_invoke_function_u_uu(JSValue obj, JSValue fn, JSValue a, JSValue b){
23   return js_invoke_function_u(obj,fn,a,b,0,0,0,0,0,0,0,0);
24 }
25 static inline JSValue js_invoke_function_u_uuu(JSValue obj, JSValue fn, JSValue a, JSValue b, JSValue c){
26   return js_invoke_function_u(obj,fn,a,b,c,0,0,0,0,0,0,0);
27 }
28 static inline JSValue js_invoke_function_u_uuuu(JSValue obj, JSValue fn, JSValue a, JSValue b, JSValue c, JSValue d){
29   return js_invoke_function_u(obj,fn,a,b,c,d,0,0,0,0,0,0);
30 }
31 static inline JSValue js_invoke_function_u_uuuuu(JSValue obj, JSValue fn, JSValue a, JSValue b, JSValue c, JSValue d, JSValue e){
32   return js_invoke_function_u(obj,fn,a,b,c,d,e,0,0,0,0,0);
33 }
34
35 static inline uint64_t js_invoke_function_b_(JSValue obj, JSValue fn){
36   return js_invoke_function_u(obj,fn,0,0,0,0,0,0,0,0,0,0);
37 }
38
39 static inline uint64_t js_invoke_function_b_uuuu(JSValue obj, JSValue fn, JSValue a, JSValue b, JSValue c, JSValue d){
40   return js_invoke_function_u(obj,fn,a,b,c,d,0,0,0,0,0,0);
41 }
42 static inline JSValue js_invoke_function_u_b(JSValue obj, JSValue fn, uint64_t a){
43   return js_invoke_function_b(obj,fn,a,0,0,0,0,0,0,0,0,0);
44 }
45 static inline JSValue js_invoke_function_u_bb(JSValue obj, JSValue fn, uint64_t a, uint64_t b){
46   return js_invoke_function_b(obj,fn,a,b,0,0,0,0,0,0,0,0);
47 }
48
49 #endif