lang F1 4.2 (core): generic struct pack type-param + (..$Ts) tuple field
A generic struct can take a pack type-param ..$Ts: []Type that binds the remaining type args as a sequence, and a pack-shaped tuple field (..$Ts) resolves to a tuple of those per-position types. - parser/ast: accept a leading .. on a struct generic param; StructTypeParam gains is_variadic. - registration: TemplateParam carries is_variadic (and is a type param). - instantiateGenericStruct: a variadic type-param consumes the remaining args into pack_bindings + pack_arg_types (mangled into the name); restored after. - resolveTypeWithBindings: a tuple-literal-as-type containing a pack spread (e.g. (..$Ts)) expands via packTypeElems. Instantiate + correct per-position field types + whole-tuple store + element read all work (examples/205). Not yet: protocol-applied field (..F(Ts)) (the canonical (..VL(Ts)) shape) and nested element assignment b.pair.0 = v. 240 examples + unit green.
This commit is contained in:
@@ -328,6 +328,9 @@ pub const StructTypeParam = struct {
|
||||
name: []const u8, // e.g. "N" or "T" (without $)
|
||||
constraint: *Node, // type_expr: "u32" for value param, "Type" for type param
|
||||
protocol_constraints: []const []const u8 = &.{}, // e.g. ["Eq", "Hashable"] for $T/Eq/Hashable
|
||||
/// `..$Ts: []Type` — a pack type-param binding the remaining type args as a
|
||||
/// sequence (must be last). Field types reference it via `(..$Ts)` etc.
|
||||
is_variadic: bool = false,
|
||||
};
|
||||
|
||||
pub const UsingEntry = struct {
|
||||
|
||||
Reference in New Issue
Block a user