| author | |
| committer | |
| log | c72a9feabe455a5bbb5e27cfbd973ff3e6700500 |
| tree | 20cbb41e5af42c2feb44803a4dfbea2bd5c88b8d |
| parent | 2ad16248d7d4352ed9bb7270084042bb76369770 |
| signature |
2 files changed, 27 insertions(+), 2 deletions(-)
lib/std/heap.zig+2-2| ... | ... | @@ -436,7 +436,7 @@ pub const FixedBufferAllocator = struct { |
| 436 | 436 | const self: *FixedBufferAllocator = @ptrCast(@alignCast(ctx)); |
| 437 | 437 | _ = log2_buf_align; |
| 438 | 438 | _ = return_address; |
| 439 | assert(self.ownsSlice(buf)); // sanity check | |
| 439 | assert(@inComptime() or self.ownsSlice(buf)); | |
| 440 | 440 | |
| 441 | 441 | if (!self.isLastAllocation(buf)) { |
| 442 | 442 | if (new_size > buf.len) return false; |
| ... | ... | @@ -465,7 +465,7 @@ pub const FixedBufferAllocator = struct { |
| 465 | 465 | const self: *FixedBufferAllocator = @ptrCast(@alignCast(ctx)); |
| 466 | 466 | _ = log2_buf_align; |
| 467 | 467 | _ = return_address; |
| 468 | assert(self.ownsSlice(buf)); // sanity check | |
| 468 | assert(@inComptime() or self.ownsSlice(buf)); | |
| 469 | 469 | |
| 470 | 470 | if (self.isLastAllocation(buf)) { |
| 471 | 471 | self.end_index -= buf.len; |
lib/std/json/static_test.zig+25| ... | ... | @@ -901,3 +901,28 @@ test "json parse allocate when streaming" { |
| 901 | 901 | try testing.expectEqualSlices(u8, parsed.not_const, "non const string"); |
| 902 | 902 | try testing.expectEqualSlices(u8, parsed.is_const, "const string"); |
| 903 | 903 | } |
| 904 | ||
| 905 | test "parse at comptime" { | |
| 906 | const doc = | |
| 907 | \\{ | |
| 908 | \\ "vals": { | |
| 909 | \\ "testing": 1, | |
| 910 | \\ "production": 42 | |
| 911 | \\ }, | |
| 912 | \\ "uptime": 9999 | |
| 913 | \\} | |
| 914 | ; | |
| 915 | const Config = struct { | |
| 916 | vals: struct { testing: u8, production: u8 }, | |
| 917 | uptime: u64, | |
| 918 | }; | |
| 919 | const config = comptime x: { | |
| 920 | var buf: [32]u8 = undefined; | |
| 921 | var fba = std.heap.FixedBufferAllocator.init(&buf); | |
| 922 | const res = parseFromSliceLeaky(Config, fba.allocator(), doc, .{}); | |
| 923 | // Assert no error can occur since we are | |
| 924 | // parsing this JSON at comptime! | |
| 925 | break :x res catch unreachable; | |
| 926 | }; | |
| 927 | comptime testing.expectEqual(@as(u64, 9999), config.uptime) catch unreachable; | |
| 928 | } |