commit 7741aca96c8cc6df7e8c4bd10ada741d6a3ffb9d (tree)
parent 2583b389eaf5f7aaa0eb79b51126506c1e172d15
Author: Andrew Kelley <andrew@ziglang.org>
Date: Wed, 20 Mar 2024 17:26:31 -0700
std: work around compiler unable to evaluate condition at compile time
Diffstat:
1 file changed, 13 insertions(+), 17 deletions(-)
diff --git a/lib/std/json/static.zig b/lib/std/json/static.zig
@@ -400,24 +400,20 @@ pub fn innerParse(
@memcpy(r[i..][0..slice.len], slice);
i += slice.len;
},
- .partial_string_escaped_1 => |arr| {
+ inline .partial_string_escaped_1,
+ .partial_string_escaped_2,
+ .partial_string_escaped_3,
+ .partial_string_escaped_4,
+ => |arr| {
if (i + arr.len > r.len) return error.LengthMismatch;
- @memcpy(r[i..][0..arr.len], arr[0..]);
- i += arr.len;
- },
- .partial_string_escaped_2 => |arr| {
- if (i + arr.len > r.len) return error.LengthMismatch;
- @memcpy(r[i..][0..arr.len], arr[0..]);
- i += arr.len;
- },
- .partial_string_escaped_3 => |arr| {
- if (i + arr.len > r.len) return error.LengthMismatch;
- @memcpy(r[i..][0..arr.len], arr[0..]);
- i += arr.len;
- },
- .partial_string_escaped_4 => |arr| {
- if (i + arr.len > r.len) return error.LengthMismatch;
- @memcpy(r[i..][0..arr.len], arr[0..]);
+
+ // Implementing https://github.com/ziglang/zig/issues/3806
+ // would make this no longer needed because the
+ // above condition would become compile-time
+ // known.
+ if (arr.len > r.len) unreachable;
+
+ @memcpy(r[i..][0..arr.len], &arr);
i += arr.len;
},
else => unreachable,