{mach,sysjs}: put WASM imports into their own namespaces (#537)

This commit is contained in:
LeRoyce Pearson 2022-09-16 17:56:22 -06:00 committed by GitHub
parent eef76effe3
commit 47d1544b64
Failed to generate hash of commit
4 changed files with 87 additions and 86 deletions

View file

@ -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 };

View file

@ -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 {

View file

@ -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");

View file

@ -9,13 +9,14 @@
<body>
<script type="module">
import { mach } from "./mach.js";
import { zig } from "./mach-sysjs.js";
import { sysjs } from "./mach-sysjs.js";
import setupWasmserve from "./wasmserve.js";
setupWasmserve();
let imports = {
env: { ...mach, ...zig },
mach,
sysjs,
};
fetch("{ app_name }.wasm")