make our quirks assert use std.debug.assert in debug builds

This fixes an issue I have on both macOS and Linux (ARM and x86_64)
where stack traces are broken for inlined functions. They don't point to
the proper location in the source code, making debugging difficult.

Release builds use the same previous function.
This commit is contained in:
Mitchell Hashimoto
2025-12-07 14:14:03 -08:00
parent 08c9661683
commit 9d4f96381a

View File

@@ -7,6 +7,7 @@
//! [1]: https://github.com/WebKit/WebKit/blob/main/Source/WebCore/page/Quirks.cpp
const std = @import("std");
const builtin = @import("builtin");
const font = @import("font/main.zig");
@@ -41,6 +42,16 @@ pub fn disableDefaultFontFeatures(face: *const font.Face) bool {
/// is negligible, but we have some asserts inside tight loops and hotpaths
/// that cause significant overhead (as much as 15-20%) when they don't get
/// optimized out.
pub inline fn inlineAssert(ok: bool) void {
if (!ok) unreachable;
}
pub const inlineAssert: fn (bool) void = switch (builtin.mode) {
// In debug builds we just use std.debug.assert because this
// fixes up stack traces. `inline` causes broken stack traces. This
// is probably a Zig compiler bug but until it is fixed we have to
// do this for development sanity.
.Debug => std.debug.assert,
.ReleaseSmall, .ReleaseSafe, .ReleaseFast => (struct {
inline fn assert(ok: bool) void {
if (!ok) unreachable;
}
}).assert,
};