mirror of
https://github.com/ziglang/zig.git
synced 2026-02-21 16:54:52 +00:00
std.io.BufferedReader: get rid of the @constCast
but it's pushed out to various callsites
This commit is contained in:
parent
f333267782
commit
00afaa4b18
@ -2236,7 +2236,7 @@ pub const ElfModule = struct {
|
|||||||
const section_bytes = try chopSlice(mapped_mem, shdr.sh_offset, shdr.sh_size);
|
const section_bytes = try chopSlice(mapped_mem, shdr.sh_offset, shdr.sh_size);
|
||||||
sections[section_index.?] = if ((shdr.sh_flags & elf.SHF_COMPRESSED) > 0) blk: {
|
sections[section_index.?] = if ((shdr.sh_flags & elf.SHF_COMPRESSED) > 0) blk: {
|
||||||
var section_reader: std.io.BufferedReader = undefined;
|
var section_reader: std.io.BufferedReader = undefined;
|
||||||
section_reader.initFixed(section_bytes);
|
section_reader.initFixed(@constCast(section_bytes));
|
||||||
const chdr = section_reader.takeStruct(elf.Chdr) catch continue;
|
const chdr = section_reader.takeStruct(elf.Chdr) catch continue;
|
||||||
if (chdr.ch_type != .ZLIB) continue;
|
if (chdr.ch_type != .ZLIB) continue;
|
||||||
const ch_size = chdr.ch_size;
|
const ch_size = chdr.ch_size;
|
||||||
|
|||||||
@ -262,7 +262,7 @@ pub fn StackMachine(comptime options: Options) type {
|
|||||||
) Error!?Value {
|
) Error!?Value {
|
||||||
if (initial_value) |i| try self.stack.append(allocator, .{ .generic = i });
|
if (initial_value) |i| try self.stack.append(allocator, .{ .generic = i });
|
||||||
var reader: std.io.BufferedReader = undefined;
|
var reader: std.io.BufferedReader = undefined;
|
||||||
reader.initFixed(expression);
|
reader.initFixed(@constCast(expression));
|
||||||
while (try self.step(&reader, allocator, context)) {}
|
while (try self.step(&reader, allocator, context)) {}
|
||||||
if (self.stack.items.len == 0) return null;
|
if (self.stack.items.len == 0) return null;
|
||||||
return self.stack.items[self.stack.items.len - 1];
|
return self.stack.items[self.stack.items.len - 1];
|
||||||
@ -721,7 +721,7 @@ pub fn StackMachine(comptime options: Options) type {
|
|||||||
if (context.thread_context == null) return error.IncompleteExpressionContext;
|
if (context.thread_context == null) return error.IncompleteExpressionContext;
|
||||||
|
|
||||||
var block_reader: std.io.BufferedReader = undefined;
|
var block_reader: std.io.BufferedReader = undefined;
|
||||||
block_reader.initFixed(block);
|
block_reader.initFixed(@constCast(block));
|
||||||
const register = (try readOperand(&block_reader, block[0], context)).?.register;
|
const register = (try readOperand(&block_reader, block[0], context)).?.register;
|
||||||
const value = mem.readInt(usize, (try abi.regBytes(context.thread_context.?, register, context.reg_context))[0..@sizeOf(usize)], native_endian);
|
const value = mem.readInt(usize, (try abi.regBytes(context.thread_context.?, register, context.reg_context))[0..@sizeOf(usize)], native_endian);
|
||||||
try self.stack.append(allocator, .{ .generic = value });
|
try self.stack.append(allocator, .{ .generic = value });
|
||||||
|
|||||||
@ -53,7 +53,7 @@ pub fn readIntChecked(
|
|||||||
|
|
||||||
pub fn readLeb128(fbr: *FixedBufferReader, comptime T: type) Error!T {
|
pub fn readLeb128(fbr: *FixedBufferReader, comptime T: type) Error!T {
|
||||||
var br: std.io.BufferedReader = undefined;
|
var br: std.io.BufferedReader = undefined;
|
||||||
br.initFixed(fbr.buf);
|
br.initFixed(@constCast(fbr.buf));
|
||||||
br.seek = fbr.pos;
|
br.seek = fbr.pos;
|
||||||
const result = br.takeLeb128(T);
|
const result = br.takeLeb128(T);
|
||||||
fbr.pos = br.seek;
|
fbr.pos = br.seek;
|
||||||
|
|||||||
@ -2026,8 +2026,8 @@ pub const VirtualMachine = struct {
|
|||||||
if (pc < fde.pc_begin or pc >= fde.pc_begin + fde.pc_range) return error.AddressOutOfRange;
|
if (pc < fde.pc_begin or pc >= fde.pc_begin + fde.pc_range) return error.AddressOutOfRange;
|
||||||
|
|
||||||
var readers: [2]std.io.BufferedReader = undefined;
|
var readers: [2]std.io.BufferedReader = undefined;
|
||||||
readers[0].initFixed(cie.initial_instructions);
|
readers[0].initFixed(@constCast(cie.initial_instructions));
|
||||||
readers[1].initFixed(fde.instructions);
|
readers[1].initFixed(@constCast(fde.instructions));
|
||||||
|
|
||||||
var prev_row: Row = self.current_row;
|
var prev_row: Row = self.current_row;
|
||||||
for (&readers, [2]bool{ true, false }) |*reader, is_initial| {
|
for (&readers, [2]bool{ true, false }) |*reader, is_initial| {
|
||||||
|
|||||||
@ -24,12 +24,14 @@ pub fn init(br: *BufferedReader, r: Reader, buffer: []u8) void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Constructs `br` such that it will read from `buffer` and then end.
|
/// Constructs `br` such that it will read from `buffer` and then end.
|
||||||
/// TODO either remove the const cast here or make methods of this file return a const slice
|
///
|
||||||
pub fn initFixed(br: *BufferedReader, buffer: []const u8) void {
|
/// Most methods do not require mutating `buffer`. Those that do are marked,
|
||||||
|
/// and if they are avoided then `buffer` can be safely used with `@constCast`.
|
||||||
|
pub fn initFixed(br: *BufferedReader, buffer: []u8) void {
|
||||||
br.* = .{
|
br.* = .{
|
||||||
.seek = 0,
|
.seek = 0,
|
||||||
.storage = .{
|
.storage = .{
|
||||||
.buffer = @constCast(buffer),
|
.buffer = buffer,
|
||||||
.unbuffered_writer = .failing,
|
.unbuffered_writer = .failing,
|
||||||
},
|
},
|
||||||
.unbuffered_reader = .ending,
|
.unbuffered_reader = .ending,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user