aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bun.js/bindings/exports.zig6
-rw-r--r--src/bun.js/bindings/header-gen.zig9
-rw-r--r--src/bun.js/bindings/headers-cpp.h2
-rw-r--r--src/bun.js/bindings/headers.h2
-rw-r--r--src/bun.js/event_loop.zig7
-rw-r--r--src/deps/backtrace.zig41
-rw-r--r--src/main.zig2
-rw-r--r--src/meta.zig14
-rw-r--r--src/tagged_pointer.zig19
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))) };
}
};
}