An array initialization expression using element pointers.
fn arrayInitExprPtr(
gz: *GenZir,
scope: *Scope,
node: Ast.Node.Index,
elements: []const Ast.Node.Index,
ptr_inst: Zir.Inst.Ref,
) InnerError!void
fn arrayInitExprPtr(
gz: *GenZir,
scope: *Scope,
node: Ast.Node.Index,
elements: []const Ast.Node.Index,
ptr_inst: Zir.Inst.Ref,
) InnerError!void {
const astgen = gz.astgen;
const array_ptr_inst = try gz.addUnNode(.opt_eu_base_ptr_init, ptr_inst, node);
const payload_index = try addExtra(astgen, Zir.Inst.Block{
.body_len = @intCast(elements.len),
});
var extra_index = try reserveExtra(astgen, elements.len);
for (elements, 0..) |elem_init, i| {
const elem_ptr_inst = try gz.addPlNode(.array_init_elem_ptr, elem_init, Zir.Inst.ElemPtrImm{
.ptr = array_ptr_inst,
.index = @intCast(i),
});
astgen.extra.items[extra_index] = @backingInt(elem_ptr_inst.toIndex().?);
extra_index += 1;
_ = try expr(gz, scope, .{ .rl = .{ .ptr = .{ .inst = elem_ptr_inst } } }, elem_init);
}
_ = try gz.addPlNodePayloadIndex(.validate_ptr_array_init, node, payload_index);
}