Skip to content

Commit 8c9dfcb

Browse files
committed
std.Io: remove BufferedWriter
1 parent 5f7a0bb commit 8c9dfcb

File tree

20 files changed

+114
-162
lines changed

20 files changed

+114
-162
lines changed

lib/compiler/aro/aro/Driver.zig

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,8 @@ pub fn errorDescription(e: anyerror) []const u8 {
585585
};
586586
}
587587

588+
var stdout_buffer: [4096]u8 = undefined;
589+
588590
/// The entry point of the Aro compiler.
589591
/// **MAY call `exit` if `fast_exit` is set.**
590592
pub fn main(d: *Driver, tc: *Toolchain, args: []const []const u8, comptime fast_exit: bool) !void {
@@ -688,13 +690,13 @@ fn processSource(
688690
else
689691
std.fs.File.stdout();
690692
defer if (d.output_name != null) file.close();
693+
var file_buffer: [1024]u8 = undefined;
694+
var file_writer = file.writer(&file_buffer);
691695

692-
var buf_w = std.io.bufferedWriter(file.deprecatedWriter());
693-
694-
pp.prettyPrintTokens(buf_w.writer(), dump_mode) catch |er|
696+
pp.prettyPrintTokens(&file_writer.interface, dump_mode) catch |er|
695697
return d.fatal("unable to write result: {s}", .{errorDescription(er)});
696698

697-
buf_w.flush() catch |er|
699+
file_writer.interface.flush() catch |er|
698700
return d.fatal("unable to write result: {s}", .{errorDescription(er)});
699701
if (fast_exit) std.process.exit(0); // Not linking, no need for cleanup.
700702
return;
@@ -704,10 +706,9 @@ fn processSource(
704706
defer tree.deinit();
705707

706708
if (d.verbose_ast) {
707-
const stdout = std.fs.File.stdout();
708-
var buf_writer = std.io.bufferedWriter(stdout.deprecatedWriter());
709-
tree.dump(d.detectConfig(stdout), buf_writer.writer()) catch {};
710-
buf_writer.flush() catch {};
709+
var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer);
710+
tree.dump(d.detectConfig(.stdout()), &stdout_writer.interface) catch {};
711+
stdout_writer.interface.flush() catch {};
711712
}
712713

713714
const prev_errors = d.comp.diagnostics.errors;
@@ -734,10 +735,9 @@ fn processSource(
734735
defer ir.deinit(d.comp.gpa);
735736

736737
if (d.verbose_ir) {
737-
const stdout = std.fs.File.stdout();
738-
var buf_writer = std.io.bufferedWriter(stdout.deprecatedWriter());
739-
ir.dump(d.comp.gpa, d.detectConfig(stdout), buf_writer.writer()) catch {};
740-
buf_writer.flush() catch {};
738+
var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer);
739+
ir.dump(d.comp.gpa, d.detectConfig(.stdout()), &stdout_writer.interface) catch {};
740+
stdout_writer.interface.flush() catch {};
741741
}
742742

743743
var render_errors: Ir.Renderer.ErrorList = .{};

lib/compiler/aro/aro/Preprocessor.zig

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -811,10 +811,9 @@ fn verboseLog(pp: *Preprocessor, raw: RawToken, comptime fmt: []const u8, args:
811811
const source = pp.comp.getSource(raw.source);
812812
const line_col = source.lineCol(.{ .id = raw.source, .line = raw.line, .byte_offset = raw.start });
813813

814-
const stderr = std.fs.File.stderr().deprecatedWriter();
815-
var buf_writer = std.io.bufferedWriter(stderr);
816-
const writer = buf_writer.writer();
817-
defer buf_writer.flush() catch {};
814+
var stderr_buffer: [64]u8 = undefined;
815+
var writer = std.debug.lockStderrWriter(&stderr_buffer);
816+
defer std.debug.unlockStderrWriter();
818817
writer.print("{s}:{d}:{d}: ", .{ source.path, line_col.line_no, line_col.col }) catch return;
819818
writer.print(fmt, args) catch return;
820819
writer.writeByte('\n') catch return;

lib/compiler/aro/backend/Object/Elf.zig

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,9 @@ pub fn addRelocation(elf: *Elf, name: []const u8, section_kind: Object.Section,
171171
/// strtab
172172
/// section headers
173173
pub fn finish(elf: *Elf, file: std.fs.File) !void {
174-
var buf_writer = std.io.bufferedWriter(file.deprecatedWriter());
175-
const w = buf_writer.writer();
174+
var file_buffer: [1024]u8 = undefined;
175+
var file_writer = file.writer(&file_buffer);
176+
const w = &file_writer.interface;
176177

177178
var num_sections: std.elf.Elf64_Half = additional_sections;
178179
var relocations_len: std.elf.Elf64_Off = 0;
@@ -374,5 +375,5 @@ pub fn finish(elf: *Elf, file: std.fs.File) !void {
374375
name_offset += @as(u32, @intCast(entry.key_ptr.len + ".\x00".len)) + rela_name_offset;
375376
}
376377
}
377-
try buf_writer.flush();
378+
try w.flush();
378379
}

lib/compiler/libc.zig

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ const usage_libc =
2222
\\
2323
;
2424

25+
var stdout_buffer: [4096]u8 = undefined;
26+
2527
pub fn main() !void {
2628
var arena_instance = std.heap.ArenaAllocator.init(std.heap.page_allocator);
2729
defer arena_instance.deinit();
@@ -34,14 +36,16 @@ pub fn main() !void {
3436
var input_file: ?[]const u8 = null;
3537
var target_arch_os_abi: []const u8 = "native";
3638
var print_includes: bool = false;
39+
var stdout_writer = std.fs.File.stdout().writer(&stdout_buffer);
40+
const stdout = &stdout_writer.interface;
3741
{
3842
var i: usize = 2;
3943
while (i < args.len) : (i += 1) {
4044
const arg = args[i];
4145
if (mem.startsWith(u8, arg, "-")) {
4246
if (mem.eql(u8, arg, "-h") or mem.eql(u8, arg, "--help")) {
43-
const stdout = std.fs.File.stdout().deprecatedWriter();
4447
try stdout.writeAll(usage_libc);
48+
try stdout.flush();
4549
return std.process.cleanExit();
4650
} else if (mem.eql(u8, arg, "-target")) {
4751
if (i + 1 >= args.len) fatal("expected parameter after {s}", .{arg});
@@ -97,13 +101,11 @@ pub fn main() !void {
97101
fatal("no include dirs detected for target {s}", .{zig_target});
98102
}
99103

100-
var bw = std.io.bufferedWriter(std.fs.File.stdout().deprecatedWriter());
101-
var writer = bw.writer();
102104
for (libc_dirs.libc_include_dir_list) |include_dir| {
103-
try writer.writeAll(include_dir);
104-
try writer.writeByte('\n');
105+
try stdout.writeAll(include_dir);
106+
try stdout.writeByte('\n');
105107
}
106-
try bw.flush();
108+
try stdout.flush();
107109
return std.process.cleanExit();
108110
}
109111

@@ -125,9 +127,8 @@ pub fn main() !void {
125127
};
126128
defer libc.deinit(gpa);
127129

128-
var bw = std.io.bufferedWriter(std.fs.File.stdout().deprecatedWriter());
129-
try libc.render(bw.writer());
130-
try bw.flush();
130+
try libc.render(stdout);
131+
try stdout.flush();
131132
}
132133
}
133134

lib/compiler/resinator/compile.zig

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1268,21 +1268,17 @@ pub const Compiler = struct {
12681268
try header.write(writer, self.errContext(id_token));
12691269
}
12701270

1271-
pub fn writeResourceDataNoPadding(writer: anytype, data_reader: *std.Io.Reader, data_size: u32) !void {
1272-
var adapted = writer.adaptToNewApi();
1273-
var buffer: [128]u8 = undefined;
1274-
adapted.new_interface.buffer = &buffer;
1275-
try data_reader.streamExact(&adapted.new_interface, data_size);
1276-
try adapted.new_interface.flush();
1271+
pub fn writeResourceDataNoPadding(writer: *std.Io.Writer, data_reader: *std.Io.Reader, data_size: u32) !void {
1272+
try data_reader.streamExact(writer, data_size);
12771273
}
12781274

12791275
pub fn writeResourceData(writer: anytype, data_reader: *std.Io.Reader, data_size: u32) !void {
12801276
try writeResourceDataNoPadding(writer, data_reader, data_size);
12811277
try writeDataPadding(writer, data_size);
12821278
}
12831279

1284-
pub fn writeDataPadding(writer: anytype, data_size: u32) !void {
1285-
try writer.writeByteNTimes(0, numPaddingBytesNeeded(data_size));
1280+
pub fn writeDataPadding(writer: *std.Io.Writer, data_size: u32) !void {
1281+
try writer.splatByteAll(0, numPaddingBytesNeeded(data_size));
12861282
}
12871283

12881284
pub fn numPaddingBytesNeeded(data_size: u32) u2 {
@@ -2100,8 +2096,10 @@ pub const Compiler = struct {
21002096
const resource = ResourceType.fromString(type_bytes);
21012097
std.debug.assert(resource == .menu or resource == .menuex);
21022098

2103-
self.writeMenuData(node, data_writer, resource) catch |err| switch (err) {
2104-
error.NoSpaceLeft => {
2099+
var adapted = data_writer.adaptToNewApi(&.{});
2100+
2101+
self.writeMenuData(node, &adapted.new_interface, resource) catch |err| switch (err) {
2102+
error.WriteFailed => {
21052103
return self.addErrorDetailsAndFail(.{
21062104
.err = .resource_data_size_exceeds_max,
21072105
.token = node.id,
@@ -2129,7 +2127,7 @@ pub const Compiler = struct {
21292127

21302128
/// Expects `data_writer` to be a LimitedWriter limited to u32, meaning all writes to
21312129
/// the writer within this function could return error.NoSpaceLeft
2132-
pub fn writeMenuData(self: *Compiler, node: *Node.Menu, data_writer: anytype, resource: ResourceType) !void {
2130+
pub fn writeMenuData(self: *Compiler, node: *Node.Menu, data_writer: *std.Io.Writer, resource: ResourceType) !void {
21332131
// menu header
21342132
const version: u16 = if (resource == .menu) 0 else 1;
21352133
try data_writer.writeInt(u16, version, .little);
@@ -2156,7 +2154,7 @@ pub const Compiler = struct {
21562154
}
21572155
}
21582156

2159-
pub fn writeMenuItem(self: *Compiler, node: *Node, writer: anytype, is_last_of_parent: bool) !void {
2157+
pub fn writeMenuItem(self: *Compiler, node: *Node, writer: *std.Io.Writer, is_last_of_parent: bool) !void {
21602158
switch (node.id) {
21612159
.menu_item_separator => {
21622160
// This is the 'alternate compability form' of the separator, see
@@ -2356,8 +2354,9 @@ pub const Compiler = struct {
23562354
try fixed_file_info.write(data_writer);
23572355

23582356
for (node.block_statements) |statement| {
2359-
self.writeVersionNode(statement, data_writer, &data_buffer) catch |err| switch (err) {
2360-
error.NoSpaceLeft => {
2357+
var adapted = data_writer.adaptToNewApi(&.{});
2358+
self.writeVersionNode(statement, &adapted.new_interface, &data_buffer) catch |err| switch (err) {
2359+
error.WriteFailed => {
23612360
try self.addErrorDetails(.{
23622361
.err = .version_node_size_exceeds_max,
23632362
.token = node.id,
@@ -2395,7 +2394,7 @@ pub const Compiler = struct {
23952394
/// Expects writer to be a LimitedWriter limited to u16, meaning all writes to
23962395
/// the writer within this function could return error.NoSpaceLeft, and that buf.items.len
23972396
/// will never be able to exceed maxInt(u16).
2398-
pub fn writeVersionNode(self: *Compiler, node: *Node, writer: anytype, buf: *std.ArrayList(u8)) !void {
2397+
pub fn writeVersionNode(self: *Compiler, node: *Node, writer: *std.Io.Writer, buf: *std.ArrayList(u8)) !void {
23992398
// We can assume that buf.items.len will never be able to exceed the limits of a u16
24002399
try writeDataPadding(writer, @as(u16, @intCast(buf.items.len)));
24012400

@@ -2700,12 +2699,12 @@ pub const Compiler = struct {
27002699
return self.writeSizeInfo(writer, size_info);
27012700
}
27022701

2703-
pub fn writeSizeInfo(self: ResourceHeader, writer: anytype, size_info: SizeInfo) !void {
2702+
pub fn writeSizeInfo(self: ResourceHeader, writer: *std.Io.Writer, size_info: SizeInfo) !void {
27042703
try writer.writeInt(DWORD, self.data_size, .little); // DataSize
27052704
try writer.writeInt(DWORD, size_info.bytes, .little); // HeaderSize
27062705
try self.type_value.write(writer); // TYPE
27072706
try self.name_value.write(writer); // NAME
2708-
try writer.writeByteNTimes(0, size_info.padding_after_name);
2707+
try writer.splatByteAll(0, size_info.padding_after_name);
27092708

27102709
try writer.writeInt(DWORD, self.data_version, .little); // DataVersion
27112710
try writer.writeInt(WORD, self.memory_flags.value, .little); // MemoryFlags
@@ -3120,7 +3119,7 @@ pub const FontDir = struct {
31203119
// First, the ID is written, though
31213120
try writer.writeInt(u16, font.id, .little);
31223121
try writer.writeAll(&font.header_bytes);
3123-
try writer.writeByteNTimes(0, 2);
3122+
try writer.splatByteAll(0, 2);
31243123
}
31253124
try Compiler.writeDataPadding(writer, data_size);
31263125
}

lib/compiler/resinator/cvtres.zig

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ pub const Diagnostics = union {
188188
overflow_resource: usize,
189189
};
190190

191-
pub fn writeCoff(allocator: Allocator, writer: anytype, resources: []const Resource, options: CoffOptions, diagnostics: ?*Diagnostics) !void {
191+
pub fn writeCoff(allocator: Allocator, writer: *std.Io.Writer, resources: []const Resource, options: CoffOptions, diagnostics: ?*Diagnostics) !void {
192192
var resource_tree = ResourceTree.init(allocator, options);
193193
defer resource_tree.deinit();
194194

@@ -232,7 +232,7 @@ pub fn writeCoff(allocator: Allocator, writer: anytype, resources: []const Resou
232232
.flags = flags,
233233
};
234234

235-
try writer.writeStructEndian(coff_header, .little);
235+
try writer.writeStruct(coff_header, .little);
236236

237237
const rsrc01_header = std.coff.SectionHeader{
238238
.name = ".rsrc$01".*,
@@ -250,7 +250,7 @@ pub fn writeCoff(allocator: Allocator, writer: anytype, resources: []const Resou
250250
.MEM_READ = 1,
251251
},
252252
};
253-
try writer.writeStructEndian(rsrc01_header, .little);
253+
try writer.writeStruct(rsrc01_header, .little);
254254

255255
const rsrc02_header = std.coff.SectionHeader{
256256
.name = ".rsrc$02".*,
@@ -268,7 +268,7 @@ pub fn writeCoff(allocator: Allocator, writer: anytype, resources: []const Resou
268268
.MEM_READ = 1,
269269
},
270270
};
271-
try writer.writeStructEndian(rsrc02_header, .little);
271+
try writer.writeStruct(rsrc02_header, .little);
272272

273273
// TODO: test surrogate pairs
274274
try resource_tree.sort();
@@ -665,13 +665,13 @@ const ResourceTree = struct {
665665
pub fn writeCoff(
666666
self: *const ResourceTree,
667667
allocator: Allocator,
668-
w: anytype,
668+
w: *std.Io.Writer,
669669
resources_in_data_order: []const Resource,
670670
lengths: Lengths,
671671
coff_string_table: *StringTable,
672672
) ![]const std.coff.Symbol {
673673
if (self.type_to_name_map.count() == 0) {
674-
try w.writeByteNTimes(0, 16);
674+
try w.splatByteAll(0, 16);
675675
return &.{};
676676
}
677677

@@ -710,7 +710,7 @@ const ResourceTree = struct {
710710
.number_of_id_entries = counts.ids,
711711
.number_of_name_entries = counts.names,
712712
};
713-
try w.writeStructEndian(table, .little);
713+
try w.writeStruct(table, .little);
714714

715715
var it = self.type_to_name_map.iterator();
716716
while (it.next()) |entry| {
@@ -745,7 +745,7 @@ const ResourceTree = struct {
745745
.number_of_id_entries = counts.ids,
746746
.number_of_name_entries = counts.names,
747747
};
748-
try w.writeStructEndian(table, .little);
748+
try w.writeStruct(table, .little);
749749

750750
var it = name_to_lang_map.iterator();
751751
while (it.next()) |entry| {
@@ -786,7 +786,7 @@ const ResourceTree = struct {
786786
.number_of_id_entries = counts.ids,
787787
.number_of_name_entries = counts.names,
788788
};
789-
try w.writeStructEndian(table, .little);
789+
try w.writeStruct(table, .little);
790790

791791
var it = lang_to_resources_map.iterator();
792792
while (it.next()) |entry| {
@@ -819,7 +819,7 @@ const ResourceTree = struct {
819819
.size = @intCast(orig_resource.data.len),
820820
.codepage = 0,
821821
};
822-
try w.writeStructEndian(data_entry, .little);
822+
try w.writeStruct(data_entry, .little);
823823
}
824824

825825
for (self.rsrc_string_table.keys()) |v| {
@@ -828,7 +828,7 @@ const ResourceTree = struct {
828828
try w.writeAll(std.mem.sliceAsBytes(str));
829829
}
830830

831-
try w.writeByteNTimes(0, lengths.padding);
831+
try w.splatByteAll(0, lengths.padding);
832832

833833
for (relocations.list.items) |relocation| {
834834
try writeRelocation(w, std.coff.Relocation{
@@ -842,13 +842,13 @@ const ResourceTree = struct {
842842
for (self.deduplicated_data.keys()) |data| {
843843
const padding_bytes: u4 = @intCast((8 -% data.len) % 8);
844844
try w.writeAll(data);
845-
try w.writeByteNTimes(0, padding_bytes);
845+
try w.splatByteAll(0, padding_bytes);
846846
}
847847
} else {
848848
for (resources_in_data_order) |resource| {
849849
const padding_bytes: u4 = @intCast((8 -% resource.data.len) % 8);
850850
try w.writeAll(resource.data);
851-
try w.writeByteNTimes(0, padding_bytes);
851+
try w.splatByteAll(0, padding_bytes);
852852
}
853853
}
854854

lib/compiler/resinator/main.zig

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -248,10 +248,11 @@ pub fn main() !void {
248248
var diagnostics = Diagnostics.init(allocator);
249249
defer diagnostics.deinit();
250250

251-
const res_stream_writer = res_stream.source.writer(allocator);
252-
var output_buffered_stream = std.io.bufferedWriter(res_stream_writer);
251+
var output_buffer: [4096]u8 = undefined;
252+
var res_stream_writer = res_stream.source.writer(allocator).adaptToNewApi(&output_buffer);
253+
const output_buffered_stream = &res_stream_writer.new_interface;
253254

254-
compile(allocator, final_input, output_buffered_stream.writer(), .{
255+
compile(allocator, final_input, output_buffered_stream, .{
255256
.cwd = std.fs.cwd(),
256257
.diagnostics = &diagnostics,
257258
.source_mappings = &mapping_results.mappings,
@@ -340,10 +341,11 @@ pub fn main() !void {
340341
};
341342
defer coff_stream.deinit(allocator);
342343

343-
var coff_output_buffered_stream = std.io.bufferedWriter(coff_stream.source.writer(allocator));
344+
var coff_output_buffer: [4096]u8 = undefined;
345+
var coff_output_buffered_stream = coff_stream.source.writer(allocator).adaptToNewApi(&coff_output_buffer);
344346

345347
var cvtres_diagnostics: cvtres.Diagnostics = .{ .none = {} };
346-
cvtres.writeCoff(allocator, coff_output_buffered_stream.writer(), resources.list.items, options.coff_options, &cvtres_diagnostics) catch |err| {
348+
cvtres.writeCoff(allocator, &coff_output_buffered_stream.new_interface, resources.list.items, options.coff_options, &cvtres_diagnostics) catch |err| {
347349
switch (err) {
348350
error.DuplicateResource => {
349351
const duplicate_resource = resources.list.items[cvtres_diagnostics.duplicate_resource];
@@ -380,7 +382,7 @@ pub fn main() !void {
380382
std.process.exit(1);
381383
};
382384

383-
try coff_output_buffered_stream.flush();
385+
try coff_output_buffered_stream.new_interface.flush();
384386
}
385387

386388
const IoStream = struct {

0 commit comments

Comments
 (0)