aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index b0830917d6..6cd05135d4 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -283,6 +283,10 @@ pub fn analyzeBody(
try sema.zirStore(block, inst);
continue;
},
+ .store_node => {
+ try sema.zirStoreNode(block, inst);
+ continue;
+ },
.store_to_block_ptr => {
try sema.zirStoreToBlockPtr(block, inst);
continue;
@@ -712,7 +716,19 @@ fn zirStore(sema: *Sema, block: *Scope.Block, inst: zir.Inst.Index) InnerError!v
const bin_inst = sema.code.instructions.items(.data)[inst].bin;
const ptr = try sema.resolveInst(bin_inst.lhs);
const value = try sema.resolveInst(bin_inst.rhs);
- return sema.storePtr(block, .unneeded, ptr, value);
+ return sema.storePtr(block, sema.src, ptr, value);
+}
+
+fn zirStoreNode(sema: *Sema, block: *Scope.Block, inst: zir.Inst.Index) InnerError!void {
+ const tracy = trace(@src());
+ defer tracy.end();
+
+ const inst_data = sema.code.instructions.items(.data)[inst].pl_node;
+ const src = inst_data.src();
+ const extra = sema.code.extraData(zir.Inst.Bin, inst_data.payload_index).data;
+ const ptr = try sema.resolveInst(extra.lhs);
+ const value = try sema.resolveInst(extra.rhs);
+ return sema.storePtr(block, src, ptr, value);
}
fn zirParamType(sema: *Sema, block: *Scope.Block, inst: zir.Inst.Index) InnerError!*Inst {
@@ -3630,7 +3646,7 @@ fn storePtr(
return sema.mod.fail(&block.base, src, "cannot assign to constant", .{});
const elem_ty = ptr.ty.elemType();
- const value = try sema.coerce(block, elem_ty, uncasted_value, uncasted_value.src);
+ const value = try sema.coerce(block, elem_ty, uncasted_value, src);
if (elem_ty.onePossibleValue() != null)
return;