From 47d1544b6483ec6038fcc0eb2b90c14f8ab8d253 Mon Sep 17 00:00:00 2001 From: LeRoyce Pearson Date: Fri, 16 Sep 2022 17:56:22 -0600 Subject: [PATCH] {mach,sysjs}: put WASM imports into their own namespaces (#537) --- libs/sysjs/src/mach-sysjs.js | 84 +++++++++++++++--------------- libs/sysjs/src/main.zig | 42 +++++++-------- src/platform/wasm.zig | 42 +++++++-------- tools/html-generator/template.html | 5 +- 4 files changed, 87 insertions(+), 86 deletions(-) diff --git a/libs/sysjs/src/mach-sysjs.js b/libs/sysjs/src/mach-sysjs.js index fd177130..36cd1f2c 100644 --- a/libs/sysjs/src/mach-sysjs.js +++ b/libs/sysjs/src/mach-sysjs.js @@ -74,7 +74,7 @@ class MemoryBlock { } } -const zig = { +const sysjs = { wasm: undefined, buffer: undefined, @@ -100,24 +100,24 @@ const zig = { }, zigCreateMap() { - return zig.addValue(new Map()); + return sysjs.addValue(new Map()); }, zigCreateArray() { - return zig.addValue(new Array()); + return sysjs.addValue(new Array()); }, zigCreateString(str, len) { - let memory = new MemoryBlock(zig.wasm.exports.memory.buffer); - return zig.addValue(memory.getString(str, len)); + let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); + return sysjs.addValue(memory.getString(str, len)); }, zigCreateFunction(id, captures, len) { - return zig.addValue(function () { - const args = zig.addValue(arguments); - zig.wasm.exports.wasmCallFunction(id, args, arguments.length, captures, len); + return sysjs.addValue(function () { + const args = sysjs.addValue(arguments); + sysjs.wasm.exports.wasmCallFunction(id, args, arguments.length, captures, len); const return_value = values[args]["return_value"]; - zig.zigCleanupObject(args); + sysjs.zigCleanupObject(args); return return_value; }); }, @@ -208,7 +208,7 @@ const zig = { if (prop in value_map) { prop = value_map[prop.__uindex]; } else { - prop = zig.addValue(prop); + prop = sysjs.addValue(prop); } break; } @@ -216,40 +216,40 @@ const zig = { if (len !== undefined) prop.__proto__.length = len; let memory = new MemoryBlock(ret_ptr, offset); - zig.writeObject(memory, prop, type); + sysjs.writeObject(memory, prop, type); }, getProperty(prop, ret_ptr) { - return zig.getPropertyEx(prop, zig.wasm.exports.memory.buffer, ret_ptr); + return sysjs.getPropertyEx(prop, sysjs.wasm.exports.memory.buffer, ret_ptr); }, zigGetProperty(id, name, len, ret_ptr) { - let memory = new MemoryBlock(zig.wasm.exports.memory.buffer); + let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); let prop = values[id][memory.getString(name, len)]; - zig.getProperty(prop, ret_ptr); + sysjs.getProperty(prop, ret_ptr); }, zigSetProperty(id, name, len, set_ptr) { - let memory = new MemoryBlock(zig.wasm.exports.memory.buffer); - values[id][memory.getString(name, len)] = zig.readObject( + let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); + values[id][memory.getString(name, len)] = sysjs.readObject( memory.slice(set_ptr), memory ); }, zigDeleteProperty(id, name, len) { - let memory = new MemoryBlock(zig.wasm.exports.memory.buffer); + let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); delete values[id][memory.getString(name, len)]; }, zigGetIndex(id, index, ret_ptr) { let prop = values[id][index]; - zig.getProperty(prop, ret_ptr); + sysjs.getProperty(prop, ret_ptr); }, zigSetIndex(id, index, set_ptr) { - let memory = new MemoryBlock(zig.wasm.exports.memory.buffer); - values[id][index] = zig.readObject(memory.slice(set_ptr), memory); + let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); + values[id][index] = sysjs.readObject(memory.slice(set_ptr), memory); }, zigDeleteIndex(id, index) { @@ -257,7 +257,7 @@ const zig = { }, zigCopyBytes(id, bytes, expected_length) { - let memory = new MemoryBlock(zig.wasm.exports.memory.buffer); + let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); const array = values[id]; if (array.length != expected_length) { throw Error("copyBytes given array of length " + expected_length + " but destination has length " + array.length); @@ -283,52 +283,52 @@ const zig = { }, zigGetString(val_id, ptr) { - let memory = new MemoryBlock(zig.wasm.exports.memory.buffer); + let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); memory.setString(ptr, values[value_map[val_id]]); }, zigValueEqual(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); + let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); + const val_js = sysjs.readObject(memory.slice(val), memory); + const other_js = sysjs.readObject(memory.slice(other), memory); 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); + let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); + const val_js = sysjs.readObject(memory.slice(val), memory); + const other_js = sysjs.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 memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); let argv = []; for (let i = 0; i < args_len; i += 1) { - argv.push(zig.readObject(memory.slice(args + i * 16), memory)); + argv.push(sysjs.readObject(memory.slice(args + i * 16), memory)); } let result = func.apply(this_param, argv); let length = undefined; - const type = zig.getType(result); + const type = sysjs.getType(result); switch (type) { case 3: length = result.length; case 0: case 6: - result = zig.addValue(result); + result = sysjs.addValue(result); break; } if (length !== undefined) result.__proto__.length = length; - zig.writeObject(memory.slice(ret_ptr), result, type); + sysjs.writeObject(memory.slice(ret_ptr), result, type); }, zigFunctionCall(id, name, len, args, args_len, ret_ptr) { - let memory = new MemoryBlock(zig.wasm.exports.memory.buffer); - zig.functionCall( + let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); + sysjs.functionCall( values[id][memory.getString(name, len)], values[id], args, @@ -338,7 +338,7 @@ const zig = { }, zigFunctionInvoke(id, args, args_len, ret_ptr) { - zig.functionCall(values[id], undefined, args, args_len, ret_ptr); + sysjs.functionCall(values[id], undefined, args, args_len, ret_ptr); }, zigGetParamCount(id) { @@ -346,17 +346,17 @@ const zig = { }, zigConstructType(id, args, args_len) { - let memory = new MemoryBlock(zig.wasm.exports.memory.buffer); + let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); let argv = []; for (let i = 0; i < args_len; i += 1) { - argv.push(zig.readObject(memory.slice(args + i * 16), memory)); + argv.push(sysjs.readObject(memory.slice(args + i * 16), memory)); } - return zig.addValue(new values[id](...argv)); + return sysjs.addValue(new values[id](...argv)); }, wzLogWrite(str, len) { - let memory = new MemoryBlock(zig.wasm.exports.memory.buffer); + let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); log_buf += memory.getString(str, len); }, @@ -366,9 +366,9 @@ const zig = { }, wzPanic(str, len) { - let memory = new MemoryBlock(zig.wasm.exports.memory.buffer); + let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer); throw Error(memory.getString(str, len)); }, }; -export { zig }; +export { sysjs }; diff --git a/libs/sysjs/src/main.zig b/libs/sysjs/src/main.zig index 682550f6..86470e96 100644 --- a/libs/sysjs/src/main.zig +++ b/libs/sysjs/src/main.zig @@ -3,27 +3,27 @@ const Allocator = std.mem.Allocator; const builtin = @import("builtin"); const js = struct { - extern fn zigCreateMap() u32; - extern fn zigCreateArray() u32; - extern fn zigCreateString(str: [*]const u8, len: u32) u32; - extern fn zigCreateFunction(id: *const anyopaque, captures: [*]Value, len: u32) u32; - extern fn zigGetAttributeCount(id: u64) u32; - extern fn zigGetProperty(id: u64, name: [*]const u8, len: u32, ret_ptr: *anyopaque) void; - extern fn zigSetProperty(id: u64, name: [*]const u8, len: u32, set_ptr: *const anyopaque) void; - extern fn zigDeleteProperty(id: u64, name: [*]const u8, len: u32) void; - extern fn zigGetIndex(id: u64, index: u32, ret_ptr: *anyopaque) void; - extern fn zigSetIndex(id: u64, index: u32, set_ptr: *const anyopaque) void; - 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 zigCopyBytes(id: u64, bytes: [*]u8, expected_len: 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) u32; - extern fn zigCleanupObject(id: u64) void; + extern "sysjs" fn zigCreateMap() u32; + extern "sysjs" fn zigCreateArray() u32; + extern "sysjs" fn zigCreateString(str: [*]const u8, len: u32) u32; + extern "sysjs" fn zigCreateFunction(id: *const anyopaque, captures: [*]Value, len: u32) u32; + extern "sysjs" fn zigGetAttributeCount(id: u64) u32; + extern "sysjs" fn zigGetProperty(id: u64, name: [*]const u8, len: u32, ret_ptr: *anyopaque) void; + extern "sysjs" fn zigSetProperty(id: u64, name: [*]const u8, len: u32, set_ptr: *const anyopaque) void; + extern "sysjs" fn zigDeleteProperty(id: u64, name: [*]const u8, len: u32) void; + extern "sysjs" fn zigGetIndex(id: u64, index: u32, ret_ptr: *anyopaque) void; + extern "sysjs" fn zigSetIndex(id: u64, index: u32, set_ptr: *const anyopaque) void; + extern "sysjs" fn zigGetString(val_id: u64, ptr: [*]const u8) void; + extern "sysjs" fn zigGetStringLength(val_id: u64) u32; + extern "sysjs" fn zigValueEqual(val: *const anyopaque, other: *const anyopaque) bool; + extern "sysjs" fn zigValueInstanceOf(val: *const anyopaque, other: *const anyopaque) bool; + extern "sysjs" fn zigDeleteIndex(id: u64, index: u32) void; + extern "sysjs" fn zigCopyBytes(id: u64, bytes: [*]u8, expected_len: u32) void; + extern "sysjs" fn zigFunctionCall(id: u64, name: [*]const u8, len: u32, args: ?*const anyopaque, args_len: u32, ret_ptr: *anyopaque) void; + extern "sysjs" fn zigFunctionInvoke(id: u64, args: ?*const anyopaque, args_len: u32, ret_ptr: *anyopaque) void; + extern "sysjs" fn zigGetParamCount(id: u64) u32; + extern "sysjs" fn zigConstructType(id: u64, args: ?*const anyopaque, args_len: u32) u32; + extern "sysjs" fn zigCleanupObject(id: u64) void; }; pub const Value = extern struct { diff --git a/src/platform/wasm.zig b/src/platform/wasm.zig index 4d0d6bcb..703ac311 100644 --- a/src/platform/wasm.zig +++ b/src/platform/wasm.zig @@ -6,28 +6,28 @@ const enums = @import("../enums.zig"); const gpu = @import("gpu"); const js = struct { - extern fn machCanvasInit(selector_id: *u8) CanvasId; - extern fn machCanvasDeinit(canvas: CanvasId) void; - extern fn machCanvasSetTitle(canvas: CanvasId, title: [*]const u8, len: u32) void; - extern fn machCanvasSetSize(canvas: CanvasId, width: u32, height: u32) void; - extern fn machCanvasSetFullscreen(canvas: CanvasId, value: bool) void; - extern fn machCanvasGetWindowWidth(canvas: CanvasId) u32; - extern fn machCanvasGetWindowHeight(canvas: CanvasId) u32; - extern fn machCanvasGetFramebufferWidth(canvas: CanvasId) u32; - extern fn machCanvasGetFramebufferHeight(canvas: CanvasId) u32; - extern fn machSetMouseCursor(cursor_name: [*]const u8, len: u32) void; - extern fn machEmitCloseEvent() void; - extern fn machSetWaitEvent(timeout: f64) void; - extern fn machHasEvent() bool; - extern fn machEventShift() i32; - extern fn machEventShiftFloat() f64; - extern fn machChangeShift() u32; - extern fn machPerfNow() f64; + extern "mach" fn machCanvasInit(selector_id: *u8) CanvasId; + extern "mach" fn machCanvasDeinit(canvas: CanvasId) void; + extern "mach" fn machCanvasSetTitle(canvas: CanvasId, title: [*]const u8, len: u32) void; + extern "mach" fn machCanvasSetSize(canvas: CanvasId, width: u32, height: u32) void; + extern "mach" fn machCanvasSetFullscreen(canvas: CanvasId, value: bool) void; + extern "mach" fn machCanvasGetWindowWidth(canvas: CanvasId) u32; + extern "mach" fn machCanvasGetWindowHeight(canvas: CanvasId) u32; + extern "mach" fn machCanvasGetFramebufferWidth(canvas: CanvasId) u32; + extern "mach" fn machCanvasGetFramebufferHeight(canvas: CanvasId) u32; + extern "mach" fn machSetMouseCursor(cursor_name: [*]const u8, len: u32) void; + extern "mach" fn machEmitCloseEvent() void; + extern "mach" fn machSetWaitEvent(timeout: f64) void; + extern "mach" fn machHasEvent() bool; + extern "mach" fn machEventShift() i32; + extern "mach" fn machEventShiftFloat() f64; + extern "mach" fn machChangeShift() u32; + extern "mach" fn machPerfNow() f64; - extern fn machLog(str: [*]const u8, len: u32) void; - extern fn machLogWrite(str: [*]const u8, len: u32) void; - extern fn machLogFlush() void; - extern fn machPanic(str: [*]const u8, len: u32) void; + extern "mach" fn machLog(str: [*]const u8, len: u32) void; + extern "mach" fn machLogWrite(str: [*]const u8, len: u32) void; + extern "mach" fn machLogFlush() void; + extern "mach" fn machPanic(str: [*]const u8, len: u32) void; }; const common = @import("common.zig"); diff --git a/tools/html-generator/template.html b/tools/html-generator/template.html index c6250066..4d3a0b86 100644 --- a/tools/html-generator/template.html +++ b/tools/html-generator/template.html @@ -9,13 +9,14 @@