| ... | @@ -148,19 +148,23 @@ pub fn generateLazySymbol( | ... | @@ -148,19 +148,23 @@ pub fn generateLazySymbol( |
| 148 | if (lazy_sym.ty == .anyerror_type) { | 148 | if (lazy_sym.ty == .anyerror_type) { |
| 149 | alignment.* = .@"4"; | 149 | alignment.* = .@"4"; |
| 150 | const err_names = ip.global_error_set.getNamesFromMainThread(); | 150 | const err_names = ip.global_error_set.getNamesFromMainThread(); |
| 151 | mem.writeInt(u32, try code.addManyAsArray(4), @intCast(err_names.len), endian); | 151 | var offset_index: u32 = @intCast(code.items.len); |
| 152 | var offset = code.items.len; | 152 | var string_index: u32 = @intCast(4 * (1 + err_names.len + @intFromBool(err_names.len > 0))); |
| 153 | try code.resize((err_names.len + 1) * 4); | 153 | try code.resize(offset_index + string_index); |
| | 154 | mem.writeInt(u32, code.items[offset_index..][0..4], @intCast(err_names.len), endian); |
| | 155 | if (err_names.len == 0) return .ok; |
| | 156 | offset_index += 4; |
| 154 | for (err_names) |err_name_nts| { | 157 | for (err_names) |err_name_nts| { |
| 155 | const err_name = err_name_nts.toSlice(ip); | 158 | const err_name = err_name_nts.toSlice(ip); |
| 156 | mem.writeInt(u32, code.items[offset..][0..4], @intCast(code.items.len), endian); | 159 | mem.writeInt(u32, code.items[offset_index..][0..4], string_index, endian); |
| 157 | offset += 4; | 160 | offset_index += 4; |
| 158 | try code.ensureUnusedCapacity(err_name.len + 1); | 161 | try code.ensureUnusedCapacity(err_name.len + 1); |
| 159 | code.appendSliceAssumeCapacity(err_name); | 162 | code.appendSliceAssumeCapacity(err_name); |
| 160 | code.appendAssumeCapacity(0); | 163 | code.appendAssumeCapacity(0); |
| | 164 | string_index += @intCast(err_name.len + 1); |
| 161 | } | 165 | } |
| 162 | mem.writeInt(u32, code.items[offset..][0..4], @intCast(code.items.len), endian); | 166 | mem.writeInt(u32, code.items[offset_index..][0..4], string_index, endian); |
| 163 | return Result.ok; | 167 | return .ok; |
| 164 | } else if (Type.fromInterned(lazy_sym.ty).zigTypeTag(pt.zcu) == .@"enum") { | 168 | } else if (Type.fromInterned(lazy_sym.ty).zigTypeTag(pt.zcu) == .@"enum") { |
| 165 | alignment.* = .@"1"; | 169 | alignment.* = .@"1"; |
| 166 | const enum_ty = Type.fromInterned(lazy_sym.ty); | 170 | const enum_ty = Type.fromInterned(lazy_sym.ty); |
| ... | @@ -171,8 +175,8 @@ pub fn generateLazySymbol( | ... | @@ -171,8 +175,8 @@ pub fn generateLazySymbol( |
| 171 | code.appendSliceAssumeCapacity(tag_name); | 175 | code.appendSliceAssumeCapacity(tag_name); |
| 172 | code.appendAssumeCapacity(0); | 176 | code.appendAssumeCapacity(0); |
| 173 | } | 177 | } |
| 174 | return Result.ok; | 178 | return .ok; |
| 175 | } else return .{ .fail = try ErrorMsg.create( | 179 | } else return .{ .fail = try .create( |
| 176 | gpa, | 180 | gpa, |
| 177 | src_loc, | 181 | src_loc, |
| 178 | "TODO implement generateLazySymbol for {s} {}", | 182 | "TODO implement generateLazySymbol for {s} {}", |