authorgravatar for mitchell.hashimoto@gmail.comMitchell Hashimoto <mitchell.hashimoto@gmail.com> 2022-03-14 14:38:05-07:00
committergravatar for mitchell.hashimoto@gmail.comMitchell Hashimoto <mitchell.hashimoto@gmail.com> 2022-03-14 14:38:05-07:00
log53de31d62c91b96cbf082169d76d02f6900f6273
tree04fa44584077ea6d3139e92c093ac97142f87ace
parentedd07aa80815dc634d437588f5c9aad7dc9039dc
signaturelock-open Commit is signed but in an unrecognized format.

stage2: enum reification should use sliceLen and elemValue


1 files changed, 4 insertions(+), 6 deletions(-)

src/Sema.zig+4-6
...@@ -12607,18 +12607,16 @@ fn zirReify(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.I...@@ -12607,18 +12607,16 @@ fn zirReify(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!Air.I
12607 enum_obj.tag_ty = try tag_type_val.toType(&buffer).copy(new_decl_arena_allocator);12607 enum_obj.tag_ty = try tag_type_val.toType(&buffer).copy(new_decl_arena_allocator);
1260812608
12609 // Fields12609 // Fields
12610 const slice_val = fields_val.castTag(.slice).?.data;12610 const fields_len = try sema.usizeCast(block, src, fields_val.sliceLen());
12611 const decl = slice_val.ptr.pointerDecl().?;
12612 try sema.ensureDeclAnalyzed(decl);
12613 const fields_len = try sema.usizeCast(block, src, decl.ty.arrayLen());
12614 if (fields_len > 0) {12611 if (fields_len > 0) {
12615 try enum_obj.fields.ensureTotalCapacity(new_decl_arena_allocator, fields_len);12612 try enum_obj.fields.ensureTotalCapacity(new_decl_arena_allocator, fields_len);
12616 try enum_obj.values.ensureTotalCapacityContext(new_decl_arena_allocator, fields_len, .{12613 try enum_obj.values.ensureTotalCapacityContext(new_decl_arena_allocator, fields_len, .{
12617 .ty = enum_obj.tag_ty,12614 .ty = enum_obj.tag_ty,
12618 });12615 });
1261912616
12620 const array_vals = decl.val.castTag(.aggregate).?.data;12617 var i: usize = 0;
12621 for (array_vals) |elem_val| {12618 while (i < fields_len) : (i += 1) {
12619 const elem_val = try fields_val.elemValue(sema.arena, i);
12622 const field_struct_val = elem_val.castTag(.aggregate).?.data;12620 const field_struct_val = elem_val.castTag(.aggregate).?.data;
12623 // TODO use reflection instead of magic numbers here12621 // TODO use reflection instead of magic numbers here
12624 // name: []const u812622 // name: []const u8