From 94039d66ed4fecb7defc5deeeedd7afa3b773f0c Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Wed, 5 Oct 2022 15:06:14 +0300 Subject: Sema: disallow fieldParentPtr and offsetOf on comptime fields Comptime fields are tied to the type and behave more like declarations so these operations cannot return anything useful for them. --- src/type.zig | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/type.zig') diff --git a/src/type.zig b/src/type.zig index 1fef525062..7c35eccbe6 100644 --- a/src/type.zig +++ b/src/type.zig @@ -5664,6 +5664,28 @@ pub const Type = extern union { } } + pub fn structFieldIsComptime(ty: Type, index: usize) bool { + switch (ty.tag()) { + .@"struct" => { + const struct_obj = ty.castTag(.@"struct").?.data; + if (struct_obj.layout == .Packed) return false; + const field = struct_obj.fields.values()[index]; + return field.is_comptime; + }, + .tuple => { + const tuple = ty.castTag(.tuple).?.data; + const val = tuple.values[index]; + return val.tag() != .unreachable_value; + }, + .anon_struct => { + const anon_struct = ty.castTag(.anon_struct).?.data; + const val = anon_struct.values[index]; + return val.tag() != .unreachable_value; + }, + else => unreachable, + } + } + pub fn packedStructFieldByteOffset(ty: Type, field_index: usize, target: Target) u32 { const struct_obj = ty.castTag(.@"struct").?.data; assert(struct_obj.layout == .Packed); -- cgit v1.2.3