mirror of
https://github.com/ziglang/zig.git
synced 2025-12-23 14:43:17 +00:00
std.array_hash_map: remove meta context verification
The zig way is to let the compiler provide errors, rather than trying to implement the compiler in the standard library. I played around with this and found the compile errors to be easier to comprehend without this logic.
This commit is contained in:
parent
1e46e36eac
commit
ebec7336e2
@ -529,10 +529,6 @@ pub fn ArrayHashMapUnmanaged(
|
|||||||
/// Used to detect memory safety violations.
|
/// Used to detect memory safety violations.
|
||||||
pointer_stability: std.debug.SafetyLock = .{},
|
pointer_stability: std.debug.SafetyLock = .{},
|
||||||
|
|
||||||
comptime {
|
|
||||||
std.hash_map.verifyContext(Context, K, K, u32, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Modifying the key is allowed only if it does not change the hash.
|
/// Modifying the key is allowed only if it does not change the hash.
|
||||||
/// Modifying the value is allowed.
|
/// Modifying the value is allowed.
|
||||||
/// Entry pointers become invalid whenever this ArrayHashMap is modified,
|
/// Entry pointers become invalid whenever this ArrayHashMap is modified,
|
||||||
@ -1847,27 +1843,16 @@ pub fn ArrayHashMapUnmanaged(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fn checkedHash(ctx: anytype, key: anytype) u32 {
|
fn checkedHash(ctx: anytype, key: anytype) u32 {
|
||||||
comptime std.hash_map.verifyContext(@TypeOf(ctx), @TypeOf(key), K, u32, true);
|
|
||||||
// If you get a compile error on the next line, it means that your
|
// If you get a compile error on the next line, it means that your
|
||||||
// generic hash function doesn't accept your key.
|
// generic hash function doesn't accept your key.
|
||||||
const hash = ctx.hash(key);
|
return ctx.hash(key);
|
||||||
if (@TypeOf(hash) != u32) {
|
|
||||||
@compileError("Context " ++ @typeName(@TypeOf(ctx)) ++ " has a generic hash function that returns the wrong type!\n" ++
|
|
||||||
@typeName(u32) ++ " was expected, but found " ++ @typeName(@TypeOf(hash)));
|
|
||||||
}
|
|
||||||
return hash;
|
|
||||||
}
|
}
|
||||||
inline fn checkedEql(ctx: anytype, a: anytype, b: K, b_index: usize) bool {
|
|
||||||
comptime std.hash_map.verifyContext(@TypeOf(ctx), @TypeOf(a), K, u32, true);
|
fn checkedEql(ctx: anytype, a: anytype, b: K, b_index: usize) bool {
|
||||||
// If you get a compile error on the next line, it means that your
|
// If you get a compile error on the next line, it means that your
|
||||||
// generic eql function doesn't accept (self, adapt key, K, index).
|
// generic eql function doesn't accept (self, adapt key, K, index).
|
||||||
const eql = ctx.eql(a, b, b_index);
|
return ctx.eql(a, b, b_index);
|
||||||
if (@TypeOf(eql) != bool) {
|
|
||||||
@compileError("Context " ++ @typeName(@TypeOf(ctx)) ++ " has a generic eql function that returns the wrong type!\n" ++
|
|
||||||
@typeName(bool) ++ " was expected, but found " ++ @typeName(@TypeOf(eql)));
|
|
||||||
}
|
|
||||||
return eql;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn dumpState(self: Self, comptime keyFmt: []const u8, comptime valueFmt: []const u8) void {
|
fn dumpState(self: Self, comptime keyFmt: []const u8, comptime valueFmt: []const u8) void {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user