diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-09-10 00:53:26 +0300 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2022-09-15 00:50:18 +0300 |
| commit | 5e4483fff8077ec8d87ba9125f946955a34b6fc0 (patch) | |
| tree | d3c03ca0b8197aaf3f9163deb5ac13910bff19b5 /src/Sema.zig | |
| parent | 5e37da6ade7eb307d51c21a2dfcdbef23e9cbf08 (diff) | |
| download | zig-5e4483fff8077ec8d87ba9125f946955a34b6fc0.tar.gz zig-5e4483fff8077ec8d87ba9125f946955a34b6fc0.zip | |
Sema: handle comptime fields in field call bind
Closes #12801
Diffstat (limited to 'src/Sema.zig')
| -rw-r--r-- | src/Sema.zig | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 2cec686989..bcac427caf 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -21683,12 +21683,19 @@ fn finishFieldCallBind( .@"addrspace" = ptr_ty.ptrAddressSpace(), }); + const container_ty = ptr_ty.childType(); + if (container_ty.zigTypeTag() == .Struct) { + if (container_ty.structFieldValueComptime(field_index)) |default_val| { + return sema.addConstant(field_ty, default_val); + } + } + if (try sema.resolveDefinedValue(block, src, object_ptr)) |struct_ptr_val| { const pointer = try sema.addConstant( ptr_field_ty, try Value.Tag.field_ptr.create(arena, .{ .container_ptr = struct_ptr_val, - .container_ty = ptr_ty.childType(), + .container_ty = container_ty, .field_index = field_index, }), ); |
