| ... | ... | @@ -2817,12 +2817,18 @@ comptime { |
| 2817 | 2817 | } |
| 2818 | 2818 | |
| 2819 | 2819 | pub fn loadZirCache(gpa: Allocator, cache_file: std.fs.File) !Zir { |
| 2820 | | var header: Zir.Header = undefined; |
| 2821 | | if (try cache_file.readAll(std.mem.asBytes(&header)) < @sizeOf(Zir.Header)) return error.EndOfStream; |
| 2822 | | return loadZirCacheBody(gpa, header, cache_file); |
| 2820 | var cache_fr = cache_file.reader(); |
| 2821 | var cache_br = cache_fr.interface().unbuffered(); |
| 2822 | return result: { |
| 2823 | const header = cache_br.takeStruct(Zir.Header) catch |err| break :result err; |
| 2824 | break :result loadZirCacheBody(gpa, header.*, &cache_br); |
| 2825 | } catch |err| switch (err) { |
| 2826 | error.ReadFailed => return cache_fr.err.?, |
| 2827 | else => |e| return e, |
| 2828 | }; |
| 2823 | 2829 | } |
| 2824 | 2830 | |
| 2825 | | pub fn loadZirCacheBody(gpa: Allocator, header: Zir.Header, cache_file: std.fs.File) !Zir { |
| 2831 | pub fn loadZirCacheBody(gpa: Allocator, header: Zir.Header, cache_br: *std.io.BufferedReader) !Zir { |
| 2826 | 2832 | var instructions: std.MultiArrayList(Zir.Inst) = .{}; |
| 2827 | 2833 | errdefer instructions.deinit(gpa); |
| 2828 | 2834 | |
| ... | ... | @@ -2850,16 +2856,11 @@ pub fn loadZirCacheBody(gpa: Allocator, header: Zir.Header, cache_file: std.fs.F |
| 2850 | 2856 | if (data_has_safety_tag) |
| 2851 | 2857 | @ptrCast(safety_buffer) |
| 2852 | 2858 | else |
| 2853 | | zir.instructions.items(.data), |
| 2859 | @ptrCast(zir.instructions.items(.data)), |
| 2854 | 2860 | zir.string_bytes, |
| 2855 | 2861 | @ptrCast(zir.extra), |
| 2856 | 2862 | }; |
| 2857 | | var cache_fr = cache_file.reader(); |
| 2858 | | var cache_br = cache_fr.interface().unbuffered(); |
| 2859 | | cache_br.readVecAll(&vecs) catch |err| switch (err) { |
| 2860 | | error.ReadFailed => return cache_fr.err.?, |
| 2861 | | error.EndOfStream => return error.UnexpectedFileSize, |
| 2862 | | }; |
| 2863 | try cache_br.readVecAll(&vecs); |
| 2863 | 2864 | if (data_has_safety_tag) { |
| 2864 | 2865 | const tags = zir.instructions.items(.tag); |
| 2865 | 2866 | for (zir.instructions.items(.data), 0..) |*data, i| { |
| ... | ... | @@ -2871,7 +2872,6 @@ pub fn loadZirCacheBody(gpa: Allocator, header: Zir.Header, cache_file: std.fs.F |
| 2871 | 2872 | }; |
| 2872 | 2873 | } |
| 2873 | 2874 | } |
| 2874 | | |
| 2875 | 2875 | return zir; |
| 2876 | 2876 | } |
| 2877 | 2877 | |
| ... | ... | @@ -2947,7 +2947,7 @@ pub fn saveZoirCache(cache_file: std.fs.File, stat: std.fs.File.Stat, zoir: Zoir |
| 2947 | 2947 | }; |
| 2948 | 2948 | } |
| 2949 | 2949 | |
| 2950 | | pub fn loadZoirCacheBody(gpa: Allocator, header: Zoir.Header, cache_file: std.fs.File) !Zoir { |
| 2950 | pub fn loadZoirCacheBody(gpa: Allocator, header: Zoir.Header, cache_br: *std.io.BufferedReader) !Zoir { |
| 2951 | 2951 | var zoir: Zoir = .{ |
| 2952 | 2952 | .nodes = .empty, |
| 2953 | 2953 | .extra = &.{}, |
| ... | ... | @@ -2983,12 +2983,7 @@ pub fn loadZoirCacheBody(gpa: Allocator, header: Zoir.Header, cache_file: std.fs |
| 2983 | 2983 | @ptrCast(zoir.compile_errors), |
| 2984 | 2984 | @ptrCast(zoir.error_notes), |
| 2985 | 2985 | }; |
| 2986 | | var cache_fr = cache_file.reader(); |
| 2987 | | var cache_br = cache_fr.interface().unbuffered(); |
| 2988 | | cache_br.readVecAll(&vecs) catch |err| switch (err) { |
| 2989 | | error.ReadFailed => return cache_fr.err.?, |
| 2990 | | error.EndOfStream => return error.UnexpectedFileSize, |
| 2991 | | }; |
| 2986 | try cache_br.readVecAll(&vecs); |
| 2992 | 2987 | return zoir; |
| 2993 | 2988 | } |
| 2994 | 2989 | |