Commit 7741aca96c

Andrew Kelley <andrew@ziglang.org>
2024-03-21 01:26:31
std: work around compiler unable to evaluate condition at compile time
1 parent 2583b38
Changed files (1)
lib
std
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,