aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig31
1 files changed, 15 insertions, 16 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index e9509c4efd..dd851eeb03 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -322,24 +322,24 @@ pub fn generateSymbol(
},
.f128 => |f128_val| writeFloat(f128, f128_val, target, endian, try code.addManyAsArray(16)),
},
- .ptr => |ptr| {
- // generate ptr
- switch (try lowerParentPtr(bin_file, src_loc, switch (ptr.len) {
- .none => typed_value.val,
- else => typed_value.val.slicePtr(mod),
- }.toIntern(), code, debug_output, reloc_info)) {
+ .ptr => switch (try lowerParentPtr(bin_file, src_loc, typed_value.val.toIntern(), code, debug_output, reloc_info)) {
+ .ok => {},
+ .fail => |em| return .{ .fail = em },
+ },
+ .slice => |slice| {
+ switch (try generateSymbol(bin_file, src_loc, .{
+ .ty = typed_value.ty.slicePtrFieldType(mod),
+ .val = Value.fromInterned(slice.ptr),
+ }, code, debug_output, reloc_info)) {
.ok => {},
.fail => |em| return .{ .fail = em },
}
- if (ptr.len != .none) {
- // generate len
- switch (try generateSymbol(bin_file, src_loc, .{
- .ty = Type.usize,
- .val = Value.fromInterned(ptr.len),
- }, code, debug_output, reloc_info)) {
- .ok => {},
- .fail => |em| return Result{ .fail = em },
- }
+ switch (try generateSymbol(bin_file, src_loc, .{
+ .ty = Type.usize,
+ .val = Value.fromInterned(slice.len),
+ }, code, debug_output, reloc_info)) {
+ .ok => {},
+ .fail => |em| return .{ .fail = em },
}
},
.opt => {
@@ -676,7 +676,6 @@ fn lowerParentPtr(
) CodeGenError!Result {
const mod = bin_file.comp.module.?;
const ptr = mod.intern_pool.indexToKey(parent_ptr).ptr;
- assert(ptr.len == .none);
return switch (ptr.addr) {
.decl => |decl| try lowerDeclRef(bin_file, src_loc, decl, code, debug_output, reloc_info),
.mut_decl => |md| try lowerDeclRef(bin_file, src_loc, md.decl, code, debug_output, reloc_info),