aboutsummaryrefslogtreecommitdiff
path: root/lib/std/debug.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-09-25 16:20:19 -0700
committerAndrew Kelley <andrew@ziglang.org>2024-09-26 12:35:14 -0700
commitf2c8940aa6b1bd6ca20730e13b8148af002e1b91 (patch)
tree295c72daba87d055c3f6dd0a8ca8e33a54847741 /lib/std/debug.zig
parent76f0b6e7d8dfa527f8776a4ffe61400fd84d871a (diff)
downloadzig-f2c8940aa6b1bd6ca20730e13b8148af002e1b91.tar.gz
zig-f2c8940aa6b1bd6ca20730e13b8148af002e1b91.zip
reintroduce the std.builtin safety panic helpers
motivated by performance
Diffstat (limited to 'lib/std/debug.zig')
-rw-r--r--lib/std/debug.zig19
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/std/debug.zig b/lib/std/debug.zig
index d6312598d1..7bfc6b321e 100644
--- a/lib/std/debug.zig
+++ b/lib/std/debug.zig
@@ -453,7 +453,7 @@ threadlocal var panic_stage: usize = 0;
// This function avoids a dependency on formatted printing.
pub fn defaultPanic(
cause: std.builtin.PanicCause,
- trace: ?*const std.builtin.StackTrace,
+ error_return_trace: ?*const std.builtin.StackTrace,
first_trace_addr: ?usize,
) noreturn {
@branchHint(.cold);
@@ -568,7 +568,7 @@ pub fn defaultPanic(
defer unlockStdErr();
io.getStdErr().writeAll(msg) catch posix.abort();
- if (trace) |t| dumpStackTrace(t.*);
+ if (error_return_trace) |t| dumpStackTrace(t.*);
dumpCurrentStackTrace(first_trace_addr orelse @returnAddress());
}
@@ -621,6 +621,12 @@ pub fn fmtPanicCause(buffer: []u8, cause: std.builtin.PanicCause) usize {
i += fmtBuf(buffer[i..], ", found ");
i += fmtInt10(buffer[i..], mm.found);
},
+ .sentinel_mismatch_isize => |mm| {
+ i += fmtBuf(buffer[i..], "sentinel mismatch: expected ");
+ i += fmtInt10s(buffer[i..], mm.expected);
+ i += fmtBuf(buffer[i..], ", found ");
+ i += fmtInt10s(buffer[i..], mm.found);
+ },
.sentinel_mismatch_other => i += fmtBuf(buffer[i..], "sentinel mismatch"),
.unwrap_error => |err| {
i += fmtBuf(buffer[i..], "attempt to unwrap error: ");
@@ -653,6 +659,15 @@ fn fmtBuf(out_buf: []u8, s: []const u8) usize {
return s.len;
}
+fn fmtInt10s(out_buf: []u8, integer_value: isize) usize {
+ if (integer_value < 0) {
+ out_buf[0] = '-';
+ return 1 + fmtInt10(out_buf[1..], @abs(integer_value));
+ } else {
+ return fmtInt10(out_buf, @abs(integer_value));
+ }
+}
+
fn fmtInt10(out_buf: []u8, integer_value: usize) usize {
var tmp_buf: [50]u8 = undefined;
var i: usize = tmp_buf.len;