From 852278ebe724b3dba1d9aebaa776d79c78a0e6c5 Mon Sep 17 00:00:00 2001 From: iddev5 Date: Fri, 8 Jul 2022 18:03:55 +0530 Subject: [PATCH] js-runtime: Add Function.paramCount to get the number of parameters --- js-runtime/src/js-runtime.js | 4 ++++ js-runtime/src/main.zig | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/js-runtime/src/js-runtime.js b/js-runtime/src/js-runtime.js index 5524b78f..a33e86d5 100644 --- a/js-runtime/src/js-runtime.js +++ b/js-runtime/src/js-runtime.js @@ -327,6 +327,10 @@ const zig = { zig.functionCall(values[id], undefined, args, args_len, ret_ptr); }, + zigGetParamCount(id) { + return values[id].length; + }, + zigConstructType(id, args, args_len, ret_ptr) { let memory = new MemoryBlock(zig.wasm.exports.memory.buffer); let argv = []; diff --git a/js-runtime/src/main.zig b/js-runtime/src/main.zig index d4efa6b7..35846300 100644 --- a/js-runtime/src/main.zig +++ b/js-runtime/src/main.zig @@ -20,6 +20,7 @@ const js = struct { extern fn zigDeleteIndex(id: u64, index: u32) void; extern fn zigFunctionCall(id: u64, name: [*]const u8, len: u32, args: ?*const anyopaque, args_len: u32, ret_ptr: *anyopaque) void; extern fn zigFunctionInvoke(id: u64, args: ?*const anyopaque, args_len: u32, ret_ptr: *anyopaque) void; + extern fn zigGetParamCount(id: u64) u32; extern fn zigConstructType(id: u64, args: ?*const anyopaque, args_len: u32, ret_ptr: *anyopaque) void; extern fn zigCleanupObject(id: u64) void; }; @@ -142,6 +143,11 @@ pub const Function = struct { return .{ .tag = .func, .val = .{ .ref = func.ref } }; } + pub fn paramCount(func: *const Function) usize { + // FIXME: native functions would always return 0 + return js.zigGetParamCount(func.ref); + } + pub fn construct(func: *const Function, args: []const Value) Value { var ret: Value = undefined; js.zigConstructType(func.ref, args.ptr, args.len, &ret);