authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-04-18 18:23:06-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-01 16:35:27-07:00
log00afaa4b1822e9d2c096830e546e96ab4e87f25b
tree44200d1f2b888793e4fff996f75597e16eaf6df2
parentf3332677825f3173de568d643cbaf68f1e1472ed

std.io.BufferedReader: get rid of the `@constCast`

but it's pushed out to various callsites

5 files changed, 11 insertions(+), 9 deletions(-)

lib/std/debug/Dwarf.zig+1-1
...@@ -2236,7 +2236,7 @@ pub const ElfModule = struct {...@@ -2236,7 +2236,7 @@ pub const ElfModule = struct {
2236 const section_bytes = try chopSlice(mapped_mem, shdr.sh_offset, shdr.sh_size);2236 const section_bytes = try chopSlice(mapped_mem, shdr.sh_offset, shdr.sh_size);
2237 sections[section_index.?] = if ((shdr.sh_flags & elf.SHF_COMPRESSED) > 0) blk: {2237 sections[section_index.?] = if ((shdr.sh_flags & elf.SHF_COMPRESSED) > 0) blk: {
2238 var section_reader: std.io.BufferedReader = undefined;2238 var section_reader: std.io.BufferedReader = undefined;
2239 section_reader.initFixed(section_bytes);2239 section_reader.initFixed(@constCast(section_bytes));
2240 const chdr = section_reader.takeStruct(elf.Chdr) catch continue;2240 const chdr = section_reader.takeStruct(elf.Chdr) catch continue;
2241 if (chdr.ch_type != .ZLIB) continue;2241 if (chdr.ch_type != .ZLIB) continue;
2242 const ch_size = chdr.ch_size;2242 const ch_size = chdr.ch_size;
lib/std/debug/Dwarf/expression.zig+2-2
...@@ -262,7 +262,7 @@ pub fn StackMachine(comptime options: Options) type {...@@ -262,7 +262,7 @@ pub fn StackMachine(comptime options: Options) type {
262 ) Error!?Value {262 ) Error!?Value {
263 if (initial_value) |i| try self.stack.append(allocator, .{ .generic = i });263 if (initial_value) |i| try self.stack.append(allocator, .{ .generic = i });
264 var reader: std.io.BufferedReader = undefined;264 var reader: std.io.BufferedReader = undefined;
265 reader.initFixed(expression);265 reader.initFixed(@constCast(expression));
266 while (try self.step(&reader, allocator, context)) {}266 while (try self.step(&reader, allocator, context)) {}
267 if (self.stack.items.len == 0) return null;267 if (self.stack.items.len == 0) return null;
268 return self.stack.items[self.stack.items.len - 1];268 return self.stack.items[self.stack.items.len - 1];
...@@ -721,7 +721,7 @@ pub fn StackMachine(comptime options: Options) type {...@@ -721,7 +721,7 @@ pub fn StackMachine(comptime options: Options) type {
721 if (context.thread_context == null) return error.IncompleteExpressionContext;721 if (context.thread_context == null) return error.IncompleteExpressionContext;
722722
723 var block_reader: std.io.BufferedReader = undefined;723 var block_reader: std.io.BufferedReader = undefined;
724 block_reader.initFixed(block);724 block_reader.initFixed(@constCast(block));
725 const register = (try readOperand(&block_reader, block[0], context)).?.register;725 const register = (try readOperand(&block_reader, block[0], context)).?.register;
726 const value = mem.readInt(usize, (try abi.regBytes(context.thread_context.?, register, context.reg_context))[0..@sizeOf(usize)], native_endian);726 const value = mem.readInt(usize, (try abi.regBytes(context.thread_context.?, register, context.reg_context))[0..@sizeOf(usize)], native_endian);
727 try self.stack.append(allocator, .{ .generic = value });727 try self.stack.append(allocator, .{ .generic = value });
lib/std/debug/FixedBufferReader.zig+1-1
...@@ -53,7 +53,7 @@ pub fn readIntChecked(...@@ -53,7 +53,7 @@ pub fn readIntChecked(
5353
54pub fn readLeb128(fbr: *FixedBufferReader, comptime T: type) Error!T {54pub fn readLeb128(fbr: *FixedBufferReader, comptime T: type) Error!T {
55 var br: std.io.BufferedReader = undefined;55 var br: std.io.BufferedReader = undefined;
56 br.initFixed(fbr.buf);56 br.initFixed(@constCast(fbr.buf));
57 br.seek = fbr.pos;57 br.seek = fbr.pos;
58 const result = br.takeLeb128(T);58 const result = br.takeLeb128(T);
59 fbr.pos = br.seek;59 fbr.pos = br.seek;
lib/std/debug/SelfInfo.zig+2-2
...@@ -2026,8 +2026,8 @@ pub const VirtualMachine = struct {...@@ -2026,8 +2026,8 @@ pub const VirtualMachine = struct {
2026 if (pc < fde.pc_begin or pc >= fde.pc_begin + fde.pc_range) return error.AddressOutOfRange;2026 if (pc < fde.pc_begin or pc >= fde.pc_begin + fde.pc_range) return error.AddressOutOfRange;
20272027
2028 var readers: [2]std.io.BufferedReader = undefined;2028 var readers: [2]std.io.BufferedReader = undefined;
2029 readers[0].initFixed(cie.initial_instructions);2029 readers[0].initFixed(@constCast(cie.initial_instructions));
2030 readers[1].initFixed(fde.instructions);2030 readers[1].initFixed(@constCast(fde.instructions));
20312031
2032 var prev_row: Row = self.current_row;2032 var prev_row: Row = self.current_row;
2033 for (&readers, [2]bool{ true, false }) |*reader, is_initial| {2033 for (&readers, [2]bool{ true, false }) |*reader, is_initial| {
lib/std/io/BufferedReader.zig+5-3
...@@ -24,12 +24,14 @@ pub fn init(br: *BufferedReader, r: Reader, buffer: []u8) void {...@@ -24,12 +24,14 @@ pub fn init(br: *BufferedReader, r: Reader, buffer: []u8) void {
24}24}
2525
26/// Constructs `br` such that it will read from `buffer` and then end.26/// Constructs `br` such that it will read from `buffer` and then end.
27/// TODO either remove the const cast here or make methods of this file return a const slice27///
28pub fn initFixed(br: *BufferedReader, buffer: []const u8) void {28/// Most methods do not require mutating `buffer`. Those that do are marked,
29/// and if they are avoided then `buffer` can be safely used with `@constCast`.
30pub fn initFixed(br: *BufferedReader, buffer: []u8) void {
29 br.* = .{31 br.* = .{
30 .seek = 0,32 .seek = 0,
31 .storage = .{33 .storage = .{
32 .buffer = @constCast(buffer),34 .buffer = buffer,
33 .unbuffered_writer = .failing,35 .unbuffered_writer = .failing,
34 },36 },
35 .unbuffered_reader = .ending,37 .unbuffered_reader = .ending,