From 3b00b478ced7a175c8f7799f58e266bef2cdc63d Mon Sep 17 00:00:00 2001 From: iddev5 Date: Thu, 7 Jul 2022 23:55:32 +0530 Subject: [PATCH] js: Implement Value.instanceOf method which performs Js' ``instanceof`` check --- js-runtime/src/js-runtime.js | 7 +++++++ js-runtime/src/main.zig | 5 +++++ 2 files changed, 12 insertions(+) diff --git a/js-runtime/src/js-runtime.js b/js-runtime/src/js-runtime.js index 0dd61fed..8bca277a 100644 --- a/js-runtime/src/js-runtime.js +++ b/js-runtime/src/js-runtime.js @@ -276,6 +276,13 @@ const zig = { return val_js === other_js; }, + zigValueInstanceOf(val, other) { + let memory = new MemoryBlock(zig.wasm.exports.memory.buffer); + const val_js = zig.readObject(memory.slice(val), memory); + const other_js = zig.readObject(memory.slice(other), memory); + return val_js instanceof other_js; + }, + functionCall(func, this_param, 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 53d75ad4..1d8f7045 100644 --- a/js-runtime/src/main.zig +++ b/js-runtime/src/main.zig @@ -15,6 +15,7 @@ const js = struct { extern fn zigGetString(val_id: u64, ptr: [*]const u8) void; extern fn zigGetStringLength(val_id: u64) u32; extern fn zigValueEqual(val: *const anyopaque, other: *const anyopaque) bool; + extern fn zigValueInstanceOf(val: *const anyopaque, other: *const anyopaque) bool; 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; @@ -92,6 +93,10 @@ pub const Value = extern struct { else => js.zigValueEqual(val, &other), }; } + + pub fn instanceOf(val: *const Value, other: Value) bool { + return js.zigValueInstanceOf(val, &other); + } }; pub const Object = struct {