diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bun.js/bindings/exports.zig | 6 | ||||
-rw-r--r-- | src/bun.js/bindings/header-gen.zig | 9 | ||||
-rw-r--r-- | src/bun.js/bindings/headers-cpp.h | 2 | ||||
-rw-r--r-- | src/bun.js/bindings/headers.h | 2 | ||||
-rw-r--r-- | src/bun.js/event_loop.zig | 7 | ||||
-rw-r--r-- | src/deps/backtrace.zig | 41 | ||||
-rw-r--r-- | src/main.zig | 2 | ||||
-rw-r--r-- | src/meta.zig | 14 | ||||
-rw-r--r-- | src/tagged_pointer.zig | 19 |
9 files changed, 56 insertions, 46 deletions
diff --git a/src/bun.js/bindings/exports.zig b/src/bun.js/bindings/exports.zig index aff961154..98b384ec3 100644 --- a/src/bun.js/bindings/exports.zig +++ b/src/bun.js/bindings/exports.zig @@ -29,6 +29,8 @@ const JSPrivateDataPtr = @import("../base.zig").JSPrivateDataPtr; const Backtrace = @import("../../deps/backtrace.zig"); const JSPrinter = @import("../../js_printer.zig"); const JSLexer = @import("../../js_lexer.zig"); +const typeBaseName = @import("../../meta.zig").typeBaseName; + pub const ZigGlobalObject = extern struct { pub const shim = Shimmer("Zig", "GlobalObject", @This()); bytes: shim.Bytes, @@ -40,7 +42,7 @@ pub const ZigGlobalObject = extern struct { pub fn create(class_ref: [*]CAPI.JSClassRef, count: i32, console: *anyopaque) *JSGlobalObject { var global = shim.cppFn("create", .{ class_ref, count, console }); - Backtrace.reloadHandlers(); + Backtrace.reloadHandlers() catch unreachable; return global; } @@ -194,7 +196,7 @@ pub fn Errorable(comptime Type: type) type { return extern struct { result: Result, success: bool, - pub const name = "Errorable" ++ @typeName(Type); + pub const name = "Errorable" ++ typeBaseName(@typeName(Type)); pub const Result = extern union { value: Type, diff --git a/src/bun.js/bindings/header-gen.zig b/src/bun.js/bindings/header-gen.zig index c11241233..ab93fad47 100644 --- a/src/bun.js/bindings/header-gen.zig +++ b/src/bun.js/bindings/header-gen.zig @@ -7,6 +7,7 @@ const EnumMeta = std.builtin.TypeInfo.Enum; const UnionMeta = std.builtin.TypeInfo.Union; const warn = std.debug.warn; const StaticExport = @import("./static_export.zig"); +const typeBaseName = @import("../../meta.zig").typeBaseName; const TypeNameMap = std.StringHashMap([]const u8); @@ -156,7 +157,7 @@ pub const C_Generator = struct { switch (@typeInfo(ArgType)) { .Enum => { - self.write(comptime std.fmt.comptimePrint(" {s}{d}", .{ @typeName(ArgType), i })); + self.write(comptime std.fmt.comptimePrint(" {s}{d}", .{ typeBaseName(@typeName(ArgType)), i })); }, else => { @@ -202,7 +203,7 @@ pub const C_Generator = struct { // } else { const ArgType = arg.arg_type.?; if (@typeInfo(ArgType) == .Enum) { - self.write(comptime std.fmt.comptimePrint(" {s}{d}", .{ @typeName(ArgType), i })); + self.write(comptime std.fmt.comptimePrint(" {s}{d}", .{ typeBaseName(@typeName(ArgType)), i })); } else { self.write(comptime std.fmt.comptimePrint(" arg{d}", .{i})); } @@ -419,7 +420,7 @@ pub const C_Generator = struct { self.writeType(Enum.tag_type); }, else => { - return self.write(@typeName(T)); + return self.write(comptime typeBaseName(@typeName(T))); }, } } @@ -472,7 +473,7 @@ pub fn getCStruct(comptime T: type) ?NamedStruct { if (std.mem.eql(u8, decl.name, "Type")) { switch (decl.data) { .Type => { - return NamedStruct{ .Type = T, .name = @typeName(T) }; + return NamedStruct{ .Type = T, .name = comptime typeBaseName(@typeName(T)) }; }, else => {}, } diff --git a/src/bun.js/bindings/headers-cpp.h b/src/bun.js/bindings/headers-cpp.h index b7bb32042..a299530c3 100644 --- a/src/bun.js/bindings/headers-cpp.h +++ b/src/bun.js/bindings/headers-cpp.h @@ -1,4 +1,4 @@ -//-- AUTOGENERATED FILE -- 1656747036 +//-- AUTOGENERATED FILE -- 1657353886 // clang-format off #pragma once diff --git a/src/bun.js/bindings/headers.h b/src/bun.js/bindings/headers.h index 1877339b1..091a75896 100644 --- a/src/bun.js/bindings/headers.h +++ b/src/bun.js/bindings/headers.h @@ -1,5 +1,5 @@ // clang-format off -//-- AUTOGENERATED FILE -- 1656747036 +//-- AUTOGENERATED FILE -- 1657353886 #pragma once #include <stddef.h> diff --git a/src/bun.js/event_loop.zig b/src/bun.js/event_loop.zig index df6af2748..f5ed49eb7 100644 --- a/src/bun.js/event_loop.zig +++ b/src/bun.js/event_loop.zig @@ -10,6 +10,7 @@ const Fetch = JSC.WebCore.Fetch; const WebCore = JSC.WebCore; const Bun = JSC.API.Bun; const TaggedPointerUnion = @import("../tagged_pointer.zig").TaggedPointerUnion; +const typeBaseName = @import("../meta.zig").typeBaseName; const CopyFilePromiseTask = WebCore.Blob.Store.CopyFile.CopyFilePromiseTask; const AsyncTransformTask = @import("./api/transpiler.zig").TransformTask.AsyncTransformTask; const BunTimerTimeoutTask = Bun.Timer.Timeout.TimeoutTask; @@ -335,7 +336,7 @@ pub const EventLoop = struct { finished += 1; vm_.active_tasks -|= 1; }, - @field(Task.Tag, @typeName(JSC.napi.napi_async_work)) => { + @field(Task.Tag, typeBaseName(@typeName(JSC.napi.napi_async_work))) => { var transform_task: *JSC.napi.napi_async_work = task.get(JSC.napi.napi_async_work).?; transform_task.*.runFromJS(); finished += 1; @@ -361,13 +362,13 @@ pub const EventLoop = struct { finished += 1; vm_.active_tasks -|= 1; }, - @field(Task.Tag, @typeName(AnyTask)) => { + @field(Task.Tag, typeBaseName(@typeName(AnyTask))) => { var any: *AnyTask = task.get(AnyTask).?; any.run(); finished += 1; vm_.active_tasks -|= 1; }, - @field(Task.Tag, @typeName(CppTask)) => { + @field(Task.Tag, typeBaseName(@typeName(CppTask))) => { var any: *CppTask = task.get(CppTask).?; any.run(global); finished += 1; diff --git a/src/deps/backtrace.zig b/src/deps/backtrace.zig index 3a5bc7a49..47293d1cf 100644 --- a/src/deps/backtrace.zig +++ b/src/deps/backtrace.zig @@ -94,17 +94,21 @@ pub inline fn print() void { _ = backtrace_full(state, 2, full_callback, null, null); } +fn setup_sigactions(act: ?*const os.Sigaction) !void { + try os.sigaction(os.SIG.ABRT, act, null); + try os.sigaction(os.SIG.BUS, act, null); + try os.sigaction(os.SIG.FPE, act, null); + try os.sigaction(os.SIG.ILL, act, null); + try os.sigaction(os.SIG.SEGV, act, null); + try os.sigaction(os.SIG.TRAP, act, null); +} + const builtin = @import("builtin"); const ErrorCallback = fn (sig: i32, addr: usize) void; var on_error: ?ErrorCallback = null; noinline fn sigaction_handler(sig: i32, info: *const std.os.siginfo_t, _: ?*const anyopaque) callconv(.C) void { // Prevent recursive calls - os.sigaction(os.SIG.ABRT, null, null); - os.sigaction(os.SIG.BUS, null, null); - os.sigaction(os.SIG.FPE, null, null); - os.sigaction(os.SIG.ILL, null, null); - os.sigaction(os.SIG.SEGV, null, null); - os.sigaction(os.SIG.TRAP, null, null); + setup_sigactions(null) catch unreachable; const addr = switch (comptime builtin.target.os.tag) { .linux => @ptrToInt(info.fields.sigfault.addr), @@ -117,13 +121,8 @@ noinline fn sigaction_handler(sig: i32, info: *const std.os.siginfo_t, _: ?*cons if (on_error) |handle| handle(sig, addr); } -pub fn reloadHandlers() void { - os.sigaction(os.SIG.ABRT, null, null); - os.sigaction(os.SIG.BUS, null, null); - os.sigaction(os.SIG.FPE, null, null); - os.sigaction(os.SIG.ILL, null, null); - os.sigaction(os.SIG.SEGV, null, null); - os.sigaction(os.SIG.TRAP, null, null); +pub fn reloadHandlers() !void { + try setup_sigactions(null); var act = os.Sigaction{ .handler = .{ .sigaction = sigaction_handler }, @@ -131,15 +130,10 @@ pub fn reloadHandlers() void { .flags = (os.SA.SIGINFO | os.SA.RESTART | os.SA.RESETHAND), }; - os.sigaction(os.SIG.ABRT, &act, null); - os.sigaction(os.SIG.BUS, &act, null); - os.sigaction(os.SIG.FPE, &act, null); - os.sigaction(os.SIG.ILL, &act, null); - os.sigaction(os.SIG.SEGV, &act, null); - os.sigaction(os.SIG.TRAP, &act, null); + try setup_sigactions(&act); } const os = std.os; -pub fn start(ctx: ?*anyopaque, callback_: PrintCallback, onError: ErrorCallback) void { +pub fn start(ctx: ?*anyopaque, callback_: PrintCallback, onError: ErrorCallback) !void { callback_ctx = ctx; callback = callback_; on_error = onError; @@ -150,10 +144,5 @@ pub fn start(ctx: ?*anyopaque, callback_: PrintCallback, onError: ErrorCallback) .flags = (os.SA.SIGINFO | os.SA.RESTART | os.SA.RESETHAND), }; - os.sigaction(os.SIG.ABRT, &act, null); - os.sigaction(os.SIG.BUS, &act, null); - os.sigaction(os.SIG.FPE, &act, null); - os.sigaction(os.SIG.ILL, &act, null); - os.sigaction(os.SIG.SEGV, &act, null); - os.sigaction(os.SIG.TRAP, &act, null); + try setup_sigactions(&act); } diff --git a/src/main.zig b/src/main.zig index fdd93e4a7..c40d9f71a 100644 --- a/src/main.zig +++ b/src/main.zig @@ -39,7 +39,7 @@ pub fn PLCrashReportHandler() void { pub var start_time: i128 = 0; pub fn main() void { if (comptime Environment.isRelease) - CrashReporter.start(null, Report.CrashReportWriter.printFrame, Report.handleCrash); + CrashReporter.start(null, Report.CrashReportWriter.printFrame, Report.handleCrash) catch unreachable; start_time = std.time.nanoTimestamp(); diff --git a/src/meta.zig b/src/meta.zig index afc502d58..c104e378d 100644 --- a/src/meta.zig +++ b/src/meta.zig @@ -10,3 +10,17 @@ pub fn ReturnOfType(comptime Type: type) type { const typeinfo: std.builtin.TypeInfo.Fn = @typeInfo(Type); return typeinfo.return_type orelse void; } + +// partially emulates behaviour of @typeName in previous Zig versions, +// converting "some.namespace.MyType" to "MyType" +pub fn typeBaseName(comptime fullname: []const u8) []const u8 { + + // leave type name like "namespace.WrapperType(namespace.MyType)" as it is + const baseidx = comptime std.mem.indexOf(u8, fullname, "("); + if (baseidx != null) return fullname; + + const idx = comptime std.mem.lastIndexOf(u8, fullname, "."); + + const name = if (idx == null) fullname else fullname[(idx.? + 1)..]; + return comptime std.fmt.comptimePrint("{s}", .{name}); +} diff --git a/src/tagged_pointer.zig b/src/tagged_pointer.zig index 0b51dc36c..9e6fe1646 100644 --- a/src/tagged_pointer.zig +++ b/src/tagged_pointer.zig @@ -9,6 +9,7 @@ const MutableString = bun.MutableString; const stringZ = bun.stringZ; const default_allocator = bun.default_allocator; const C = bun.C; +const typeBaseName = @import("./meta.zig").typeBaseName; const TagSize = u15; const AddressableSize = u49; @@ -58,7 +59,7 @@ pub fn TaggedPointerUnion(comptime Types: anytype) type { inline for (Types) |field, i| { enumFields[i] = .{ - .name = @typeName(field), + .name = comptime typeBaseName(@typeName(field)), .value = 1024 - i, }; } @@ -79,7 +80,7 @@ pub fn TaggedPointerUnion(comptime Types: anytype) type { inline for (Fields) |field, i| { enumFields[i] = .{ - .name = @typeName(field.default_value.?), + .name = comptime typeBaseName(@typeName(field.default_value.?)), .value = 1024 - i, }; } @@ -102,8 +103,9 @@ pub fn TaggedPointerUnion(comptime Types: anytype) type { const This = @This(); fn assert_type(comptime Type: type) void { - if (!comptime @hasField(Tag, @typeName(Type))) { - @compileError("TaggedPointerUnion does not have " ++ @typeName(Type) ++ "."); + var name = comptime typeBaseName(@typeName(Type)); + if (!comptime @hasField(Tag, name)) { + @compileError("TaggedPointerUnion does not have " ++ name ++ "."); } } pub inline fn get(this: This, comptime Type: anytype) ?*Type { @@ -124,7 +126,7 @@ pub fn TaggedPointerUnion(comptime Types: anytype) type { pub inline fn is(this: This, comptime Type: type) bool { comptime assert_type(Type); - return this.repr.data == comptime @enumToInt(@field(Tag, @typeName(Type))); + return this.repr.data == comptime @enumToInt(@field(Tag, typeBaseName(@typeName(Type)))); } pub inline fn isValidPtr(_ptr: ?*anyopaque) bool { @@ -134,9 +136,9 @@ pub fn TaggedPointerUnion(comptime Types: anytype) type { pub inline fn isValid(this: This) bool { return switch (this.repr.data) { @enumToInt( - @field(Tag, @typeName(Types[Types.len - 1])), + @field(Tag, typeBaseName(@typeName(Types[Types.len - 1]))), )...@enumToInt( - @field(Tag, @typeName(Types[0])), + @field(Tag, typeBaseName(@typeName(Types[0]))), ) => true, else => false, }; @@ -152,9 +154,10 @@ pub fn TaggedPointerUnion(comptime Types: anytype) type { pub inline fn init(_ptr: anytype) This { const Type = std.meta.Child(@TypeOf(_ptr)); + const name = comptime typeBaseName(@typeName(Type)); // there will be a compiler error if the passed in type doesn't exist in the enum - return This{ .repr = TaggedPointer.init(_ptr, @enumToInt(@field(Tag, @typeName(Type)))) }; + return This{ .repr = TaggedPointer.init(_ptr, @enumToInt(@field(Tag, name))) }; } }; } |