authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-02 14:22:29-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-07-02 14:22:29-07:00
log1043c3e2ac55d9a560d18d47fcd9e7b709c8115b
treed12d75d50df12f7ee4f5d5859370f7f7c953ba66
parent1323ad58f0a5ebe24e5dd25c47c7cec4093e3ab6

sync


1 files changed, 48 insertions(+), 44 deletions(-)

src/Zcu.zig+48-44
......@@ -1047,9 +1047,9 @@ pub const File = struct {
10471047 const source = try gpa.allocSentinel(u8, @intCast(stat.size), 0);
10481048 errdefer gpa.free(source);
10491049
1050 var fr = f.reader();
1051 var br = fr.interface().unbuffered();
1052 try br.readSlice(source);
1050 var file_reader = f.reader(&.{});
1051 file_reader.size = stat.size;
1052 try file_reader.interface.readSliceAll(source);
10531053
10541054 // Here we do not modify stat fields because this function is the one
10551055 // used for error reporting. We need to keep the stat fields stale so that
......@@ -1102,10 +1102,10 @@ pub const File = struct {
11021102 const gpa = pt.zcu.gpa;
11031103 const ip = &pt.zcu.intern_pool;
11041104 const strings = ip.getLocal(pt.tid).getMutableStrings(gpa);
1105 var bw: Writer = .fixed((try strings.addManyAsSlice(file.fullyQualifiedNameLen()))[0]);
1106 file.renderFullyQualifiedName(&bw) catch unreachable;
1107 assert(bw.end == bw.buffer.len);
1108 return ip.getOrPutTrailingString(gpa, pt.tid, @intCast(bw.end), .no_embedded_nulls);
1105 var w: Writer = .fixed((try strings.addManyAsSlice(file.fullyQualifiedNameLen()))[0]);
1106 file.renderFullyQualifiedName(&w) catch unreachable;
1107 assert(w.end == w.buffer.len);
1108 return ip.getOrPutTrailingString(gpa, pt.tid, @intCast(w.end), .no_embedded_nulls);
11091109 }
11101110
11111111 pub const Index = InternPool.FileIndex;
......@@ -2817,13 +2817,13 @@ comptime {
28172817}
28182818
28192819pub fn loadZirCache(gpa: Allocator, cache_file: std.fs.File) !Zir {
2820 var cache_fr = cache_file.reader();
2821 var cache_br = cache_fr.interface().unbuffered();
2820 var buffer: [2000]u8 = undefined;
2821 var file_reader = cache_file.reader(&buffer);
28222822 return result: {
2823 const header = cache_br.takeStruct(Zir.Header) catch |err| break :result err;
2824 break :result loadZirCacheBody(gpa, header.*, &cache_br);
2823 const header = file_reader.interface.takeStruct(Zir.Header) catch |err| break :result err;
2824 break :result loadZirCacheBody(gpa, header.*, &file_reader.interface);
28252825 } catch |err| switch (err) {
2826 error.ReadFailed => return cache_fr.err.?,
2826 error.ReadFailed => return file_reader.err.?,
28272827 else => |e| return e,
28282828 };
28292829}
......@@ -2909,9 +2909,8 @@ pub fn saveZirCache(gpa: Allocator, cache_file: std.fs.File, stat: std.fs.File.S
29092909 zir.string_bytes,
29102910 @ptrCast(zir.extra),
29112911 };
2912 var cache_fw = cache_file.writer();
2913 var cache_bw = cache_fw.interface().unbuffered();
2914 cache_bw.writeVecAll(&vecs) catch |err| switch (err) {
2912 var cache_fw = cache_file.writer(&.{});
2913 cache_fw.interface.writeVecAll(&vecs) catch |err| switch (err) {
29152914 error.WriteFailed => return cache_fw.err.?,
29162915 };
29172916}
......@@ -2940,9 +2939,8 @@ pub fn saveZoirCache(cache_file: std.fs.File, stat: std.fs.File.Stat, zoir: Zoir
29402939 @ptrCast(zoir.compile_errors),
29412940 @ptrCast(zoir.error_notes),
29422941 };
2943 var cache_fw = cache_file.writer();
2944 var cache_bw = cache_fw.interface().unbuffered();
2945 cache_bw.writeVecAll(&vecs) catch |err| switch (err) {
2942 var cache_fw = cache_file.writer(&.{});
2943 cache_fw.interface.writeVecAll(&vecs) catch |err| switch (err) {
29462944 error.WriteFailed => return cache_fw.err.?,
29472945 };
29482946}
......@@ -4253,15 +4251,19 @@ pub fn navFileScope(zcu: *Zcu, nav: InternPool.Nav.Index) *File {
42534251 return zcu.fileByIndex(zcu.navFileScopeIndex(nav));
42544252}
42554253
4256pub fn fmtAnalUnit(zcu: *Zcu, unit: AnalUnit) std.fmt.Formatter(formatAnalUnit) {
4254pub fn fmtAnalUnit(zcu: *Zcu, unit: AnalUnit) std.fmt.Formatter(FormatAnalUnit, formatAnalUnit) {
42574255 return .{ .data = .{ .unit = unit, .zcu = zcu } };
42584256}
4259pub fn fmtDependee(zcu: *Zcu, d: InternPool.Dependee) std.fmt.Formatter(formatDependee) {
4257pub fn fmtDependee(zcu: *Zcu, d: InternPool.Dependee) std.fmt.Formatter(FormatDependee, formatDependee) {
42604258 return .{ .data = .{ .dependee = d, .zcu = zcu } };
42614259}
42624260
4263fn formatAnalUnit(data: struct { unit: AnalUnit, zcu: *Zcu }, bw: *Writer, comptime fmt: []const u8) !void {
4264 _ = fmt;
4261const FormatAnalUnit = struct {
4262 unit: AnalUnit,
4263 zcu: *Zcu,
4264};
4265
4266fn formatAnalUnit(data: FormatAnalUnit, writer: *std.io.Writer) std.io.Writer.Error!void {
42654267 const zcu = data.zcu;
42664268 const ip = &zcu.intern_pool;
42674269 switch (data.unit.unwrap()) {
......@@ -4269,69 +4271,71 @@ fn formatAnalUnit(data: struct { unit: AnalUnit, zcu: *Zcu }, bw: *Writer, compt
42694271 const cu = ip.getComptimeUnit(cu_id);
42704272 if (cu.zir_index.resolveFull(ip)) |resolved| {
42714273 const file_path = zcu.fileByIndex(resolved.file).path;
4272 return bw.print("comptime(inst=('{f}', %{}) [{}])", .{ file_path.fmt(zcu.comp), @intFromEnum(resolved.inst), @intFromEnum(cu_id) });
4274 return writer.print("comptime(inst=('{}', %{}) [{}])", .{ file_path.fmt(zcu.comp), @intFromEnum(resolved.inst), @intFromEnum(cu_id) });
42734275 } else {
4274 return bw.print("comptime(inst=<lost> [{}])", .{@intFromEnum(cu_id)});
4276 return writer.print("comptime(inst=<lost> [{}])", .{@intFromEnum(cu_id)});
42754277 }
42764278 },
4277 .nav_val => |nav| return bw.print("nav_val('{f}' [{}])", .{ ip.getNav(nav).fqn.fmt(ip), @intFromEnum(nav) }),
4278 .nav_ty => |nav| return bw.print("nav_ty('{f}' [{}])", .{ ip.getNav(nav).fqn.fmt(ip), @intFromEnum(nav) }),
4279 .type => |ty| return bw.print("ty('{f}' [{}])", .{ Type.fromInterned(ty).containerTypeName(ip).fmt(ip), @intFromEnum(ty) }),
4279 .nav_val => |nav| return writer.print("nav_val('{}' [{}])", .{ ip.getNav(nav).fqn.fmt(ip), @intFromEnum(nav) }),
4280 .nav_ty => |nav| return writer.print("nav_ty('{}' [{}])", .{ ip.getNav(nav).fqn.fmt(ip), @intFromEnum(nav) }),
4281 .type => |ty| return writer.print("ty('{}' [{}])", .{ Type.fromInterned(ty).containerTypeName(ip).fmt(ip), @intFromEnum(ty) }),
42804282 .func => |func| {
42814283 const nav = zcu.funcInfo(func).owner_nav;
4282 return bw.print("func('{f}' [{}])", .{ ip.getNav(nav).fqn.fmt(ip), @intFromEnum(func) });
4284 return writer.print("func('{}' [{}])", .{ ip.getNav(nav).fqn.fmt(ip), @intFromEnum(func) });
42834285 },
4284 .memoized_state => return bw.writeAll("memoized_state"),
4286 .memoized_state => return writer.writeAll("memoized_state"),
42854287 }
42864288}
4287fn formatDependee(data: struct { dependee: InternPool.Dependee, zcu: *Zcu }, bw: *Writer, comptime fmt: []const u8) !void {
4288 _ = fmt;
4289
4290const FormatDependee = struct { dependee: InternPool.Dependee, zcu: *Zcu };
4291
4292fn formatDependee(data: FormatDependee, writer: *std.io.Writer) std.io.Writer.Error!void {
42894293 const zcu = data.zcu;
42904294 const ip = &zcu.intern_pool;
42914295 switch (data.dependee) {
42924296 .src_hash => |ti| {
42934297 const info = ti.resolveFull(ip) orelse {
4294 return bw.writeAll("inst(<lost>)");
4298 return writer.writeAll("inst(<lost>)");
42954299 };
42964300 const file_path = zcu.fileByIndex(info.file).path;
4297 return bw.print("inst('{f}', %{d})", .{ file_path.fmt(zcu.comp), @intFromEnum(info.inst) });
4301 return writer.print("inst('{}', %{d})", .{ file_path.fmt(zcu.comp), @intFromEnum(info.inst) });
42984302 },
42994303 .nav_val => |nav| {
43004304 const fqn = ip.getNav(nav).fqn;
4301 return bw.print("nav_val('{f}')", .{fqn.fmt(ip)});
4305 return writer.print("nav_val('{}')", .{fqn.fmt(ip)});
43024306 },
43034307 .nav_ty => |nav| {
43044308 const fqn = ip.getNav(nav).fqn;
4305 return bw.print("nav_ty('{f}')", .{fqn.fmt(ip)});
4309 return writer.print("nav_ty('{}')", .{fqn.fmt(ip)});
43064310 },
43074311 .interned => |ip_index| switch (ip.indexToKey(ip_index)) {
4308 .struct_type, .union_type, .enum_type => return bw.print("type('{f}')", .{Type.fromInterned(ip_index).containerTypeName(ip).fmt(ip)}),
4309 .func => |f| return bw.print("ies('{f}')", .{ip.getNav(f.owner_nav).fqn.fmt(ip)}),
4312 .struct_type, .union_type, .enum_type => return writer.print("type('{}')", .{Type.fromInterned(ip_index).containerTypeName(ip).fmt(ip)}),
4313 .func => |f| return writer.print("ies('{}')", .{ip.getNav(f.owner_nav).fqn.fmt(ip)}),
43104314 else => unreachable,
43114315 },
43124316 .zon_file => |file| {
43134317 const file_path = zcu.fileByIndex(file).path;
4314 return bw.print("zon_file('{f}')", .{file_path.fmt(zcu.comp)});
4318 return writer.print("zon_file('{}')", .{file_path.fmt(zcu.comp)});
43154319 },
43164320 .embed_file => |ef_idx| {
43174321 const ef = ef_idx.get(zcu);
4318 return bw.print("embed_file('{f}')", .{ef.path.fmt(zcu.comp)});
4322 return writer.print("embed_file('{}')", .{ef.path.fmt(zcu.comp)});
43194323 },
43204324 .namespace => |ti| {
43214325 const info = ti.resolveFull(ip) orelse {
4322 return bw.writeAll("namespace(<lost>)");
4326 return writer.writeAll("namespace(<lost>)");
43234327 };
43244328 const file_path = zcu.fileByIndex(info.file).path;
4325 return bw.print("namespace('{f}', %{d})", .{ file_path.fmt(zcu.comp), @intFromEnum(info.inst) });
4329 return writer.print("namespace('{}', %{d})", .{ file_path.fmt(zcu.comp), @intFromEnum(info.inst) });
43264330 },
43274331 .namespace_name => |k| {
43284332 const info = k.namespace.resolveFull(ip) orelse {
4329 return bw.print("namespace(<lost>, '{f}')", .{k.name.fmt(ip)});
4333 return writer.print("namespace(<lost>, '{}')", .{k.name.fmt(ip)});
43304334 };
43314335 const file_path = zcu.fileByIndex(info.file).path;
4332 return bw.print("namespace('{f}', %{d}, '{f}')", .{ file_path.fmt(zcu.comp), @intFromEnum(info.inst), k.name.fmt(ip) });
4336 return writer.print("namespace('{}', %{d}, '{}')", .{ file_path.fmt(zcu.comp), @intFromEnum(info.inst), k.name.fmt(ip) });
43334337 },
4334 .memoized_state => return bw.writeAll("memoized_state"),
4338 .memoized_state => return writer.writeAll("memoized_state"),
43354339 }
43364340}
43374341