diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-09-23 17:36:37 +0300 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2022-09-24 14:43:03 +0300 |
| commit | 3a5148112d4ea8a3650e5163c99b7978c784d0a5 (patch) | |
| tree | e298ac7e59e034d0b286ae45ba6de7c5edac7629 /src/Sema.zig | |
| parent | fdf4c875ffbbeb24f844718d9eb92bac38e7147e (diff) | |
| download | zig-3a5148112d4ea8a3650e5163c99b7978c784d0a5.tar.gz zig-3a5148112d4ea8a3650e5163c99b7978c784d0a5.zip | |
Sema: avoid using `pointerDecl` when dealing with slices
Closes #12885
Diffstat (limited to 'src/Sema.zig')
| -rw-r--r-- | src/Sema.zig | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 342213dad1..81447d6361 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -17030,14 +17030,14 @@ fn zirReify(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData, in const payload_val = union_val.val.optionalValue() orelse return sema.addType(Type.initTag(.anyerror)); const slice_val = payload_val.castTag(.slice).?.data; - const decl_index = slice_val.ptr.pointerDecl().?; - try sema.ensureDeclAnalyzed(decl_index); - const decl = mod.declPtr(decl_index); - const array_val: []Value = if (decl.val.castTag(.aggregate)) |some| some.data else &.{}; + const len = try sema.usizeCast(block, src, slice_val.len.toUnsignedInt(mod.getTarget())); var names: Module.ErrorSet.NameMap = .{}; - try names.ensureUnusedCapacity(sema.arena, array_val.len); - for (array_val) |elem_val| { + try names.ensureUnusedCapacity(sema.arena, len); + var i: usize = 0; + while (i < len) : (i += 1) { + var buf: Value.ElemValueBuffer = undefined; + const elem_val = slice_val.ptr.elemValueBuffer(mod, i, &buf); const struct_val = elem_val.castTag(.aggregate).?.data; // TODO use reflection instead of magic numbers here // error_set: type, @@ -17429,14 +17429,14 @@ fn zirReify(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData, in var buf: Value.ToTypeBuffer = undefined; const args_slice_val = args_val.castTag(.slice).?.data; - const args_decl_index = args_slice_val.ptr.pointerDecl().?; - try sema.ensureDeclAnalyzed(args_decl_index); - const args_decl = mod.declPtr(args_decl_index); - const args: []Value = if (args_decl.val.castTag(.aggregate)) |some| some.data else &.{}; - var param_types = try sema.arena.alloc(Type, args.len); - var comptime_params = try sema.arena.alloc(bool, args.len); + const args_len = try sema.usizeCast(block, src, args_slice_val.len.toUnsignedInt(mod.getTarget())); + var param_types = try sema.arena.alloc(Type, args_len); + var comptime_params = try sema.arena.alloc(bool, args_len); var noalias_bits: u32 = 0; - for (args) |arg, i| { + var i: usize = 0; + while (i < args_len) : (i += 1) { + var arg_buf: Value.ElemValueBuffer = undefined; + const arg = args_slice_val.ptr.elemValueBuffer(mod, i, &arg_buf); const arg_val = arg.castTag(.aggregate).?.data; // TODO use reflection instead of magic numbers here // is_generic: bool, |
