{mach,sysjs}: put WASM imports into their own namespaces (#537)
This commit is contained in:
parent
eef76effe3
commit
47d1544b64
4 changed files with 87 additions and 86 deletions
|
|
@ -74,7 +74,7 @@ class MemoryBlock {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const zig = {
|
const sysjs = {
|
||||||
wasm: undefined,
|
wasm: undefined,
|
||||||
buffer: undefined,
|
buffer: undefined,
|
||||||
|
|
||||||
|
|
@ -100,24 +100,24 @@ const zig = {
|
||||||
},
|
},
|
||||||
|
|
||||||
zigCreateMap() {
|
zigCreateMap() {
|
||||||
return zig.addValue(new Map());
|
return sysjs.addValue(new Map());
|
||||||
},
|
},
|
||||||
|
|
||||||
zigCreateArray() {
|
zigCreateArray() {
|
||||||
return zig.addValue(new Array());
|
return sysjs.addValue(new Array());
|
||||||
},
|
},
|
||||||
|
|
||||||
zigCreateString(str, len) {
|
zigCreateString(str, len) {
|
||||||
let memory = new MemoryBlock(zig.wasm.exports.memory.buffer);
|
let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer);
|
||||||
return zig.addValue(memory.getString(str, len));
|
return sysjs.addValue(memory.getString(str, len));
|
||||||
},
|
},
|
||||||
|
|
||||||
zigCreateFunction(id, captures, len) {
|
zigCreateFunction(id, captures, len) {
|
||||||
return zig.addValue(function () {
|
return sysjs.addValue(function () {
|
||||||
const args = zig.addValue(arguments);
|
const args = sysjs.addValue(arguments);
|
||||||
zig.wasm.exports.wasmCallFunction(id, args, arguments.length, captures, len);
|
sysjs.wasm.exports.wasmCallFunction(id, args, arguments.length, captures, len);
|
||||||
const return_value = values[args]["return_value"];
|
const return_value = values[args]["return_value"];
|
||||||
zig.zigCleanupObject(args);
|
sysjs.zigCleanupObject(args);
|
||||||
return return_value;
|
return return_value;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
@ -208,7 +208,7 @@ const zig = {
|
||||||
if (prop in value_map) {
|
if (prop in value_map) {
|
||||||
prop = value_map[prop.__uindex];
|
prop = value_map[prop.__uindex];
|
||||||
} else {
|
} else {
|
||||||
prop = zig.addValue(prop);
|
prop = sysjs.addValue(prop);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -216,40 +216,40 @@ const zig = {
|
||||||
if (len !== undefined) prop.__proto__.length = len;
|
if (len !== undefined) prop.__proto__.length = len;
|
||||||
|
|
||||||
let memory = new MemoryBlock(ret_ptr, offset);
|
let memory = new MemoryBlock(ret_ptr, offset);
|
||||||
zig.writeObject(memory, prop, type);
|
sysjs.writeObject(memory, prop, type);
|
||||||
},
|
},
|
||||||
|
|
||||||
getProperty(prop, ret_ptr) {
|
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) {
|
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)];
|
let prop = values[id][memory.getString(name, len)];
|
||||||
zig.getProperty(prop, ret_ptr);
|
sysjs.getProperty(prop, ret_ptr);
|
||||||
},
|
},
|
||||||
|
|
||||||
zigSetProperty(id, name, len, set_ptr) {
|
zigSetProperty(id, name, len, set_ptr) {
|
||||||
let memory = new MemoryBlock(zig.wasm.exports.memory.buffer);
|
let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer);
|
||||||
values[id][memory.getString(name, len)] = zig.readObject(
|
values[id][memory.getString(name, len)] = sysjs.readObject(
|
||||||
memory.slice(set_ptr),
|
memory.slice(set_ptr),
|
||||||
memory
|
memory
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
zigDeleteProperty(id, name, len) {
|
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)];
|
delete values[id][memory.getString(name, len)];
|
||||||
},
|
},
|
||||||
|
|
||||||
zigGetIndex(id, index, ret_ptr) {
|
zigGetIndex(id, index, ret_ptr) {
|
||||||
let prop = values[id][index];
|
let prop = values[id][index];
|
||||||
zig.getProperty(prop, ret_ptr);
|
sysjs.getProperty(prop, ret_ptr);
|
||||||
},
|
},
|
||||||
|
|
||||||
zigSetIndex(id, index, set_ptr) {
|
zigSetIndex(id, index, set_ptr) {
|
||||||
let memory = new MemoryBlock(zig.wasm.exports.memory.buffer);
|
let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer);
|
||||||
values[id][index] = zig.readObject(memory.slice(set_ptr), memory);
|
values[id][index] = sysjs.readObject(memory.slice(set_ptr), memory);
|
||||||
},
|
},
|
||||||
|
|
||||||
zigDeleteIndex(id, index) {
|
zigDeleteIndex(id, index) {
|
||||||
|
|
@ -257,7 +257,7 @@ const zig = {
|
||||||
},
|
},
|
||||||
|
|
||||||
zigCopyBytes(id, bytes, expected_length) {
|
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];
|
const array = values[id];
|
||||||
if (array.length != expected_length) {
|
if (array.length != expected_length) {
|
||||||
throw Error("copyBytes given array of length " + expected_length + " but destination has length " + array.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) {
|
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]]);
|
memory.setString(ptr, values[value_map[val_id]]);
|
||||||
},
|
},
|
||||||
|
|
||||||
zigValueEqual(val, other) {
|
zigValueEqual(val, other) {
|
||||||
let memory = new MemoryBlock(zig.wasm.exports.memory.buffer);
|
let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer);
|
||||||
const val_js = zig.readObject(memory.slice(val), memory);
|
const val_js = sysjs.readObject(memory.slice(val), memory);
|
||||||
const other_js = zig.readObject(memory.slice(other), memory);
|
const other_js = sysjs.readObject(memory.slice(other), memory);
|
||||||
return val_js === other_js;
|
return val_js === other_js;
|
||||||
},
|
},
|
||||||
|
|
||||||
zigValueInstanceOf(val, other) {
|
zigValueInstanceOf(val, other) {
|
||||||
let memory = new MemoryBlock(zig.wasm.exports.memory.buffer);
|
let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer);
|
||||||
const val_js = zig.readObject(memory.slice(val), memory);
|
const val_js = sysjs.readObject(memory.slice(val), memory);
|
||||||
const other_js = zig.readObject(memory.slice(other), memory);
|
const other_js = sysjs.readObject(memory.slice(other), memory);
|
||||||
return val_js instanceof other_js;
|
return val_js instanceof other_js;
|
||||||
},
|
},
|
||||||
|
|
||||||
functionCall(func, this_param, 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(sysjs.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(sysjs.readObject(memory.slice(args + i * 16), memory));
|
||||||
}
|
}
|
||||||
|
|
||||||
let result = func.apply(this_param, argv);
|
let result = func.apply(this_param, argv);
|
||||||
|
|
||||||
let length = undefined;
|
let length = undefined;
|
||||||
const type = zig.getType(result);
|
const type = sysjs.getType(result);
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 3:
|
case 3:
|
||||||
length = result.length;
|
length = result.length;
|
||||||
case 0:
|
case 0:
|
||||||
case 6:
|
case 6:
|
||||||
result = zig.addValue(result);
|
result = sysjs.addValue(result);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (length !== undefined) result.__proto__.length = length;
|
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) {
|
zigFunctionCall(id, name, len, args, args_len, ret_ptr) {
|
||||||
let memory = new MemoryBlock(zig.wasm.exports.memory.buffer);
|
let memory = new MemoryBlock(sysjs.wasm.exports.memory.buffer);
|
||||||
zig.functionCall(
|
sysjs.functionCall(
|
||||||
values[id][memory.getString(name, len)],
|
values[id][memory.getString(name, len)],
|
||||||
values[id],
|
values[id],
|
||||||
args,
|
args,
|
||||||
|
|
@ -338,7 +338,7 @@ const zig = {
|
||||||
},
|
},
|
||||||
|
|
||||||
zigFunctionInvoke(id, args, args_len, ret_ptr) {
|
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) {
|
zigGetParamCount(id) {
|
||||||
|
|
@ -346,17 +346,17 @@ const zig = {
|
||||||
},
|
},
|
||||||
|
|
||||||
zigConstructType(id, args, args_len) {
|
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 = [];
|
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(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) {
|
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);
|
log_buf += memory.getString(str, len);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -366,9 +366,9 @@ const zig = {
|
||||||
},
|
},
|
||||||
|
|
||||||
wzPanic(str, len) {
|
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));
|
throw Error(memory.getString(str, len));
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export { zig };
|
export { sysjs };
|
||||||
|
|
|
||||||
|
|
@ -3,27 +3,27 @@ const Allocator = std.mem.Allocator;
|
||||||
const builtin = @import("builtin");
|
const builtin = @import("builtin");
|
||||||
|
|
||||||
const js = struct {
|
const js = struct {
|
||||||
extern fn zigCreateMap() u32;
|
extern "sysjs" fn zigCreateMap() u32;
|
||||||
extern fn zigCreateArray() u32;
|
extern "sysjs" fn zigCreateArray() u32;
|
||||||
extern fn zigCreateString(str: [*]const u8, len: u32) u32;
|
extern "sysjs" fn zigCreateString(str: [*]const u8, len: u32) u32;
|
||||||
extern fn zigCreateFunction(id: *const anyopaque, captures: [*]Value, len: u32) u32;
|
extern "sysjs" fn zigCreateFunction(id: *const anyopaque, captures: [*]Value, len: u32) u32;
|
||||||
extern fn zigGetAttributeCount(id: u64) u32;
|
extern "sysjs" fn zigGetAttributeCount(id: u64) u32;
|
||||||
extern fn zigGetProperty(id: u64, name: [*]const u8, len: u32, ret_ptr: *anyopaque) void;
|
extern "sysjs" 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 "sysjs" 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 "sysjs" fn zigDeleteProperty(id: u64, name: [*]const u8, len: u32) void;
|
||||||
extern fn zigGetIndex(id: u64, index: u32, ret_ptr: *anyopaque) void;
|
extern "sysjs" fn zigGetIndex(id: u64, index: u32, ret_ptr: *anyopaque) void;
|
||||||
extern fn zigSetIndex(id: u64, index: u32, set_ptr: *const anyopaque) void;
|
extern "sysjs" fn zigSetIndex(id: u64, index: u32, set_ptr: *const anyopaque) void;
|
||||||
extern fn zigGetString(val_id: u64, ptr: [*]const u8) void;
|
extern "sysjs" fn zigGetString(val_id: u64, ptr: [*]const u8) void;
|
||||||
extern fn zigGetStringLength(val_id: u64) u32;
|
extern "sysjs" fn zigGetStringLength(val_id: u64) u32;
|
||||||
extern fn zigValueEqual(val: *const anyopaque, other: *const anyopaque) bool;
|
extern "sysjs" fn zigValueEqual(val: *const anyopaque, other: *const anyopaque) bool;
|
||||||
extern fn zigValueInstanceOf(val: *const anyopaque, other: *const anyopaque) bool;
|
extern "sysjs" fn zigValueInstanceOf(val: *const anyopaque, other: *const anyopaque) bool;
|
||||||
extern fn zigDeleteIndex(id: u64, index: u32) void;
|
extern "sysjs" fn zigDeleteIndex(id: u64, index: u32) void;
|
||||||
extern fn zigCopyBytes(id: u64, bytes: [*]u8, expected_len: u32) void;
|
extern "sysjs" 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 "sysjs" 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 "sysjs" fn zigFunctionInvoke(id: u64, args: ?*const anyopaque, args_len: u32, ret_ptr: *anyopaque) void;
|
||||||
extern fn zigGetParamCount(id: u64) u32;
|
extern "sysjs" fn zigGetParamCount(id: u64) u32;
|
||||||
extern fn zigConstructType(id: u64, args: ?*const anyopaque, args_len: u32) u32;
|
extern "sysjs" fn zigConstructType(id: u64, args: ?*const anyopaque, args_len: u32) u32;
|
||||||
extern fn zigCleanupObject(id: u64) void;
|
extern "sysjs" fn zigCleanupObject(id: u64) void;
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const Value = extern struct {
|
pub const Value = extern struct {
|
||||||
|
|
|
||||||
|
|
@ -6,28 +6,28 @@ const enums = @import("../enums.zig");
|
||||||
const gpu = @import("gpu");
|
const gpu = @import("gpu");
|
||||||
|
|
||||||
const js = struct {
|
const js = struct {
|
||||||
extern fn machCanvasInit(selector_id: *u8) CanvasId;
|
extern "mach" fn machCanvasInit(selector_id: *u8) CanvasId;
|
||||||
extern fn machCanvasDeinit(canvas: CanvasId) void;
|
extern "mach" fn machCanvasDeinit(canvas: CanvasId) void;
|
||||||
extern fn machCanvasSetTitle(canvas: CanvasId, title: [*]const u8, len: u32) void;
|
extern "mach" fn machCanvasSetTitle(canvas: CanvasId, title: [*]const u8, len: u32) void;
|
||||||
extern fn machCanvasSetSize(canvas: CanvasId, width: u32, height: u32) void;
|
extern "mach" fn machCanvasSetSize(canvas: CanvasId, width: u32, height: u32) void;
|
||||||
extern fn machCanvasSetFullscreen(canvas: CanvasId, value: bool) void;
|
extern "mach" fn machCanvasSetFullscreen(canvas: CanvasId, value: bool) void;
|
||||||
extern fn machCanvasGetWindowWidth(canvas: CanvasId) u32;
|
extern "mach" fn machCanvasGetWindowWidth(canvas: CanvasId) u32;
|
||||||
extern fn machCanvasGetWindowHeight(canvas: CanvasId) u32;
|
extern "mach" fn machCanvasGetWindowHeight(canvas: CanvasId) u32;
|
||||||
extern fn machCanvasGetFramebufferWidth(canvas: CanvasId) u32;
|
extern "mach" fn machCanvasGetFramebufferWidth(canvas: CanvasId) u32;
|
||||||
extern fn machCanvasGetFramebufferHeight(canvas: CanvasId) u32;
|
extern "mach" fn machCanvasGetFramebufferHeight(canvas: CanvasId) u32;
|
||||||
extern fn machSetMouseCursor(cursor_name: [*]const u8, len: u32) void;
|
extern "mach" fn machSetMouseCursor(cursor_name: [*]const u8, len: u32) void;
|
||||||
extern fn machEmitCloseEvent() void;
|
extern "mach" fn machEmitCloseEvent() void;
|
||||||
extern fn machSetWaitEvent(timeout: f64) void;
|
extern "mach" fn machSetWaitEvent(timeout: f64) void;
|
||||||
extern fn machHasEvent() bool;
|
extern "mach" fn machHasEvent() bool;
|
||||||
extern fn machEventShift() i32;
|
extern "mach" fn machEventShift() i32;
|
||||||
extern fn machEventShiftFloat() f64;
|
extern "mach" fn machEventShiftFloat() f64;
|
||||||
extern fn machChangeShift() u32;
|
extern "mach" fn machChangeShift() u32;
|
||||||
extern fn machPerfNow() f64;
|
extern "mach" fn machPerfNow() f64;
|
||||||
|
|
||||||
extern fn machLog(str: [*]const u8, len: u32) void;
|
extern "mach" fn machLog(str: [*]const u8, len: u32) void;
|
||||||
extern fn machLogWrite(str: [*]const u8, len: u32) void;
|
extern "mach" fn machLogWrite(str: [*]const u8, len: u32) void;
|
||||||
extern fn machLogFlush() void;
|
extern "mach" fn machLogFlush() void;
|
||||||
extern fn machPanic(str: [*]const u8, len: u32) void;
|
extern "mach" fn machPanic(str: [*]const u8, len: u32) void;
|
||||||
};
|
};
|
||||||
|
|
||||||
const common = @import("common.zig");
|
const common = @import("common.zig");
|
||||||
|
|
|
||||||
|
|
@ -9,13 +9,14 @@
|
||||||
<body>
|
<body>
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import { mach } from "./mach.js";
|
import { mach } from "./mach.js";
|
||||||
import { zig } from "./mach-sysjs.js";
|
import { sysjs } from "./mach-sysjs.js";
|
||||||
import setupWasmserve from "./wasmserve.js";
|
import setupWasmserve from "./wasmserve.js";
|
||||||
|
|
||||||
setupWasmserve();
|
setupWasmserve();
|
||||||
|
|
||||||
let imports = {
|
let imports = {
|
||||||
env: { ...mach, ...zig },
|
mach,
|
||||||
|
sysjs,
|
||||||
};
|
};
|
||||||
|
|
||||||
fetch("{ app_name }.wasm")
|
fetch("{ app_name }.wasm")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue