diff options
Diffstat (limited to 'src/type.zig')
| -rw-r--r-- | src/type.zig | 22 |
1 files changed, 22 insertions, 0 deletions
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); |
