js-runtime: Move function call logic to a common function
This commit is contained in:
parent
04013379db
commit
97e5c57bc8
1 changed files with 14 additions and 25 deletions
|
|
@ -268,16 +268,14 @@ const zig = {
|
||||||
memory.setString(ptr, values[value_map[val_id]]);
|
memory.setString(ptr, values[value_map[val_id]]);
|
||||||
},
|
},
|
||||||
|
|
||||||
zigFunctionCall(id, name, len, args, args_len, ret_ptr) {
|
functionCall(func, this_param, args, args_len, ret_ptr) {
|
||||||
let memory = new MemoryBlock(zig.wasm.exports.memory.buffer);
|
let memory = new MemoryBlock(zig.wasm.exports.memory.buffer);
|
||||||
let argv = [];
|
let argv = [];
|
||||||
for (let i = 0; i < args_len; i += 1) {
|
for (let i = 0; i < args_len; i += 1) {
|
||||||
argv.push(zig.readObject(memory.slice(args + i * 16), memory));
|
argv.push(zig.readObject(memory.slice(args + i * 16), memory));
|
||||||
}
|
}
|
||||||
let result = values[id][memory.getString(name, len)].apply(
|
|
||||||
values[id],
|
let result = func.apply(this_param, argv);
|
||||||
argv
|
|
||||||
);
|
|
||||||
|
|
||||||
let length = undefined;
|
let length = undefined;
|
||||||
const type = zig.getType(result);
|
const type = zig.getType(result);
|
||||||
|
|
@ -295,28 +293,19 @@ const zig = {
|
||||||
zig.writeObject(memory.slice(ret_ptr), result, type);
|
zig.writeObject(memory.slice(ret_ptr), result, type);
|
||||||
},
|
},
|
||||||
|
|
||||||
zigFunctionInvoke(id, args, args_len, ret_ptr) {
|
zigFunctionCall(id, name, len, args, args_len, ret_ptr) {
|
||||||
let memory = new MemoryBlock(zig.wasm.exports.memory.buffer);
|
let memory = new MemoryBlock(zig.wasm.exports.memory.buffer);
|
||||||
let argv = [];
|
zig.functionCall(
|
||||||
for (let i = 0; i < args_len; i += 1) {
|
values[id][memory.getString(name, len)],
|
||||||
argv.push(zig.readObject(memory.slice(args + i * 16), memory));
|
values[id],
|
||||||
}
|
args,
|
||||||
let result = values[id].apply(undefined, argv);
|
args_len,
|
||||||
|
ret_ptr
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
let length = undefined;
|
zigFunctionInvoke(id, args, args_len, ret_ptr) {
|
||||||
const type = zig.getType(result);
|
zig.functionCall(values[id], undefined, args, args_len, ret_ptr);
|
||||||
switch (type) {
|
|
||||||
case 3:
|
|
||||||
length = result.length;
|
|
||||||
case 0:
|
|
||||||
case 6:
|
|
||||||
result = zig.addValue(result);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (length !== undefined) result.__proto__.length = length;
|
|
||||||
|
|
||||||
zig.writeObject(memory.slice(ret_ptr), result, type);
|
|
||||||
},
|
},
|
||||||
|
|
||||||
wzLogWrite(str, len) {
|
wzLogWrite(str, len) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue