| ... | @@ -4193,7 +4193,7 @@ pub const Index = enum(u32) { | ... | @@ -4193,7 +4193,7 @@ pub const Index = enum(u32) { |
| 4193 | }; | 4193 | }; |
| 4194 | } | 4194 | } |
| 4195 | | 4195 | |
| 4196 | /// This function is used in the debugger pretty formatters in tools/ to fetch the | 4196 | /// This function is used in the debugger pretty formatters in lib/lldb/ to fetch the |
| 4197 | /// Tag to encoding mapping to facilitate fancy debug printing for this type. | 4197 | /// Tag to encoding mapping to facilitate fancy debug printing for this type. |
| 4198 | fn dbHelper(self: *Index, tag_to_encoding_map: *struct { | 4198 | fn dbHelper(self: *Index, tag_to_encoding_map: *struct { |
| 4199 | const DataIsIndex = struct { data: Index }; | 4199 | const DataIsIndex = struct { data: Index }; |
| ... | @@ -4219,26 +4219,17 @@ pub const Index = enum(u32) { | ... | @@ -4219,26 +4219,17 @@ pub const Index = enum(u32) { |
| 4219 | type_inferred_error_set: DataIsIndex, | 4219 | type_inferred_error_set: DataIsIndex, |
| 4220 | simple_type: void, | 4220 | simple_type: void, |
| 4221 | type_function: struct { | 4221 | type_function: struct { |
| 4222 | const @"data.flags.has_comptime_bits" = opaque {}; | | |
| 4223 | const @"data.flags.has_noalias_bits" = opaque {}; | | |
| 4224 | const @"data.flags.cc.extraLen()" = opaque {}; | | |
| 4225 | const @"data.params_len" = opaque {}; | 4222 | const @"data.params_len" = opaque {}; |
| 4226 | data: *Tag.TypeFunction, | 4223 | data: *Tag.TypeFunction, |
| 4227 | @"trailing.comptime_bits.len": *@"data.flags.has_comptime_bits", | | |
| 4228 | @"trailing.noalias_bits.len": *@"data.flags.has_noalias_bits", | | |
| 4229 | @"trailing.cc_bits.len": *@"data.flags.cc.extraLen()", | | |
| 4230 | @"trailing.param_types.len": *@"data.params_len", | 4224 | @"trailing.param_types.len": *@"data.params_len", |
| 4231 | trailing: struct { comptime_bits: []u32, noalias_bits: []u32, cc_bits: []u32, param_types: []Index }, | 4225 | trailing: struct { param_types: []Index }, |
| 4232 | }, | 4226 | }, |
| 4233 | type_tuple: struct { | 4227 | type_tuple: struct { |
| 4234 | const @"data.fields_len" = opaque {}; | 4228 | const @"data.fields_len" = opaque {}; |
| 4235 | data: *TypeTuple, | 4229 | data: *TypeTuple, |
| 4236 | @"trailing.types.len": *@"data.fields_len", | 4230 | @"trailing.types.len": *@"data.fields_len", |
| 4237 | @"trailing.values.len": *@"data.fields_len", | 4231 | @"trailing.values.len": *@"data.fields_len", |
| 4238 | trailing: struct { | 4232 | trailing: struct { types: []Index, values: []Index }, |
| 4239 | types: []Index, | | |
| 4240 | values: []Index, | | |
| 4241 | }, | | |
| 4242 | }, | 4233 | }, |
| 4243 | | 4234 | |
| 4244 | type_struct: struct { data: *Tag.TypeStruct }, | 4235 | type_struct: struct { data: *Tag.TypeStruct }, |
| ... | @@ -4350,7 +4341,7 @@ pub const Index = enum(u32) { | ... | @@ -4350,7 +4341,7 @@ pub const Index = enum(u32) { |
| 4350 | const encoding = @field(Tag.encodings, tag_name); | 4341 | const encoding = @field(Tag.encodings, tag_name); |
| 4351 | if (@hasField(@TypeOf(encoding), "trailing")) { | 4342 | if (@hasField(@TypeOf(encoding), "trailing")) { |
| 4352 | const trailing_info = @typeInfo(encoding.trailing).@"struct"; | 4343 | const trailing_info = @typeInfo(encoding.trailing).@"struct"; |
| 4353 | for (trailing_info.field_names, trailing_info.field_types) |field_name, field_type| { | 4344 | for (trailing_info.field_names, trailing_info.field_types) |trailing_field_name, trailing_field_type| { |
| 4354 | struct { | 4345 | struct { |
| 4355 | fn checkConfig(name: []const u8) void { | 4346 | fn checkConfig(name: []const u8) void { |
| 4356 | if (!@hasField(@TypeOf(encoding.config), name)) @compileError("missing field: " ++ @typeName(Tag) ++ ".encodings." ++ tag_name ++ ".config.@\"" ++ name ++ "\""); | 4347 | if (!@hasField(@TypeOf(encoding.config), name)) @compileError("missing field: " ++ @typeName(Tag) ++ ".encodings." ++ tag_name ++ ".config.@\"" ++ name ++ "\""); |
| ... | @@ -4359,22 +4350,30 @@ pub const Index = enum(u32) { | ... | @@ -4359,22 +4350,30 @@ pub const Index = enum(u32) { |
| 4359 | } | 4350 | } |
| 4360 | fn checkField(name: []const u8, Type: type) void { | 4351 | fn checkField(name: []const u8, Type: type) void { |
| 4361 | switch (@typeInfo(Type)) { | 4352 | switch (@typeInfo(Type)) { |
| 4362 | .int => {}, | 4353 | .int, .@"enum" => return, |
| 4363 | .@"enum" => {}, | 4354 | .@"struct" => |info| switch (info.layout) { |
| 4364 | .@"struct" => |info| assert(info.layout == .@"packed"), | 4355 | .auto => unreachable, |
| | 4356 | .@"extern" => { |
| | 4357 | for (info.field_names, info.field_types) |field_name, field_type| checkField(name ++ "." ++ field_name, field_type); |
| | 4358 | return; |
| | 4359 | }, |
| | 4360 | .@"packed" => return, |
| | 4361 | }, |
| 4365 | .optional => |info| { | 4362 | .optional => |info| { |
| 4366 | checkConfig(name ++ ".?"); | 4363 | checkConfig(name ++ ".?"); |
| 4367 | checkField(name ++ ".?", info.child); | 4364 | checkField(name ++ ".?", info.child); |
| | 4365 | return; |
| 4368 | }, | 4366 | }, |
| 4369 | .pointer => |info| { | 4367 | .pointer => |info| if (info.size == .slice) { |
| 4370 | assert(info.size == .slice); | | |
| 4371 | checkConfig(name ++ ".len"); | 4368 | checkConfig(name ++ ".len"); |
| 4372 | checkField(name ++ "[0]", info.child); | 4369 | checkField(name ++ "[0]", info.child); |
| | 4370 | return; |
| 4373 | }, | 4371 | }, |
| 4374 | else => @compileError("unsupported type: " ++ @typeName(Tag) ++ ".encodings." ++ tag_name ++ "." ++ name ++ ": " ++ @typeName(Type)), | 4372 | else => {}, |
| 4375 | } | 4373 | } |
| | 4374 | @compileError("unsupported type: " ++ @typeName(Tag) ++ ".encodings." ++ tag_name ++ "." ++ name ++ ": " ++ @typeName(Type)); |
| 4376 | } | 4375 | } |
| 4377 | }.checkField("trailing." ++ field_name, field_type); | 4376 | }.checkField("trailing." ++ trailing_field_name, trailing_field_type); |
| 4378 | } | 4377 | } |
| 4379 | } | 4378 | } |
| 4380 | }, | 4379 | }, |
| ... | @@ -5186,17 +5185,18 @@ pub const Tag = enum(u8) { | ... | @@ -5186,17 +5185,18 @@ pub const Tag = enum(u8) { |
| 5186 | .trailing = struct { | 5185 | .trailing = struct { |
| 5187 | param_comptime_bits: ?[]u32, | 5186 | param_comptime_bits: ?[]u32, |
| 5188 | param_noalias_bits: ?[]u32, | 5187 | param_noalias_bits: ?[]u32, |
| 5189 | param_cc_bits: ?[]u32, | 5188 | spirv_kernel_options: ?extern struct { x: u32, y: u32, z: u32 }, |
| 5190 | param_type: []Index, | 5189 | spirv_mesh_options: ?extern struct { max_primitives: u32, max_vertices: u32 }, |
| | 5190 | param_types: []Index, |
| 5191 | }, | 5191 | }, |
| 5192 | .config = .{ | 5192 | .config = .{ |
| 5193 | .@"trailing.param_comptime_bits.?" = .@"payload.flags.has_comptime_bits", | 5193 | .@"trailing.param_comptime_bits.?" = .@"payload.flags.has_comptime_bits", |
| 5194 | .@"trailing.param_comptime_bits.?.len" = .@"(payload.params_len + 31) / 32", | 5194 | .@"trailing.param_comptime_bits.?.len" = .@"(payload.params_len + 31) / 32", |
| 5195 | .@"trailing.param_noalias_bits.?" = .@"payload.flags.has_noalias_bits", | 5195 | .@"trailing.param_noalias_bits.?" = .@"payload.flags.has_noalias_bits", |
| 5196 | .@"trailing.param_noalias_bits.?.len" = .@"(payload.params_len + 31) / 32", | 5196 | .@"trailing.param_noalias_bits.?.len" = .@"(payload.params_len + 31) / 32", |
| 5197 | .@"trailing.param_cc_bits.?" = .@"payload.flags.cc.extraLen() != 0", | 5197 | .@"trailing.spirv_kernel_options.?" = .@"payload.flags.cc.tag == .spirv_kernel or payload.flags.cc.tag == .spirv_task", |
| 5198 | .@"trailing.param_cc_bits.?.len" = .@"payload.flags.cc.extraLen()", | 5198 | .@"trailing.spirv_mesh_options.?" = .@"payload.flags.cc.tag == .spirv_mesh", |
| 5199 | .@"trailing.param_type.len" = .@"payload.params_len", | 5199 | .@"trailing.param_types.len" = .@"payload.params_len", |
| 5200 | }, | 5200 | }, |
| 5201 | }, | 5201 | }, |
| 5202 | | 5202 | |
| ... | @@ -5225,7 +5225,7 @@ pub const Tag = enum(u8) { | ... | @@ -5225,7 +5225,7 @@ pub const Tag = enum(u8) { |
| 5225 | .@"trailing.field_defaults.?" = .@"payload.flags.any_field_defaults", | 5225 | .@"trailing.field_defaults.?" = .@"payload.flags.any_field_defaults", |
| 5226 | .@"trailing.field_defaults.?.len" = .@"payload.fields_len", | 5226 | .@"trailing.field_defaults.?.len" = .@"payload.fields_len", |
| 5227 | .@"trailing.field_aligns.?" = .@"payload.flags.any_field_aligns", | 5227 | .@"trailing.field_aligns.?" = .@"payload.flags.any_field_aligns", |
| 5228 | .@"trailing.field_aligns.?.len" = .@"payload.fields_len", | 5228 | .@"trailing.field_aligns.?.len" = .@"(payload.fields_len + 3) / 4", |
| 5229 | .@"trailing.field_is_comptime_bits.?" = .@"payload.flags.any_comptime_fields", | 5229 | .@"trailing.field_is_comptime_bits.?" = .@"payload.flags.any_comptime_fields", |
| 5230 | .@"trailing.field_is_comptime_bits.?.len" = .@"(payload.fields_len + 31) / 32", | 5230 | .@"trailing.field_is_comptime_bits.?.len" = .@"(payload.fields_len + 31) / 32", |
| 5231 | .@"trailing.field_runtime_order.?" = .@"payload.flags.layout == .auto", | 5231 | .@"trailing.field_runtime_order.?" = .@"payload.flags.layout == .auto", |
| ... | @@ -5254,7 +5254,7 @@ pub const Tag = enum(u8) { | ... | @@ -5254,7 +5254,7 @@ pub const Tag = enum(u8) { |
| 5254 | .@"trailing.captures.?.len" = .@"trailing.captures_len.?", | 5254 | .@"trailing.captures.?.len" = .@"trailing.captures_len.?", |
| 5255 | .@"trailing.field_types.len" = .@"payload.fields_len", | 5255 | .@"trailing.field_types.len" = .@"payload.fields_len", |
| 5256 | .@"trailing.field_aligns.?" = .@"payloads.flags.any_field_aligns", | 5256 | .@"trailing.field_aligns.?" = .@"payloads.flags.any_field_aligns", |
| 5257 | .@"trailing.field_aligns.?.len" = .@"payload.fields_len", | 5257 | .@"trailing.field_aligns.?.len" = .@"(payload.fields_len + 3) / 4", |
| 5258 | }, | 5258 | }, |
| 5259 | }, | 5259 | }, |
| 5260 | .type_union_packed_auto = union_packed_encoding, | 5260 | .type_union_packed_auto = union_packed_encoding, |