| ... | ... | @@ -779,6 +779,7 @@ pub const Object = struct { |
| 779 | 779 | debug_enums: std.ArrayListUnmanaged(Builder.Metadata), |
| 780 | 780 | debug_globals: std.ArrayListUnmanaged(Builder.Metadata), |
| 781 | 781 | |
| 782 | debug_file_map: std.AutoHashMapUnmanaged(*const Module.File, Builder.Metadata), |
| 782 | 783 | debug_type_map: std.AutoHashMapUnmanaged(Type, Builder.Metadata), |
| 783 | 784 | |
| 784 | 785 | debug_unresolved_namespace_scopes: std.AutoArrayHashMapUnmanaged(InternPool.NamespaceIndex, Builder.Metadata), |
| ... | ... | @@ -961,6 +962,7 @@ pub const Object = struct { |
| 961 | 962 | .debug_globals_fwd_ref = debug_globals_fwd_ref, |
| 962 | 963 | .debug_enums = .{}, |
| 963 | 964 | .debug_globals = .{}, |
| 965 | .debug_file_map = .{}, |
| 964 | 966 | .debug_type_map = .{}, |
| 965 | 967 | .debug_unresolved_namespace_scopes = .{}, |
| 966 | 968 | .target = target, |
| ... | ... | @@ -978,8 +980,9 @@ pub const Object = struct { |
| 978 | 980 | |
| 979 | 981 | pub fn deinit(self: *Object) void { |
| 980 | 982 | const gpa = self.gpa; |
| 981 | | self.debug_globals.deinit(gpa); |
| 982 | 983 | self.debug_enums.deinit(gpa); |
| 984 | self.debug_globals.deinit(gpa); |
| 985 | self.debug_file_map.deinit(gpa); |
| 983 | 986 | self.debug_type_map.deinit(gpa); |
| 984 | 987 | self.debug_unresolved_namespace_scopes.deinit(gpa); |
| 985 | 988 | self.decl_map.deinit(gpa); |
| ... | ... | @@ -1922,10 +1925,25 @@ pub const Object = struct { |
| 1922 | 1925 | } |
| 1923 | 1926 | |
| 1924 | 1927 | fn getDebugFile(o: *Object, file: *const Module.File) Allocator.Error!Builder.Metadata { |
| 1925 | | return try o.builder.debugFile( |
| 1928 | const gpa = o.gpa; |
| 1929 | const gop = try o.debug_file_map.getOrPut(gpa, file); |
| 1930 | errdefer assert(o.debug_file_map.remove(file)); |
| 1931 | if (gop.found_existing) return gop.value_ptr.*; |
| 1932 | gop.value_ptr.* = try o.builder.debugFile( |
| 1926 | 1933 | try o.builder.metadataString(std.fs.path.basename(file.sub_file_path)), |
| 1927 | | if (std.fs.path.dirname(file.sub_file_path)) |dirname| try o.builder.metadataString(dirname) else .none, |
| 1934 | dir_path: { |
| 1935 | const sub_path = std.fs.path.dirname(file.sub_file_path) orelse ""; |
| 1936 | const dir_path = try file.mod.root.joinString(gpa, sub_path); |
| 1937 | defer gpa.free(dir_path); |
| 1938 | if (std.fs.path.isAbsolute(dir_path)) |
| 1939 | break :dir_path try o.builder.metadataString(dir_path); |
| 1940 | var abs_buffer: [std.fs.MAX_PATH_BYTES]u8 = undefined; |
| 1941 | const abs_path = std.fs.realpath(dir_path, &abs_buffer) catch |
| 1942 | break :dir_path try o.builder.metadataString(dir_path); |
| 1943 | break :dir_path try o.builder.metadataString(abs_path); |
| 1944 | }, |
| 1928 | 1945 | ); |
| 1946 | return gop.value_ptr.*; |
| 1929 | 1947 | } |
| 1930 | 1948 | |
| 1931 | 1949 | pub fn lowerDebugType( |