mach: wasm: implement logging and panic handler
This commit is contained in:
parent
c8c6dab65b
commit
f7301cc242
2 changed files with 46 additions and 0 deletions
13
src/mach.js
13
src/mach.js
|
|
@ -26,6 +26,19 @@ const mach = {
|
|||
}
|
||||
},
|
||||
|
||||
machLogWrite(str, len) {
|
||||
log_buf += mach.getString(str, len);
|
||||
},
|
||||
|
||||
machLogFlush() {
|
||||
console.log(log_buf);
|
||||
log_buf = "";
|
||||
},
|
||||
|
||||
machPanic(str, len) {
|
||||
throw Error(mach.getString(str, len));
|
||||
},
|
||||
|
||||
machCanvasInit(width, height, id) {
|
||||
let canvas = document.createElement("canvas");
|
||||
canvas.id = "#mach-canvas-" + mach.canvases.length;
|
||||
|
|
|
|||
33
src/wasm.zig
33
src/wasm.zig
|
|
@ -11,6 +11,11 @@ const js = struct {
|
|||
extern fn machCanvasSetSize(canvas: CanvasId, width: u32, height: u32) void;
|
||||
extern fn machCanvasGetWidth(canvas: CanvasId) u32;
|
||||
extern fn machCanvasGetHeight(canvas: CanvasId) u32;
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
pub const CanvasId = u32;
|
||||
|
|
@ -75,3 +80,31 @@ export fn wasmUpdate() bool {
|
|||
export fn wasmDeinit() void {
|
||||
app.deinit(&engine);
|
||||
}
|
||||
|
||||
pub const log_level = .info;
|
||||
|
||||
const LogError = error{};
|
||||
const LogWriter = std.io.Writer(void, LogError, writeLog);
|
||||
|
||||
fn writeLog(_: void, msg: []const u8) LogError!usize {
|
||||
js.machLogWrite(msg.ptr, msg.len);
|
||||
return msg.len;
|
||||
}
|
||||
|
||||
pub fn log(
|
||||
comptime message_level: std.log.Level,
|
||||
comptime scope: @Type(.EnumLiteral),
|
||||
comptime format: []const u8,
|
||||
args: anytype,
|
||||
) void {
|
||||
const prefix = if (scope == .default) ": " else "(" ++ @tagName(scope) ++ "): ";
|
||||
const writer = LogWriter{ .context = {} };
|
||||
|
||||
writer.print(message_level.asText() ++ prefix ++ format ++ "\n", args) catch return;
|
||||
js.machLogFlush();
|
||||
}
|
||||
|
||||
pub fn panic(msg: []const u8, _: ?*std.builtin.StackTrace) noreturn {
|
||||
js.machPanic(msg.ptr, msg.len);
|
||||
unreachable;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue