| author | |
| committer | |
| log | 3e45baa60adbb041bf75af4cde380abb3b05abfb |
| tree | 37e8dd5a927db98f16ad8b9eadd1b4c41aa27959 |
| parent | 9953d7edca95ddd6ee0a517f33fa8f390cfe04c8 |
| signature |
This is a much cleaner way to expose the new option to disable recovery
added in 62720ad9f9e65dd8c625. It also makes it possible to add further
options in the future without further breaking changes.16 files changed, 37 insertions(+), 37 deletions(-)
lib/compiler/Maker.zig+1-1| ... | ... | @@ -3536,7 +3536,7 @@ fn loadManifest( |
| 3536 | 3536 | else => |e| fatal("unable to load {s}: {t}", .{ Package.Manifest.basename, e }), |
| 3537 | 3537 | }; |
| 3538 | 3538 | }; |
| 3539 | var ast = try std.zig.Ast.parse(gpa, manifest_bytes, .zon); | |
| 3539 | var ast = try std.zig.Ast.parse(gpa, manifest_bytes, .zon, .{}); | |
| 3540 | 3540 | errdefer ast.deinit(gpa); |
| 3541 | 3541 | |
| 3542 | 3542 | if (ast.errors.len > 0) { |
lib/compiler/Maker/Package/Manifest.zig+4-4| ... | ... | @@ -597,7 +597,7 @@ pub fn load( |
| 597 | 597 | 0, |
| 598 | 598 | ); |
| 599 | 599 | |
| 600 | ast.* = try std.zig.Ast.parse(arena, manifest_bytes, .zon); | |
| 600 | ast.* = try std.zig.Ast.parse(arena, manifest_bytes, .zon, .{}); | |
| 601 | 601 | |
| 602 | 602 | if (ast.errors.len > 0) { |
| 603 | 603 | const file_path = try manifest_path.joinString(arena, ""); |
| ... | ... | @@ -636,7 +636,7 @@ test "basic" { |
| 636 | 636 | \\} |
| 637 | 637 | ; |
| 638 | 638 | |
| 639 | var ast = try Ast.parse(gpa, example, .zon); | |
| 639 | var ast = try Ast.parse(gpa, example, .zon, .{}); | |
| 640 | 640 | defer ast.deinit(gpa); |
| 641 | 641 | |
| 642 | 642 | try testing.expect(ast.errors.len == 0); |
| ... | ... | @@ -682,7 +682,7 @@ test "minimum_zig_version" { |
| 682 | 682 | \\} |
| 683 | 683 | ; |
| 684 | 684 | |
| 685 | var ast = try Ast.parse(gpa, example, .zon); | |
| 685 | var ast = try Ast.parse(gpa, example, .zon, .{}); | |
| 686 | 686 | defer ast.deinit(gpa); |
| 687 | 687 | |
| 688 | 688 | try testing.expect(ast.errors.len == 0); |
| ... | ... | @@ -717,7 +717,7 @@ test "minimum_zig_version - invalid version" { |
| 717 | 717 | \\} |
| 718 | 718 | ; |
| 719 | 719 | |
| 720 | var ast = try Ast.parse(gpa, example, .zon); | |
| 720 | var ast = try Ast.parse(gpa, example, .zon, .{}); | |
| 721 | 721 | defer ast.deinit(gpa); |
| 722 | 722 | |
| 723 | 723 | try testing.expect(ast.errors.len == 0); |
lib/compiler/reduce.zig+2-2| ... | ... | @@ -188,7 +188,7 @@ pub fn main(init: std.process.Init) !void { |
| 188 | 188 | try astgen_input.writer.writeAll(rendered.written()); |
| 189 | 189 | try astgen_input.writer.writeByte(0); |
| 190 | 190 | const source_with_null = astgen_input.written()[0..(astgen_input.written().len - 1) :0]; |
| 191 | var astgen_tree = try Ast.parse(gpa, source_with_null, .zig); | |
| 191 | var astgen_tree = try Ast.parse(gpa, source_with_null, .zig, .{}); | |
| 192 | 192 | defer astgen_tree.deinit(gpa); |
| 193 | 193 | if (astgen_tree.errors.len != 0) { |
| 194 | 194 | @panic("syntax errors occurred"); |
| ... | ... | @@ -407,7 +407,7 @@ fn parse(gpa: Allocator, io: Io, file_path: []const u8) !Ast { |
| 407 | 407 | }; |
| 408 | 408 | errdefer gpa.free(source_code); |
| 409 | 409 | |
| 410 | var tree = try Ast.parse(gpa, source_code, .zig); | |
| 410 | var tree = try Ast.parse(gpa, source_code, .zig, .{}); | |
| 411 | 411 | errdefer tree.deinit(gpa); |
| 412 | 412 | |
| 413 | 413 | if (tree.errors.len != 0) { |
lib/docs/wasm/Walk.zig+3-3| ... | ... | @@ -428,7 +428,7 @@ fn parse(file_name: []const u8, source: []u8) Oom!Ast { |
| 428 | 428 | break :s source[0 .. source.len - 1 :0]; |
| 429 | 429 | }; |
| 430 | 430 | |
| 431 | var ast = try Ast.parse(gpa, adjusted_source, .zig); | |
| 431 | var ast = try Ast.parse(gpa, adjusted_source, .zig, .{}); | |
| 432 | 432 | if (ast.errors.len > 0) { |
| 433 | 433 | defer ast.deinit(gpa); |
| 434 | 434 | |
| ... | ... | @@ -446,7 +446,7 @@ fn parse(file_name: []const u8, source: []u8) Oom!Ast { |
| 446 | 446 | file_name, err_loc.line + 1, err_loc.column + 1, rendered_err.written(), |
| 447 | 447 | }); |
| 448 | 448 | } |
| 449 | return Ast.parse(gpa, "", .zig); | |
| 449 | return Ast.parse(gpa, "", .zig, .{}); | |
| 450 | 450 | } |
| 451 | 451 | return ast; |
| 452 | 452 | } |
| ... | ... | @@ -1085,7 +1085,7 @@ pub fn isPrimitiveNonType(name: []const u8) bool { |
| 1085 | 1085 | // |
| 1086 | 1086 | // // example test command: |
| 1087 | 1087 | // // zig test --dep input.zig -Mroot=src/Walk.zig -Minput.zig=/home/andy/dev/zig/lib/std/fs/File/zig |
| 1088 | // var ast = try Ast.parse(gpa, @embedFile("input.zig"), .zig); | |
| 1088 | // var ast = try Ast.parse(gpa, @embedFile("input.zig"), .zig, .{}); | |
| 1089 | 1089 | // defer ast.deinit(gpa); |
| 1090 | 1090 | // |
| 1091 | 1091 | // var w: Walk = .{ |
lib/std/zig/Ast.zig+8-8| ... | ... | @@ -138,11 +138,14 @@ pub fn deinit(tree: *Ast, gpa: Allocator) void { |
| 138 | 138 | tree.* = undefined; |
| 139 | 139 | } |
| 140 | 140 | |
| 141 | pub const Mode = enum { zig, zon, zig_no_recover }; | |
| 141 | pub const Mode = enum { zig, zon }; | |
| 142 | pub const ParseOptions = struct { | |
| 143 | recover: bool = true, | |
| 144 | }; | |
| 142 | 145 | |
| 143 | 146 | /// Result should be freed with tree.deinit() when there are |
| 144 | 147 | /// no more references to any of the tokens or nodes. |
| 145 | pub fn parse(gpa: Allocator, source: [:0]const u8, mode: Mode) Allocator.Error!Ast { | |
| 148 | pub fn parse(gpa: Allocator, source: [:0]const u8, mode: Mode, options: ParseOptions) Allocator.Error!Ast { | |
| 146 | 149 | var tokens = Ast.TokenList{}; |
| 147 | 150 | defer tokens.deinit(gpa); |
| 148 | 151 | |
| ... | ... | @@ -162,7 +165,7 @@ pub fn parse(gpa: Allocator, source: [:0]const u8, mode: Mode) Allocator.Error!A |
| 162 | 165 | |
| 163 | 166 | var tokens_slice = tokens.toOwnedSlice(); |
| 164 | 167 | errdefer tokens_slice.deinit(gpa); |
| 165 | return parseTokens(gpa, source, tokens_slice, mode); | |
| 168 | return parseTokens(gpa, source, tokens_slice, mode, options); | |
| 166 | 169 | } |
| 167 | 170 | |
| 168 | 171 | pub fn parseTokens( |
| ... | ... | @@ -170,6 +173,7 @@ pub fn parseTokens( |
| 170 | 173 | source: [:0]const u8, |
| 171 | 174 | tokens: Ast.TokenList.Slice, |
| 172 | 175 | mode: Mode, |
| 176 | options: ParseOptions, | |
| 173 | 177 | ) Allocator.Error!Ast { |
| 174 | 178 | var parser: Parse = .{ |
| 175 | 179 | .source = source, |
| ... | ... | @@ -180,7 +184,7 @@ pub fn parseTokens( |
| 180 | 184 | .extra_data = .empty, |
| 181 | 185 | .scratch = .empty, |
| 182 | 186 | .tok_i = 0, |
| 183 | .recover = true, | |
| 187 | .recover = options.recover, | |
| 184 | 188 | }; |
| 185 | 189 | defer parser.errors.deinit(gpa); |
| 186 | 190 | defer parser.nodes.deinit(gpa); |
| ... | ... | @@ -194,10 +198,6 @@ pub fn parseTokens( |
| 194 | 198 | |
| 195 | 199 | switch (mode) { |
| 196 | 200 | .zig => try parser.parseRoot(), |
| 197 | .zig_no_recover => { | |
| 198 | parser.recover = false; | |
| 199 | try parser.parseRoot(); | |
| 200 | }, | |
| 201 | 201 | .zon => try parser.parseZon(), |
| 202 | 202 | } |
| 203 | 203 |
lib/std/zig/parser_fuzz.zig+1-1| ... | ... | @@ -171,7 +171,7 @@ fn checkAgainstOracle(source: [:0]const u8) !void { |
| 171 | 171 | // error right away and does no recovery. However, std.zig.Ast.parse() does recovery |
| 172 | 172 | // by default and will hit a stack overflow rather than returning after the parser error. |
| 173 | 173 | // Stack overflows are not interesting and we do not want the fuzzer to be able to find them. |
| 174 | const ast = try std.zig.Ast.parse(fba.allocator(), source, .zig_no_recover); | |
| 174 | const ast = try std.zig.Ast.parse(fba.allocator(), source, .zig, .{ .recover = false }); | |
| 175 | 175 | |
| 176 | 176 | errdefer logBadSource(source, ast); |
| 177 | 177 | try std.testing.expectEqual(expected, ast.errors.len == 0); |
lib/std/zig/parser_test.zig+4-4| ... | ... | @@ -7231,7 +7231,7 @@ test "ampersand" { |
| 7231 | 7231 | test "Ast: pointer types with subexprs containing qualifiers" { |
| 7232 | 7232 | var fixed_allocator = std.heap.FixedBufferAllocator.init(fixed_buffer_mem[0..]); |
| 7233 | 7233 | const allocator = fixed_allocator.allocator(); |
| 7234 | var tree = try std.zig.Ast.parse(allocator, "**addrspace(*align(1)T)T", .zon); | |
| 7234 | var tree = try std.zig.Ast.parse(allocator, "**addrspace(*align(1)T)T", .zon, .{}); | |
| 7235 | 7235 | defer tree.deinit(allocator); |
| 7236 | 7236 | |
| 7237 | 7237 | const regular_ptr_node = tree.nodeData(.root).node; |
| ... | ... | @@ -7253,7 +7253,7 @@ fn testParse(io: Io, source: [:0]const u8, allocator: Allocator, anything_change |
| 7253 | 7253 | defer io.unlockStderr(); |
| 7254 | 7254 | const writer = &stderr.file_writer.interface; |
| 7255 | 7255 | |
| 7256 | var tree = try std.zig.Ast.parse(allocator, source, .zig); | |
| 7256 | var tree = try std.zig.Ast.parse(allocator, source, .zig, .{}); | |
| 7257 | 7257 | defer tree.deinit(allocator); |
| 7258 | 7258 | |
| 7259 | 7259 | for (tree.errors) |parse_error| { |
| ... | ... | @@ -7313,7 +7313,7 @@ fn testCanonical(source: [:0]const u8) !void { |
| 7313 | 7313 | const Error = std.zig.Ast.Error.Tag; |
| 7314 | 7314 | |
| 7315 | 7315 | fn testError(source: [:0]const u8, expected_errors: []const Error) !void { |
| 7316 | var tree = try std.zig.Ast.parse(std.testing.allocator, source, .zig); | |
| 7316 | var tree = try std.zig.Ast.parse(std.testing.allocator, source, .zig, .{}); | |
| 7317 | 7317 | defer tree.deinit(std.testing.allocator); |
| 7318 | 7318 | |
| 7319 | 7319 | std.testing.expectEqual(expected_errors.len, tree.errors.len) catch |err| { |
| ... | ... | @@ -7333,5 +7333,5 @@ fn fuzzTestOneParse(_: void, smith: *std.testing.Smith) !void { |
| 7333 | 7333 | const mode = smith.value(std.zig.Ast.Mode); |
| 7334 | 7334 | var tokens: std.zig.TokenSmith = .gen(smith); |
| 7335 | 7335 | var fba: std.heap.FixedBufferAllocator = .init(&fixed_buffer_mem); |
| 7336 | _ = std.zig.Ast.parseTokens(fba.allocator(), tokens.source(), tokens.list(), mode) catch return; | |
| 7336 | _ = std.zig.Ast.parseTokens(fba.allocator(), tokens.source(), tokens.list(), mode, .{ .recover = false }) catch return; | |
| 7337 | 7337 | } |
lib/std/zig/perf_test.zig+1-1| ... | ... | @@ -32,6 +32,6 @@ pub fn main() !void { |
| 32 | 32 | fn testOnce() usize { |
| 33 | 33 | var fixed_buf_alloc = std.heap.FixedBufferAllocator.init(&fixed_buffer_mem); |
| 34 | 34 | const allocator = fixed_buf_alloc.allocator(); |
| 35 | _ = std.zig.Ast.parse(allocator, source, .zig) catch @panic("parse failure"); | |
| 35 | _ = std.zig.Ast.parse(allocator, source, .zig, .{}) catch @panic("parse failure"); | |
| 36 | 36 | return fixed_buf_alloc.end_index; |
| 37 | 37 | } |
lib/std/zon/parse.zig+3-3| ... | ... | @@ -294,7 +294,7 @@ pub fn fromSliceAlloc( |
| 294 | 294 | ) error{ OutOfMemory, ParseZon }!T { |
| 295 | 295 | if (diag) |s| s.assertEmpty(); |
| 296 | 296 | |
| 297 | var ast = try std.zig.Ast.parse(gpa, source, .zon); | |
| 297 | var ast = try std.zig.Ast.parse(gpa, source, .zon, .{}); | |
| 298 | 298 | defer if (diag == null) ast.deinit(gpa); |
| 299 | 299 | if (diag) |s| s.ast = ast; |
| 300 | 300 | |
| ... | ... | @@ -2140,7 +2140,7 @@ test "std.zon string literal" { |
| 2140 | 2140 | // Passing string literal to a array |
| 2141 | 2141 | { |
| 2142 | 2142 | { |
| 2143 | var ast = try std.zig.Ast.parse(gpa, "\"abcd\"", .zon); | |
| 2143 | var ast = try std.zig.Ast.parse(gpa, "\"abcd\"", .zon, .{}); | |
| 2144 | 2144 | defer ast.deinit(gpa); |
| 2145 | 2145 | var zoir = try ZonGen.generate(gpa, ast, .{ .parse_str_lits = false }); |
| 2146 | 2146 | defer zoir.deinit(gpa); |
| ... | ... | @@ -3534,7 +3534,7 @@ test "std.zon no alloc" { |
| 3534 | 3534 | |
| 3535 | 3535 | const Nested = struct { u8, u8, struct { u8, u8 } }; |
| 3536 | 3536 | |
| 3537 | var ast = try std.zig.Ast.parse(gpa, ".{ 1, 2, .{ 3, 4 } }", .zon); | |
| 3537 | var ast = try std.zig.Ast.parse(gpa, ".{ 1, 2, .{ 3, 4 } }", .zon, .{}); | |
| 3538 | 3538 | defer ast.deinit(gpa); |
| 3539 | 3539 | |
| 3540 | 3540 | var zoir = try ZonGen.generate(gpa, ast, .{ .parse_str_lits = false }); |
src/Builtin.zig+1-1| ... | ... | @@ -296,7 +296,7 @@ pub fn populateFile(opts: @This(), gpa: Allocator, file: *File) Allocator.Error! |
| 296 | 296 | |
| 297 | 297 | log.debug("parsing and generating 'builtin.zig'", .{}); |
| 298 | 298 | |
| 299 | file.tree = try std.zig.Ast.parse(gpa, file.source.?, .zig); | |
| 299 | file.tree = try std.zig.Ast.parse(gpa, file.source.?, .zig, .{}); | |
| 300 | 300 | assert(file.tree.?.errors.len == 0); // builtin.zig must parse |
| 301 | 301 | |
| 302 | 302 | file.zir = try AstGen.generate(gpa, file.tree.?); |
src/Zcu.zig+1-1| ... | ... | @@ -1145,7 +1145,7 @@ pub const File = struct { |
| 1145 | 1145 | if (file.tree) |*tree| return tree; |
| 1146 | 1146 | |
| 1147 | 1147 | const source = try file.getSource(zcu); |
| 1148 | file.tree = try .parse(zcu.gpa, source, file.getMode()); | |
| 1148 | file.tree = try .parse(zcu.gpa, source, file.getMode(), .{}); | |
| 1149 | 1149 | return &file.tree.?; |
| 1150 | 1150 | } |
| 1151 | 1151 |
src/Zcu/PerThread.zig+1-1| ... | ... | @@ -642,7 +642,7 @@ pub fn updateFile( |
| 642 | 642 | |
| 643 | 643 | var timer = comp.startTimer(); |
| 644 | 644 | // Any potential AST errors are converted to ZIR errors when we run AstGen/ZonGen. |
| 645 | file.tree = try Ast.parse(gpa, source, file.getMode()); | |
| 645 | file.tree = try Ast.parse(gpa, source, file.getMode(), .{}); | |
| 646 | 646 | if (timer.finish(io)) |ns_parse| { |
| 647 | 647 | comp.mutex.lockUncancelable(io); |
| 648 | 648 | defer comp.mutex.unlock(io); |
src/fmt.zig+2-2| ... | ... | @@ -117,7 +117,7 @@ pub fn run(gpa: Allocator, arena: Allocator, io: Io, args: []const []const u8) ! |
| 117 | 117 | }; |
| 118 | 118 | defer gpa.free(source_code); |
| 119 | 119 | |
| 120 | var tree = std.zig.Ast.parse(gpa, source_code, if (force_zon) .zon else .zig) catch |err| { | |
| 120 | var tree = std.zig.Ast.parse(gpa, source_code, if (force_zon) .zon else .zig, .{}) catch |err| { | |
| 121 | 121 | fatal("error parsing stdin: {}", .{err}); |
| 122 | 122 | }; |
| 123 | 123 | defer tree.deinit(gpa); |
| ... | ... | @@ -312,7 +312,7 @@ fn fmtPathFile( |
| 312 | 312 | break :mode .zig; |
| 313 | 313 | }; |
| 314 | 314 | |
| 315 | var tree = try std.zig.Ast.parse(gpa, source_code, mode); | |
| 315 | var tree = try std.zig.Ast.parse(gpa, source_code, mode, .{}); | |
| 316 | 316 | defer tree.deinit(gpa); |
| 317 | 317 | |
| 318 | 318 | if (tree.errors.len != 0) { |
src/main.zig+3-3| ... | ... | @@ -5529,7 +5529,7 @@ fn cmdAstCheck(arena: Allocator, io: Io, args: []const []const u8, environ_map: |
| 5529 | 5529 | break :mode .zig; |
| 5530 | 5530 | }; |
| 5531 | 5531 | |
| 5532 | const tree = try Ast.parse(arena, source, mode); | |
| 5532 | const tree = try Ast.parse(arena, source, mode, .{}); | |
| 5533 | 5533 | |
| 5534 | 5534 | var stdout_writer = Io.File.stdout().writerStreaming(io, &stdout_buffer); |
| 5535 | 5535 | const stdout_bw = &stdout_writer.interface; |
| ... | ... | @@ -5699,7 +5699,7 @@ fn cmdChangelist(arena: Allocator, io: Io, args: []const []const u8, environ_map |
| 5699 | 5699 | fatal("unable to read new source file {q}: {t}", .{ new_source_path, err }); |
| 5700 | 5700 | }; |
| 5701 | 5701 | |
| 5702 | const old_tree = try Ast.parse(arena, old_source, .zig); | |
| 5702 | const old_tree = try Ast.parse(arena, old_source, .zig, .{}); | |
| 5703 | 5703 | const old_zir = try AstGen.generate(arena, old_tree); |
| 5704 | 5704 | |
| 5705 | 5705 | if (old_zir.loweringFailed()) { |
| ... | ... | @@ -5711,7 +5711,7 @@ fn cmdChangelist(arena: Allocator, io: Io, args: []const []const u8, environ_map |
| 5711 | 5711 | process.exit(1); |
| 5712 | 5712 | } |
| 5713 | 5713 | |
| 5714 | const new_tree = try Ast.parse(arena, new_source, .zig); | |
| 5714 | const new_tree = try Ast.parse(arena, new_source, .zig, .{}); | |
| 5715 | 5715 | const new_zir = try AstGen.generate(arena, new_tree); |
| 5716 | 5716 | |
| 5717 | 5717 | if (new_zir.loweringFailed()) { |
tools/gen_parser_oracle.zig+1-1| ... | ... | @@ -43,7 +43,7 @@ pub fn main(init: std.process.Init) !void { |
| 43 | 43 | defer gpa.free(generated); |
| 44 | 44 | |
| 45 | 45 | // Parse the generated Zig code and render it in the canonical format |
| 46 | var tree = try std.zig.Ast.parse(gpa, generated, .zig); | |
| 46 | var tree = try std.zig.Ast.parse(gpa, generated, .zig, .{}); | |
| 47 | 47 | defer tree.deinit(gpa); |
| 48 | 48 | |
| 49 | 49 | if (tree.errors.len != 0) { |
tools/gen_spirv_spec.zig+1-1| ... | ... | @@ -116,7 +116,7 @@ pub fn main(init: std.process.Init) !void { |
| 116 | 116 | try allocating.writer.writeByte(0); |
| 117 | 117 | const output = allocating.written()[0 .. allocating.written().len - 1 :0]; |
| 118 | 118 | |
| 119 | var tree = try std.zig.Ast.parse(arena, output, .zig); | |
| 119 | var tree = try std.zig.Ast.parse(arena, output, .zig, .{}); | |
| 120 | 120 | |
| 121 | 121 | if (tree.errors.len != 0) { |
| 122 | 122 | try std.zig.printAstErrorsToStderr(arena, io, tree, "", .auto); |