diff options
-rw-r--r-- | src/root.zig | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/root.zig b/src/root.zig index 19d7bf5..57f99c0 100644 --- a/src/root.zig +++ b/src/root.zig @@ -109,12 +109,10 @@ fn getArg(T: type, argv: [*c]Value, n: i32) !T { }; } -fn raise(err: anyerror) Value { - const symb = janet.symbol("error", 5); - const fun = janet.resolveExt(root_env, symb).value; +fn raise(err: anyerror) noreturn { const name = @errorName(err); - var msg: [*]u8 = @ptrCast(janet.smalloc(name.len * 2)); - var n: u16 = 0; + var msg: [*:0]u8 = @ptrCast(janet.smalloc(name.len * 2)); + var n: usize = 0; for (name) |char| { switch (char) { 'A'...'Z' => if (n > 0) { @@ -126,9 +124,11 @@ fn raise(err: anyerror) Value { msg[n] = toLower(char); n += 1; } + msg[n] = 0; + n += 1; msg = @ptrCast(janet.srealloc(msg, n)); - var argv = [_]Value{ janet.wrapString(janet.string(msg, n)) }; - return janet.call(janet.unwrapFunction(fun), argv.len, &argv); + janet.panic(msg); + unreachable; } pub fn wrapFn(f: anytype) Allocator.Error!janet.CFunction { @@ -144,7 +144,7 @@ pub fn wrapFn(f: anytype) Allocator.Error!janet.CFunction { inline for (&args, info.params, 0..) |*arg, param, i| { const P = param.type.?; arg.* = getArg(P, argv, i) catch |err| - return raise(err); + raise(err); } const result = @call(.auto, f, args); return if (@typeInfo(@TypeOf(result)) != .error_union) |