| author | |
| committer | |
| log | d8e26275f29b304772bfeed9359e1ff5fe7038a8 |
| tree | b255b2a136beedb6a411ad0eae273354d9c4040c |
| parent | c873c2eed9f9bcd4e8d8d6937ea7c3644d382440 |
72 files changed, 335 insertions(+), 880 deletions(-)
doc/langref.html.in+2-1| ... | ... | @@ -374,7 +374,8 @@ |
| 374 | 374 | <p> |
| 375 | 375 | Most of the time, it is more appropriate to write to stderr rather than stdout, and |
| 376 | 376 | whether or not the message is successfully written to the stream is irrelevant. |
| 377 | For this common case, there is a simpler API: | |
| 377 | Also, formatted printing often comes in handy. For this common case, | |
| 378 | there is a simpler API: | |
| 378 | 379 | </p> |
| 379 | 380 | {#code|hello_again.zig#} |
| 380 | 381 |
doc/langref/bad_default_value.zig+1-1| ... | ... | @@ -17,7 +17,7 @@ pub fn main() !void { |
| 17 | 17 | .maximum = 0.20, |
| 18 | 18 | }; |
| 19 | 19 | const category = threshold.categorize(0.90); |
| 20 | try std.io.getStdOut().writeAll(@tagName(category)); | |
| 20 | try std.fs.File.stdout().writeAll(@tagName(category)); | |
| 21 | 21 | } |
| 22 | 22 | |
| 23 | 23 | const std = @import("std"); |
doc/langref/hello.zig+1-2| ... | ... | @@ -1,8 +1,7 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn main() !void { |
| 4 | const stdout = std.io.getStdOut().writer(); | |
| 5 | try stdout.print("Hello, {s}!\n", .{"world"}); | |
| 4 | try std.fs.File.stdout().writeAll("Hello, World!\n"); | |
| 6 | 5 | } |
| 7 | 6 | |
| 8 | 7 | // exe=succeed |
doc/langref/hello_again.zig+1-1| ... | ... | @@ -1,7 +1,7 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn main() void { |
| 4 | std.debug.print("Hello, world!\n", .{}); | |
| 4 | std.debug.print("Hello, {s}!\n", .{"World"}); | |
| 5 | 5 | } |
| 6 | 6 | |
| 7 | 7 | // exe=succeed |
lib/compiler/resinator/cli.zig+13-14| ... | ... | @@ -125,13 +125,12 @@ pub const Diagnostics = struct { |
| 125 | 125 | } |
| 126 | 126 | |
| 127 | 127 | pub fn renderToStdErr(self: *Diagnostics, args: []const []const u8, config: std.io.tty.Config) void { |
| 128 | std.debug.lockStdErr(); | |
| 129 | defer std.debug.unlockStdErr(); | |
| 130 | const stderr = std.fs.File.stderr().deprecatedWriter(); | |
| 128 | const stderr = std.debug.lockStderrWriter(&.{}); | |
| 129 | defer std.debug.unlockStderrWriter(); | |
| 131 | 130 | self.renderToWriter(args, stderr, config) catch return; |
| 132 | 131 | } |
| 133 | 132 | |
| 134 | pub fn renderToWriter(self: *Diagnostics, args: []const []const u8, writer: anytype, config: std.io.tty.Config) !void { | |
| 133 | pub fn renderToWriter(self: *Diagnostics, args: []const []const u8, writer: *std.io.Writer, config: std.io.tty.Config) !void { | |
| 135 | 134 | for (self.errors.items) |err_details| { |
| 136 | 135 | try renderErrorMessage(writer, config, err_details, args); |
| 137 | 136 | } |
| ... | ... | @@ -1403,7 +1402,7 @@ test parsePercent { |
| 1403 | 1402 | try std.testing.expectError(error.InvalidFormat, parsePercent("~1")); |
| 1404 | 1403 | } |
| 1405 | 1404 | |
| 1406 | pub fn renderErrorMessage(writer: anytype, config: std.io.tty.Config, err_details: Diagnostics.ErrorDetails, args: []const []const u8) !void { | |
| 1405 | pub fn renderErrorMessage(writer: *std.io.Writer, config: std.io.tty.Config, err_details: Diagnostics.ErrorDetails, args: []const []const u8) !void { | |
| 1407 | 1406 | try config.setColor(writer, .dim); |
| 1408 | 1407 | try writer.writeAll("<cli>"); |
| 1409 | 1408 | try config.setColor(writer, .reset); |
| ... | ... | @@ -1481,27 +1480,27 @@ pub fn renderErrorMessage(writer: anytype, config: std.io.tty.Config, err_detail |
| 1481 | 1480 | try writer.writeByte('\n'); |
| 1482 | 1481 | |
| 1483 | 1482 | try config.setColor(writer, .green); |
| 1484 | try writer.writeByteNTimes(' ', prefix.len); | |
| 1483 | try writer.splatByteAll(' ', prefix.len); | |
| 1485 | 1484 | // Special case for when the option is *only* a prefix (e.g. invalid option: -) |
| 1486 | 1485 | if (err_details.arg_span.prefix_len == arg_with_name.len) { |
| 1487 | try writer.writeByteNTimes('^', err_details.arg_span.prefix_len); | |
| 1486 | try writer.splatByteAll('^', err_details.arg_span.prefix_len); | |
| 1488 | 1487 | } else { |
| 1489 | try writer.writeByteNTimes('~', err_details.arg_span.prefix_len); | |
| 1490 | try writer.writeByteNTimes(' ', err_details.arg_span.name_offset - err_details.arg_span.prefix_len); | |
| 1488 | try writer.splatByteAll('~', err_details.arg_span.prefix_len); | |
| 1489 | try writer.splatByteAll(' ', err_details.arg_span.name_offset - err_details.arg_span.prefix_len); | |
| 1491 | 1490 | if (!err_details.arg_span.point_at_next_arg and err_details.arg_span.value_offset == 0) { |
| 1492 | 1491 | try writer.writeByte('^'); |
| 1493 | try writer.writeByteNTimes('~', name_slice.len - 1); | |
| 1492 | try writer.splatByteAll('~', name_slice.len - 1); | |
| 1494 | 1493 | } else if (err_details.arg_span.value_offset > 0) { |
| 1495 | try writer.writeByteNTimes('~', err_details.arg_span.value_offset - err_details.arg_span.name_offset); | |
| 1494 | try writer.splatByteAll('~', err_details.arg_span.value_offset - err_details.arg_span.name_offset); | |
| 1496 | 1495 | try writer.writeByte('^'); |
| 1497 | 1496 | if (err_details.arg_span.value_offset < arg_with_name.len) { |
| 1498 | try writer.writeByteNTimes('~', arg_with_name.len - err_details.arg_span.value_offset - 1); | |
| 1497 | try writer.splatByteAll('~', arg_with_name.len - err_details.arg_span.value_offset - 1); | |
| 1499 | 1498 | } |
| 1500 | 1499 | } else if (err_details.arg_span.point_at_next_arg) { |
| 1501 | try writer.writeByteNTimes('~', arg_with_name.len - err_details.arg_span.name_offset + 1); | |
| 1500 | try writer.splatByteAll('~', arg_with_name.len - err_details.arg_span.name_offset + 1); | |
| 1502 | 1501 | try writer.writeByte('^'); |
| 1503 | 1502 | if (next_arg_len > 0) { |
| 1504 | try writer.writeByteNTimes('~', next_arg_len - 1); | |
| 1503 | try writer.splatByteAll('~', next_arg_len - 1); | |
| 1505 | 1504 | } |
| 1506 | 1505 | } |
| 1507 | 1506 | } |
lib/compiler/resinator/errors.zig+18-19| ... | ... | @@ -62,9 +62,8 @@ pub const Diagnostics = struct { |
| 62 | 62 | } |
| 63 | 63 | |
| 64 | 64 | pub fn renderToStdErr(self: *Diagnostics, cwd: std.fs.Dir, source: []const u8, tty_config: std.io.tty.Config, source_mappings: ?SourceMappings) void { |
| 65 | std.debug.lockStdErr(); | |
| 66 | defer std.debug.unlockStdErr(); | |
| 67 | const stderr = std.fs.File.stderr().deprecatedWriter(); | |
| 65 | const stderr = std.debug.lockStderrWriter(&.{}); | |
| 66 | defer std.debug.unlockStderrWriter(); | |
| 68 | 67 | for (self.errors.items) |err_details| { |
| 69 | 68 | renderErrorMessage(stderr, tty_config, cwd, err_details, source, self.strings.items, source_mappings) catch return; |
| 70 | 69 | } |
| ... | ... | @@ -445,7 +444,7 @@ pub const ErrorDetails = struct { |
| 445 | 444 | pub fn render(self: ErrorDetails, writer: anytype, source: []const u8, strings: []const []const u8) !void { |
| 446 | 445 | switch (self.err) { |
| 447 | 446 | .unfinished_string_literal => { |
| 448 | return writer.print("unfinished string literal at '{s}', expected closing '\"'", .{self.fmtToken(source)}); | |
| 447 | return writer.print("unfinished string literal at '{f}', expected closing '\"'", .{self.fmtToken(source)}); | |
| 449 | 448 | }, |
| 450 | 449 | .string_literal_too_long => { |
| 451 | 450 | return writer.print("string literal too long (max is currently {} characters)", .{self.extra.number}); |
| ... | ... | @@ -524,26 +523,26 @@ pub const ErrorDetails = struct { |
| 524 | 523 | return writer.print("unsupported code page '{s} (id={})' in #pragma code_page", .{ @tagName(code_page), number }); |
| 525 | 524 | }, |
| 526 | 525 | .unfinished_raw_data_block => { |
| 527 | return writer.print("unfinished raw data block at '{s}', expected closing '}}' or 'END'", .{self.fmtToken(source)}); | |
| 526 | return writer.print("unfinished raw data block at '{f}', expected closing '}}' or 'END'", .{self.fmtToken(source)}); | |
| 528 | 527 | }, |
| 529 | 528 | .unfinished_string_table_block => { |
| 530 | return writer.print("unfinished STRINGTABLE block at '{s}', expected closing '}}' or 'END'", .{self.fmtToken(source)}); | |
| 529 | return writer.print("unfinished STRINGTABLE block at '{f}', expected closing '}}' or 'END'", .{self.fmtToken(source)}); | |
| 531 | 530 | }, |
| 532 | 531 | .expected_token => { |
| 533 | return writer.print("expected '{s}', got '{s}'", .{ self.extra.expected.nameForErrorDisplay(), self.fmtToken(source) }); | |
| 532 | return writer.print("expected '{s}', got '{f}'", .{ self.extra.expected.nameForErrorDisplay(), self.fmtToken(source) }); | |
| 534 | 533 | }, |
| 535 | 534 | .expected_something_else => { |
| 536 | 535 | try writer.writeAll("expected "); |
| 537 | 536 | try self.extra.expected_types.writeCommaSeparated(writer); |
| 538 | return writer.print("; got '{s}'", .{self.fmtToken(source)}); | |
| 537 | return writer.print("; got '{f}'", .{self.fmtToken(source)}); | |
| 539 | 538 | }, |
| 540 | 539 | .resource_type_cant_use_raw_data => switch (self.type) { |
| 541 | .err, .warning => try writer.print("expected '<filename>', found '{s}' (resource type '{s}' can't use raw data)", .{ self.fmtToken(source), self.extra.resource.nameForErrorDisplay() }), | |
| 542 | .note => try writer.print("if '{s}' is intended to be a filename, it must be specified as a quoted string literal", .{self.fmtToken(source)}), | |
| 540 | .err, .warning => try writer.print("expected '<filename>', found '{f}' (resource type '{s}' can't use raw data)", .{ self.fmtToken(source), self.extra.resource.nameForErrorDisplay() }), | |
| 541 | .note => try writer.print("if '{f}' is intended to be a filename, it must be specified as a quoted string literal", .{self.fmtToken(source)}), | |
| 543 | 542 | .hint => return, |
| 544 | 543 | }, |
| 545 | 544 | .id_must_be_ordinal => { |
| 546 | try writer.print("id of resource type '{s}' must be an ordinal (u16), got '{s}'", .{ self.extra.resource.nameForErrorDisplay(), self.fmtToken(source) }); | |
| 545 | try writer.print("id of resource type '{s}' must be an ordinal (u16), got '{f}'", .{ self.extra.resource.nameForErrorDisplay(), self.fmtToken(source) }); | |
| 547 | 546 | }, |
| 548 | 547 | .name_or_id_not_allowed => { |
| 549 | 548 | try writer.print("name or id is not allowed for resource type '{s}'", .{self.extra.resource.nameForErrorDisplay()}); |
| ... | ... | @@ -559,7 +558,7 @@ pub const ErrorDetails = struct { |
| 559 | 558 | try writer.writeAll("ASCII character not equivalent to virtual key code"); |
| 560 | 559 | }, |
| 561 | 560 | .empty_menu_not_allowed => { |
| 562 | try writer.print("empty menu of type '{s}' not allowed", .{self.fmtToken(source)}); | |
| 561 | try writer.print("empty menu of type '{f}' not allowed", .{self.fmtToken(source)}); | |
| 563 | 562 | }, |
| 564 | 563 | .rc_would_miscompile_version_value_padding => switch (self.type) { |
| 565 | 564 | .err, .warning => return writer.print("the padding before this quoted string value would be miscompiled by the Win32 RC compiler", .{}), |
| ... | ... | @@ -624,7 +623,7 @@ pub const ErrorDetails = struct { |
| 624 | 623 | .string_already_defined => switch (self.type) { |
| 625 | 624 | .err, .warning => { |
| 626 | 625 | const language = self.extra.string_and_language.language; |
| 627 | return writer.print("string with id {d} (0x{X}) already defined for language {}", .{ self.extra.string_and_language.id, self.extra.string_and_language.id, language }); | |
| 626 | return writer.print("string with id {d} (0x{X}) already defined for language {f}", .{ self.extra.string_and_language.id, self.extra.string_and_language.id, language }); | |
| 628 | 627 | }, |
| 629 | 628 | .note => return writer.print("previous definition of string with id {d} (0x{X}) here", .{ self.extra.string_and_language.id, self.extra.string_and_language.id }), |
| 630 | 629 | .hint => return, |
| ... | ... | @@ -639,7 +638,7 @@ pub const ErrorDetails = struct { |
| 639 | 638 | try writer.print("unable to open file '{s}': {s}", .{ strings[self.extra.file_open_error.filename_string_index], @tagName(self.extra.file_open_error.err) }); |
| 640 | 639 | }, |
| 641 | 640 | .invalid_accelerator_key => { |
| 642 | try writer.print("invalid accelerator key '{s}': {s}", .{ self.fmtToken(source), @tagName(self.extra.accelerator_error.err) }); | |
| 641 | try writer.print("invalid accelerator key '{f}': {s}", .{ self.fmtToken(source), @tagName(self.extra.accelerator_error.err) }); | |
| 643 | 642 | }, |
| 644 | 643 | .accelerator_type_required => { |
| 645 | 644 | try writer.writeAll("accelerator type [ASCII or VIRTKEY] required when key is an integer"); |
| ... | ... | @@ -895,7 +894,7 @@ fn cellCount(code_page: SupportedCodePage, source: []const u8, start_index: usiz |
| 895 | 894 | |
| 896 | 895 | const truncated_str = "<...truncated...>"; |
| 897 | 896 | |
| 898 | pub fn renderErrorMessage(writer: anytype, tty_config: std.io.tty.Config, cwd: std.fs.Dir, err_details: ErrorDetails, source: []const u8, strings: []const []const u8, source_mappings: ?SourceMappings) !void { | |
| 897 | pub fn renderErrorMessage(writer: *std.io.Writer, tty_config: std.io.tty.Config, cwd: std.fs.Dir, err_details: ErrorDetails, source: []const u8, strings: []const []const u8, source_mappings: ?SourceMappings) !void { | |
| 899 | 898 | if (err_details.type == .hint) return; |
| 900 | 899 | |
| 901 | 900 | const source_line_start = err_details.token.getLineStartForErrorDisplay(source); |
| ... | ... | @@ -978,10 +977,10 @@ pub fn renderErrorMessage(writer: anytype, tty_config: std.io.tty.Config, cwd: s |
| 978 | 977 | |
| 979 | 978 | try tty_config.setColor(writer, .green); |
| 980 | 979 | const num_spaces = truncated_visual_info.point_offset - truncated_visual_info.before_len; |
| 981 | try writer.writeByteNTimes(' ', num_spaces); | |
| 982 | try writer.writeByteNTimes('~', truncated_visual_info.before_len); | |
| 980 | try writer.splatByteAll(' ', num_spaces); | |
| 981 | try writer.splatByteAll('~', truncated_visual_info.before_len); | |
| 983 | 982 | try writer.writeByte('^'); |
| 984 | try writer.writeByteNTimes('~', truncated_visual_info.after_len); | |
| 983 | try writer.splatByteAll('~', truncated_visual_info.after_len); | |
| 985 | 984 | try writer.writeByte('\n'); |
| 986 | 985 | try tty_config.setColor(writer, .reset); |
| 987 | 986 | |
| ... | ... | @@ -1082,7 +1081,7 @@ const CorrespondingLines = struct { |
| 1082 | 1081 | buffered_reader: BufferedReaderType, |
| 1083 | 1082 | code_page: SupportedCodePage, |
| 1084 | 1083 | |
| 1085 | const BufferedReaderType = std.io.BufferedReader(512, std.fs.File.Reader); | |
| 1084 | const BufferedReaderType = std.io.BufferedReader(512, std.fs.File.DeprecatedReader); | |
| 1086 | 1085 | |
| 1087 | 1086 | pub fn init(cwd: std.fs.Dir, err_details: ErrorDetails, line_for_comparison: []const u8, corresponding_span: SourceMappings.CorrespondingSpan, corresponding_file: []const u8) !CorrespondingLines { |
| 1088 | 1087 | // We don't do line comparison for this error, so don't print the note if the line |
lib/compiler/resinator/main.zig+10-6| ... | ... | @@ -29,7 +29,7 @@ pub fn main() !void { |
| 29 | 29 | defer std.process.argsFree(allocator, args); |
| 30 | 30 | |
| 31 | 31 | if (args.len < 2) { |
| 32 | try renderErrorMessage(stderr.deprecatedWriter(), stderr_config, .err, "expected zig lib dir as first argument", .{}); | |
| 32 | try renderErrorMessage(std.debug.lockStderrWriter(&.{}), stderr_config, .err, "expected zig lib dir as first argument", .{}); | |
| 33 | 33 | std.process.exit(1); |
| 34 | 34 | } |
| 35 | 35 | const zig_lib_dir = args[1]; |
| ... | ... | @@ -343,7 +343,7 @@ pub fn main() !void { |
| 343 | 343 | switch (err) { |
| 344 | 344 | error.DuplicateResource => { |
| 345 | 345 | const duplicate_resource = resources.list.items[cvtres_diagnostics.duplicate_resource]; |
| 346 | try error_handler.emitMessage(allocator, .err, "duplicate resource [id: {}, type: {}, language: {}]", .{ | |
| 346 | try error_handler.emitMessage(allocator, .err, "duplicate resource [id: {f}, type: {f}, language: {f}]", .{ | |
| 347 | 347 | duplicate_resource.name_value, |
| 348 | 348 | fmtResourceType(duplicate_resource.type_value), |
| 349 | 349 | duplicate_resource.language, |
| ... | ... | @@ -352,7 +352,7 @@ pub fn main() !void { |
| 352 | 352 | error.ResourceDataTooLong => { |
| 353 | 353 | const overflow_resource = resources.list.items[cvtres_diagnostics.duplicate_resource]; |
| 354 | 354 | try error_handler.emitMessage(allocator, .err, "resource has a data length that is too large to be written into a coff section", .{}); |
| 355 | try error_handler.emitMessage(allocator, .note, "the resource with the invalid size is [id: {}, type: {}, language: {}]", .{ | |
| 355 | try error_handler.emitMessage(allocator, .note, "the resource with the invalid size is [id: {f}, type: {f}, language: {f}]", .{ | |
| 356 | 356 | overflow_resource.name_value, |
| 357 | 357 | fmtResourceType(overflow_resource.type_value), |
| 358 | 358 | overflow_resource.language, |
| ... | ... | @@ -361,7 +361,7 @@ pub fn main() !void { |
| 361 | 361 | error.TotalResourceDataTooLong => { |
| 362 | 362 | const overflow_resource = resources.list.items[cvtres_diagnostics.duplicate_resource]; |
| 363 | 363 | try error_handler.emitMessage(allocator, .err, "total resource data exceeds the maximum of the coff 'size of raw data' field", .{}); |
| 364 | try error_handler.emitMessage(allocator, .note, "size overflow occurred when attempting to write this resource: [id: {}, type: {}, language: {}]", .{ | |
| 364 | try error_handler.emitMessage(allocator, .note, "size overflow occurred when attempting to write this resource: [id: {f}, type: {f}, language: {f}]", .{ | |
| 365 | 365 | overflow_resource.name_value, |
| 366 | 366 | fmtResourceType(overflow_resource.type_value), |
| 367 | 367 | overflow_resource.language, |
| ... | ... | @@ -645,7 +645,9 @@ const ErrorHandler = union(enum) { |
| 645 | 645 | }, |
| 646 | 646 | .tty => { |
| 647 | 647 | // extra newline to separate this line from the aro errors |
| 648 | try renderErrorMessage(std.fs.File.stderr().deprecatedWriter(), self.tty, .err, "{s}\n", .{fail_msg}); | |
| 648 | const stderr = std.debug.lockStderrWriter(&.{}); | |
| 649 | defer std.debug.unlockStderrWriter(); | |
| 650 | try renderErrorMessage(stderr, self.tty, .err, "{s}\n", .{fail_msg}); | |
| 649 | 651 | aro.Diagnostics.render(comp, self.tty); |
| 650 | 652 | }, |
| 651 | 653 | } |
| ... | ... | @@ -690,7 +692,9 @@ const ErrorHandler = union(enum) { |
| 690 | 692 | try server.serveErrorBundle(error_bundle); |
| 691 | 693 | }, |
| 692 | 694 | .tty => { |
| 693 | try renderErrorMessage(std.fs.File.stderr().deprecatedWriter(), self.tty, msg_type, format, args); | |
| 695 | const stderr = std.debug.lockStderrWriter(&.{}); | |
| 696 | defer std.debug.unlockStderrWriter(); | |
| 697 | try renderErrorMessage(stderr, self.tty, msg_type, format, args); | |
| 694 | 698 | }, |
| 695 | 699 | } |
| 696 | 700 | } |
lib/compiler/resinator/res.zig+2-2| ... | ... | @@ -442,7 +442,7 @@ pub const NameOrOrdinal = union(enum) { |
| 442 | 442 | pub fn format(self: NameOrOrdinal, w: *std.io.Writer) !void { |
| 443 | 443 | switch (self) { |
| 444 | 444 | .name => |name| { |
| 445 | try w.print("{s}", .{std.unicode.fmtUtf16Le(name)}); | |
| 445 | try w.print("{f}", .{std.unicode.fmtUtf16Le(name)}); | |
| 446 | 446 | }, |
| 447 | 447 | .ordinal => |ordinal| { |
| 448 | 448 | try w.print("{d}", .{ordinal}); |
| ... | ... | @@ -453,7 +453,7 @@ pub const NameOrOrdinal = union(enum) { |
| 453 | 453 | fn formatResourceType(self: NameOrOrdinal, w: *std.io.Writer) std.io.Writer.Error!void { |
| 454 | 454 | switch (self) { |
| 455 | 455 | .name => |name| { |
| 456 | try w.print("{s}", .{std.unicode.fmtUtf16Le(name)}); | |
| 456 | try w.print("{f}", .{std.unicode.fmtUtf16Le(name)}); | |
| 457 | 457 | }, |
| 458 | 458 | .ordinal => |ordinal| { |
| 459 | 459 | if (std.enums.tagName(RT, @enumFromInt(ordinal))) |predefined_type_name| { |
lib/compiler/resinator/utils.zig+1-1| ... | ... | @@ -86,7 +86,7 @@ pub const ErrorMessageType = enum { err, warning, note }; |
| 86 | 86 | |
| 87 | 87 | /// Used for generic colored errors/warnings/notes, more context-specific error messages |
| 88 | 88 | /// are handled elsewhere. |
| 89 | pub fn renderErrorMessage(writer: anytype, config: std.io.tty.Config, msg_type: ErrorMessageType, comptime format: []const u8, args: anytype) !void { | |
| 89 | pub fn renderErrorMessage(writer: *std.io.Writer, config: std.io.tty.Config, msg_type: ErrorMessageType, comptime format: []const u8, args: anytype) !void { | |
| 90 | 90 | switch (msg_type) { |
| 91 | 91 | .err => { |
| 92 | 92 | try config.setColor(writer, .bold); |
lib/fuzzer.zig+12-9| ... | ... | @@ -9,7 +9,8 @@ pub const std_options = std.Options{ |
| 9 | 9 | .logFn = logOverride, |
| 10 | 10 | }; |
| 11 | 11 | |
| 12 | var log_file: ?std.fs.File = null; | |
| 12 | var log_file_buffer: [256]u8 = undefined; | |
| 13 | var log_file_writer: ?std.fs.File.Writer = null; | |
| 13 | 14 | |
| 14 | 15 | fn logOverride( |
| 15 | 16 | comptime level: std.log.Level, |
| ... | ... | @@ -17,15 +18,17 @@ fn logOverride( |
| 17 | 18 | comptime format: []const u8, |
| 18 | 19 | args: anytype, |
| 19 | 20 | ) void { |
| 20 | const f = if (log_file) |f| f else f: { | |
| 21 | const fw = if (log_file_writer) |*f| f else f: { | |
| 21 | 22 | const f = fuzzer.cache_dir.createFile("tmp/libfuzzer.log", .{}) catch |
| 22 | 23 | @panic("failed to open fuzzer log file"); |
| 23 | log_file = f; | |
| 24 | break :f f; | |
| 24 | log_file_writer = f.writer(&log_file_buffer); | |
| 25 | break :f &log_file_writer.?; | |
| 25 | 26 | }; |
| 26 | 27 | const prefix1 = comptime level.asText(); |
| 27 | 28 | const prefix2 = if (scope == .default) ": " else "(" ++ @tagName(scope) ++ "): "; |
| 28 | f.writer().print(prefix1 ++ prefix2 ++ format ++ "\n", args) catch @panic("failed to write to fuzzer log"); | |
| 29 | fw.interface.print(prefix1 ++ prefix2 ++ format ++ "\n", args) catch | |
| 30 | @panic("failed to write to fuzzer log"); | |
| 31 | fw.interface.flush() catch @panic("failed to flush fuzzer log"); | |
| 29 | 32 | } |
| 30 | 33 | |
| 31 | 34 | /// Helps determine run uniqueness in the face of recursion. |
| ... | ... | @@ -226,18 +229,18 @@ const Fuzzer = struct { |
| 226 | 229 | .read = true, |
| 227 | 230 | }) catch |e| switch (e) { |
| 228 | 231 | error.PathAlreadyExists => continue, |
| 229 | else => fatal("unable to create '{}{d}: {s}", .{ f.corpus_directory, i, @errorName(err) }), | |
| 232 | else => fatal("unable to create '{f}{d}: {s}", .{ f.corpus_directory, i, @errorName(err) }), | |
| 230 | 233 | }; |
| 231 | 234 | errdefer input_file.close(); |
| 232 | 235 | // Initialize the mmap for the current input. |
| 233 | 236 | f.input = MemoryMappedList.create(input_file, 0, std.heap.page_size_max) catch |e| { |
| 234 | fatal("unable to init memory map for input at '{}{d}': {s}", .{ | |
| 237 | fatal("unable to init memory map for input at '{f}{d}': {s}", .{ | |
| 235 | 238 | f.corpus_directory, i, @errorName(e), |
| 236 | 239 | }); |
| 237 | 240 | }; |
| 238 | 241 | break; |
| 239 | 242 | }, |
| 240 | else => fatal("unable to read '{}{d}': {s}", .{ f.corpus_directory, i, @errorName(err) }), | |
| 243 | else => fatal("unable to read '{f}{d}': {s}", .{ f.corpus_directory, i, @errorName(err) }), | |
| 241 | 244 | }; |
| 242 | 245 | errdefer gpa.free(input); |
| 243 | 246 | f.corpus.append(gpa, .{ |
| ... | ... | @@ -263,7 +266,7 @@ const Fuzzer = struct { |
| 263 | 266 | const sub_path = try std.fmt.allocPrint(gpa, "f/{s}", .{f.unit_test_name}); |
| 264 | 267 | f.corpus_directory = .{ |
| 265 | 268 | .handle = f.cache_dir.makeOpenPath(sub_path, .{}) catch |err| |
| 266 | fatal("unable to open corpus directory 'f/{s}': {s}", .{ sub_path, @errorName(err) }), | |
| 269 | fatal("unable to open corpus directory 'f/{s}': {t}", .{ sub_path, err }), | |
| 267 | 270 | .path = sub_path, |
| 268 | 271 | }; |
| 269 | 272 | initNextInput(f); |
lib/std/elf.zig+5-5| ... | ... | @@ -511,7 +511,7 @@ pub const Header = struct { |
| 511 | 511 | pub fn read(parse_source: anytype) !Header { |
| 512 | 512 | var hdr_buf: [@sizeOf(Elf64_Ehdr)]u8 align(@alignOf(Elf64_Ehdr)) = undefined; |
| 513 | 513 | try parse_source.seekableStream().seekTo(0); |
| 514 | try parse_source.reader().readNoEof(&hdr_buf); | |
| 514 | try parse_source.deprecatedReader().readNoEof(&hdr_buf); | |
| 515 | 515 | return Header.parse(&hdr_buf); |
| 516 | 516 | } |
| 517 | 517 | |
| ... | ... | @@ -586,7 +586,7 @@ pub fn ProgramHeaderIterator(comptime ParseSource: anytype) type { |
| 586 | 586 | var phdr: Elf64_Phdr = undefined; |
| 587 | 587 | const offset = self.elf_header.phoff + @sizeOf(@TypeOf(phdr)) * self.index; |
| 588 | 588 | try self.parse_source.seekableStream().seekTo(offset); |
| 589 | try self.parse_source.reader().readNoEof(mem.asBytes(&phdr)); | |
| 589 | try self.parse_source.deprecatedReader().readNoEof(mem.asBytes(&phdr)); | |
| 590 | 590 | |
| 591 | 591 | // ELF endianness matches native endianness. |
| 592 | 592 | if (self.elf_header.endian == native_endian) return phdr; |
| ... | ... | @@ -599,7 +599,7 @@ pub fn ProgramHeaderIterator(comptime ParseSource: anytype) type { |
| 599 | 599 | var phdr: Elf32_Phdr = undefined; |
| 600 | 600 | const offset = self.elf_header.phoff + @sizeOf(@TypeOf(phdr)) * self.index; |
| 601 | 601 | try self.parse_source.seekableStream().seekTo(offset); |
| 602 | try self.parse_source.reader().readNoEof(mem.asBytes(&phdr)); | |
| 602 | try self.parse_source.deprecatedReader().readNoEof(mem.asBytes(&phdr)); | |
| 603 | 603 | |
| 604 | 604 | // ELF endianness does NOT match native endianness. |
| 605 | 605 | if (self.elf_header.endian != native_endian) { |
| ... | ... | @@ -636,7 +636,7 @@ pub fn SectionHeaderIterator(comptime ParseSource: anytype) type { |
| 636 | 636 | var shdr: Elf64_Shdr = undefined; |
| 637 | 637 | const offset = self.elf_header.shoff + @sizeOf(@TypeOf(shdr)) * self.index; |
| 638 | 638 | try self.parse_source.seekableStream().seekTo(offset); |
| 639 | try self.parse_source.reader().readNoEof(mem.asBytes(&shdr)); | |
| 639 | try self.parse_source.deprecatedReader().readNoEof(mem.asBytes(&shdr)); | |
| 640 | 640 | |
| 641 | 641 | // ELF endianness matches native endianness. |
| 642 | 642 | if (self.elf_header.endian == native_endian) return shdr; |
| ... | ... | @@ -649,7 +649,7 @@ pub fn SectionHeaderIterator(comptime ParseSource: anytype) type { |
| 649 | 649 | var shdr: Elf32_Shdr = undefined; |
| 650 | 650 | const offset = self.elf_header.shoff + @sizeOf(@TypeOf(shdr)) * self.index; |
| 651 | 651 | try self.parse_source.seekableStream().seekTo(offset); |
| 652 | try self.parse_source.reader().readNoEof(mem.asBytes(&shdr)); | |
| 652 | try self.parse_source.deprecatedReader().readNoEof(mem.asBytes(&shdr)); | |
| 653 | 653 | |
| 654 | 654 | // ELF endianness does NOT match native endianness. |
| 655 | 655 | if (self.elf_header.endian != native_endian) { |
lib/std/io/Writer.zig+2| ... | ... | @@ -705,6 +705,8 @@ pub fn sendFileReading(w: *Writer, file_reader: *File.Reader, limit: Limit) File |
| 705 | 705 | return n; |
| 706 | 706 | } |
| 707 | 707 | |
| 708 | /// Number of bytes logically written is returned. This excludes bytes from | |
| 709 | /// `buffer` because they have already been logically written. | |
| 708 | 710 | pub fn sendFileAll(w: *Writer, file_reader: *File.Reader, limit: Limit) FileAllError!usize { |
| 709 | 711 | var remaining = @intFromEnum(limit); |
| 710 | 712 | while (remaining > 0) { |
lib/std/os/windows.zig+2-3| ... | ... | @@ -2812,9 +2812,8 @@ pub fn unexpectedError(err: Win32Error) UnexpectedError { |
| 2812 | 2812 | buf_wstr.len, |
| 2813 | 2813 | null, |
| 2814 | 2814 | ); |
| 2815 | std.debug.print("error.Unexpected: GetLastError({}): {}\n", .{ | |
| 2816 | @intFromEnum(err), | |
| 2817 | std.unicode.fmtUtf16Le(buf_wstr[0..len]), | |
| 2815 | std.debug.print("error.Unexpected: GetLastError({d}): {f}\n", .{ | |
| 2816 | err, std.unicode.fmtUtf16Le(buf_wstr[0..len]), | |
| 2818 | 2817 | }); |
| 2819 | 2818 | std.debug.dumpCurrentStackTrace(@returnAddress()); |
| 2820 | 2819 | } |
lib/std/zig/parser_test.zig+4-4| ... | ... | @@ -2744,11 +2744,11 @@ test "zig fmt: preserve spacing" { |
| 2744 | 2744 | \\const std = @import("std"); |
| 2745 | 2745 | \\ |
| 2746 | 2746 | \\pub fn main() !void { |
| 2747 | \\ var stdout_file = std.io.getStdOut; | |
| 2748 | \\ var stdout_file = std.io.getStdOut; | |
| 2747 | \\ var stdout_file = std.lol.abcd; | |
| 2748 | \\ var stdout_file = std.lol.abcd; | |
| 2749 | 2749 | \\ |
| 2750 | \\ var stdout_file = std.io.getStdOut; | |
| 2751 | \\ var stdout_file = std.io.getStdOut; | |
| 2750 | \\ var stdout_file = std.lol.abcd; | |
| 2751 | \\ var stdout_file = std.lol.abcd; | |
| 2752 | 2752 | \\} |
| 2753 | 2753 | \\ |
| 2754 | 2754 | ); |
src/main.zig+6-6| ... | ... | @@ -6074,7 +6074,7 @@ fn cmdAstCheck( |
| 6074 | 6074 | |
| 6075 | 6075 | const tree = try Ast.parse(arena, source, mode); |
| 6076 | 6076 | |
| 6077 | var stdout_writer = fs.File.stdout().writer(&stdio_buffer); | |
| 6077 | var stdout_writer = fs.File.stdout().writerStreaming(&stdio_buffer); | |
| 6078 | 6078 | const stdout_bw = &stdout_writer.interface; |
| 6079 | 6079 | switch (mode) { |
| 6080 | 6080 | .zig => { |
| ... | ... | @@ -6289,7 +6289,7 @@ fn detectNativeCpuWithLLVM( |
| 6289 | 6289 | } |
| 6290 | 6290 | |
| 6291 | 6291 | fn printCpu(cpu: std.Target.Cpu) !void { |
| 6292 | var stdout_writer = fs.File.stdout().writer(&stdio_buffer); | |
| 6292 | var stdout_writer = fs.File.stdout().writerStreaming(&stdio_buffer); | |
| 6293 | 6293 | const stdout_bw = &stdout_writer.interface; |
| 6294 | 6294 | |
| 6295 | 6295 | if (cpu.model.llvm_name) |llvm_name| { |
| ... | ... | @@ -6338,7 +6338,7 @@ fn cmdDumpLlvmInts( |
| 6338 | 6338 | const dl = tm.createTargetDataLayout(); |
| 6339 | 6339 | const context = llvm.Context.create(); |
| 6340 | 6340 | |
| 6341 | var stdout_writer = fs.File.stdout().writer(&stdio_buffer); | |
| 6341 | var stdout_writer = fs.File.stdout().writerStreaming(&stdio_buffer); | |
| 6342 | 6342 | const stdout_bw = &stdout_writer.interface; |
| 6343 | 6343 | for ([_]u16{ 1, 8, 16, 32, 64, 128, 256 }) |bits| { |
| 6344 | 6344 | const int_type = context.intType(bits); |
| ... | ... | @@ -6367,7 +6367,7 @@ fn cmdDumpZir( |
| 6367 | 6367 | defer f.close(); |
| 6368 | 6368 | |
| 6369 | 6369 | const zir = try Zcu.loadZirCache(arena, f); |
| 6370 | var stdout_writer = fs.File.stdout().writer(&stdio_buffer); | |
| 6370 | var stdout_writer = fs.File.stdout().writerStreaming(&stdio_buffer); | |
| 6371 | 6371 | const stdout_bw = &stdout_writer.interface; |
| 6372 | 6372 | |
| 6373 | 6373 | { |
| ... | ... | @@ -6453,7 +6453,7 @@ fn cmdChangelist( |
| 6453 | 6453 | var inst_map: std.AutoHashMapUnmanaged(Zir.Inst.Index, Zir.Inst.Index) = .empty; |
| 6454 | 6454 | try Zcu.mapOldZirToNew(arena, old_zir, new_zir, &inst_map); |
| 6455 | 6455 | |
| 6456 | var stdout_writer = fs.File.stdout().writer(&stdio_buffer); | |
| 6456 | var stdout_writer = fs.File.stdout().writerStreaming(&stdio_buffer); | |
| 6457 | 6457 | const stdout_bw = &stdout_writer.interface; |
| 6458 | 6458 | { |
| 6459 | 6459 | try stdout_bw.print("Instruction mappings:\n", .{}); |
| ... | ... | @@ -6913,7 +6913,7 @@ fn cmdFetch( |
| 6913 | 6913 | |
| 6914 | 6914 | const name = switch (save) { |
| 6915 | 6915 | .no => { |
| 6916 | var stdout = fs.File.stdout().writer(&stdio_buffer); | |
| 6916 | var stdout = fs.File.stdout().writerStreaming(&stdio_buffer); | |
| 6917 | 6917 | try stdout.interface.print("{s}\n", .{package_hash_slice}); |
| 6918 | 6918 | try stdout.interface.flush(); |
| 6919 | 6919 | return cleanExit(); |
test/compare_output.zig+3-286| ... | ... | @@ -17,15 +17,6 @@ pub fn addCases(cases: *tests.CompareOutputContext) void { |
| 17 | 17 | \\} |
| 18 | 18 | , "Hello, world!" ++ if (@import("builtin").os.tag == .windows) "\r\n" else "\n"); |
| 19 | 19 | |
| 20 | cases.add("hello world without libc", | |
| 21 | \\const io = @import("std").io; | |
| 22 | \\ | |
| 23 | \\pub fn main() void { | |
| 24 | \\ const stdout = io.getStdOut().writer(); | |
| 25 | \\ stdout.print("Hello, world!\n{d:4} {x:3} {c}\n", .{@as(u32, 12), @as(u16, 0x12), @as(u8, 'a')}) catch unreachable; | |
| 26 | \\} | |
| 27 | , "Hello, world!\n 12 12 a\n"); | |
| 28 | ||
| 29 | 20 | cases.addC("number literals", |
| 30 | 21 | \\const std = @import("std"); |
| 31 | 22 | \\const builtin = @import("builtin"); |
| ... | ... | @@ -158,24 +149,6 @@ pub fn addCases(cases: *tests.CompareOutputContext) void { |
| 158 | 149 | \\ |
| 159 | 150 | ); |
| 160 | 151 | |
| 161 | cases.add("order-independent declarations", | |
| 162 | \\const io = @import("std").io; | |
| 163 | \\const z = io.stdin_fileno; | |
| 164 | \\const x : @TypeOf(y) = 1234; | |
| 165 | \\const y : u16 = 5678; | |
| 166 | \\pub fn main() void { | |
| 167 | \\ var x_local : i32 = print_ok(x); | |
| 168 | \\ _ = &x_local; | |
| 169 | \\} | |
| 170 | \\fn print_ok(val: @TypeOf(x)) @TypeOf(foo) { | |
| 171 | \\ _ = val; | |
| 172 | \\ const stdout = io.getStdOut().writer(); | |
| 173 | \\ stdout.print("OK\n", .{}) catch unreachable; | |
| 174 | \\ return 0; | |
| 175 | \\} | |
| 176 | \\const foo : i32 = 0; | |
| 177 | , "OK\n"); | |
| 178 | ||
| 179 | 152 | cases.addC("expose function pointer to C land", |
| 180 | 153 | \\const c = @cImport(@cInclude("stdlib.h")); |
| 181 | 154 | \\ |
| ... | ... | @@ -236,267 +209,11 @@ pub fn addCases(cases: *tests.CompareOutputContext) void { |
| 236 | 209 | \\} |
| 237 | 210 | , "3.25\n3\n3.00\n-0.40\n"); |
| 238 | 211 | |
| 239 | cases.add("same named methods in incomplete struct", | |
| 240 | \\const io = @import("std").io; | |
| 241 | \\ | |
| 242 | \\const Foo = struct { | |
| 243 | \\ field1: Bar, | |
| 244 | \\ | |
| 245 | \\ fn method(a: *const Foo) bool { | |
| 246 | \\ _ = a; | |
| 247 | \\ return true; | |
| 248 | \\ } | |
| 249 | \\}; | |
| 250 | \\ | |
| 251 | \\const Bar = struct { | |
| 252 | \\ field2: i32, | |
| 253 | \\ | |
| 254 | \\ fn method(b: *const Bar) bool { | |
| 255 | \\ _ = b; | |
| 256 | \\ return true; | |
| 257 | \\ } | |
| 258 | \\}; | |
| 259 | \\ | |
| 260 | \\pub fn main() void { | |
| 261 | \\ const bar = Bar {.field2 = 13,}; | |
| 262 | \\ const foo = Foo {.field1 = bar,}; | |
| 263 | \\ const stdout = io.getStdOut().writer(); | |
| 264 | \\ if (!foo.method()) { | |
| 265 | \\ stdout.print("BAD\n", .{}) catch unreachable; | |
| 266 | \\ } | |
| 267 | \\ if (!bar.method()) { | |
| 268 | \\ stdout.print("BAD\n", .{}) catch unreachable; | |
| 269 | \\ } | |
| 270 | \\ stdout.print("OK\n", .{}) catch unreachable; | |
| 271 | \\} | |
| 272 | , "OK\n"); | |
| 273 | ||
| 274 | cases.add("defer with only fallthrough", | |
| 275 | \\const io = @import("std").io; | |
| 276 | \\pub fn main() void { | |
| 277 | \\ const stdout = io.getStdOut().writer(); | |
| 278 | \\ stdout.print("before\n", .{}) catch unreachable; | |
| 279 | \\ defer stdout.print("defer1\n", .{}) catch unreachable; | |
| 280 | \\ defer stdout.print("defer2\n", .{}) catch unreachable; | |
| 281 | \\ defer stdout.print("defer3\n", .{}) catch unreachable; | |
| 282 | \\ stdout.print("after\n", .{}) catch unreachable; | |
| 283 | \\} | |
| 284 | , "before\nafter\ndefer3\ndefer2\ndefer1\n"); | |
| 285 | ||
| 286 | cases.add("defer with return", | |
| 287 | \\const io = @import("std").io; | |
| 288 | \\const os = @import("std").os; | |
| 289 | \\pub fn main() void { | |
| 290 | \\ const stdout = io.getStdOut().writer(); | |
| 291 | \\ stdout.print("before\n", .{}) catch unreachable; | |
| 292 | \\ defer stdout.print("defer1\n", .{}) catch unreachable; | |
| 293 | \\ defer stdout.print("defer2\n", .{}) catch unreachable; | |
| 294 | \\ var gpa: @import("std").heap.GeneralPurposeAllocator(.{}) = .init; | |
| 295 | \\ defer _ = gpa.deinit(); | |
| 296 | \\ var arena = @import("std").heap.ArenaAllocator.init(gpa.allocator()); | |
| 297 | \\ defer arena.deinit(); | |
| 298 | \\ var args_it = @import("std").process.argsWithAllocator(arena.allocator()) catch unreachable; | |
| 299 | \\ if (args_it.skip() and !args_it.skip()) return; | |
| 300 | \\ defer stdout.print("defer3\n", .{}) catch unreachable; | |
| 301 | \\ stdout.print("after\n", .{}) catch unreachable; | |
| 302 | \\} | |
| 303 | , "before\ndefer2\ndefer1\n"); | |
| 304 | ||
| 305 | cases.add("errdefer and it fails", | |
| 306 | \\const io = @import("std").io; | |
| 307 | \\pub fn main() void { | |
| 308 | \\ do_test() catch return; | |
| 309 | \\} | |
| 310 | \\fn do_test() !void { | |
| 311 | \\ const stdout = io.getStdOut().writer(); | |
| 312 | \\ stdout.print("before\n", .{}) catch unreachable; | |
| 313 | \\ defer stdout.print("defer1\n", .{}) catch unreachable; | |
| 314 | \\ errdefer stdout.print("deferErr\n", .{}) catch unreachable; | |
| 315 | \\ try its_gonna_fail(); | |
| 316 | \\ defer stdout.print("defer3\n", .{}) catch unreachable; | |
| 317 | \\ stdout.print("after\n", .{}) catch unreachable; | |
| 318 | \\} | |
| 319 | \\fn its_gonna_fail() !void { | |
| 320 | \\ return error.IToldYouItWouldFail; | |
| 321 | \\} | |
| 322 | , "before\ndeferErr\ndefer1\n"); | |
| 323 | ||
| 324 | cases.add("errdefer and it passes", | |
| 325 | \\const io = @import("std").io; | |
| 326 | \\pub fn main() void { | |
| 327 | \\ do_test() catch return; | |
| 328 | \\} | |
| 329 | \\fn do_test() !void { | |
| 330 | \\ const stdout = io.getStdOut().writer(); | |
| 331 | \\ stdout.print("before\n", .{}) catch unreachable; | |
| 332 | \\ defer stdout.print("defer1\n", .{}) catch unreachable; | |
| 333 | \\ errdefer stdout.print("deferErr\n", .{}) catch unreachable; | |
| 334 | \\ try its_gonna_pass(); | |
| 335 | \\ defer stdout.print("defer3\n", .{}) catch unreachable; | |
| 336 | \\ stdout.print("after\n", .{}) catch unreachable; | |
| 337 | \\} | |
| 338 | \\fn its_gonna_pass() anyerror!void { } | |
| 339 | , "before\nafter\ndefer3\ndefer1\n"); | |
| 340 | ||
| 341 | cases.addCase(x: { | |
| 342 | var tc = cases.create("@embedFile", | |
| 343 | \\const foo_txt = @embedFile("foo.txt"); | |
| 344 | \\const io = @import("std").io; | |
| 345 | \\ | |
| 346 | \\pub fn main() void { | |
| 347 | \\ const stdout = io.getStdOut().writer(); | |
| 348 | \\ stdout.print(foo_txt, .{}) catch unreachable; | |
| 349 | \\} | |
| 350 | , "1234\nabcd\n"); | |
| 351 | ||
| 352 | tc.addSourceFile("foo.txt", "1234\nabcd\n"); | |
| 353 | ||
| 354 | break :x tc; | |
| 355 | }); | |
| 356 | ||
| 357 | cases.addCase(x: { | |
| 358 | var tc = cases.create("parsing args", | |
| 359 | \\const std = @import("std"); | |
| 360 | \\const io = std.io; | |
| 361 | \\const os = std.os; | |
| 362 | \\ | |
| 363 | \\pub fn main() !void { | |
| 364 | \\ var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init; | |
| 365 | \\ defer _ = gpa.deinit(); | |
| 366 | \\ var arena = std.heap.ArenaAllocator.init(gpa.allocator()); | |
| 367 | \\ defer arena.deinit(); | |
| 368 | \\ var args_it = try std.process.argsWithAllocator(arena.allocator()); | |
| 369 | \\ const stdout = io.getStdOut().writer(); | |
| 370 | \\ var index: usize = 0; | |
| 371 | \\ _ = args_it.skip(); | |
| 372 | \\ while (args_it.next()) |arg| : (index += 1) { | |
| 373 | \\ try stdout.print("{}: {s}\n", .{index, arg}); | |
| 374 | \\ } | |
| 375 | \\} | |
| 376 | , | |
| 377 | \\0: first arg | |
| 378 | \\1: 'a' 'b' \ | |
| 379 | \\2: bare | |
| 380 | \\3: ba""re | |
| 381 | \\4: " | |
| 382 | \\5: last arg | |
| 383 | \\ | |
| 384 | ); | |
| 385 | ||
| 386 | tc.setCommandLineArgs(&[_][]const u8{ | |
| 387 | "first arg", | |
| 388 | "'a' 'b' \\", | |
| 389 | "bare", | |
| 390 | "ba\"\"re", | |
| 391 | "\"", | |
| 392 | "last arg", | |
| 393 | }); | |
| 394 | ||
| 395 | break :x tc; | |
| 396 | }); | |
| 397 | ||
| 398 | cases.addCase(x: { | |
| 399 | var tc = cases.create("parsing args new API", | |
| 400 | \\const std = @import("std"); | |
| 401 | \\const io = std.io; | |
| 402 | \\const os = std.os; | |
| 403 | \\ | |
| 404 | \\pub fn main() !void { | |
| 405 | \\ var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init; | |
| 406 | \\ defer _ = gpa.deinit(); | |
| 407 | \\ var arena = std.heap.ArenaAllocator.init(gpa.allocator()); | |
| 408 | \\ defer arena.deinit(); | |
| 409 | \\ var args_it = try std.process.argsWithAllocator(arena.allocator()); | |
| 410 | \\ const stdout = io.getStdOut().writer(); | |
| 411 | \\ var index: usize = 0; | |
| 412 | \\ _ = args_it.skip(); | |
| 413 | \\ while (args_it.next()) |arg| : (index += 1) { | |
| 414 | \\ try stdout.print("{}: {s}\n", .{index, arg}); | |
| 415 | \\ } | |
| 416 | \\} | |
| 417 | , | |
| 418 | \\0: first arg | |
| 419 | \\1: 'a' 'b' \ | |
| 420 | \\2: bare | |
| 421 | \\3: ba""re | |
| 422 | \\4: " | |
| 423 | \\5: last arg | |
| 424 | \\ | |
| 425 | ); | |
| 426 | ||
| 427 | tc.setCommandLineArgs(&[_][]const u8{ | |
| 428 | "first arg", | |
| 429 | "'a' 'b' \\", | |
| 430 | "bare", | |
| 431 | "ba\"\"re", | |
| 432 | "\"", | |
| 433 | "last arg", | |
| 434 | }); | |
| 435 | ||
| 436 | break :x tc; | |
| 437 | }); | |
| 438 | ||
| 439 | // It is required to override the log function in order to print to stdout instead of stderr | |
| 440 | cases.add("std.log per scope log level override", | |
| 441 | \\const std = @import("std"); | |
| 442 | \\ | |
| 443 | \\pub const std_options: std.Options = .{ | |
| 444 | \\ .log_level = .debug, | |
| 445 | \\ | |
| 446 | \\ .log_scope_levels = &.{ | |
| 447 | \\ .{ .scope = .a, .level = .warn }, | |
| 448 | \\ .{ .scope = .c, .level = .err }, | |
| 449 | \\ }, | |
| 450 | \\ .logFn = log, | |
| 451 | \\}; | |
| 452 | \\ | |
| 453 | \\const loga = std.log.scoped(.a); | |
| 454 | \\const logb = std.log.scoped(.b); | |
| 455 | \\const logc = std.log.scoped(.c); | |
| 456 | \\ | |
| 457 | \\pub fn main() !void { | |
| 458 | \\ loga.debug("", .{}); | |
| 459 | \\ logb.debug("", .{}); | |
| 460 | \\ logc.debug("", .{}); | |
| 461 | \\ | |
| 462 | \\ loga.info("", .{}); | |
| 463 | \\ logb.info("", .{}); | |
| 464 | \\ logc.info("", .{}); | |
| 465 | \\ | |
| 466 | \\ loga.warn("", .{}); | |
| 467 | \\ logb.warn("", .{}); | |
| 468 | \\ logc.warn("", .{}); | |
| 469 | \\ | |
| 470 | \\ loga.err("", .{}); | |
| 471 | \\ logb.err("", .{}); | |
| 472 | \\ logc.err("", .{}); | |
| 473 | \\} | |
| 474 | \\pub fn log( | |
| 475 | \\ comptime level: std.log.Level, | |
| 476 | \\ comptime scope: @TypeOf(.EnumLiteral), | |
| 477 | \\ comptime format: []const u8, | |
| 478 | \\ args: anytype, | |
| 479 | \\) void { | |
| 480 | \\ const level_txt = comptime level.asText(); | |
| 481 | \\ const prefix2 = if (scope == .default) ": " else "(" ++ @tagName(scope) ++ "):"; | |
| 482 | \\ const stdout = std.io.getStdOut().writer(); | |
| 483 | \\ nosuspend stdout.print(level_txt ++ prefix2 ++ format ++ "\n", args) catch return; | |
| 484 | \\} | |
| 485 | , | |
| 486 | \\debug(b): | |
| 487 | \\info(b): | |
| 488 | \\warning(a): | |
| 489 | \\warning(b): | |
| 490 | \\error(a): | |
| 491 | \\error(b): | |
| 492 | \\error(c): | |
| 493 | \\ | |
| 494 | ); | |
| 495 | ||
| 496 | cases.add("valid carriage return example", "const io = @import(\"std\").io;\r\n" ++ // Testing CRLF line endings are valid | |
| 212 | cases.add("valid carriage return example", "const std = @import(\"std\");\r\n" ++ // Testing CRLF line endings are valid | |
| 497 | 213 | "\r\n" ++ |
| 498 | 214 | "pub \r fn main() void {\r\n" ++ // Testing isolated carriage return as whitespace is valid |
| 499 | " const stdout = io.getStdOut().writer();\r\n" ++ | |
| 215 | " var file_writer = std.fs.File.stdout().writerStreaming(&.{});\r\n" ++ | |
| 216 | " const stdout = &file_writer.interface;\r\n" ++ | |
| 500 | 217 | " stdout.print(\\\\A Multiline\r\n" ++ // testing CRLF at end of multiline string line is valid and normalises to \n in the output |
| 501 | 218 | " \\\\String\r\n" ++ |
| 502 | 219 | " , .{}) catch unreachable;\r\n" ++ |
test/incremental/add_decl+7-7| ... | ... | @@ -6,7 +6,7 @@ |
| 6 | 6 | #file=main.zig |
| 7 | 7 | const std = @import("std"); |
| 8 | 8 | pub fn main() !void { |
| 9 | try std.io.getStdOut().writeAll(foo); | |
| 9 | try std.fs.File.stdout().writeAll(foo); | |
| 10 | 10 | } |
| 11 | 11 | const foo = "good morning\n"; |
| 12 | 12 | #expect_stdout="good morning\n" |
| ... | ... | @@ -15,7 +15,7 @@ const foo = "good morning\n"; |
| 15 | 15 | #file=main.zig |
| 16 | 16 | const std = @import("std"); |
| 17 | 17 | pub fn main() !void { |
| 18 | try std.io.getStdOut().writeAll(foo); | |
| 18 | try std.fs.File.stdout().writeAll(foo); | |
| 19 | 19 | } |
| 20 | 20 | const foo = "good morning\n"; |
| 21 | 21 | const bar = "good evening\n"; |
| ... | ... | @@ -25,7 +25,7 @@ const bar = "good evening\n"; |
| 25 | 25 | #file=main.zig |
| 26 | 26 | const std = @import("std"); |
| 27 | 27 | pub fn main() !void { |
| 28 | try std.io.getStdOut().writeAll(bar); | |
| 28 | try std.fs.File.stdout().writeAll(bar); | |
| 29 | 29 | } |
| 30 | 30 | const foo = "good morning\n"; |
| 31 | 31 | const bar = "good evening\n"; |
| ... | ... | @@ -35,17 +35,17 @@ const bar = "good evening\n"; |
| 35 | 35 | #file=main.zig |
| 36 | 36 | const std = @import("std"); |
| 37 | 37 | pub fn main() !void { |
| 38 | try std.io.getStdOut().writeAll(qux); | |
| 38 | try std.fs.File.stdout().writeAll(qux); | |
| 39 | 39 | } |
| 40 | 40 | const foo = "good morning\n"; |
| 41 | 41 | const bar = "good evening\n"; |
| 42 | #expect_error=main.zig:3:37: error: use of undeclared identifier 'qux' | |
| 42 | #expect_error=main.zig:3:39: error: use of undeclared identifier 'qux' | |
| 43 | 43 | |
| 44 | 44 | #update=add missing declaration |
| 45 | 45 | #file=main.zig |
| 46 | 46 | const std = @import("std"); |
| 47 | 47 | pub fn main() !void { |
| 48 | try std.io.getStdOut().writeAll(qux); | |
| 48 | try std.fs.File.stdout().writeAll(qux); | |
| 49 | 49 | } |
| 50 | 50 | const foo = "good morning\n"; |
| 51 | 51 | const bar = "good evening\n"; |
| ... | ... | @@ -56,7 +56,7 @@ const qux = "good night\n"; |
| 56 | 56 | #file=main.zig |
| 57 | 57 | const std = @import("std"); |
| 58 | 58 | pub fn main() !void { |
| 59 | try std.io.getStdOut().writeAll(qux); | |
| 59 | try std.fs.File.stdout().writeAll(qux); | |
| 60 | 60 | } |
| 61 | 61 | const qux = "good night\n"; |
| 62 | 62 | #expect_stdout="good night\n" |
test/incremental/add_decl_namespaced+7-7| ... | ... | @@ -6,7 +6,7 @@ |
| 6 | 6 | #file=main.zig |
| 7 | 7 | const std = @import("std"); |
| 8 | 8 | pub fn main() !void { |
| 9 | try std.io.getStdOut().writeAll(@This().foo); | |
| 9 | try std.fs.File.stdout().writeAll(@This().foo); | |
| 10 | 10 | } |
| 11 | 11 | const foo = "good morning\n"; |
| 12 | 12 | #expect_stdout="good morning\n" |
| ... | ... | @@ -15,7 +15,7 @@ const foo = "good morning\n"; |
| 15 | 15 | #file=main.zig |
| 16 | 16 | const std = @import("std"); |
| 17 | 17 | pub fn main() !void { |
| 18 | try std.io.getStdOut().writeAll(@This().foo); | |
| 18 | try std.fs.File.stdout().writeAll(@This().foo); | |
| 19 | 19 | } |
| 20 | 20 | const foo = "good morning\n"; |
| 21 | 21 | const bar = "good evening\n"; |
| ... | ... | @@ -25,7 +25,7 @@ const bar = "good evening\n"; |
| 25 | 25 | #file=main.zig |
| 26 | 26 | const std = @import("std"); |
| 27 | 27 | pub fn main() !void { |
| 28 | try std.io.getStdOut().writeAll(@This().bar); | |
| 28 | try std.fs.File.stdout().writeAll(@This().bar); | |
| 29 | 29 | } |
| 30 | 30 | const foo = "good morning\n"; |
| 31 | 31 | const bar = "good evening\n"; |
| ... | ... | @@ -35,18 +35,18 @@ const bar = "good evening\n"; |
| 35 | 35 | #file=main.zig |
| 36 | 36 | const std = @import("std"); |
| 37 | 37 | pub fn main() !void { |
| 38 | try std.io.getStdOut().writeAll(@This().qux); | |
| 38 | try std.fs.File.stdout().writeAll(@This().qux); | |
| 39 | 39 | } |
| 40 | 40 | const foo = "good morning\n"; |
| 41 | 41 | const bar = "good evening\n"; |
| 42 | #expect_error=main.zig:3:44: error: root source file struct 'main' has no member named 'qux' | |
| 42 | #expect_error=main.zig:3:46: error: root source file struct 'main' has no member named 'qux' | |
| 43 | 43 | #expect_error=main.zig:1:1: note: struct declared here |
| 44 | 44 | |
| 45 | 45 | #update=add missing declaration |
| 46 | 46 | #file=main.zig |
| 47 | 47 | const std = @import("std"); |
| 48 | 48 | pub fn main() !void { |
| 49 | try std.io.getStdOut().writeAll(@This().qux); | |
| 49 | try std.fs.File.stdout().writeAll(@This().qux); | |
| 50 | 50 | } |
| 51 | 51 | const foo = "good morning\n"; |
| 52 | 52 | const bar = "good evening\n"; |
| ... | ... | @@ -57,7 +57,7 @@ const qux = "good night\n"; |
| 57 | 57 | #file=main.zig |
| 58 | 58 | const std = @import("std"); |
| 59 | 59 | pub fn main() !void { |
| 60 | try std.io.getStdOut().writeAll(@This().qux); | |
| 60 | try std.fs.File.stdout().writeAll(@This().qux); | |
| 61 | 61 | } |
| 62 | 62 | const qux = "good night\n"; |
| 63 | 63 | #expect_stdout="good night\n" |
test/incremental/bad_import+2-2| ... | ... | @@ -7,7 +7,7 @@ |
| 7 | 7 | #file=main.zig |
| 8 | 8 | pub fn main() !void { |
| 9 | 9 | _ = @import("foo.zig"); |
| 10 | try std.io.getStdOut().writeAll("success\n"); | |
| 10 | try std.fs.File.stdout().writeAll("success\n"); | |
| 11 | 11 | } |
| 12 | 12 | const std = @import("std"); |
| 13 | 13 | #file=foo.zig |
| ... | ... | @@ -29,7 +29,7 @@ comptime { |
| 29 | 29 | #file=main.zig |
| 30 | 30 | pub fn main() !void { |
| 31 | 31 | //_ = @import("foo.zig"); |
| 32 | try std.io.getStdOut().writeAll("success\n"); | |
| 32 | try std.fs.File.stdout().writeAll("success\n"); | |
| 33 | 33 | } |
| 34 | 34 | const std = @import("std"); |
| 35 | 35 | #expect_stdout="success\n" |
test/incremental/change_embed_file+3-3| ... | ... | @@ -7,7 +7,7 @@ |
| 7 | 7 | const std = @import("std"); |
| 8 | 8 | const string = @embedFile("string.txt"); |
| 9 | 9 | pub fn main() !void { |
| 10 | try std.io.getStdOut().writeAll(string); | |
| 10 | try std.fs.File.stdout().writeAll(string); | |
| 11 | 11 | } |
| 12 | 12 | #file=string.txt |
| 13 | 13 | Hello, World! |
| ... | ... | @@ -27,7 +27,7 @@ Hello again, World! |
| 27 | 27 | const std = @import("std"); |
| 28 | 28 | const string = @embedFile("string.txt"); |
| 29 | 29 | pub fn main() !void { |
| 30 | try std.io.getStdOut().writeAll("a hardcoded string\n"); | |
| 30 | try std.fs.File.stdout().writeAll("a hardcoded string\n"); | |
| 31 | 31 | } |
| 32 | 32 | #expect_stdout="a hardcoded string\n" |
| 33 | 33 | |
| ... | ... | @@ -36,7 +36,7 @@ pub fn main() !void { |
| 36 | 36 | const std = @import("std"); |
| 37 | 37 | const string = @embedFile("string.txt"); |
| 38 | 38 | pub fn main() !void { |
| 39 | try std.io.getStdOut().writeAll(string); | |
| 39 | try std.fs.File.stdout().writeAll(string); | |
| 40 | 40 | } |
| 41 | 41 | #expect_error=main.zig:2:27: error: unable to open 'string.txt': FileNotFound |
| 42 | 42 |
test/incremental/change_enum_tag_type+6-3| ... | ... | @@ -14,7 +14,8 @@ const Foo = enum(Tag) { |
| 14 | 14 | pub fn main() !void { |
| 15 | 15 | var val: Foo = undefined; |
| 16 | 16 | val = .a; |
| 17 | try std.io.getStdOut().writer().print("{s}\n", .{@tagName(val)}); | |
| 17 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 18 | try stdout_writer.interface.print("{s}\n", .{@tagName(val)}); | |
| 18 | 19 | } |
| 19 | 20 | const std = @import("std"); |
| 20 | 21 | #expect_stdout="a\n" |
| ... | ... | @@ -31,7 +32,8 @@ const Foo = enum(Tag) { |
| 31 | 32 | pub fn main() !void { |
| 32 | 33 | var val: Foo = undefined; |
| 33 | 34 | val = .a; |
| 34 | try std.io.getStdOut().writer().print("{s}\n", .{@tagName(val)}); | |
| 35 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 36 | try stdout_writer.interface.print("{s}\n", .{@tagName(val)}); | |
| 35 | 37 | } |
| 36 | 38 | comptime { |
| 37 | 39 | // These can't be true at the same time; analysis should stop as soon as it sees `Foo` |
| ... | ... | @@ -53,7 +55,8 @@ const Foo = enum(Tag) { |
| 53 | 55 | pub fn main() !void { |
| 54 | 56 | var val: Foo = undefined; |
| 55 | 57 | val = .a; |
| 56 | try std.io.getStdOut().writer().print("{s}\n", .{@tagName(val)}); | |
| 58 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 59 | try stdout_writer.interface.print("{s}\n", .{@tagName(val)}); | |
| 57 | 60 | } |
| 58 | 61 | const std = @import("std"); |
| 59 | 62 | #expect_stdout="a\n" |
test/incremental/change_exports+12-6| ... | ... | @@ -16,7 +16,8 @@ pub fn main() !void { |
| 16 | 16 | extern const bar: u32; |
| 17 | 17 | }; |
| 18 | 18 | S.foo(); |
| 19 | try std.io.getStdOut().writer().print("{}\n", .{S.bar}); | |
| 19 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 20 | try stdout_writer.interface.print("{}\n", .{S.bar}); | |
| 20 | 21 | } |
| 21 | 22 | const std = @import("std"); |
| 22 | 23 | #expect_stdout="123\n" |
| ... | ... | @@ -37,7 +38,8 @@ pub fn main() !void { |
| 37 | 38 | extern const other: u32; |
| 38 | 39 | }; |
| 39 | 40 | S.foo(); |
| 40 | try std.io.getStdOut().writer().print("{} {}\n", .{ S.bar, S.other }); | |
| 41 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 42 | try stdout_writer.interface.print("{} {}\n", .{ S.bar, S.other }); | |
| 41 | 43 | } |
| 42 | 44 | const std = @import("std"); |
| 43 | 45 | #expect_error=main.zig:6:5: error: exported symbol collision: foo |
| ... | ... | @@ -59,7 +61,8 @@ pub fn main() !void { |
| 59 | 61 | extern const other: u32; |
| 60 | 62 | }; |
| 61 | 63 | S.foo(); |
| 62 | try std.io.getStdOut().writer().print("{} {}\n", .{ S.bar, S.other }); | |
| 64 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 65 | try stdout_writer.interface.print("{} {}\n", .{ S.bar, S.other }); | |
| 63 | 66 | } |
| 64 | 67 | const std = @import("std"); |
| 65 | 68 | #expect_stdout="123 456\n" |
| ... | ... | @@ -83,7 +86,8 @@ pub fn main() !void { |
| 83 | 86 | extern const other: u32; |
| 84 | 87 | }; |
| 85 | 88 | S.foo(); |
| 86 | try std.io.getStdOut().writer().print("{} {}\n", .{ S.bar, S.other }); | |
| 89 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 90 | try stdout_writer.interface.print("{} {}\n", .{ S.bar, S.other }); | |
| 87 | 91 | } |
| 88 | 92 | const std = @import("std"); |
| 89 | 93 | #expect_stdout="123 456\n" |
| ... | ... | @@ -128,7 +132,8 @@ pub fn main() !void { |
| 128 | 132 | extern const other: u32; |
| 129 | 133 | }; |
| 130 | 134 | S.foo(); |
| 131 | try std.io.getStdOut().writer().print("{} {}\n", .{ S.bar, S.other }); | |
| 135 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 136 | try stdout_writer.interface.print("{} {}\n", .{ S.bar, S.other }); | |
| 132 | 137 | } |
| 133 | 138 | const std = @import("std"); |
| 134 | 139 | #expect_stdout="123 456\n" |
| ... | ... | @@ -152,7 +157,8 @@ pub fn main() !void { |
| 152 | 157 | extern const other: u32; |
| 153 | 158 | }; |
| 154 | 159 | S.foo(); |
| 155 | try std.io.getStdOut().writer().print("{} {}\n", .{ S.bar, S.other }); | |
| 160 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 161 | try stdout_writer.interface.print("{} {}\n", .{ S.bar, S.other }); | |
| 156 | 162 | } |
| 157 | 163 | const std = @import("std"); |
| 158 | 164 | #expect_error=main.zig:5:5: error: exported symbol collision: bar |
test/incremental/change_fn_type+6-3| ... | ... | @@ -7,7 +7,8 @@ pub fn main() !void { |
| 7 | 7 | try foo(123); |
| 8 | 8 | } |
| 9 | 9 | fn foo(x: u8) !void { |
| 10 | return std.io.getStdOut().writer().print("{d}\n", .{x}); | |
| 10 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 11 | return stdout_writer.interface.print("{d}\n", .{x}); | |
| 11 | 12 | } |
| 12 | 13 | const std = @import("std"); |
| 13 | 14 | #expect_stdout="123\n" |
| ... | ... | @@ -18,7 +19,8 @@ pub fn main() !void { |
| 18 | 19 | try foo(123); |
| 19 | 20 | } |
| 20 | 21 | fn foo(x: i64) !void { |
| 21 | return std.io.getStdOut().writer().print("{d}\n", .{x}); | |
| 22 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 23 | return stdout_writer.interface.print("{d}\n", .{x}); | |
| 22 | 24 | } |
| 23 | 25 | const std = @import("std"); |
| 24 | 26 | #expect_stdout="123\n" |
| ... | ... | @@ -29,7 +31,8 @@ pub fn main() !void { |
| 29 | 31 | try foo(-42); |
| 30 | 32 | } |
| 31 | 33 | fn foo(x: i64) !void { |
| 32 | return std.io.getStdOut().writer().print("{d}\n", .{x}); | |
| 34 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 35 | return stdout_writer.interface.print("{d}\n", .{x}); | |
| 33 | 36 | } |
| 34 | 37 | const std = @import("std"); |
| 35 | 38 | #expect_stdout="-42\n" |
test/incremental/change_generic_line_number+2-2| ... | ... | @@ -6,7 +6,7 @@ const std = @import("std"); |
| 6 | 6 | fn Printer(message: []const u8) type { |
| 7 | 7 | return struct { |
| 8 | 8 | fn print() !void { |
| 9 | try std.io.getStdOut().writeAll(message); | |
| 9 | try std.fs.File.stdout().writeAll(message); | |
| 10 | 10 | } |
| 11 | 11 | }; |
| 12 | 12 | } |
| ... | ... | @@ -22,7 +22,7 @@ const std = @import("std"); |
| 22 | 22 | fn Printer(message: []const u8) type { |
| 23 | 23 | return struct { |
| 24 | 24 | fn print() !void { |
| 25 | try std.io.getStdOut().writeAll(message); | |
| 25 | try std.fs.File.stdout().writeAll(message); | |
| 26 | 26 | } |
| 27 | 27 | }; |
| 28 | 28 | } |
test/incremental/change_line_number+2-2| ... | ... | @@ -4,7 +4,7 @@ |
| 4 | 4 | #file=main.zig |
| 5 | 5 | const std = @import("std"); |
| 6 | 6 | pub fn main() !void { |
| 7 | try std.io.getStdOut().writeAll("foo\n"); | |
| 7 | try std.fs.File.stdout().writeAll("foo\n"); | |
| 8 | 8 | } |
| 9 | 9 | #expect_stdout="foo\n" |
| 10 | 10 | #update=change line number |
| ... | ... | @@ -12,6 +12,6 @@ pub fn main() !void { |
| 12 | 12 | const std = @import("std"); |
| 13 | 13 | |
| 14 | 14 | pub fn main() !void { |
| 15 | try std.io.getStdOut().writeAll("foo\n"); | |
| 15 | try std.fs.File.stdout().writeAll("foo\n"); | |
| 16 | 16 | } |
| 17 | 17 | #expect_stdout="foo\n" |
test/incremental/change_panic_handler+6-3| ... | ... | @@ -11,7 +11,8 @@ pub fn main() !u8 { |
| 11 | 11 | } |
| 12 | 12 | pub const panic = std.debug.FullPanic(myPanic); |
| 13 | 13 | fn myPanic(msg: []const u8, _: ?usize) noreturn { |
| 14 | std.io.getStdOut().writer().print("panic message: {s}\n", .{msg}) catch {}; | |
| 14 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 15 | stdout_writer.interface.print("panic message: {s}\n", .{msg}) catch {}; | |
| 15 | 16 | std.process.exit(0); |
| 16 | 17 | } |
| 17 | 18 | const std = @import("std"); |
| ... | ... | @@ -27,7 +28,8 @@ pub fn main() !u8 { |
| 27 | 28 | } |
| 28 | 29 | pub const panic = std.debug.FullPanic(myPanic); |
| 29 | 30 | fn myPanic(msg: []const u8, _: ?usize) noreturn { |
| 30 | std.io.getStdOut().writer().print("new panic message: {s}\n", .{msg}) catch {}; | |
| 31 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 32 | stdout_writer.interface.print("new panic message: {s}\n", .{msg}) catch {}; | |
| 31 | 33 | std.process.exit(0); |
| 32 | 34 | } |
| 33 | 35 | const std = @import("std"); |
| ... | ... | @@ -43,7 +45,8 @@ pub fn main() !u8 { |
| 43 | 45 | } |
| 44 | 46 | pub const panic = std.debug.FullPanic(myPanicNew); |
| 45 | 47 | fn myPanicNew(msg: []const u8, _: ?usize) noreturn { |
| 46 | std.io.getStdOut().writer().print("third panic message: {s}\n", .{msg}) catch {}; | |
| 48 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 49 | stdout_writer.interface.print("third panic message: {s}\n", .{msg}) catch {}; | |
| 47 | 50 | std.process.exit(0); |
| 48 | 51 | } |
| 49 | 52 | const std = @import("std"); |
test/incremental/change_panic_handler_explicit+6-3| ... | ... | @@ -41,7 +41,8 @@ pub const panic = struct { |
| 41 | 41 | pub const noreturnReturned = no_panic.noreturnReturned; |
| 42 | 42 | }; |
| 43 | 43 | fn myPanic(msg: []const u8, _: ?usize) noreturn { |
| 44 | std.io.getStdOut().writer().print("panic message: {s}\n", .{msg}) catch {}; | |
| 44 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 45 | stdout_writer.interface.print("panic message: {s}\n", .{msg}) catch {}; | |
| 45 | 46 | std.process.exit(0); |
| 46 | 47 | } |
| 47 | 48 | const std = @import("std"); |
| ... | ... | @@ -87,7 +88,8 @@ pub const panic = struct { |
| 87 | 88 | pub const noreturnReturned = no_panic.noreturnReturned; |
| 88 | 89 | }; |
| 89 | 90 | fn myPanic(msg: []const u8, _: ?usize) noreturn { |
| 90 | std.io.getStdOut().writer().print("new panic message: {s}\n", .{msg}) catch {}; | |
| 91 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 92 | stdout_writer.interface.print("new panic message: {s}\n", .{msg}) catch {}; | |
| 91 | 93 | std.process.exit(0); |
| 92 | 94 | } |
| 93 | 95 | const std = @import("std"); |
| ... | ... | @@ -133,7 +135,8 @@ pub const panic = struct { |
| 133 | 135 | pub const noreturnReturned = no_panic.noreturnReturned; |
| 134 | 136 | }; |
| 135 | 137 | fn myPanicNew(msg: []const u8, _: ?usize) noreturn { |
| 136 | std.io.getStdOut().writer().print("third panic message: {s}\n", .{msg}) catch {}; | |
| 138 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 139 | stdout_writer.interface.print("third panic message: {s}\n", .{msg}) catch {}; | |
| 137 | 140 | std.process.exit(0); |
| 138 | 141 | } |
| 139 | 142 | const std = @import("std"); |
test/incremental/change_shift_op+4-2| ... | ... | @@ -8,7 +8,8 @@ pub fn main() !void { |
| 8 | 8 | try foo(0x1300); |
| 9 | 9 | } |
| 10 | 10 | fn foo(x: u16) !void { |
| 11 | try std.io.getStdOut().writer().print("0x{x}\n", .{x << 4}); | |
| 11 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 12 | try stdout_writer.interface.print("0x{x}\n", .{x << 4}); | |
| 12 | 13 | } |
| 13 | 14 | const std = @import("std"); |
| 14 | 15 | #expect_stdout="0x3000\n" |
| ... | ... | @@ -18,7 +19,8 @@ pub fn main() !void { |
| 18 | 19 | try foo(0x1300); |
| 19 | 20 | } |
| 20 | 21 | fn foo(x: u16) !void { |
| 21 | try std.io.getStdOut().writer().print("0x{x}\n", .{x >> 4}); | |
| 22 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 23 | try stdout_writer.interface.print("0x{x}\n", .{x >> 4}); | |
| 22 | 24 | } |
| 23 | 25 | const std = @import("std"); |
| 24 | 26 | #expect_stdout="0x130\n" |
test/incremental/change_struct_same_fields+6-3| ... | ... | @@ -10,7 +10,8 @@ pub fn main() !void { |
| 10 | 10 | try foo(&val); |
| 11 | 11 | } |
| 12 | 12 | fn foo(val: *const S) !void { |
| 13 | try std.io.getStdOut().writer().print( | |
| 13 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 14 | try stdout_writer.interface.print( | |
| 14 | 15 | "{d} {d}\n", |
| 15 | 16 | .{ val.x, val.y }, |
| 16 | 17 | ); |
| ... | ... | @@ -26,7 +27,8 @@ pub fn main() !void { |
| 26 | 27 | try foo(&val); |
| 27 | 28 | } |
| 28 | 29 | fn foo(val: *const S) !void { |
| 29 | try std.io.getStdOut().writer().print( | |
| 30 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 31 | try stdout_writer.interface.print( | |
| 30 | 32 | "{d} {d}\n", |
| 31 | 33 | .{ val.x, val.y }, |
| 32 | 34 | ); |
| ... | ... | @@ -42,7 +44,8 @@ pub fn main() !void { |
| 42 | 44 | try foo(&val); |
| 43 | 45 | } |
| 44 | 46 | fn foo(val: *const S) !void { |
| 45 | try std.io.getStdOut().writer().print( | |
| 47 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 48 | try stdout_writer.interface.print( | |
| 46 | 49 | "{d} {d}\n", |
| 47 | 50 | .{ val.x, val.y }, |
| 48 | 51 | ); |
test/incremental/change_zon_file+3-3| ... | ... | @@ -7,7 +7,7 @@ |
| 7 | 7 | const std = @import("std"); |
| 8 | 8 | const message: []const u8 = @import("message.zon"); |
| 9 | 9 | pub fn main() !void { |
| 10 | try std.io.getStdOut().writeAll(message); | |
| 10 | try std.fs.File.stdout().writeAll(message); | |
| 11 | 11 | } |
| 12 | 12 | #file=message.zon |
| 13 | 13 | "Hello, World!\n" |
| ... | ... | @@ -28,7 +28,7 @@ pub fn main() !void { |
| 28 | 28 | const std = @import("std"); |
| 29 | 29 | const message: []const u8 = @import("message.zon"); |
| 30 | 30 | pub fn main() !void { |
| 31 | try std.io.getStdOut().writeAll("a hardcoded string\n"); | |
| 31 | try std.fs.File.stdout().writeAll("a hardcoded string\n"); | |
| 32 | 32 | } |
| 33 | 33 | #expect_error=message.zon:1:1: error: unable to load 'message.zon': FileNotFound |
| 34 | 34 | #expect_error=main.zig:2:37: note: file imported here |
| ... | ... | @@ -43,6 +43,6 @@ pub fn main() !void { |
| 43 | 43 | const std = @import("std"); |
| 44 | 44 | const message: []const u8 = @import("message.zon"); |
| 45 | 45 | pub fn main() !void { |
| 46 | try std.io.getStdOut().writeAll(message); | |
| 46 | try std.fs.File.stdout().writeAll(message); | |
| 47 | 47 | } |
| 48 | 48 | #expect_stdout="We're back, World!\n" |
test/incremental/change_zon_file_no_result_type+1-1| ... | ... | @@ -6,7 +6,7 @@ |
| 6 | 6 | #file=main.zig |
| 7 | 7 | const std = @import("std"); |
| 8 | 8 | pub fn main() !void { |
| 9 | try std.io.getStdOut().writeAll(@import("foo.zon").message); | |
| 9 | try std.fs.File.stdout().writeAll(@import("foo.zon").message); | |
| 10 | 10 | } |
| 11 | 11 | #file=foo.zon |
| 12 | 12 | .{ |
test/incremental/compile_log+3-3| ... | ... | @@ -7,7 +7,7 @@ |
| 7 | 7 | #file=main.zig |
| 8 | 8 | const std = @import("std"); |
| 9 | 9 | pub fn main() !void { |
| 10 | try std.io.getStdOut().writeAll("Hello, World!\n"); | |
| 10 | try std.fs.File.stdout().writeAll("Hello, World!\n"); | |
| 11 | 11 | } |
| 12 | 12 | #expect_stdout="Hello, World!\n" |
| 13 | 13 | |
| ... | ... | @@ -15,7 +15,7 @@ pub fn main() !void { |
| 15 | 15 | #file=main.zig |
| 16 | 16 | const std = @import("std"); |
| 17 | 17 | pub fn main() !void { |
| 18 | try std.io.getStdOut().writeAll("Hello, World!\n"); | |
| 18 | try std.fs.File.stdout().writeAll("Hello, World!\n"); | |
| 19 | 19 | @compileLog("this is a log"); |
| 20 | 20 | } |
| 21 | 21 | #expect_error=main.zig:4:5: error: found compile log statement |
| ... | ... | @@ -25,6 +25,6 @@ pub fn main() !void { |
| 25 | 25 | #file=main.zig |
| 26 | 26 | const std = @import("std"); |
| 27 | 27 | pub fn main() !void { |
| 28 | try std.io.getStdOut().writeAll("Hello, World!\n"); | |
| 28 | try std.fs.File.stdout().writeAll("Hello, World!\n"); | |
| 29 | 29 | } |
| 30 | 30 | #expect_stdout="Hello, World!\n" |
test/incremental/fix_astgen_failure+5-5| ... | ... | @@ -9,28 +9,28 @@ pub fn main() !void { |
| 9 | 9 | } |
| 10 | 10 | #file=foo.zig |
| 11 | 11 | pub fn hello() !void { |
| 12 | try std.io.getStdOut().writeAll("Hello, World!\n"); | |
| 12 | try std.fs.File.stdout().writeAll("Hello, World!\n"); | |
| 13 | 13 | } |
| 14 | 14 | #expect_error=foo.zig:2:9: error: use of undeclared identifier 'std' |
| 15 | 15 | #update=fix the error |
| 16 | 16 | #file=foo.zig |
| 17 | 17 | const std = @import("std"); |
| 18 | 18 | pub fn hello() !void { |
| 19 | try std.io.getStdOut().writeAll("Hello, World!\n"); | |
| 19 | try std.fs.File.stdout().writeAll("Hello, World!\n"); | |
| 20 | 20 | } |
| 21 | 21 | #expect_stdout="Hello, World!\n" |
| 22 | 22 | #update=add new error |
| 23 | 23 | #file=foo.zig |
| 24 | 24 | const std = @import("std"); |
| 25 | 25 | pub fn hello() !void { |
| 26 | try std.io.getStdOut().writeAll(hello_str); | |
| 26 | try std.fs.File.stdout().writeAll(hello_str); | |
| 27 | 27 | } |
| 28 | #expect_error=foo.zig:3:37: error: use of undeclared identifier 'hello_str' | |
| 28 | #expect_error=foo.zig:3:39: error: use of undeclared identifier 'hello_str' | |
| 29 | 29 | #update=fix the new error |
| 30 | 30 | #file=foo.zig |
| 31 | 31 | const std = @import("std"); |
| 32 | 32 | const hello_str = "Hello, World! Again!\n"; |
| 33 | 33 | pub fn hello() !void { |
| 34 | try std.io.getStdOut().writeAll(hello_str); | |
| 34 | try std.fs.File.stdout().writeAll(hello_str); | |
| 35 | 35 | } |
| 36 | 36 | #expect_stdout="Hello, World! Again!\n" |
test/incremental/function_becomes_inline+3-3| ... | ... | @@ -7,7 +7,7 @@ pub fn main() !void { |
| 7 | 7 | try foo(); |
| 8 | 8 | } |
| 9 | 9 | fn foo() !void { |
| 10 | try std.io.getStdOut().writer().writeAll("Hello, World!\n"); | |
| 10 | try std.fs.File.stdout().writeAll("Hello, World!\n"); | |
| 11 | 11 | } |
| 12 | 12 | const std = @import("std"); |
| 13 | 13 | #expect_stdout="Hello, World!\n" |
| ... | ... | @@ -18,7 +18,7 @@ pub fn main() !void { |
| 18 | 18 | try foo(); |
| 19 | 19 | } |
| 20 | 20 | inline fn foo() !void { |
| 21 | try std.io.getStdOut().writer().writeAll("Hello, World!\n"); | |
| 21 | try std.fs.File.stdout().writeAll("Hello, World!\n"); | |
| 22 | 22 | } |
| 23 | 23 | const std = @import("std"); |
| 24 | 24 | #expect_stdout="Hello, World!\n" |
| ... | ... | @@ -29,7 +29,7 @@ pub fn main() !void { |
| 29 | 29 | try foo(); |
| 30 | 30 | } |
| 31 | 31 | inline fn foo() !void { |
| 32 | try std.io.getStdOut().writer().writeAll("Hello, `inline` World!\n"); | |
| 32 | try std.fs.File.stdout().writeAll("Hello, `inline` World!\n"); | |
| 33 | 33 | } |
| 34 | 34 | const std = @import("std"); |
| 35 | 35 | #expect_stdout="Hello, `inline` World!\n" |
test/incremental/hello+2-2| ... | ... | @@ -6,13 +6,13 @@ |
| 6 | 6 | #file=main.zig |
| 7 | 7 | const std = @import("std"); |
| 8 | 8 | pub fn main() !void { |
| 9 | try std.io.getStdOut().writeAll("good morning\n"); | |
| 9 | try std.fs.File.stdout().writeAll("good morning\n"); | |
| 10 | 10 | } |
| 11 | 11 | #expect_stdout="good morning\n" |
| 12 | 12 | #update=change the string |
| 13 | 13 | #file=main.zig |
| 14 | 14 | const std = @import("std"); |
| 15 | 15 | pub fn main() !void { |
| 16 | try std.io.getStdOut().writeAll("おはようございます\n"); | |
| 16 | try std.fs.File.stdout().writeAll("おはようございます\n"); | |
| 17 | 17 | } |
| 18 | 18 | #expect_stdout="おはようございます\n" |
test/incremental/make_decl_pub+2-2| ... | ... | @@ -11,7 +11,7 @@ pub fn main() !void { |
| 11 | 11 | #file=foo.zig |
| 12 | 12 | const std = @import("std"); |
| 13 | 13 | fn hello() !void { |
| 14 | try std.io.getStdOut().writeAll("Hello, World!\n"); | |
| 14 | try std.fs.File.stdout().writeAll("Hello, World!\n"); | |
| 15 | 15 | } |
| 16 | 16 | #expect_error=main.zig:3:12: error: 'hello' is not marked 'pub' |
| 17 | 17 | #expect_error=foo.zig:2:1: note: declared here |
| ... | ... | @@ -20,6 +20,6 @@ fn hello() !void { |
| 20 | 20 | #file=foo.zig |
| 21 | 21 | const std = @import("std"); |
| 22 | 22 | pub fn hello() !void { |
| 23 | try std.io.getStdOut().writeAll("Hello, World!\n"); | |
| 23 | try std.fs.File.stdout().writeAll("Hello, World!\n"); | |
| 24 | 24 | } |
| 25 | 25 | #expect_stdout="Hello, World!\n" |
test/incremental/modify_inline_fn+2-2| ... | ... | @@ -7,7 +7,7 @@ |
| 7 | 7 | const std = @import("std"); |
| 8 | 8 | pub fn main() !void { |
| 9 | 9 | const str = getStr(); |
| 10 | try std.io.getStdOut().writeAll(str); | |
| 10 | try std.fs.File.stdout().writeAll(str); | |
| 11 | 11 | } |
| 12 | 12 | inline fn getStr() []const u8 { |
| 13 | 13 | return "foo\n"; |
| ... | ... | @@ -18,7 +18,7 @@ inline fn getStr() []const u8 { |
| 18 | 18 | const std = @import("std"); |
| 19 | 19 | pub fn main() !void { |
| 20 | 20 | const str = getStr(); |
| 21 | try std.io.getStdOut().writeAll(str); | |
| 21 | try std.fs.File.stdout().writeAll(str); | |
| 22 | 22 | } |
| 23 | 23 | inline fn getStr() []const u8 { |
| 24 | 24 | return "bar\n"; |
test/incremental/move_src+6-4| ... | ... | @@ -6,7 +6,8 @@ |
| 6 | 6 | #file=main.zig |
| 7 | 7 | const std = @import("std"); |
| 8 | 8 | pub fn main() !void { |
| 9 | try std.io.getStdOut().writer().print("{d} {d}\n", .{ foo(), bar() }); | |
| 9 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 10 | try stdout_writer.interface.print("{d} {d}\n", .{ foo(), bar() }); | |
| 10 | 11 | } |
| 11 | 12 | fn foo() u32 { |
| 12 | 13 | return @src().line; |
| ... | ... | @@ -14,13 +15,14 @@ fn foo() u32 { |
| 14 | 15 | fn bar() u32 { |
| 15 | 16 | return 123; |
| 16 | 17 | } |
| 17 | #expect_stdout="6 123\n" | |
| 18 | #expect_stdout="7 123\n" | |
| 18 | 19 | |
| 19 | 20 | #update=add newline |
| 20 | 21 | #file=main.zig |
| 21 | 22 | const std = @import("std"); |
| 22 | 23 | pub fn main() !void { |
| 23 | try std.io.getStdOut().writer().print("{d} {d}\n", .{ foo(), bar() }); | |
| 24 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 25 | try stdout_writer.interface.print("{d} {d}\n", .{ foo(), bar() }); | |
| 24 | 26 | } |
| 25 | 27 | |
| 26 | 28 | fn foo() u32 { |
| ... | ... | @@ -29,4 +31,4 @@ fn foo() u32 { |
| 29 | 31 | fn bar() u32 { |
| 30 | 32 | return 123; |
| 31 | 33 | } |
| 32 | #expect_stdout="7 123\n" | |
| 34 | #expect_stdout="8 123\n" |
test/incremental/no_change_preserves_tag_names+2-2| ... | ... | @@ -7,7 +7,7 @@ |
| 7 | 7 | const std = @import("std"); |
| 8 | 8 | var some_enum: enum { first, second } = .first; |
| 9 | 9 | pub fn main() !void { |
| 10 | try std.io.getStdOut().writeAll(@tagName(some_enum)); | |
| 10 | try std.fs.File.stdout().writeAll(@tagName(some_enum)); | |
| 11 | 11 | } |
| 12 | 12 | #expect_stdout="first" |
| 13 | 13 | #update=no change |
| ... | ... | @@ -15,6 +15,6 @@ pub fn main() !void { |
| 15 | 15 | const std = @import("std"); |
| 16 | 16 | var some_enum: enum { first, second } = .first; |
| 17 | 17 | pub fn main() !void { |
| 18 | try std.io.getStdOut().writeAll(@tagName(some_enum)); | |
| 18 | try std.fs.File.stdout().writeAll(@tagName(some_enum)); | |
| 19 | 19 | } |
| 20 | 20 | #expect_stdout="first" |
test/incremental/recursive_function_becomes_non_recursive+2-2| ... | ... | @@ -8,7 +8,7 @@ pub fn main() !void { |
| 8 | 8 | try foo(false); |
| 9 | 9 | } |
| 10 | 10 | fn foo(recurse: bool) !void { |
| 11 | const stdout = std.io.getStdOut().writer(); | |
| 11 | const stdout = std.fs.File.stdout(); | |
| 12 | 12 | if (recurse) return foo(true); |
| 13 | 13 | try stdout.writeAll("non-recursive path\n"); |
| 14 | 14 | } |
| ... | ... | @@ -21,7 +21,7 @@ pub fn main() !void { |
| 21 | 21 | try foo(true); |
| 22 | 22 | } |
| 23 | 23 | fn foo(recurse: bool) !void { |
| 24 | const stdout = std.io.getStdOut().writer(); | |
| 24 | const stdout = std.fs.File.stdout(); | |
| 25 | 25 | if (recurse) return stdout.writeAll("x==1\n"); |
| 26 | 26 | try stdout.writeAll("non-recursive path\n"); |
| 27 | 27 | } |
test/incremental/remove_enum_field+5-3| ... | ... | @@ -9,7 +9,8 @@ const MyEnum = enum(u8) { |
| 9 | 9 | bar = 2, |
| 10 | 10 | }; |
| 11 | 11 | pub fn main() !void { |
| 12 | try std.io.getStdOut().writer().print("{}\n", .{@intFromEnum(MyEnum.foo)}); | |
| 12 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 13 | try stdout_writer.interface.print("{}\n", .{@intFromEnum(MyEnum.foo)}); | |
| 13 | 14 | } |
| 14 | 15 | const std = @import("std"); |
| 15 | 16 | #expect_stdout="1\n" |
| ... | ... | @@ -20,8 +21,9 @@ const MyEnum = enum(u8) { |
| 20 | 21 | bar = 2, |
| 21 | 22 | }; |
| 22 | 23 | pub fn main() !void { |
| 23 | try std.io.getStdOut().writer().print("{}\n", .{@intFromEnum(MyEnum.foo)}); | |
| 24 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 25 | try stdout_writer.interface.print("{}\n", .{@intFromEnum(MyEnum.foo)}); | |
| 24 | 26 | } |
| 25 | 27 | const std = @import("std"); |
| 26 | #expect_error=main.zig:6:73: error: enum 'main.MyEnum' has no member named 'foo' | |
| 28 | #expect_error=main.zig:7:69: error: enum 'main.MyEnum' has no member named 'foo' | |
| 27 | 29 | #expect_error=main.zig:1:16: note: enum declared here |
test/incremental/unreferenced_error+4-4| ... | ... | @@ -6,7 +6,7 @@ |
| 6 | 6 | #file=main.zig |
| 7 | 7 | const std = @import("std"); |
| 8 | 8 | pub fn main() !void { |
| 9 | try std.io.getStdOut().writeAll(a); | |
| 9 | try std.fs.File.stdout().writeAll(a); | |
| 10 | 10 | } |
| 11 | 11 | const a = "Hello, World!\n"; |
| 12 | 12 | #expect_stdout="Hello, World!\n" |
| ... | ... | @@ -15,7 +15,7 @@ const a = "Hello, World!\n"; |
| 15 | 15 | #file=main.zig |
| 16 | 16 | const std = @import("std"); |
| 17 | 17 | pub fn main() !void { |
| 18 | try std.io.getStdOut().writeAll(a); | |
| 18 | try std.fs.File.stdout().writeAll(a); | |
| 19 | 19 | } |
| 20 | 20 | const a = @compileError("bad a"); |
| 21 | 21 | #expect_error=main.zig:5:11: error: bad a |
| ... | ... | @@ -24,7 +24,7 @@ const a = @compileError("bad a"); |
| 24 | 24 | #file=main.zig |
| 25 | 25 | const std = @import("std"); |
| 26 | 26 | pub fn main() !void { |
| 27 | try std.io.getStdOut().writeAll(b); | |
| 27 | try std.fs.File.stdout().writeAll(b); | |
| 28 | 28 | } |
| 29 | 29 | const a = @compileError("bad a"); |
| 30 | 30 | const b = "Hi there!\n"; |
| ... | ... | @@ -34,7 +34,7 @@ const b = "Hi there!\n"; |
| 34 | 34 | #file=main.zig |
| 35 | 35 | const std = @import("std"); |
| 36 | 36 | pub fn main() !void { |
| 37 | try std.io.getStdOut().writeAll(a); | |
| 37 | try std.fs.File.stdout().writeAll(a); | |
| 38 | 38 | } |
| 39 | 39 | const a = "Back to a\n"; |
| 40 | 40 | const b = @compileError("bad b"); |
test/link/bss/main.zig+4-1| ... | ... | @@ -4,8 +4,11 @@ const std = @import("std"); |
| 4 | 4 | var buffer: [0x1000000]u64 = [1]u64{0} ** 0x1000000; |
| 5 | 5 | |
| 6 | 6 | pub fn main() anyerror!void { |
| 7 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 8 | ||
| 7 | 9 | buffer[0x10] = 1; |
| 8 | try std.io.getStdOut().writer().print("{d}, {d}, {d}\n", .{ | |
| 10 | ||
| 11 | try stdout_writer.interface.print("{d}, {d}, {d}\n", .{ | |
| 9 | 12 | // workaround the dreaded decl_val |
| 10 | 13 | (&buffer)[0], |
| 11 | 14 | (&buffer)[0x10], |
test/link/elf.zig+4-4| ... | ... | @@ -1315,8 +1315,8 @@ fn testGcSectionsZig(b: *Build, opts: Options) *Step { |
| 1315 | 1315 | \\extern var live_var2: i32; |
| 1316 | 1316 | \\extern fn live_fn2() void; |
| 1317 | 1317 | \\pub fn main() void { |
| 1318 | \\ const stdout = std.io.getStdOut(); | |
| 1319 | \\ stdout.deprecatedWriter().print("{d} {d}\n", .{ live_var1, live_var2 }) catch unreachable; | |
| 1318 | \\ var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 1319 | \\ stdout_writer.interface.print("{d} {d}\n", .{ live_var1, live_var2 }) catch @panic("fail"); | |
| 1320 | 1320 | \\ live_fn2(); |
| 1321 | 1321 | \\} |
| 1322 | 1322 | , |
| ... | ... | @@ -1357,8 +1357,8 @@ fn testGcSectionsZig(b: *Build, opts: Options) *Step { |
| 1357 | 1357 | \\extern var live_var2: i32; |
| 1358 | 1358 | \\extern fn live_fn2() void; |
| 1359 | 1359 | \\pub fn main() void { |
| 1360 | \\ const stdout = std.io.getStdOut(); | |
| 1361 | \\ stdout.deprecatedWriter().print("{d} {d}\n", .{ live_var1, live_var2 }) catch unreachable; | |
| 1360 | \\ var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 1361 | \\ stdout_writer.interface.print("{d} {d}\n", .{ live_var1, live_var2 }) catch @panic("fail"); | |
| 1362 | 1362 | \\ live_fn2(); |
| 1363 | 1363 | \\} |
| 1364 | 1364 | , |
test/link/macho.zig+4-3| ... | ... | @@ -710,7 +710,7 @@ fn testHelloZig(b: *Build, opts: Options) *Step { |
| 710 | 710 | const exe = addExecutable(b, opts, .{ .name = "main", .zig_source_bytes = |
| 711 | 711 | \\const std = @import("std"); |
| 712 | 712 | \\pub fn main() void { |
| 713 | \\ std.io.getStdOut().writer().print("Hello world!\n", .{}) catch unreachable; | |
| 713 | \\ std.fs.File.stdout().writeAll("Hello world!\n") catch @panic("fail"); | |
| 714 | 714 | \\} |
| 715 | 715 | }); |
| 716 | 716 | |
| ... | ... | @@ -2365,10 +2365,11 @@ fn testTlsZig(b: *Build, opts: Options) *Step { |
| 2365 | 2365 | \\threadlocal var x: i32 = 0; |
| 2366 | 2366 | \\threadlocal var y: i32 = -1; |
| 2367 | 2367 | \\pub fn main() void { |
| 2368 | \\ std.io.getStdOut().writer().print("{d} {d}\n", .{x, y}) catch unreachable; | |
| 2368 | \\ var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 2369 | \\ stdout_writer.interface.print("{d} {d}\n", .{x, y}) catch unreachable; | |
| 2369 | 2370 | \\ x -= 1; |
| 2370 | 2371 | \\ y += 1; |
| 2371 | \\ std.io.getStdOut().writer().print("{d} {d}\n", .{x, y}) catch unreachable; | |
| 2372 | \\ stdout_writer.interface.print("{d} {d}\n", .{x, y}) catch unreachable; | |
| 2372 | 2373 | \\} |
| 2373 | 2374 | }); |
| 2374 | 2375 |
test/link/wasm/extern/main.zig+2-2| ... | ... | @@ -3,6 +3,6 @@ const std = @import("std"); |
| 3 | 3 | extern const foo: u32; |
| 4 | 4 | |
| 5 | 5 | pub fn main() void { |
| 6 | const std_out = std.io.getStdOut(); | |
| 7 | std_out.writer().print("Result: {d}", .{foo}) catch {}; | |
| 6 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 7 | stdout_writer.interface.print("Result: {d}", .{foo}) catch {}; | |
| 8 | 8 | } |
test/src/check-stack-trace.zig+1-1| ... | ... | @@ -84,5 +84,5 @@ pub fn main() !void { |
| 84 | 84 | break :got_result try buf.toOwnedSlice(); |
| 85 | 85 | }; |
| 86 | 86 | |
| 87 | try std.io.getStdOut().writeAll(got); | |
| 87 | try std.fs.File.stdout().writeAll(got); | |
| 88 | 88 | } |
test/standalone/child_process/child.zig+4-3| ... | ... | @@ -27,12 +27,12 @@ fn run(allocator: std.mem.Allocator) !void { |
| 27 | 27 | } |
| 28 | 28 | |
| 29 | 29 | // test stdout pipe; parent verifies |
| 30 | try std.io.getStdOut().writer().writeAll("hello from stdout"); | |
| 30 | try std.fs.File.stdout().writeAll("hello from stdout"); | |
| 31 | 31 | |
| 32 | 32 | // test stdin pipe from parent |
| 33 | 33 | const hello_stdin = "hello from stdin"; |
| 34 | 34 | var buf: [hello_stdin.len]u8 = undefined; |
| 35 | const stdin = std.io.getStdIn().reader(); | |
| 35 | const stdin: std.fs.File = .stdin(); | |
| 36 | 36 | const n = try stdin.readAll(&buf); |
| 37 | 37 | if (!std.mem.eql(u8, buf[0..n], hello_stdin)) { |
| 38 | 38 | testError("stdin: '{s}'; want '{s}'", .{ buf[0..n], hello_stdin }); |
| ... | ... | @@ -40,7 +40,8 @@ fn run(allocator: std.mem.Allocator) !void { |
| 40 | 40 | } |
| 41 | 41 | |
| 42 | 42 | fn testError(comptime fmt: []const u8, args: anytype) void { |
| 43 | const stderr = std.io.getStdErr().writer(); | |
| 43 | var stderr_writer = std.fs.File.stderr().writer(&.{}); | |
| 44 | const stderr = &stderr_writer.interface; | |
| 44 | 45 | stderr.print("CHILD TEST ERROR: ", .{}) catch {}; |
| 45 | 46 | stderr.print(fmt, args) catch {}; |
| 46 | 47 | if (fmt[fmt.len - 1] != '\n') { |
test/standalone/child_process/main.zig+4-3| ... | ... | @@ -19,13 +19,13 @@ pub fn main() !void { |
| 19 | 19 | child.stderr_behavior = .Inherit; |
| 20 | 20 | try child.spawn(); |
| 21 | 21 | const child_stdin = child.stdin.?; |
| 22 | try child_stdin.writer().writeAll("hello from stdin"); // verified in child | |
| 22 | try child_stdin.writeAll("hello from stdin"); // verified in child | |
| 23 | 23 | child_stdin.close(); |
| 24 | 24 | child.stdin = null; |
| 25 | 25 | |
| 26 | 26 | const hello_stdout = "hello from stdout"; |
| 27 | 27 | var buf: [hello_stdout.len]u8 = undefined; |
| 28 | const n = try child.stdout.?.reader().readAll(&buf); | |
| 28 | const n = try child.stdout.?.deprecatedReader().readAll(&buf); | |
| 29 | 29 | if (!std.mem.eql(u8, buf[0..n], hello_stdout)) { |
| 30 | 30 | testError("child stdout: '{s}'; want '{s}'", .{ buf[0..n], hello_stdout }); |
| 31 | 31 | } |
| ... | ... | @@ -45,7 +45,8 @@ pub fn main() !void { |
| 45 | 45 | var parent_test_error = false; |
| 46 | 46 | |
| 47 | 47 | fn testError(comptime fmt: []const u8, args: anytype) void { |
| 48 | const stderr = std.io.getStdErr().writer(); | |
| 48 | var stderr_writer = std.fs.File.stderr().writer(&.{}); | |
| 49 | const stderr = &stderr_writer.interface; | |
| 49 | 50 | stderr.print("PARENT TEST ERROR: ", .{}) catch {}; |
| 50 | 51 | stderr.print(fmt, args) catch {}; |
| 51 | 52 | if (fmt[fmt.len - 1] != '\n') { |
test/standalone/sigpipe/breakpipe.zig+1-1| ... | ... | @@ -10,7 +10,7 @@ pub fn main() !void { |
| 10 | 10 | std.posix.close(pipe[0]); |
| 11 | 11 | _ = std.posix.write(pipe[1], "a") catch |err| switch (err) { |
| 12 | 12 | error.BrokenPipe => { |
| 13 | try std.io.getStdOut().writer().writeAll("BrokenPipe\n"); | |
| 13 | try std.fs.File.stdout().writeAll("BrokenPipe\n"); | |
| 14 | 14 | std.posix.exit(123); |
| 15 | 15 | }, |
| 16 | 16 | else => |e| return e, |
test/standalone/simple/brace_expansion.zig deleted-292| ... | ... | @@ -1,292 +0,0 @@ |
| 1 | const std = @import("std"); | |
| 2 | const io = std.io; | |
| 3 | const mem = std.mem; | |
| 4 | const debug = std.debug; | |
| 5 | const assert = debug.assert; | |
| 6 | const testing = std.testing; | |
| 7 | const ArrayList = std.ArrayList; | |
| 8 | const maxInt = std.math.maxInt; | |
| 9 | ||
| 10 | const Token = union(enum) { | |
| 11 | Word: []const u8, | |
| 12 | OpenBrace, | |
| 13 | CloseBrace, | |
| 14 | Comma, | |
| 15 | Eof, | |
| 16 | }; | |
| 17 | ||
| 18 | var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init; | |
| 19 | var global_allocator = gpa.allocator(); | |
| 20 | ||
| 21 | fn tokenize(input: []const u8) !ArrayList(Token) { | |
| 22 | const State = enum { | |
| 23 | Start, | |
| 24 | Word, | |
| 25 | }; | |
| 26 | ||
| 27 | var token_list = ArrayList(Token).init(global_allocator); | |
| 28 | errdefer token_list.deinit(); | |
| 29 | var tok_begin: usize = undefined; | |
| 30 | var state = State.Start; | |
| 31 | ||
| 32 | for (input, 0..) |b, i| { | |
| 33 | switch (state) { | |
| 34 | .Start => switch (b) { | |
| 35 | 'a'...'z', 'A'...'Z' => { | |
| 36 | state = State.Word; | |
| 37 | tok_begin = i; | |
| 38 | }, | |
| 39 | '{' => try token_list.append(Token.OpenBrace), | |
| 40 | '}' => try token_list.append(Token.CloseBrace), | |
| 41 | ',' => try token_list.append(Token.Comma), | |
| 42 | else => return error.InvalidInput, | |
| 43 | }, | |
| 44 | .Word => switch (b) { | |
| 45 | 'a'...'z', 'A'...'Z' => {}, | |
| 46 | '{', '}', ',' => { | |
| 47 | try token_list.append(Token{ .Word = input[tok_begin..i] }); | |
| 48 | switch (b) { | |
| 49 | '{' => try token_list.append(Token.OpenBrace), | |
| 50 | '}' => try token_list.append(Token.CloseBrace), | |
| 51 | ',' => try token_list.append(Token.Comma), | |
| 52 | else => unreachable, | |
| 53 | } | |
| 54 | state = State.Start; | |
| 55 | }, | |
| 56 | else => return error.InvalidInput, | |
| 57 | }, | |
| 58 | } | |
| 59 | } | |
| 60 | switch (state) { | |
| 61 | State.Start => {}, | |
| 62 | State.Word => try token_list.append(Token{ .Word = input[tok_begin..] }), | |
| 63 | } | |
| 64 | try token_list.append(Token.Eof); | |
| 65 | return token_list; | |
| 66 | } | |
| 67 | ||
| 68 | const Node = union(enum) { | |
| 69 | Scalar: []const u8, | |
| 70 | List: ArrayList(Node), | |
| 71 | Combine: []Node, | |
| 72 | ||
| 73 | fn deinit(self: Node) void { | |
| 74 | switch (self) { | |
| 75 | .Scalar => {}, | |
| 76 | .Combine => |pair| { | |
| 77 | pair[0].deinit(); | |
| 78 | pair[1].deinit(); | |
| 79 | global_allocator.free(pair); | |
| 80 | }, | |
| 81 | .List => |list| { | |
| 82 | for (list.items) |item| { | |
| 83 | item.deinit(); | |
| 84 | } | |
| 85 | list.deinit(); | |
| 86 | }, | |
| 87 | } | |
| 88 | } | |
| 89 | }; | |
| 90 | ||
| 91 | const ParseError = error{ | |
| 92 | InvalidInput, | |
| 93 | OutOfMemory, | |
| 94 | }; | |
| 95 | ||
| 96 | fn parse(tokens: *const ArrayList(Token), token_index: *usize) ParseError!Node { | |
| 97 | const first_token = tokens.items[token_index.*]; | |
| 98 | token_index.* += 1; | |
| 99 | ||
| 100 | const result_node = switch (first_token) { | |
| 101 | .Word => |word| Node{ .Scalar = word }, | |
| 102 | .OpenBrace => blk: { | |
| 103 | var list = ArrayList(Node).init(global_allocator); | |
| 104 | errdefer { | |
| 105 | for (list.items) |node| node.deinit(); | |
| 106 | list.deinit(); | |
| 107 | } | |
| 108 | while (true) { | |
| 109 | try list.append(try parse(tokens, token_index)); | |
| 110 | ||
| 111 | const token = tokens.items[token_index.*]; | |
| 112 | token_index.* += 1; | |
| 113 | ||
| 114 | switch (token) { | |
| 115 | .CloseBrace => break, | |
| 116 | .Comma => continue, | |
| 117 | else => return error.InvalidInput, | |
| 118 | } | |
| 119 | } | |
| 120 | break :blk Node{ .List = list }; | |
| 121 | }, | |
| 122 | else => return error.InvalidInput, | |
| 123 | }; | |
| 124 | ||
| 125 | switch (tokens.items[token_index.*]) { | |
| 126 | .Word, .OpenBrace => { | |
| 127 | const pair = try global_allocator.alloc(Node, 2); | |
| 128 | errdefer global_allocator.free(pair); | |
| 129 | pair[0] = result_node; | |
| 130 | pair[1] = try parse(tokens, token_index); | |
| 131 | return Node{ .Combine = pair }; | |
| 132 | }, | |
| 133 | else => return result_node, | |
| 134 | } | |
| 135 | } | |
| 136 | ||
| 137 | fn expandString(input: []const u8, output: *ArrayList(u8)) !void { | |
| 138 | const tokens = try tokenize(input); | |
| 139 | defer tokens.deinit(); | |
| 140 | if (tokens.items.len == 1) { | |
| 141 | return output.resize(0); | |
| 142 | } | |
| 143 | ||
| 144 | var token_index: usize = 0; | |
| 145 | const root = try parse(&tokens, &token_index); | |
| 146 | defer root.deinit(); | |
| 147 | const last_token = tokens.items[token_index]; | |
| 148 | switch (last_token) { | |
| 149 | Token.Eof => {}, | |
| 150 | else => return error.InvalidInput, | |
| 151 | } | |
| 152 | ||
| 153 | var result_list = ArrayList(ArrayList(u8)).init(global_allocator); | |
| 154 | defer { | |
| 155 | for (result_list.items) |*buf| buf.deinit(); | |
| 156 | result_list.deinit(); | |
| 157 | } | |
| 158 | ||
| 159 | try expandNode(root, &result_list); | |
| 160 | ||
| 161 | try output.resize(0); | |
| 162 | for (result_list.items, 0..) |buf, i| { | |
| 163 | if (i != 0) { | |
| 164 | try output.append(' '); | |
| 165 | } | |
| 166 | try output.appendSlice(buf.items); | |
| 167 | } | |
| 168 | } | |
| 169 | ||
| 170 | const ExpandNodeError = error{OutOfMemory}; | |
| 171 | ||
| 172 | fn expandNode(node: Node, output: *ArrayList(ArrayList(u8))) ExpandNodeError!void { | |
| 173 | assert(output.items.len == 0); | |
| 174 | switch (node) { | |
| 175 | .Scalar => |scalar| { | |
| 176 | var list = ArrayList(u8).init(global_allocator); | |
| 177 | errdefer list.deinit(); | |
| 178 | try list.appendSlice(scalar); | |
| 179 | try output.append(list); | |
| 180 | }, | |
| 181 | .Combine => |pair| { | |
| 182 | const a_node = pair[0]; | |
| 183 | const b_node = pair[1]; | |
| 184 | ||
| 185 | var child_list_a = ArrayList(ArrayList(u8)).init(global_allocator); | |
| 186 | defer { | |
| 187 | for (child_list_a.items) |*buf| buf.deinit(); | |
| 188 | child_list_a.deinit(); | |
| 189 | } | |
| 190 | try expandNode(a_node, &child_list_a); | |
| 191 | ||
| 192 | var child_list_b = ArrayList(ArrayList(u8)).init(global_allocator); | |
| 193 | defer { | |
| 194 | for (child_list_b.items) |*buf| buf.deinit(); | |
| 195 | child_list_b.deinit(); | |
| 196 | } | |
| 197 | try expandNode(b_node, &child_list_b); | |
| 198 | ||
| 199 | for (child_list_a.items) |buf_a| { | |
| 200 | for (child_list_b.items) |buf_b| { | |
| 201 | var combined_buf = ArrayList(u8).init(global_allocator); | |
| 202 | errdefer combined_buf.deinit(); | |
| 203 | ||
| 204 | try combined_buf.appendSlice(buf_a.items); | |
| 205 | try combined_buf.appendSlice(buf_b.items); | |
| 206 | try output.append(combined_buf); | |
| 207 | } | |
| 208 | } | |
| 209 | }, | |
| 210 | .List => |list| { | |
| 211 | for (list.items) |child_node| { | |
| 212 | var child_list = ArrayList(ArrayList(u8)).init(global_allocator); | |
| 213 | errdefer for (child_list.items) |*buf| buf.deinit(); | |
| 214 | defer child_list.deinit(); | |
| 215 | ||
| 216 | try expandNode(child_node, &child_list); | |
| 217 | ||
| 218 | for (child_list.items) |buf| { | |
| 219 | try output.append(buf); | |
| 220 | } | |
| 221 | } | |
| 222 | }, | |
| 223 | } | |
| 224 | } | |
| 225 | ||
| 226 | pub fn main() !void { | |
| 227 | defer _ = gpa.deinit(); | |
| 228 | const stdin_file = io.getStdIn(); | |
| 229 | const stdout_file = io.getStdOut(); | |
| 230 | ||
| 231 | const stdin = try stdin_file.deprecatedReader().readAllAlloc(global_allocator, std.math.maxInt(usize)); | |
| 232 | defer global_allocator.free(stdin); | |
| 233 | ||
| 234 | var result_buf = ArrayList(u8).init(global_allocator); | |
| 235 | defer result_buf.deinit(); | |
| 236 | ||
| 237 | try expandString(stdin, &result_buf); | |
| 238 | try stdout_file.writeAll(result_buf.items); | |
| 239 | } | |
| 240 | ||
| 241 | test "invalid inputs" { | |
| 242 | global_allocator = std.testing.allocator; | |
| 243 | ||
| 244 | try expectError("}ABC", error.InvalidInput); | |
| 245 | try expectError("{ABC", error.InvalidInput); | |
| 246 | try expectError("}{", error.InvalidInput); | |
| 247 | try expectError("{}", error.InvalidInput); | |
| 248 | try expectError("A,B,C", error.InvalidInput); | |
| 249 | try expectError("{A{B,C}", error.InvalidInput); | |
| 250 | try expectError("{A,}", error.InvalidInput); | |
| 251 | ||
| 252 | try expectError("\n", error.InvalidInput); | |
| 253 | } | |
| 254 | ||
| 255 | fn expectError(test_input: []const u8, expected_err: anyerror) !void { | |
| 256 | var output_buf = ArrayList(u8).init(global_allocator); | |
| 257 | defer output_buf.deinit(); | |
| 258 | ||
| 259 | try testing.expectError(expected_err, expandString(test_input, &output_buf)); | |
| 260 | } | |
| 261 | ||
| 262 | test "valid inputs" { | |
| 263 | global_allocator = std.testing.allocator; | |
| 264 | ||
| 265 | try expectExpansion("{x,y,z}", "x y z"); | |
| 266 | try expectExpansion("{A,B}{x,y}", "Ax Ay Bx By"); | |
| 267 | try expectExpansion("{A,B{x,y}}", "A Bx By"); | |
| 268 | ||
| 269 | try expectExpansion("{ABC}", "ABC"); | |
| 270 | try expectExpansion("{A,B,C}", "A B C"); | |
| 271 | try expectExpansion("ABC", "ABC"); | |
| 272 | ||
| 273 | try expectExpansion("", ""); | |
| 274 | try expectExpansion("{A,B}{C,{x,y}}{g,h}", "ACg ACh Axg Axh Ayg Ayh BCg BCh Bxg Bxh Byg Byh"); | |
| 275 | try expectExpansion("{A,B}{C,C{x,y}}{g,h}", "ACg ACh ACxg ACxh ACyg ACyh BCg BCh BCxg BCxh BCyg BCyh"); | |
| 276 | try expectExpansion("{A,B}a", "Aa Ba"); | |
| 277 | try expectExpansion("{C,{x,y}}", "C x y"); | |
| 278 | try expectExpansion("z{C,{x,y}}", "zC zx zy"); | |
| 279 | try expectExpansion("a{b,c{d,e{f,g}}}", "ab acd acef aceg"); | |
| 280 | try expectExpansion("a{x,y}b", "axb ayb"); | |
| 281 | try expectExpansion("z{{a,b}}", "za zb"); | |
| 282 | try expectExpansion("a{b}", "ab"); | |
| 283 | } | |
| 284 | ||
| 285 | fn expectExpansion(test_input: []const u8, expected_result: []const u8) !void { | |
| 286 | var result = ArrayList(u8).init(global_allocator); | |
| 287 | defer result.deinit(); | |
| 288 | ||
| 289 | expandString(test_input, &result) catch unreachable; | |
| 290 | ||
| 291 | try testing.expectEqualSlices(u8, expected_result, result.items); | |
| 292 | } |
test/standalone/simple/build.zig-4| ... | ... | @@ -109,10 +109,6 @@ const cases = [_]Case{ |
| 109 | 109 | //.{ |
| 110 | 110 | // .src_path = "issue_9693/main.zig", |
| 111 | 111 | //}, |
| 112 | .{ | |
| 113 | .src_path = "brace_expansion.zig", | |
| 114 | .is_test = true, | |
| 115 | }, | |
| 116 | 112 | .{ |
| 117 | 113 | .src_path = "issue_7030.zig", |
| 118 | 114 | .target = .{ |
test/standalone/simple/cat/main.zig+10-10| ... | ... | @@ -1,42 +1,42 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | const io = std.io; |
| 3 | const process = std.process; | |
| 4 | 3 | const fs = std.fs; |
| 5 | 4 | const mem = std.mem; |
| 6 | 5 | const warn = std.log.warn; |
| 6 | const fatal = std.process.fatal; | |
| 7 | 7 | |
| 8 | 8 | pub fn main() !void { |
| 9 | 9 | var arena_instance = std.heap.ArenaAllocator.init(std.heap.page_allocator); |
| 10 | 10 | defer arena_instance.deinit(); |
| 11 | 11 | const arena = arena_instance.allocator(); |
| 12 | 12 | |
| 13 | const args = try process.argsAlloc(arena); | |
| 13 | const args = try std.process.argsAlloc(arena); | |
| 14 | 14 | |
| 15 | 15 | const exe = args[0]; |
| 16 | 16 | var catted_anything = false; |
| 17 | const stdout_file = io.getStdOut(); | |
| 17 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 18 | const stdout = &stdout_writer.interface; | |
| 19 | var stdin_reader = std.fs.File.stdin().reader(&.{}); | |
| 18 | 20 | |
| 19 | 21 | const cwd = fs.cwd(); |
| 20 | 22 | |
| 21 | 23 | for (args[1..]) |arg| { |
| 22 | 24 | if (mem.eql(u8, arg, "-")) { |
| 23 | 25 | catted_anything = true; |
| 24 | try stdout_file.writeFileAll(io.getStdIn(), .{}); | |
| 26 | _ = try stdout.sendFileAll(&stdin_reader, .unlimited); | |
| 25 | 27 | } else if (mem.startsWith(u8, arg, "-")) { |
| 26 | 28 | return usage(exe); |
| 27 | 29 | } else { |
| 28 | const file = cwd.openFile(arg, .{}) catch |err| { | |
| 29 | warn("Unable to open file: {s}\n", .{@errorName(err)}); | |
| 30 | return err; | |
| 31 | }; | |
| 30 | const file = cwd.openFile(arg, .{}) catch |err| fatal("unable to open file: {t}\n", .{err}); | |
| 32 | 31 | defer file.close(); |
| 33 | 32 | |
| 34 | 33 | catted_anything = true; |
| 35 | try stdout_file.writeFileAll(file, .{}); | |
| 34 | var file_reader = file.reader(&.{}); | |
| 35 | _ = try stdout.sendFileAll(&file_reader, .unlimited); | |
| 36 | 36 | } |
| 37 | 37 | } |
| 38 | 38 | if (!catted_anything) { |
| 39 | try stdout_file.writeFileAll(io.getStdIn(), .{}); | |
| 39 | _ = try stdout.sendFileAll(&stdin_reader, .unlimited); | |
| 40 | 40 | } |
| 41 | 41 | } |
| 42 | 42 |
test/standalone/simple/guess_number/main.zig+11-13| ... | ... | @@ -1,37 +1,35 @@ |
| 1 | 1 | const builtin = @import("builtin"); |
| 2 | 2 | const std = @import("std"); |
| 3 | const io = std.io; | |
| 4 | const fmt = std.fmt; | |
| 5 | 3 | |
| 6 | 4 | pub fn main() !void { |
| 7 | const stdout = io.getStdOut().writer(); | |
| 8 | const stdin = io.getStdIn(); | |
| 5 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 6 | const out = &stdout_writer.interface; | |
| 7 | const stdin: std.fs.File = .stdin(); | |
| 9 | 8 | |
| 10 | try stdout.print("Welcome to the Guess Number Game in Zig.\n", .{}); | |
| 9 | try out.writeAll("Welcome to the Guess Number Game in Zig.\n"); | |
| 11 | 10 | |
| 12 | 11 | const answer = std.crypto.random.intRangeLessThan(u8, 0, 100) + 1; |
| 13 | 12 | |
| 14 | 13 | while (true) { |
| 15 | try stdout.print("\nGuess a number between 1 and 100: ", .{}); | |
| 14 | try out.writeAll("\nGuess a number between 1 and 100: "); | |
| 16 | 15 | var line_buf: [20]u8 = undefined; |
| 17 | ||
| 18 | 16 | const amt = try stdin.read(&line_buf); |
| 19 | 17 | if (amt == line_buf.len) { |
| 20 | try stdout.print("Input too long.\n", .{}); | |
| 18 | try out.writeAll("Input too long.\n"); | |
| 21 | 19 | continue; |
| 22 | 20 | } |
| 23 | 21 | const line = std.mem.trimEnd(u8, line_buf[0..amt], "\r\n"); |
| 24 | 22 | |
| 25 | const guess = fmt.parseUnsigned(u8, line, 10) catch { | |
| 26 | try stdout.print("Invalid number.\n", .{}); | |
| 23 | const guess = std.fmt.parseUnsigned(u8, line, 10) catch { | |
| 24 | try out.writeAll("Invalid number.\n"); | |
| 27 | 25 | continue; |
| 28 | 26 | }; |
| 29 | 27 | if (guess > answer) { |
| 30 | try stdout.print("Guess lower.\n", .{}); | |
| 28 | try out.writeAll("Guess lower.\n"); | |
| 31 | 29 | } else if (guess < answer) { |
| 32 | try stdout.print("Guess higher.\n", .{}); | |
| 30 | try out.writeAll("Guess higher.\n"); | |
| 33 | 31 | } else { |
| 34 | try stdout.print("You win!\n", .{}); | |
| 32 | try out.writeAll("You win!\n"); | |
| 35 | 33 | return; |
| 36 | 34 | } |
| 37 | 35 | } |
test/standalone/simple/hello_world/hello.zig+1-1| ... | ... | @@ -1,5 +1,5 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn main() !void { |
| 4 | try std.io.getStdOut().writeAll("Hello, World!\n"); | |
| 4 | try std.fs.File.stdout().writeAll("Hello, World!\n"); | |
| 5 | 5 | } |
test/standalone/simple/std_enums_big_enums.zig+1| ... | ... | @@ -6,6 +6,7 @@ pub fn main() void { |
| 6 | 6 | const Big = @Type(.{ .@"enum" = .{ |
| 7 | 7 | .tag_type = u16, |
| 8 | 8 | .fields = make_fields: { |
| 9 | @setEvalBranchQuota(500000); | |
| 9 | 10 | var fields: [1001]std.builtin.Type.EnumField = undefined; |
| 10 | 11 | for (&fields, 0..) |*field, i| { |
| 11 | 12 | field.* = .{ .name = std.fmt.comptimePrint("field_{d}", .{i}), .value = i }; |
test/standalone/windows_bat_args/echo-args.zig+2-1| ... | ... | @@ -5,7 +5,8 @@ pub fn main() !void { |
| 5 | 5 | defer arena_state.deinit(); |
| 6 | 6 | const arena = arena_state.allocator(); |
| 7 | 7 | |
| 8 | const stdout = std.io.getStdOut().writer(); | |
| 8 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 9 | const stdout = &stdout_writer.interface; | |
| 9 | 10 | var args = try std.process.argsAlloc(arena); |
| 10 | 11 | for (args[1..], 1..) |arg, i| { |
| 11 | 12 | try stdout.writeAll(arg); |
test/standalone/windows_spawn/hello.zig+2-1| ... | ... | @@ -1,6 +1,7 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | |
| 3 | 3 | pub fn main() !void { |
| 4 | const stdout = std.io.getStdOut().writer(); | |
| 4 | var stdout_writer = std.fs.File.stdout().writerStreaming(&.{}); | |
| 5 | const stdout = &stdout_writer.interface; | |
| 5 | 6 | try stdout.writeAll("hello from exe\n"); |
| 6 | 7 | } |
tools/docgen.zig+1-2| ... | ... | @@ -43,8 +43,7 @@ pub fn main() !void { |
| 43 | 43 | while (args_it.next()) |arg| { |
| 44 | 44 | if (mem.startsWith(u8, arg, "-")) { |
| 45 | 45 | if (mem.eql(u8, arg, "-h") or mem.eql(u8, arg, "--help")) { |
| 46 | const stdout = io.getStdOut().writer(); | |
| 47 | try stdout.writeAll(usage); | |
| 46 | try fs.File.stdout().writeAll(usage); | |
| 48 | 47 | process.exit(0); |
| 49 | 48 | } else if (mem.eql(u8, arg, "--code-dir")) { |
| 50 | 49 | if (args_it.next()) |param| { |
tools/doctest.zig+1-1| ... | ... | @@ -44,7 +44,7 @@ pub fn main() !void { |
| 44 | 44 | while (args_it.next()) |arg| { |
| 45 | 45 | if (mem.startsWith(u8, arg, "-")) { |
| 46 | 46 | if (mem.eql(u8, arg, "-h") or mem.eql(u8, arg, "--help")) { |
| 47 | try std.io.getStdOut().writeAll(usage); | |
| 47 | try std.fs.File.stdout().writeAll(usage); | |
| 48 | 48 | process.exit(0); |
| 49 | 49 | } else if (mem.eql(u8, arg, "-i")) { |
| 50 | 50 | opt_input = args_it.next() orelse fatal("expected parameter after -i", .{}); |
tools/dump-cov.zig+4-3| ... | ... | @@ -48,8 +48,9 @@ pub fn main() !void { |
| 48 | 48 | fatal("failed to load coverage file {}: {s}", .{ cov_path, @errorName(err) }); |
| 49 | 49 | }; |
| 50 | 50 | |
| 51 | var bw = std.io.bufferedWriter(std.io.getStdOut().writer()); | |
| 52 | const stdout = bw.writer(); | |
| 51 | var stdout_buffer: [4000]u8 = undefined; | |
| 52 | var stdout_writer = std.fs.File.stdout().writerStreaming(&stdout_buffer); | |
| 53 | const stdout = &stdout_writer.interface; | |
| 53 | 54 | |
| 54 | 55 | const header: *SeenPcsHeader = @ptrCast(cov_bytes); |
| 55 | 56 | try stdout.print("{any}\n", .{header.*}); |
| ... | ... | @@ -83,5 +84,5 @@ pub fn main() !void { |
| 83 | 84 | }); |
| 84 | 85 | } |
| 85 | 86 | |
| 86 | try bw.flush(); | |
| 87 | try stdout.flush(); | |
| 87 | 88 | } |
tools/fetch_them_macos_headers.zig+2-13| ... | ... | @@ -5,6 +5,8 @@ const mem = std.mem; |
| 5 | 5 | const process = std.process; |
| 6 | 6 | const assert = std.debug.assert; |
| 7 | 7 | const tmpDir = std.testing.tmpDir; |
| 8 | const fatal = std.process.fatal; | |
| 9 | const info = std.log.info; | |
| 8 | 10 | |
| 9 | 11 | const Allocator = mem.Allocator; |
| 10 | 12 | const OsTag = std.Target.Os.Tag; |
| ... | ... | @@ -245,19 +247,6 @@ const ArgsIterator = struct { |
| 245 | 247 | } |
| 246 | 248 | }; |
| 247 | 249 | |
| 248 | fn info(comptime format: []const u8, args: anytype) void { | |
| 249 | const msg = std.fmt.allocPrint(gpa, "info: " ++ format ++ "\n", args) catch return; | |
| 250 | std.io.getStdOut().writeAll(msg) catch {}; | |
| 251 | } | |
| 252 | ||
| 253 | fn fatal(comptime format: []const u8, args: anytype) noreturn { | |
| 254 | ret: { | |
| 255 | const msg = std.fmt.allocPrint(gpa, "fatal: " ++ format ++ "\n", args) catch break :ret; | |
| 256 | std.io.getStdErr().writeAll(msg) catch {}; | |
| 257 | } | |
| 258 | std.process.exit(1); | |
| 259 | } | |
| 260 | ||
| 261 | 250 | const Version = struct { |
| 262 | 251 | major: u16, |
| 263 | 252 | minor: u8, |
tools/gen_macos_headers_c.zig+9-17| ... | ... | @@ -1,5 +1,7 @@ |
| 1 | 1 | const std = @import("std"); |
| 2 | 2 | const assert = std.debug.assert; |
| 3 | const info = std.log.info; | |
| 4 | const fatal = std.process.fatal; | |
| 3 | 5 | |
| 4 | 6 | const Allocator = std.mem.Allocator; |
| 5 | 7 | |
| ... | ... | @@ -13,19 +15,6 @@ const usage = |
| 13 | 15 | \\-h, --help Print this help and exit |
| 14 | 16 | ; |
| 15 | 17 | |
| 16 | fn info(comptime format: []const u8, args: anytype) void { | |
| 17 | const msg = std.fmt.allocPrint(gpa, "info: " ++ format ++ "\n", args) catch return; | |
| 18 | std.io.getStdOut().writeAll(msg) catch {}; | |
| 19 | } | |
| 20 | ||
| 21 | fn fatal(comptime format: []const u8, args: anytype) noreturn { | |
| 22 | ret: { | |
| 23 | const msg = std.fmt.allocPrint(gpa, "fatal: " ++ format ++ "\n", args) catch break :ret; | |
| 24 | std.io.getStdErr().writeAll(msg) catch {}; | |
| 25 | } | |
| 26 | std.process.exit(1); | |
| 27 | } | |
| 28 | ||
| 29 | 18 | pub fn main() anyerror!void { |
| 30 | 19 | var arena_allocator = std.heap.ArenaAllocator.init(gpa); |
| 31 | 20 | defer arena_allocator.deinit(); |
| ... | ... | @@ -58,16 +47,19 @@ pub fn main() anyerror!void { |
| 58 | 47 | |
| 59 | 48 | std.mem.sort([]const u8, paths.items, {}, SortFn.lessThan); |
| 60 | 49 | |
| 61 | const stdout = std.io.getStdOut().writer(); | |
| 62 | try stdout.writeAll("#define _XOPEN_SOURCE\n"); | |
| 50 | var buffer: [2000]u8 = undefined; | |
| 51 | var stdout_writer = std.fs.File.stdout().writerStreaming(&buffer); | |
| 52 | const w = &stdout_writer.interface; | |
| 53 | try w.writeAll("#define _XOPEN_SOURCE\n"); | |
| 63 | 54 | for (paths.items) |path| { |
| 64 | try stdout.print("#include <{s}>\n", .{path}); | |
| 55 | try w.print("#include <{s}>\n", .{path}); | |
| 65 | 56 | } |
| 66 | try stdout.writeAll( | |
| 57 | try w.writeAll( | |
| 67 | 58 | \\int main(int argc, char **argv) { |
| 68 | 59 | \\ return 0; |
| 69 | 60 | \\} |
| 70 | 61 | ); |
| 62 | try w.flush(); | |
| 71 | 63 | } |
| 72 | 64 | |
| 73 | 65 | fn findHeaders( |
tools/gen_outline_atomics.zig+4-3| ... | ... | @@ -17,8 +17,9 @@ pub fn main() !void { |
| 17 | 17 | |
| 18 | 18 | //const args = try std.process.argsAlloc(arena); |
| 19 | 19 | |
| 20 | var bw = std.io.bufferedWriter(std.io.getStdOut().writer()); | |
| 21 | const w = bw.writer(); | |
| 20 | var stdout_buffer: [2000]u8 = undefined; | |
| 21 | var stdout_writer = std.fs.File.stdout().writerStreaming(&stdout_buffer); | |
| 22 | const w = &stdout_writer.interface; | |
| 22 | 23 | |
| 23 | 24 | try w.writeAll( |
| 24 | 25 | \\//! This file is generated by tools/gen_outline_atomics.zig. |
| ... | ... | @@ -57,7 +58,7 @@ pub fn main() !void { |
| 57 | 58 | |
| 58 | 59 | try w.writeAll(footer.items); |
| 59 | 60 | try w.writeAll("}\n"); |
| 60 | try bw.flush(); | |
| 61 | try w.flush(); | |
| 61 | 62 | } |
| 62 | 63 | |
| 63 | 64 | fn writeFunction( |
tools/gen_spirv_spec.zig+9-12| ... | ... | @@ -91,9 +91,10 @@ pub fn main() !void { |
| 91 | 91 | |
| 92 | 92 | try readExtRegistry(&exts, a, std.fs.cwd(), args[2]); |
| 93 | 93 | |
| 94 | var bw = std.io.bufferedWriter(std.io.getStdOut().writer()); | |
| 95 | try render(bw.writer(), a, core_spec, exts.items); | |
| 96 | try bw.flush(); | |
| 94 | var buffer: [4000]u8 = undefined; | |
| 95 | var w = std.fs.File.stdout().writerStreaming(&buffer); | |
| 96 | try render(&w, a, core_spec, exts.items); | |
| 97 | try w.flush(); | |
| 97 | 98 | } |
| 98 | 99 | |
| 99 | 100 | fn readExtRegistry(exts: *std.ArrayList(Extension), a: Allocator, dir: std.fs.Dir, sub_path: []const u8) !void { |
| ... | ... | @@ -166,7 +167,7 @@ fn tagPriorityScore(tag: []const u8) usize { |
| 166 | 167 | } |
| 167 | 168 | } |
| 168 | 169 | |
| 169 | fn render(writer: anytype, a: Allocator, registry: CoreRegistry, extensions: []const Extension) !void { | |
| 170 | fn render(writer: *std.io.Writer, a: Allocator, registry: CoreRegistry, extensions: []const Extension) !void { | |
| 170 | 171 | try writer.writeAll( |
| 171 | 172 | \\//! This file is auto-generated by tools/gen_spirv_spec.zig. |
| 172 | 173 | \\ |
| ... | ... | @@ -188,15 +189,10 @@ fn render(writer: anytype, a: Allocator, registry: CoreRegistry, extensions: []c |
| 188 | 189 | \\ none, |
| 189 | 190 | \\ _, |
| 190 | 191 | \\ |
| 191 | \\ pub fn format( | |
| 192 | \\ self: IdResult, | |
| 193 | \\ comptime _: []const u8, | |
| 194 | \\ _: std.fmt.FormatOptions, | |
| 195 | \\ writer: anytype, | |
| 196 | \\ ) @TypeOf(writer).Error!void { | |
| 192 | \\ pub fn format(self: IdResult, writer: *std.io.Writer) std.io.Writer.Error!void { | |
| 197 | 193 | \\ switch (self) { |
| 198 | 194 | \\ .none => try writer.writeAll("(none)"), |
| 199 | \\ else => try writer.print("%{}", .{@intFromEnum(self)}), | |
| 195 | \\ else => try writer.print("%{d}", .{@intFromEnum(self)}), | |
| 200 | 196 | \\ } |
| 201 | 197 | \\ } |
| 202 | 198 | \\}; |
| ... | ... | @@ -899,7 +895,8 @@ fn parseHexInt(text: []const u8) !u31 { |
| 899 | 895 | } |
| 900 | 896 | |
| 901 | 897 | fn usageAndExit(arg0: []const u8, code: u8) noreturn { |
| 902 | std.io.getStdErr().writer().print( | |
| 898 | const stderr = std.debug.lockStderrWriter(&.{}); | |
| 899 | stderr.print( | |
| 903 | 900 | \\Usage: {s} <SPIRV-Headers repository path> <path/to/zig/src/codegen/spirv/extinst.zig.grammar.json> |
| 904 | 901 | \\ |
| 905 | 902 | \\Generates Zig bindings for SPIR-V specifications found in the SPIRV-Headers |
tools/gen_stubs.zig+5-1| ... | ... | @@ -333,7 +333,9 @@ pub fn main() !void { |
| 333 | 333 | } |
| 334 | 334 | } |
| 335 | 335 | |
| 336 | const stdout = std.io.getStdOut().writer(); | |
| 336 | var stdout_buffer: [2000]u8 = undefined; | |
| 337 | var stdout_writer = std.fs.File.stdout().writerStreaming(&stdout_buffer); | |
| 338 | const stdout = &stdout_writer.interface; | |
| 337 | 339 | try stdout.writeAll( |
| 338 | 340 | \\#ifdef PTR64 |
| 339 | 341 | \\#define WEAK64 .weak |
| ... | ... | @@ -533,6 +535,8 @@ pub fn main() !void { |
| 533 | 535 | .all => {}, |
| 534 | 536 | .single, .multi, .family, .time32 => try stdout.writeAll("#endif\n"), |
| 535 | 537 | } |
| 538 | ||
| 539 | try stdout.flush(); | |
| 536 | 540 | } |
| 537 | 541 | |
| 538 | 542 | fn parseElf(parse: Parse, comptime is_64: bool, comptime endian: builtin.Endian) !void { |
tools/generate_JSONTestSuite.zig+5-1| ... | ... | @@ -6,7 +6,9 @@ pub fn main() !void { |
| 6 | 6 | var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init; |
| 7 | 7 | var allocator = gpa.allocator(); |
| 8 | 8 | |
| 9 | var output = std.io.getStdOut().writer(); | |
| 9 | var stdout_buffer: [2000]u8 = undefined; | |
| 10 | var stdout_writer = std.fs.File.stdout().writerStreaming(&stdout_buffer); | |
| 11 | const output = &stdout_writer.interface; | |
| 10 | 12 | try output.writeAll( |
| 11 | 13 | \\// This file was generated by _generate_JSONTestSuite.zig |
| 12 | 14 | \\// These test cases are sourced from: https://github.com/nst/JSONTestSuite |
| ... | ... | @@ -44,6 +46,8 @@ pub fn main() !void { |
| 44 | 46 | try writeString(output, contents); |
| 45 | 47 | try output.writeAll(");\n}\n"); |
| 46 | 48 | } |
| 49 | ||
| 50 | try output.flush(); | |
| 47 | 51 | } |
| 48 | 52 | |
| 49 | 53 | const i_structure_500_nested_arrays = "[" ** 500 ++ "]" ** 500; |
tools/generate_c_size_and_align_checks.zig+7-4| ... | ... | @@ -42,20 +42,23 @@ pub fn main() !void { |
| 42 | 42 | const query = try std.Target.Query.parse(.{ .arch_os_abi = args[1] }); |
| 43 | 43 | const target = try std.zig.system.resolveTargetQuery(query); |
| 44 | 44 | |
| 45 | const stdout = std.io.getStdOut().writer(); | |
| 45 | var buffer: [2000]u8 = undefined; | |
| 46 | var stdout_writer = std.fs.File.stdout().writerStreaming(&buffer); | |
| 47 | const w = &stdout_writer.interface; | |
| 46 | 48 | inline for (@typeInfo(std.Target.CType).@"enum".fields) |field| { |
| 47 | 49 | const c_type: std.Target.CType = @enumFromInt(field.value); |
| 48 | try stdout.print("_Static_assert(sizeof({0s}) == {1d}, \"sizeof({0s}) == {1d}\");\n", .{ | |
| 50 | try w.print("_Static_assert(sizeof({0s}) == {1d}, \"sizeof({0s}) == {1d}\");\n", .{ | |
| 49 | 51 | cName(c_type), |
| 50 | 52 | target.cTypeByteSize(c_type), |
| 51 | 53 | }); |
| 52 | try stdout.print("_Static_assert(_Alignof({0s}) == {1d}, \"_Alignof({0s}) == {1d}\");\n", .{ | |
| 54 | try w.print("_Static_assert(_Alignof({0s}) == {1d}, \"_Alignof({0s}) == {1d}\");\n", .{ | |
| 53 | 55 | cName(c_type), |
| 54 | 56 | target.cTypeAlignment(c_type), |
| 55 | 57 | }); |
| 56 | try stdout.print("_Static_assert(__alignof({0s}) == {1d}, \"__alignof({0s}) == {1d}\");\n\n", .{ | |
| 58 | try w.print("_Static_assert(__alignof({0s}) == {1d}, \"__alignof({0s}) == {1d}\");\n\n", .{ | |
| 57 | 59 | cName(c_type), |
| 58 | 60 | target.cTypePreferredAlignment(c_type), |
| 59 | 61 | }); |
| 60 | 62 | } |
| 63 | try w.flush(); | |
| 61 | 64 | } |
tools/generate_linux_syscalls.zig+11-9| ... | ... | @@ -666,13 +666,16 @@ pub fn main() !void { |
| 666 | 666 | const allocator = arena.allocator(); |
| 667 | 667 | |
| 668 | 668 | const args = try std.process.argsAlloc(allocator); |
| 669 | if (args.len < 3 or mem.eql(u8, args[1], "--help")) | |
| 670 | usageAndExit(std.io.getStdErr(), args[0], 1); | |
| 669 | if (args.len < 3 or mem.eql(u8, args[1], "--help")) { | |
| 670 | usage(std.debug.lockStderrWriter(&.{}), args[0]) catch std.process.exit(2); | |
| 671 | std.process.exit(1); | |
| 672 | } | |
| 671 | 673 | const zig_exe = args[1]; |
| 672 | 674 | const linux_path = args[2]; |
| 673 | 675 | |
| 674 | var buf_out = std.io.bufferedWriter(std.io.getStdOut().writer()); | |
| 675 | const writer = buf_out.writer(); | |
| 676 | var stdout_buffer: [2000]u8 = undefined; | |
| 677 | var stdout_writer = std.fs.File.stdout().writerStreaming(&stdout_buffer); | |
| 678 | const writer = &stdout_writer.interface; | |
| 676 | 679 | |
| 677 | 680 | var linux_dir = try std.fs.cwd().openDir(linux_path, .{}); |
| 678 | 681 | defer linux_dir.close(); |
| ... | ... | @@ -714,17 +717,16 @@ pub fn main() !void { |
| 714 | 717 | } |
| 715 | 718 | } |
| 716 | 719 | |
| 717 | try buf_out.flush(); | |
| 720 | try writer.flush(); | |
| 718 | 721 | } |
| 719 | 722 | |
| 720 | fn usageAndExit(file: fs.File, arg0: []const u8, code: u8) noreturn { | |
| 721 | file.writer().print( | |
| 723 | fn usage(w: *std.io.Writer, arg0: []const u8) std.io.Writer.Error!void { | |
| 724 | try w.print( | |
| 722 | 725 | \\Usage: {s} /path/to/zig /path/to/linux |
| 723 | 726 | \\Alternative Usage: zig run /path/to/git/zig/tools/generate_linux_syscalls.zig -- /path/to/zig /path/to/linux |
| 724 | 727 | \\ |
| 725 | 728 | \\Generates the list of Linux syscalls for each supported cpu arch, using the Linux development tree. |
| 726 | 729 | \\Prints to stdout Zig code which you can use to replace the file lib/std/os/linux/syscalls.zig. |
| 727 | 730 | \\ |
| 728 | , .{arg0}) catch std.process.exit(1); | |
| 729 | std.process.exit(code); | |
| 731 | , .{arg0}); | |
| 730 | 732 | } |
tools/update_clang_options.zig+22-20| ... | ... | @@ -634,25 +634,25 @@ pub fn main() anyerror!void { |
| 634 | 634 | const allocator = arena.allocator(); |
| 635 | 635 | const args = try std.process.argsAlloc(allocator); |
| 636 | 636 | |
| 637 | if (args.len <= 1) { | |
| 638 | usageAndExit(std.io.getStdErr(), args[0], 1); | |
| 639 | } | |
| 637 | var stdout_buffer: [4000]u8 = undefined; | |
| 638 | var stdout_writer = fs.stdout().writerStreaming(&stdout_buffer); | |
| 639 | const stdout = &stdout_writer.interface; | |
| 640 | ||
| 641 | if (args.len <= 1) printUsageAndExit(args[0]); | |
| 642 | ||
| 640 | 643 | if (std.mem.eql(u8, args[1], "--help")) { |
| 641 | usageAndExit(std.io.getStdOut(), args[0], 0); | |
| 642 | } | |
| 643 | if (args.len < 3) { | |
| 644 | usageAndExit(std.io.getStdErr(), args[0], 1); | |
| 644 | printUsage(stdout, args[0]) catch std.process.exit(2); | |
| 645 | stdout.flush() catch std.process.exit(2); | |
| 646 | std.process.exit(0); | |
| 645 | 647 | } |
| 646 | 648 | |
| 649 | if (args.len < 3) printUsageAndExit(args[0]); | |
| 650 | ||
| 647 | 651 | const llvm_tblgen_exe = args[1]; |
| 648 | if (std.mem.startsWith(u8, llvm_tblgen_exe, "-")) { | |
| 649 | usageAndExit(std.io.getStdErr(), args[0], 1); | |
| 650 | } | |
| 652 | if (std.mem.startsWith(u8, llvm_tblgen_exe, "-")) printUsageAndExit(args[0]); | |
| 651 | 653 | |
| 652 | 654 | const llvm_src_root = args[2]; |
| 653 | if (std.mem.startsWith(u8, llvm_src_root, "-")) { | |
| 654 | usageAndExit(std.io.getStdErr(), args[0], 1); | |
| 655 | } | |
| 655 | if (std.mem.startsWith(u8, llvm_src_root, "-")) printUsageAndExit(args[0]); | |
| 656 | 656 | |
| 657 | 657 | var llvm_to_zig_cpu_features = std.StringHashMap([]const u8).init(allocator); |
| 658 | 658 | |
| ... | ... | @@ -719,8 +719,6 @@ pub fn main() anyerror!void { |
| 719 | 719 | // "W" and "Wl,". So we sort this list in order of descending priority. |
| 720 | 720 | std.mem.sort(*json.ObjectMap, all_objects.items, {}, objectLessThan); |
| 721 | 721 | |
| 722 | var buffered_stdout = std.io.bufferedWriter(std.io.getStdOut().writer()); | |
| 723 | const stdout = buffered_stdout.writer(); | |
| 724 | 722 | try stdout.writeAll( |
| 725 | 723 | \\// This file is generated by tools/update_clang_options.zig. |
| 726 | 724 | \\// zig fmt: off |
| ... | ... | @@ -815,7 +813,7 @@ pub fn main() anyerror!void { |
| 815 | 813 | \\ |
| 816 | 814 | ); |
| 817 | 815 | |
| 818 | try buffered_stdout.flush(); | |
| 816 | try stdout.flush(); | |
| 819 | 817 | } |
| 820 | 818 | |
| 821 | 819 | // TODO we should be able to import clang_options.zig but currently this is problematic because it will |
| ... | ... | @@ -966,13 +964,17 @@ fn objectLessThan(context: void, a: *json.ObjectMap, b: *json.ObjectMap) bool { |
| 966 | 964 | return std.mem.lessThan(u8, a_key, b_key); |
| 967 | 965 | } |
| 968 | 966 | |
| 969 | fn usageAndExit(file: fs.File, arg0: []const u8, code: u8) noreturn { | |
| 970 | file.writer().print( | |
| 967 | fn printUsageAndExit(arg0: []const u8) noreturn { | |
| 968 | printUsage(std.debug.lockStderrWriter(&.{}), arg0) catch std.process.exit(2); | |
| 969 | std.process.exit(1); | |
| 970 | } | |
| 971 | ||
| 972 | fn printUsage(w: *std.io.Writer, arg0: []const u8) std.io.Writer.Error!void { | |
| 973 | try w.print( | |
| 971 | 974 | \\Usage: {s} /path/to/llvm-tblgen /path/to/git/llvm/llvm-project |
| 972 | 975 | \\Alternative Usage: zig run /path/to/git/zig/tools/update_clang_options.zig -- /path/to/llvm-tblgen /path/to/git/llvm/llvm-project |
| 973 | 976 | \\ |
| 974 | 977 | \\Prints to stdout Zig code which you can use to replace the file src/clang_options_data.zig. |
| 975 | 978 | \\ |
| 976 | , .{arg0}) catch std.process.exit(1); | |
| 977 | std.process.exit(code); | |
| 979 | , .{arg0}); | |
| 978 | 980 | } |
tools/update_cpu_features.zig+2-2| ... | ... | @@ -2082,8 +2082,8 @@ fn processOneTarget(job: Job) void { |
| 2082 | 2082 | } |
| 2083 | 2083 | |
| 2084 | 2084 | fn usageAndExit(arg0: []const u8, code: u8) noreturn { |
| 2085 | const stderr = std.io.getStdErr(); | |
| 2086 | stderr.writer().print( | |
| 2085 | const stderr = std.debug.lockStderrWriter(&.{}); | |
| 2086 | stderr.print( | |
| 2087 | 2087 | \\Usage: {s} /path/to/llvm-tblgen /path/git/llvm-project /path/git/zig [zig_name filter] |
| 2088 | 2088 | \\ |
| 2089 | 2089 | \\Updates lib/std/target/<target>.zig from llvm/lib/Target/<Target>/<Target>.td . |
tools/update_crc_catalog.zig+10-10| ... | ... | @@ -11,14 +11,10 @@ pub fn main() anyerror!void { |
| 11 | 11 | const arena = arena_state.allocator(); |
| 12 | 12 | |
| 13 | 13 | const args = try std.process.argsAlloc(arena); |
| 14 | if (args.len <= 1) { | |
| 15 | usageAndExit(std.io.getStdErr(), args[0], 1); | |
| 16 | } | |
| 14 | if (args.len <= 1) printUsageAndExit(args[0]); | |
| 17 | 15 | |
| 18 | 16 | const zig_src_root = args[1]; |
| 19 | if (mem.startsWith(u8, zig_src_root, "-")) { | |
| 20 | usageAndExit(std.io.getStdErr(), args[0], 1); | |
| 21 | } | |
| 17 | if (mem.startsWith(u8, zig_src_root, "-")) printUsageAndExit(args[0]); | |
| 22 | 18 | |
| 23 | 19 | var zig_src_dir = try fs.cwd().openDir(zig_src_root, .{}); |
| 24 | 20 | defer zig_src_dir.close(); |
| ... | ... | @@ -193,10 +189,14 @@ pub fn main() anyerror!void { |
| 193 | 189 | } |
| 194 | 190 | } |
| 195 | 191 | |
| 196 | fn usageAndExit(file: fs.File, arg0: []const u8, code: u8) noreturn { | |
| 197 | file.writer().print( | |
| 192 | fn printUsageAndExit(arg0: []const u8) noreturn { | |
| 193 | printUsage(std.debug.lockStderrWriter(&.{}), arg0) catch std.process.exit(2); | |
| 194 | std.process.exit(1); | |
| 195 | } | |
| 196 | ||
| 197 | fn printUsage(w: *std.io.Writer, arg0: []const u8) std.io.Writer.Error!void { | |
| 198 | return w.print( | |
| 198 | 199 | \\Usage: {s} /path/git/zig |
| 199 | 200 | \\ |
| 200 | , .{arg0}) catch std.process.exit(1); | |
| 201 | std.process.exit(code); | |
| 201 | , .{arg0}); | |
| 202 | 202 | } |