authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-02-20 11:25:19+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-02-20 11:59:49+02:00
loga5ac06268972bd7279a1bb928a40d70cc7d515ed
tree2773b5115c1633c303f9527bc4422fe2e68c0b74
parenta2533e6fca0f28aa64717d8e4c13fe6a780b8b15

stage2: make field/array base ptr work at comptime


2 files changed, 17 insertions(+), 9 deletions(-)

src/Sema.zig+16-8
......@@ -5337,11 +5337,15 @@ fn analyzeOptionalPayloadPtr(
53375337 });
53385338
53395339 if (try sema.resolveDefinedValue(block, src, optional_ptr)) |pointer_val| {
5340 if (initializing) {
5341 return sema.addConstant(
5342 child_pointer,
5343 try Value.Tag.opt_payload_ptr.create(sema.arena, pointer_val),
5344 );
5345 }
53405346 if (try sema.pointerDeref(block, src, pointer_val, optional_ptr_ty)) |val| {
5341 if (!initializing) {
5342 if (val.isNull()) {
5343 return sema.fail(block, src, "unable to unwrap null", .{});
5344 }
5347 if (val.isNull()) {
5348 return sema.fail(block, src, "unable to unwrap null", .{});
53455349 }
53465350 // The same Value represents the pointer to the optional and the payload.
53475351 return sema.addConstant(
......@@ -5488,11 +5492,15 @@ fn analyzeErrUnionPayloadPtr(
54885492 });
54895493
54905494 if (try sema.resolveDefinedValue(block, src, operand)) |pointer_val| {
5495 if (initializing) {
5496 return sema.addConstant(
5497 operand_pointer_ty,
5498 try Value.Tag.eu_payload_ptr.create(sema.arena, pointer_val),
5499 );
5500 }
54915501 if (try sema.pointerDeref(block, src, pointer_val, operand_ty)) |val| {
5492 if (!initializing) {
5493 if (val.getError()) |name| {
5494 return sema.fail(block, src, "caught unexpected error '{s}'", .{name});
5495 }
5502 if (val.getError()) |name| {
5503 return sema.fail(block, src, "caught unexpected error '{s}'", .{name});
54965504 }
54975505
54985506 return sema.addConstant(
test/behavior/struct.zig+1-1
......@@ -1222,7 +1222,7 @@ test "anon init through error unions and optionals" {
12221222 };
12231223
12241224 try S.doTheTest();
1225 // comptime try S.doTheTest(); // TODO
1225 comptime try S.doTheTest();
12261226}
12271227
12281228test "anon init through optional" {