ffi M5.A.next.2a.A: pack typed indexing — lock in Any-untyped miss
Step 2 of the variadic heterogeneous type packs feature: typed runtime indexing (`args[$i]` at comptime-known `$i`). Today's pack-fn body lowers `args[i]` through the `[]Any` slice path — the static type returned is `Any`, so any downstream field access / typed-coercion / further indexing fails the moment it needs more than primitive auto-unboxing. `examples/156-pack-typed-index.sx` pins the simplest visible failure: `args[0].x` on a struct-typed call arg trips "field 'x' not found on type 'Any'" at the field-access site because AST-level type inference for `args[0]` returns Any. Next commit teaches `lowerIndexExpr` (and `inferExprType` for the same shape) to detect an index_expr whose base is a pack-name binding from the enclosing comptime call AND whose index is a comptime int literal — substitutes the i-th call-site arg's lowered value directly, propagating the call arg's concrete type through field access, typed assignments, and further indexing. The `[]Any` slice path stays as the runtime-indexed fallback for `args[i]` where `i` is not a comptime constant. 195/195 example tests + `zig build test` green.
This commit is contained in:
1
tests/expected/156-pack-typed-index.exit
Normal file
1
tests/expected/156-pack-typed-index.exit
Normal file
@@ -0,0 +1 @@
|
||||
1
|
||||
1
tests/expected/156-pack-typed-index.txt
Normal file
1
tests/expected/156-pack-typed-index.txt
Normal file
@@ -0,0 +1 @@
|
||||
/Users/agra/projects/sx/examples/156-pack-typed-index.sx:25:30: error: field 'x' not found on type 'Any'
|
||||
Reference in New Issue
Block a user