Bare `$args` evaluated inside a pack-fn body has the right `.len` / per-element types inline, but the moment the same slice is passed as an argument to another function, the callee silently reads length 0 and every element comes back as undef. Cause (per issue file): `lazyLowerFunction` saves/restores builder state but not `pack_arg_nodes` / `pack_param_count` / `pack_arg_types` / `inline_return_target`. When a regular fn like `describe(args: []Any)` is lazily lowered from inside a pack-fn mono, the outer pack maps are still active; `lowerFieldAccess`'s `<pack_name>.len` intercept fires on `describe`'s same-named param and bakes the outer mono's arity as a constant into describe's IR. Every subsequent shape's call to describe returns that constant. `examples/173-pack-bare-args-cross-call.sx` exercises four shapes (0, 1, 3, 5 elements) through the same `describe(args: []Any)` walker. The expected output holds the per-position type names (`[s64]`, `[s64, string, bool]`, etc); today's diff fails — the walker reads `args.len = 0` for every shape and returns `[]`. The next commit fixes `lazyLowerFunction`.
2 lines
2 B
Plaintext
2 lines
2 B
Plaintext
0
|