1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
export class Wasmjsbridge {
constructor() {
const decoder = new TextDecoder();
this.bridgeImport = {
get_js_objectname_method(ob, osz, nb, nsz) {
const buffer = globalThis.wasmjsbridge_exports.memory.buffer;
const objname = decoder.decode(new Uint8Array(buffer, ob, osz));
const funcname = decoder.decode(new Uint8Array(buffer, nb, nsz));
const func = function (...args) { return globalThis[objname][funcname](...args) };
const n = globalThis.wasmjsbridge_counter + 1;
globalThis.wasmjsbridge_counter = n;
globalThis.wasmjsbridge_functionmap.set(n, func);
return n;
},
get_js_objectid_method(obn, nb, nsz) {
const buffer = globalThis.wasmjsbridge_exports.memory.buffer;
const funcname = decoder.decode(new Uint8Array(buffer, nb, nsz));
const obj = globalThis.wasmjsbridge_objectmap.get(obn);
const func = function (...args) { return obj[funcname](...args) };
const n = globalThis.wasmjsbridge_counter + 1;
globalThis.wasmjsbridge_counter = n;
globalThis.wasmjsbridge_functionmap.set(n, func);
return n;
},
call_js_function_void(n) {
const fn = globalThis.wasmjsbridge_functionmap.get(n);
fn();
},
call_js_function_string_void(n, b, sz) {
const fn = globalThis.wasmjsbridge_functionmap.get(n);
const buffer = globalThis.wasmjsbridge_exports.memory.buffer;
fn(decoder.decode(new Uint8Array(buffer, b, sz)));
},
call_js_function_string_int(n, b, sz) {
const fn = globalThis.wasmjsbridge_functionmap.get(n);
const buffer = globalThis.wasmjsbridge_exports.memory.buffer;
return fn(decoder.decode(new Uint8Array(buffer, b, sz)));
},
call_js_function_string_object(n, b, sz) {
const fn = globalThis.wasmjsbridge_functionmap.get(n);
const buffer = globalThis.wasmjsbridge_exports.memory.buffer;
const s = decoder.decode(new Uint8Array(buffer, b, sz))
const obj = fn(s);
const obn = globalThis.wasmjsbridge_counter + 1;
globalThis.wasmjsbridge_counter = obn;
globalThis.wasmjsbridge_objectmap.set(obn, obj);
return obn
},
call_js_function_int_int_void(n, x, y) {
const fn = globalThis.wasmjsbridge_functionmap.get(n);
return fn(x, y);
},
};
}
init(exports, argv, argc) {
globalThis.wasmjsbridge_exports = exports;
globalThis.wasmjsbridge_counter = 0;
globalThis.wasmjsbridge_functionmap = new Map();
globalThis.wasmjsbridge_objectmap = new Map();
exports.hs_init(argv, argc);
}
}
|