remove panics from release builds

This commit is contained in:
Techatrix 2023-01-20 15:26:00 +01:00
parent 3d95b203f2
commit a145dbb616

View File

@ -315,7 +315,7 @@ pub const Key = union(enum) {
else => unreachable, else => unreachable,
}, },
.int_type => |int_info| return int_info, .int_type => |int_info| return int_info,
.enum_type => @panic("TODO"), .enum_type => return panicOrElse("TODO", .{ .signedness = .unsigned, .bits = 0 }),
.struct_type => |struct_info| { .struct_type => |struct_info| {
assert(struct_info.layout == .Packed); assert(struct_info.layout == .Packed);
key = ip.indexToKey(struct_info.backing_int_ty); key = ip.indexToKey(struct_info.backing_int_ty);
@ -383,7 +383,7 @@ pub const Key = union(enum) {
pub fn elemType2(ty: Key) Index { pub fn elemType2(ty: Key) Index {
return switch (ty) { return switch (ty) {
.simple => |simple| switch (simple) { .simple => |simple| switch (simple) {
.@"anyframe" => @panic("TODO: return void type"), .@"anyframe" => panicOrElse("TODO: return void type", Index.none),
else => unreachable, else => unreachable,
}, },
.pointer_type => |pointer_info| pointer_info.elem_type, .pointer_type => |pointer_info| pointer_info.elem_type,
@ -469,7 +469,7 @@ pub const Key = union(enum) {
.pointer_type => return null, .pointer_type => return null,
.array_type => |array_info| { .array_type => |array_info| {
if (array_info.len == 0) { if (array_info.len == 0) {
@panic("TODO return empty array value"); return panicOrElse("TODO return empty array value", null);
} else if (ip.indexToKey(array_info.child).onePossibleValue(ip)) |value| { } else if (ip.indexToKey(array_info.child).onePossibleValue(ip)) |value| {
return value; return value;
} }
@ -481,7 +481,7 @@ pub const Key = union(enum) {
if (ip.indexToKey(field.ty).onePossibleValue(ip) != null) continue; if (ip.indexToKey(field.ty).onePossibleValue(ip) != null) continue;
return null; return null;
} }
@panic("TODO return empty struct value"); return panicOrElse("TODO return empty struct value", null);
}, },
.optional_type => |optional_info| { .optional_type => |optional_info| {
const child = ip.indexToKey(optional_info.payload_type); const child = ip.indexToKey(optional_info.payload_type);
@ -500,11 +500,11 @@ pub const Key = union(enum) {
} }
}, },
.function_type => return null, .function_type => return null,
.union_type => @panic("TODO"), .union_type => return panicOrElse("TODO", null),
.tuple_type => @panic("TODO"), .tuple_type => return panicOrElse("TODO", null),
.vector_type => |vector_info| { .vector_type => |vector_info| {
if (vector_info.len == 0) { if (vector_info.len == 0) {
@panic("TODO return empty array value"); return panicOrElse("TODO return empty array value", null);
} else if (ip.indexToKey(vector_info.child).onePossibleValue(ip)) |value| { } else if (ip.indexToKey(vector_info.child).onePossibleValue(ip)) |value| {
return value; return value;
} }
@ -660,7 +660,7 @@ pub const Key = union(enum) {
return array_info.child; return array_info.child;
}, },
.struct_type => @panic("TODO"), .struct_type => panicOrElse("TODO", null),
.optional_type => |optional_info| { .optional_type => |optional_info| {
try writer.writeByte('?'); try writer.writeByte('?');
return optional_info.payload_type; return optional_info.payload_type;
@ -679,7 +679,7 @@ pub const Key = union(enum) {
} }
try writer.writeByte('}'); try writer.writeByte('}');
}, },
.enum_type => @panic("TODO"), .enum_type => panicOrElse("TODO", null),
.function_type => |function_info| { .function_type => |function_info| {
try writer.writeAll("fn("); try writer.writeAll("fn(");
@ -715,7 +715,7 @@ pub const Key = union(enum) {
return function_info.return_type; return function_info.return_type;
}, },
.union_type => @panic("TODO"), .union_type => panicOrElse("TODO", null),
.tuple_type => |tuple_info| { .tuple_type => |tuple_info| {
try writer.writeAll("tuple{"); try writer.writeAll("tuple{");
for (tuple_info.types) |field_ty, i| { for (tuple_info.types) |field_ty, i| {
@ -2453,6 +2453,14 @@ fn optionalPtrTy(
} }
} }
/// will panic in debug mode or in tests else will return `value`
inline fn panicOrElse(message: []const u8, value: anytype) @TypeOf(value) {
if (builtin.is_test or builtin.mode == .Debug) {
@panic(message);
}
return null;
}
// --------------------------------------------- // ---------------------------------------------
// TESTS // TESTS
// --------------------------------------------- // ---------------------------------------------