| ... | ... | @@ -27,8 +27,6 @@ const valid_types = {}; |
| 27 | 27 | pub const Diagnostics = struct { |
| 28 | 28 | errors: []const Error, |
| 29 | 29 | |
| 30 | | pub const empty: Diagnostics = .{ .errors = &.{} }; |
| 31 | | |
| 32 | 30 | /// Log the failure with `std.log.err`. |
| 33 | 31 | pub fn log(self: *const Diagnostics, path: []const u8) void { |
| 34 | 32 | std.log.err("{f}", .{self.fmt(path)}); |
| ... | ... | @@ -39,7 +37,7 @@ pub const Diagnostics = struct { |
| 39 | 37 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 40 | 38 | defer arena_allocator.deinit(); |
| 41 | 39 | const arena = arena_allocator.allocator(); |
| 42 | | var diagnostics: Diagnostics = .empty; |
| 40 | var diagnostics: Diagnostics = undefined; |
| 43 | 41 | |
| 44 | 42 | const MyType = struct { |
| 45 | 43 | foo: u32, |
| ... | ... | @@ -71,7 +69,7 @@ pub const Diagnostics = struct { |
| 71 | 69 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 72 | 70 | defer arena_allocator.deinit(); |
| 73 | 71 | const arena = arena_allocator.allocator(); |
| 74 | | var diagnostics: Diagnostics = .empty; |
| 72 | var diagnostics: Diagnostics = undefined; |
| 75 | 73 | |
| 76 | 74 | const MyType = struct { |
| 77 | 75 | foo: u32, |
| ... | ... | @@ -198,8 +196,8 @@ pub const Options = struct { |
| 198 | 196 | arena: Allocator, |
| 199 | 197 | /// The ZON source to parse. |
| 200 | 198 | source: [:0]const u8, |
| 201 | | /// When an error is returned from the parser, a human readable error description of the failure |
| 202 | | /// is stored here. |
| 199 | /// Initialized by the callee with a human readable description of any parse errors that |
| 200 | /// occured. |
| 203 | 201 | diagnostics: *Diagnostics, |
| 204 | 202 | /// If true, unknown fields do not error. |
| 205 | 203 | ignore_unknown_fields: bool = false, |
| ... | ... | @@ -232,7 +230,7 @@ test fromSlice { |
| 232 | 230 | \\} |
| 233 | 231 | ; |
| 234 | 232 | |
| 235 | | var diagnostics: Diagnostics = .empty; |
| 233 | var diagnostics: Diagnostics = undefined; |
| 236 | 234 | const options = fromSlice(TextureOptions, .{ |
| 237 | 235 | .gpa = gpa, |
| 238 | 236 | .arena = arena, |
| ... | ... | @@ -307,7 +305,7 @@ test updateFromSlice { |
| 307 | 305 | .theme = "default", |
| 308 | 306 | }; |
| 309 | 307 | |
| 310 | | var diagnostics: Diagnostics = .empty; |
| 308 | var diagnostics: Diagnostics = undefined; |
| 311 | 309 | updateFromSlice(MyTextEditorConfig, &config, .{ |
| 312 | 310 | .gpa = gpa, |
| 313 | 311 | .arena = arena, |
| ... | ... | @@ -359,7 +357,7 @@ fn fromSliceInner( |
| 359 | 357 | options: Options, |
| 360 | 358 | ) error{ OutOfMemory, ParseZon }!void { |
| 361 | 359 | var errors: std.ArrayList(Diagnostics.Error) = .empty; |
| 362 | | defer options.diagnostics.errors = errors.items; |
| 360 | defer options.diagnostics.* = .{ .errors = errors.items }; |
| 363 | 361 | |
| 364 | 362 | var ast = try std.zig.Ast.parse(options.gpa, options.source, .{ .mode = .zon }); |
| 365 | 363 | defer ast.deinit(options.gpa); |
| ... | ... | @@ -386,8 +384,8 @@ pub const FromZoirOptions = struct { |
| 386 | 384 | zoir: *const Zoir, |
| 387 | 385 | /// The node to start parsing at. |
| 388 | 386 | node: Zoir.Node.Index = .root, |
| 389 | | /// When an error is returned from the parser, a human readable error description of the failure |
| 390 | | /// is stored here. |
| 387 | /// Initialized by the callee with a human readable description of any parse errors that |
| 388 | /// occured. |
| 391 | 389 | diagnostics: *Diagnostics, |
| 392 | 390 | /// If true, unknown fields do not error. |
| 393 | 391 | ignore_unknown_fields: bool = false, |
| ... | ... | @@ -432,7 +430,7 @@ fn fromZoirInner( |
| 432 | 430 | options: FromZoirOptions, |
| 433 | 431 | ) error{ OutOfMemory, ParseZon }!void { |
| 434 | 432 | var errors: std.ArrayList(Diagnostics.Error) = .empty; |
| 435 | | defer options.diagnostics.errors = errors.items; |
| 433 | defer options.diagnostics.* = .{ .errors = errors.items }; |
| 436 | 434 | return inner(T, value, initialized, .{ |
| 437 | 435 | .arena = options.arena, |
| 438 | 436 | .ast = options.ast, |
| ... | ... | @@ -1384,7 +1382,7 @@ test "std.zon ast errors" { |
| 1384 | 1382 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 1385 | 1383 | defer arena_allocator.deinit(); |
| 1386 | 1384 | const arena = arena_allocator.allocator(); |
| 1387 | | var diagnostics: Diagnostics = .empty; |
| 1385 | var diagnostics: Diagnostics = undefined; |
| 1388 | 1386 | try std.testing.expectError( |
| 1389 | 1387 | error.ParseZon, |
| 1390 | 1388 | fromSliceNoAlloc(struct {}, .{ |
| ... | ... | @@ -1405,7 +1403,7 @@ test "std.zon comments" { |
| 1405 | 1403 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 1406 | 1404 | defer arena_allocator.deinit(); |
| 1407 | 1405 | const arena = arena_allocator.allocator(); |
| 1408 | | var diagnostics: Diagnostics = .empty; |
| 1406 | var diagnostics: Diagnostics = undefined; |
| 1409 | 1407 | |
| 1410 | 1408 | try std.testing.expectEqual(@as(u8, 10), fromSliceNoAlloc(u8, .{ |
| 1411 | 1409 | .gpa = gpa, |
| ... | ... | @@ -1441,7 +1439,7 @@ test "std.zon failure/oom formatting" { |
| 1441 | 1439 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 1442 | 1440 | defer arena_allocator.deinit(); |
| 1443 | 1441 | const arena = arena_allocator.allocator(); |
| 1444 | | var diagnostics: Diagnostics = .empty; |
| 1442 | var diagnostics: Diagnostics = undefined; |
| 1445 | 1443 | |
| 1446 | 1444 | try std.testing.expectError(error.OutOfMemory, fromSlice([]const u8, .{ |
| 1447 | 1445 | .gpa = .failing, |
| ... | ... | @@ -1459,7 +1457,7 @@ test "std.zon fromSlice syntax error" { |
| 1459 | 1457 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 1460 | 1458 | defer arena_allocator.deinit(); |
| 1461 | 1459 | const arena = arena_allocator.allocator(); |
| 1462 | | var diagnostics: Diagnostics = .empty; |
| 1460 | var diagnostics: Diagnostics = undefined; |
| 1463 | 1461 | try std.testing.expectError( |
| 1464 | 1462 | error.ParseZon, |
| 1465 | 1463 | fromSliceNoAlloc(u8, .{ |
| ... | ... | @@ -1480,7 +1478,7 @@ test "std.zon optional" { |
| 1480 | 1478 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 1481 | 1479 | defer arena_allocator.deinit(); |
| 1482 | 1480 | const arena = arena_allocator.allocator(); |
| 1483 | | var diagnostics: Diagnostics = .empty; |
| 1481 | var diagnostics: Diagnostics = undefined; |
| 1484 | 1482 | |
| 1485 | 1483 | // Basic usage |
| 1486 | 1484 | { |
| ... | ... | @@ -1524,7 +1522,7 @@ test "std.zon unions" { |
| 1524 | 1522 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 1525 | 1523 | defer arena_allocator.deinit(); |
| 1526 | 1524 | const arena = arena_allocator.allocator(); |
| 1527 | | var diagnostics: Diagnostics = .empty; |
| 1525 | var diagnostics: Diagnostics = undefined; |
| 1528 | 1526 | |
| 1529 | 1527 | // Unions |
| 1530 | 1528 | { |
| ... | ... | @@ -1722,7 +1720,7 @@ test "std.zon structs" { |
| 1722 | 1720 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 1723 | 1721 | defer arena_allocator.deinit(); |
| 1724 | 1722 | const arena = arena_allocator.allocator(); |
| 1725 | | var diagnostics: Diagnostics = .empty; |
| 1723 | var diagnostics: Diagnostics = undefined; |
| 1726 | 1724 | |
| 1727 | 1725 | // Structs (various sizes tested since they're parsed differently) |
| 1728 | 1726 | { |
| ... | ... | @@ -2019,7 +2017,7 @@ test "std.zon tuples" { |
| 2019 | 2017 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 2020 | 2018 | defer arena_allocator.deinit(); |
| 2021 | 2019 | const arena = arena_allocator.allocator(); |
| 2022 | | var diagnostics: Diagnostics = .empty; |
| 2020 | var diagnostics: Diagnostics = undefined; |
| 2023 | 2021 | |
| 2024 | 2022 | // Structs (various sizes tested since they're parsed differently) |
| 2025 | 2023 | { |
| ... | ... | @@ -2180,7 +2178,7 @@ test "std.zon arrays and slices" { |
| 2180 | 2178 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 2181 | 2179 | defer arena_allocator.deinit(); |
| 2182 | 2180 | const arena = arena_allocator.allocator(); |
| 2183 | | var diagnostics: Diagnostics = .empty; |
| 2181 | var diagnostics: Diagnostics = undefined; |
| 2184 | 2182 | |
| 2185 | 2183 | // Literals |
| 2186 | 2184 | { |
| ... | ... | @@ -2500,7 +2498,7 @@ test "std.zon string literal" { |
| 2500 | 2498 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 2501 | 2499 | defer arena_allocator.deinit(); |
| 2502 | 2500 | const arena = arena_allocator.allocator(); |
| 2503 | | var diagnostics: Diagnostics = .empty; |
| 2501 | var diagnostics: Diagnostics = undefined; |
| 2504 | 2502 | |
| 2505 | 2503 | // Basic string literal |
| 2506 | 2504 | { |
| ... | ... | @@ -2792,7 +2790,7 @@ test "std.zon enum literals" { |
| 2792 | 2790 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 2793 | 2791 | defer arena_allocator.deinit(); |
| 2794 | 2792 | const arena = arena_allocator.allocator(); |
| 2795 | | var diagnostics: Diagnostics = .empty; |
| 2793 | var diagnostics: Diagnostics = undefined; |
| 2796 | 2794 | |
| 2797 | 2795 | const Enum = enum { |
| 2798 | 2796 | foo, |
| ... | ... | @@ -2906,7 +2904,7 @@ test "std.zon parse bool" { |
| 2906 | 2904 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 2907 | 2905 | defer arena_allocator.deinit(); |
| 2908 | 2906 | const arena = arena_allocator.allocator(); |
| 2909 | | var diagnostics: Diagnostics = .empty; |
| 2907 | var diagnostics: Diagnostics = undefined; |
| 2910 | 2908 | |
| 2911 | 2909 | // Correct bools |
| 2912 | 2910 | try std.testing.expectEqual(true, try fromSliceNoAlloc(bool, .{ |
| ... | ... | @@ -2981,7 +2979,7 @@ test "std.zon parse int" { |
| 2981 | 2979 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 2982 | 2980 | defer arena_allocator.deinit(); |
| 2983 | 2981 | const arena = arena_allocator.allocator(); |
| 2984 | | var diagnostics: Diagnostics = .empty; |
| 2982 | var diagnostics: Diagnostics = undefined; |
| 2985 | 2983 | |
| 2986 | 2984 | // Test various numbers and types |
| 2987 | 2985 | try std.testing.expectEqual(@as(u8, 10), try fromSliceNoAlloc(u8, .{ |
| ... | ... | @@ -3429,7 +3427,7 @@ test "std.zon negative char" { |
| 3429 | 3427 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 3430 | 3428 | defer arena_allocator.deinit(); |
| 3431 | 3429 | const arena = arena_allocator.allocator(); |
| 3432 | | var diagnostics: Diagnostics = .empty; |
| 3430 | var diagnostics: Diagnostics = undefined; |
| 3433 | 3431 | |
| 3434 | 3432 | { |
| 3435 | 3433 | try std.testing.expectError(error.ParseZon, fromSliceNoAlloc(f32, .{ |
| ... | ... | @@ -3464,7 +3462,7 @@ test "std.zon parse float" { |
| 3464 | 3462 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 3465 | 3463 | defer arena_allocator.deinit(); |
| 3466 | 3464 | const arena = arena_allocator.allocator(); |
| 3467 | | var diagnostics: Diagnostics = .empty; |
| 3465 | var diagnostics: Diagnostics = undefined; |
| 3468 | 3466 | |
| 3469 | 3467 | // Test decimals |
| 3470 | 3468 | try std.testing.expectEqual(@as(f16, 0.5), try fromSliceNoAlloc(f16, .{ |
| ... | ... | @@ -3752,7 +3750,7 @@ test "std.zon free on error" { |
| 3752 | 3750 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 3753 | 3751 | defer arena_allocator.deinit(); |
| 3754 | 3752 | const arena = arena_allocator.allocator(); |
| 3755 | | var diagnostics: Diagnostics = .empty; |
| 3753 | var diagnostics: Diagnostics = undefined; |
| 3756 | 3754 | |
| 3757 | 3755 | // Test freeing partially allocated structs |
| 3758 | 3756 | { |
| ... | ... | @@ -3873,7 +3871,7 @@ test "std.zon vector" { |
| 3873 | 3871 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 3874 | 3872 | defer arena_allocator.deinit(); |
| 3875 | 3873 | const arena = arena_allocator.allocator(); |
| 3876 | | var diagnostics: Diagnostics = .empty; |
| 3874 | var diagnostics: Diagnostics = undefined; |
| 3877 | 3875 | |
| 3878 | 3876 | // Passing cases |
| 3879 | 3877 | try std.testing.expectEqual( |
| ... | ... | @@ -4062,7 +4060,7 @@ test "std.zon add pointers" { |
| 4062 | 4060 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 4063 | 4061 | defer arena_allocator.deinit(); |
| 4064 | 4062 | const arena = arena_allocator.allocator(); |
| 4065 | | var diagnostics: Diagnostics = .empty; |
| 4063 | var diagnostics: Diagnostics = undefined; |
| 4066 | 4064 | |
| 4067 | 4065 | // Primitive with varying levels of pointers |
| 4068 | 4066 | { |
| ... | ... | @@ -4448,7 +4446,7 @@ test "std.zon stop on node" { |
| 4448 | 4446 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 4449 | 4447 | defer arena_allocator.deinit(); |
| 4450 | 4448 | const arena = arena_allocator.allocator(); |
| 4451 | | var diagnostics: Diagnostics = .empty; |
| 4449 | var diagnostics: Diagnostics = undefined; |
| 4452 | 4450 | |
| 4453 | 4451 | { |
| 4454 | 4452 | const Vec2 = struct { |
| ... | ... | @@ -4495,7 +4493,7 @@ test "std.zon no alloc" { |
| 4495 | 4493 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 4496 | 4494 | defer arena_allocator.deinit(); |
| 4497 | 4495 | const arena = arena_allocator.allocator(); |
| 4498 | | var diagnostics: Diagnostics = .empty; |
| 4496 | var diagnostics: Diagnostics = undefined; |
| 4499 | 4497 | |
| 4500 | 4498 | try std.testing.expectEqual( |
| 4501 | 4499 | [3]u8{ 1, 2, 3 }, |
| ... | ... | @@ -4531,7 +4529,7 @@ test "std.zon aligned pointers" { |
| 4531 | 4529 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 4532 | 4530 | defer arena_allocator.deinit(); |
| 4533 | 4531 | const arena = arena_allocator.allocator(); |
| 4534 | | var diagnostics: Diagnostics = .empty; |
| 4532 | var diagnostics: Diagnostics = undefined; |
| 4535 | 4533 | |
| 4536 | 4534 | const n: u8 align(8) = 10; |
| 4537 | 4535 | const Foo = struct { |
| ... | ... | @@ -4555,7 +4553,7 @@ test "std.zon update basic" { |
| 4555 | 4553 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 4556 | 4554 | defer arena_allocator.deinit(); |
| 4557 | 4555 | const arena = arena_allocator.allocator(); |
| 4558 | | var diagnostics: Diagnostics = .empty; |
| 4556 | var diagnostics: Diagnostics = undefined; |
| 4559 | 4557 | |
| 4560 | 4558 | const Vector = struct { x: f32, y: f32, z: f32 }; |
| 4561 | 4559 | const MyStruct = struct { |
| ... | ... | @@ -4668,7 +4666,7 @@ test "std.zon update optionals" { |
| 4668 | 4666 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 4669 | 4667 | defer arena_allocator.deinit(); |
| 4670 | 4668 | const arena = arena_allocator.allocator(); |
| 4671 | | var diagnostics: Diagnostics = .empty; |
| 4669 | var diagnostics: Diagnostics = undefined; |
| 4672 | 4670 | |
| 4673 | 4671 | const MyStruct = struct { |
| 4674 | 4672 | foo: ?struct { bar: u32 = 1, baz: u32 = 2, qux: u32 }, |
| ... | ... | @@ -4726,7 +4724,7 @@ test "std.zon update optional pointers" { |
| 4726 | 4724 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 4727 | 4725 | defer arena_allocator.deinit(); |
| 4728 | 4726 | const arena = arena_allocator.allocator(); |
| 4729 | | var diagnostics: Diagnostics = .empty; |
| 4727 | var diagnostics: Diagnostics = undefined; |
| 4730 | 4728 | |
| 4731 | 4729 | const MyStruct = struct { |
| 4732 | 4730 | foo: ?*const struct { bar: u32 = 1, baz: u32 = 2, qux: u32 }, |
| ... | ... | @@ -4752,7 +4750,7 @@ test "std.zon update pointers" { |
| 4752 | 4750 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 4753 | 4751 | defer arena_allocator.deinit(); |
| 4754 | 4752 | const arena = arena_allocator.allocator(); |
| 4755 | | var diagnostics: Diagnostics = .empty; |
| 4753 | var diagnostics: Diagnostics = undefined; |
| 4756 | 4754 | |
| 4757 | 4755 | // Updating a pointer should leave fields we don't specify unchanged |
| 4758 | 4756 | { |
| ... | ... | @@ -4795,7 +4793,7 @@ test "std.zon update unions" { |
| 4795 | 4793 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 4796 | 4794 | defer arena_allocator.deinit(); |
| 4797 | 4795 | const arena = arena_allocator.allocator(); |
| 4798 | | var diagnostics: Diagnostics = .empty; |
| 4796 | var diagnostics: Diagnostics = undefined; |
| 4799 | 4797 | |
| 4800 | 4798 | const MyUnion = union(enum) { |
| 4801 | 4799 | none: void, |
| ... | ... | @@ -4857,7 +4855,7 @@ test "std.zon variants" { |
| 4857 | 4855 | var arena_allocator: ArenaAllocator = .init(gpa); |
| 4858 | 4856 | defer arena_allocator.deinit(); |
| 4859 | 4857 | const arena = arena_allocator.allocator(); |
| 4860 | | var diagnostics: Diagnostics = .empty; |
| 4858 | var diagnostics: Diagnostics = undefined; |
| 4861 | 4859 | |
| 4862 | 4860 | const Struct = struct { a: u32, b: u32 }; |
| 4863 | 4861 | const start: Struct = .{ .a = 10, .b = 20 }; |