authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-16 18:57:55-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-16 18:57:55-07:00
logfbf8b16ae61ae81ca14027973f3f9366b39a2389
treec30bf2207be569563331dd676a41c6298188c595
parent51ebebcea36bcc960e8f0f7ef17d795eb46ce1ce

sync


7 files changed, 63 insertions(+), 63 deletions(-)

lib/std/zig.zig+6-8
...@@ -530,18 +530,16 @@ test isUnderscore {...@@ -530,18 +530,16 @@ test isUnderscore {
530 try std.testing.expect(!isUnderscore("\\x5f"));530 try std.testing.expect(!isUnderscore("\\x5f"));
531}531}
532532
533pub fn readSourceFileToEndAlloc(gpa: Allocator, input: std.fs.File, size_hint: usize) ![:0]u8 {533pub fn readSourceFileToEndAlloc(gpa: Allocator, file_reader: *std.fs.File.Reader) ![:0]u8 {
534 var buffer: std.ArrayListAlignedUnmanaged(u8, .@"2") = .empty;534 var buffer: std.ArrayListAlignedUnmanaged(u8, .@"2") = .empty;
535 defer buffer.deinit(gpa);535 defer buffer.deinit(gpa);
536536
537 try buffer.ensureUnusedCapacity(gpa, size_hint);537 if (file_reader.getSize()) |size| {
538 const casted_size = std.math.cast(u32, size) orelse return error.StreamTooLong;
539 try buffer.ensureTotalCapacityPrecise(gpa, casted_size);
540 } else |_| {}
538541
539 input.readIntoArrayList(gpa, .limited(max_src_size), .@"2", &buffer) catch |err| switch (err) {542 try file_reader.interface.appendRemaining(gpa, .@"2", &buffer, .limited(max_src_size));
540 error.ConnectionResetByPeer => unreachable,
541 error.ConnectionTimedOut => unreachable,
542 error.NotOpenForReading => unreachable,
543 else => |e| return e,
544 };
545543
546 // Detect unsupported file types with their Byte Order Mark544 // Detect unsupported file types with their Byte Order Mark
547 const unsupported_boms = [_][]const u8{545 const unsupported_boms = [_][]const u8{
lib/std/zig/Ast.zig+2-2
...@@ -207,7 +207,7 @@ pub fn renderAlloc(tree: Ast, gpa: Allocator) error{OutOfMemory}![]u8 {...@@ -207,7 +207,7 @@ pub fn renderAlloc(tree: Ast, gpa: Allocator) error{OutOfMemory}![]u8 {
207 var aw: std.io.Writer.Allocating = .init(gpa);207 var aw: std.io.Writer.Allocating = .init(gpa);
208 defer aw.deinit();208 defer aw.deinit();
209 render(tree, gpa, &aw.writer, .{}) catch |err| switch (err) {209 render(tree, gpa, &aw.writer, .{}) catch |err| switch (err) {
210 error.WriteFailed => return error.OutOfMemory,210 error.WriteFailed, error.OutOfMemory => return error.OutOfMemory,
211 };211 };
212 return aw.toOwnedSlice();212 return aw.toOwnedSlice();
213}213}
...@@ -215,7 +215,7 @@ pub fn renderAlloc(tree: Ast, gpa: Allocator) error{OutOfMemory}![]u8 {...@@ -215,7 +215,7 @@ pub fn renderAlloc(tree: Ast, gpa: Allocator) error{OutOfMemory}![]u8 {
215pub const Render = @import("Ast/Render.zig");215pub const Render = @import("Ast/Render.zig");
216216
217pub fn render(tree: Ast, gpa: Allocator, w: *Writer, fixups: Render.Fixups) Render.Error!void {217pub fn render(tree: Ast, gpa: Allocator, w: *Writer, fixups: Render.Fixups) Render.Error!void {
218 return Render.tree(gpa, w, tree, fixups);218 return Render.renderTree(gpa, w, tree, fixups);
219}219}
220220
221/// Returns an extra offset for column and byte offset of errors that221/// Returns an extra offset for column and byte offset of errors that
lib/std/zig/Ast/Render.zig+16-16
...@@ -2399,24 +2399,24 @@ fn renderAsmLegacy(...@@ -2399,24 +2399,24 @@ fn renderAsmLegacy(
2399 try renderToken(r, first_clobber - 2, .none);2399 try renderToken(r, first_clobber - 2, .none);
2400 try renderToken(r, first_clobber - 1, .space);2400 try renderToken(r, first_clobber - 1, .space);
24012401
2402 try ais.writer().writeAll(".{ ");2402 try ais.writeAll(".{ ");
24032403
2404 var tok_i = first_clobber;2404 var tok_i = first_clobber;
2405 while (true) : (tok_i += 1) {2405 while (true) : (tok_i += 1) {
2406 try ais.writer().writeByte('.');2406 try ais.writeByte('.');
2407 _ = try writeStringLiteralAsIdentifier(r, tok_i);2407 _ = try writeStringLiteralAsIdentifier(r, tok_i);
2408 try ais.writer().writeAll(" = true");2408 try ais.writeAll(" = true");
24092409
2410 tok_i += 1;2410 tok_i += 1;
2411 switch (tree.tokenTag(tok_i)) {2411 switch (tree.tokenTag(tok_i)) {
2412 .r_paren => {2412 .r_paren => {
2413 try ais.writer().writeAll(" }");2413 try ais.writeAll(" }");
2414 ais.popIndent();2414 ais.popIndent();
2415 return renderToken(r, tok_i, space);2415 return renderToken(r, tok_i, space);
2416 },2416 },
2417 .comma => {2417 .comma => {
2418 if (tree.tokenTag(tok_i + 1) == .r_paren) {2418 if (tree.tokenTag(tok_i + 1) == .r_paren) {
2419 try ais.writer().writeAll(" }");2419 try ais.writeAll(" }");
2420 ais.popIndent();2420 ais.popIndent();
2421 return renderToken(r, tok_i + 1, space);2421 return renderToken(r, tok_i + 1, space);
2422 } else {2422 } else {
...@@ -2511,16 +2511,16 @@ fn renderAsmLegacy(...@@ -2511,16 +2511,16 @@ fn renderAsmLegacy(
2511 };2511 };
25122512
2513 try renderToken(r, colon3, .space); // :2513 try renderToken(r, colon3, .space); // :
2514 try ais.writer().writeAll(".{ ");2514 try ais.writeAll(".{ ");
2515 const first_clobber = asm_node.first_clobber.?;2515 const first_clobber = asm_node.first_clobber.?;
2516 var tok_i = first_clobber;2516 var tok_i = first_clobber;
2517 while (true) {2517 while (true) {
2518 switch (tree.tokenTag(tok_i + 1)) {2518 switch (tree.tokenTag(tok_i + 1)) {
2519 .r_paren => {2519 .r_paren => {
2520 ais.setIndentDelta(indent_delta);2520 ais.setIndentDelta(indent_delta);
2521 try ais.writer().writeByte('.');2521 try ais.writeByte('.');
2522 const lexeme_len = try writeStringLiteralAsIdentifier(r, tok_i);2522 const lexeme_len = try writeStringLiteralAsIdentifier(r, tok_i);
2523 try ais.writer().writeAll(" = true }");2523 try ais.writeAll(" = true }");
2524 try renderSpace(r, tok_i, lexeme_len, .newline);2524 try renderSpace(r, tok_i, lexeme_len, .newline);
2525 ais.popIndent();2525 ais.popIndent();
2526 return renderToken(r, tok_i + 1, space);2526 return renderToken(r, tok_i + 1, space);
...@@ -2529,17 +2529,17 @@ fn renderAsmLegacy(...@@ -2529,17 +2529,17 @@ fn renderAsmLegacy(
2529 switch (tree.tokenTag(tok_i + 2)) {2529 switch (tree.tokenTag(tok_i + 2)) {
2530 .r_paren => {2530 .r_paren => {
2531 ais.setIndentDelta(indent_delta);2531 ais.setIndentDelta(indent_delta);
2532 try ais.writer().writeByte('.');2532 try ais.writeByte('.');
2533 const lexeme_len = try writeStringLiteralAsIdentifier(r, tok_i);2533 const lexeme_len = try writeStringLiteralAsIdentifier(r, tok_i);
2534 try ais.writer().writeAll(" = true }");2534 try ais.writeAll(" = true }");
2535 try renderSpace(r, tok_i, lexeme_len, .newline);2535 try renderSpace(r, tok_i, lexeme_len, .newline);
2536 ais.popIndent();2536 ais.popIndent();
2537 return renderToken(r, tok_i + 2, space);2537 return renderToken(r, tok_i + 2, space);
2538 },2538 },
2539 else => {2539 else => {
2540 try ais.writer().writeByte('.');2540 try ais.writeByte('.');
2541 _ = try writeStringLiteralAsIdentifier(r, tok_i);2541 _ = try writeStringLiteralAsIdentifier(r, tok_i);
2542 try ais.writer().writeAll(" = true");2542 try ais.writeAll(" = true");
2543 try renderToken(r, tok_i + 1, .space);2543 try renderToken(r, tok_i + 1, .space);
2544 tok_i += 2;2544 tok_i += 2;
2545 },2545 },
...@@ -2827,7 +2827,7 @@ fn renderSpace(r: *Render, token_index: Ast.TokenIndex, lexeme_len: usize, space...@@ -2827,7 +2827,7 @@ fn renderSpace(r: *Render, token_index: Ast.TokenIndex, lexeme_len: usize, space
2827 if (space == .skip) return;2827 if (space == .skip) return;
28282828
2829 if (space == .comma and next_token_tag != .comma) {2829 if (space == .comma and next_token_tag != .comma) {
2830 try ais.underlying_writer.writeByte(',');2830 try ais.writeByte(',');
2831 }2831 }
2832 if (space == .semicolon or space == .comma) ais.enableSpaceMode(space);2832 if (space == .semicolon or space == .comma) ais.enableSpaceMode(space);
2833 defer ais.disableSpaceMode();2833 defer ais.disableSpaceMode();
...@@ -3242,11 +3242,11 @@ fn writeStringLiteralAsIdentifier(r: *Render, token_index: Ast.TokenIndex) !usiz...@@ -3242,11 +3242,11 @@ fn writeStringLiteralAsIdentifier(r: *Render, token_index: Ast.TokenIndex) !usiz
3242 const lexeme = tokenSliceForRender(tree, token_index);3242 const lexeme = tokenSliceForRender(tree, token_index);
3243 const unquoted = lexeme[1..][0 .. lexeme.len - 2];3243 const unquoted = lexeme[1..][0 .. lexeme.len - 2];
3244 if (std.zig.isValidId(unquoted)) {3244 if (std.zig.isValidId(unquoted)) {
3245 try ais.writer().writeAll(unquoted);3245 try ais.writeAll(unquoted);
3246 return unquoted.len;3246 return unquoted.len;
3247 } else {3247 } else {
3248 try ais.writer().writeByte('@');3248 try ais.writeByte('@');
3249 try ais.writer().writeAll(lexeme);3249 try ais.writeAll(lexeme);
3250 return lexeme.len + 1;3250 return lexeme.len + 1;
3251 }3251 }
3252}3252}
lib/std/zig/Server.zig+18-16
...@@ -1,4 +1,19 @@...@@ -1,4 +1,19 @@
1in: *std.io.Reader,1const Server = @This();
2
3const builtin = @import("builtin");
4
5const std = @import("std");
6const Allocator = std.mem.Allocator;
7const assert = std.debug.assert;
8const native_endian = builtin.target.cpu.arch.endian();
9const need_bswap = native_endian != .little;
10const Cache = std.Build.Cache;
11const OutMessage = std.zig.Server.Message;
12const InMessage = std.zig.Client.Message;
13const Reader = std.Io.Reader;
14const Writer = std.Io.Writer;
15
16in: *Reader,
2out: *Writer,17out: *Writer,
318
4pub const Message = struct {19pub const Message = struct {
...@@ -93,7 +108,7 @@ pub const Message = struct {...@@ -93,7 +108,7 @@ pub const Message = struct {
93};108};
94109
95pub const Options = struct {110pub const Options = struct {
96 in: *std.io.Reader,111 in: *Reader,
97 out: *Writer,112 out: *Writer,
98 zig_version: []const u8,113 zig_version: []const u8,
99};114};
...@@ -108,7 +123,7 @@ pub fn init(options: Options) !Server {...@@ -108,7 +123,7 @@ pub fn init(options: Options) !Server {
108}123}
109124
110pub fn receiveMessage(s: *Server) !InMessage.Header {125pub fn receiveMessage(s: *Server) !InMessage.Header {
111 return try s.in.takeStructEndian(InMessage.Header, .little);126 return s.in.takeStruct(InMessage.Header, .little);
112}127}
113128
114pub fn receiveBody_u32(s: *Server) !u32 {129pub fn receiveBody_u32(s: *Server) !u32 {
...@@ -203,16 +218,3 @@ pub fn serveTestMetadata(s: *Server, test_metadata: TestMetadata) !void {...@@ -203,16 +218,3 @@ pub fn serveTestMetadata(s: *Server, test_metadata: TestMetadata) !void {
203 try s.out.writeAll(test_metadata.string_bytes);218 try s.out.writeAll(test_metadata.string_bytes);
204 try s.out.flush();219 try s.out.flush();
205}220}
206
207const OutMessage = std.zig.Server.Message;
208const InMessage = std.zig.Client.Message;
209
210const Server = @This();
211const builtin = @import("builtin");
212const std = @import("std");
213const Allocator = std.mem.Allocator;
214const assert = std.debug.assert;
215const native_endian = builtin.target.cpu.arch.endian();
216const need_bswap = native_endian != .little;
217const Cache = std.Build.Cache;
218const Writer = std.io.Writer;
lib/std/zig/llvm/BitcodeReader.zig+9-9
...@@ -1,6 +1,11 @@...@@ -1,6 +1,11 @@
1const BitcodeReader = @This();
2
3const std = @import("../../std.zig");
4const assert = std.debug.assert;
5
1allocator: std.mem.Allocator,6allocator: std.mem.Allocator,
2record_arena: std.heap.ArenaAllocator.State,7record_arena: std.heap.ArenaAllocator.State,
3reader: *std.io.Reader,8reader: *std.Io.Reader,
4keep_names: bool,9keep_names: bool,
5bit_buffer: u32,10bit_buffer: u32,
6bit_offset: u5,11bit_offset: u5,
...@@ -93,7 +98,7 @@ pub const Record = struct {...@@ -93,7 +98,7 @@ pub const Record = struct {
93};98};
9499
95pub const InitOptions = struct {100pub const InitOptions = struct {
96 reader: *std.io.Reader,101 reader: *std.Io.Reader,
97 keep_names: bool = false,102 keep_names: bool = false,
98};103};
99pub fn init(allocator: std.mem.Allocator, options: InitOptions) BitcodeReader {104pub fn init(allocator: std.mem.Allocator, options: InitOptions) BitcodeReader {
...@@ -376,12 +381,12 @@ fn read32Bits(bc: *BitcodeReader) !u32 {...@@ -376,12 +381,12 @@ fn read32Bits(bc: *BitcodeReader) !u32 {
376381
377fn readBytes(bc: *BitcodeReader, bytes: []u8) !void {382fn readBytes(bc: *BitcodeReader, bytes: []u8) !void {
378 assert(bc.bit_offset == 0);383 assert(bc.bit_offset == 0);
379 try bc.reader.read(bytes);384 try bc.reader.readSliceAll(bytes);
380385
381 const trailing_bytes = bytes.len % 4;386 const trailing_bytes = bytes.len % 4;
382 if (trailing_bytes > 0) {387 if (trailing_bytes > 0) {
383 var bit_buffer: [4]u8 = @splat(0);388 var bit_buffer: [4]u8 = @splat(0);
384 try bc.reader.read(bit_buffer[trailing_bytes..]);389 try bc.reader.readSliceAll(bit_buffer[trailing_bytes..]);
385 bc.bit_buffer = std.mem.readInt(u32, &bit_buffer, .little);390 bc.bit_buffer = std.mem.readInt(u32, &bit_buffer, .little);
386 bc.bit_offset = @intCast(8 * trailing_bytes);391 bc.bit_offset = @intCast(8 * trailing_bytes);
387 }392 }
...@@ -508,8 +513,3 @@ const Abbrev = struct {...@@ -508,8 +513,3 @@ const Abbrev = struct {
508 }513 }
509 };514 };
510};515};
511
512const assert = std.debug.assert;
513const std = @import("../../std.zig");
514
515const BitcodeReader = @This();
lib/std/zig/parser_test.zig+10-9
...@@ -6367,31 +6367,32 @@ test "ampersand" {...@@ -6367,31 +6367,32 @@ test "ampersand" {
6367var fixed_buffer_mem: [100 * 1024]u8 = undefined;6367var fixed_buffer_mem: [100 * 1024]u8 = undefined;
63686368
6369fn testParse(source: [:0]const u8, allocator: mem.Allocator, anything_changed: *bool) ![]u8 {6369fn testParse(source: [:0]const u8, allocator: mem.Allocator, anything_changed: *bool) ![]u8 {
6370 const stderr: std.fs.File = .stderr();6370 var buffer: [64]u8 = undefined;
6371 const stderr_writer = stderr.writer().unbuffered();6371 const stderr = std.debug.lockStderrWriter(&buffer);
6372 defer std.debug.unlockStderrWriter();
63726373
6373 var tree = try std.zig.Ast.parse(allocator, source, .zig);6374 var tree = try std.zig.Ast.parse(allocator, source, .zig);
6374 defer tree.deinit(allocator);6375 defer tree.deinit(allocator);
63756376
6376 for (tree.errors) |parse_error| {6377 for (tree.errors) |parse_error| {
6377 const loc = tree.tokenLocation(0, parse_error.token);6378 const loc = tree.tokenLocation(0, parse_error.token);
6378 try stderr_writer.print("(memory buffer):{d}:{d}: error: ", .{ loc.line + 1, loc.column + 1 });6379 try stderr.print("(memory buffer):{d}:{d}: error: ", .{ loc.line + 1, loc.column + 1 });
6379 try tree.renderError(parse_error, stderr_writer);6380 try tree.renderError(parse_error, stderr);
6380 try stderr_writer.print("\n{s}\n", .{source[loc.line_start..loc.line_end]});6381 try stderr.print("\n{s}\n", .{source[loc.line_start..loc.line_end]});
6381 {6382 {
6382 var i: usize = 0;6383 var i: usize = 0;
6383 while (i < loc.column) : (i += 1) {6384 while (i < loc.column) : (i += 1) {
6384 try stderr_writer.writeAll(" ");6385 try stderr.writeAll(" ");
6385 }6386 }
6386 try stderr_writer.writeAll("^");6387 try stderr.writeAll("^");
6387 }6388 }
6388 try stderr_writer.writeAll("\n");6389 try stderr.writeAll("\n");
6389 }6390 }
6390 if (tree.errors.len != 0) {6391 if (tree.errors.len != 0) {
6391 return error.ParseError;6392 return error.ParseError;
6392 }6393 }
63936394
6394 const formatted = try tree.render(allocator);6395 const formatted = try tree.renderAlloc(allocator);
6395 anything_changed.* = !mem.eql(u8, formatted, source);6396 anything_changed.* = !mem.eql(u8, formatted, source);
6396 return formatted;6397 return formatted;
6397}6398}
lib/std/zig/system/linux.zig+2-3
...@@ -1,7 +1,6 @@...@@ -1,7 +1,6 @@
1const std = @import("std");1const std = @import("std");
2const builtin = @import("builtin");2const builtin = @import("builtin");
3const mem = std.mem;3const mem = std.mem;
4const io = std.io;
5const fs = std.fs;4const fs = std.fs;
6const fmt = std.fmt;5const fmt = std.fmt;
7const testing = std.testing;6const testing = std.testing;
...@@ -344,7 +343,7 @@ fn testParser(...@@ -344,7 +343,7 @@ fn testParser(
344 expected_model: *const Target.Cpu.Model,343 expected_model: *const Target.Cpu.Model,
345 input: []const u8,344 input: []const u8,
346) !void {345) !void {
347 var r: std.io.Reader = .fixed(input);346 var r: std.Io.Reader = .fixed(input);
348 const result = try parser.parse(arch, &r);347 const result = try parser.parse(arch, &r);
349 try testing.expectEqual(expected_model, result.?.model);348 try testing.expectEqual(expected_model, result.?.model);
350 try testing.expect(expected_model.features.eql(result.?.features));349 try testing.expect(expected_model.features.eql(result.?.features));
...@@ -357,7 +356,7 @@ fn testParser(...@@ -357,7 +356,7 @@ fn testParser(
357// When all the lines have been analyzed the finalize method is called.356// When all the lines have been analyzed the finalize method is called.
358fn CpuinfoParser(comptime impl: anytype) type {357fn CpuinfoParser(comptime impl: anytype) type {
359 return struct {358 return struct {
360 fn parse(arch: Target.Cpu.Arch, reader: *std.io.Reader) !?Target.Cpu {359 fn parse(arch: Target.Cpu.Arch, reader: *std.Io.Reader) !?Target.Cpu {
361 var obj: impl = .{};360 var obj: impl = .{};
362 while (reader.takeDelimiterExclusive('\n')) |line| {361 while (reader.takeDelimiterExclusive('\n')) |line| {
363 const colon_pos = mem.indexOfScalar(u8, line, ':') orelse continue;362 const colon_pos = mem.indexOfScalar(u8, line, ':') orelse continue;