Fix for follow-up #2 from step 2b. When a pack-fn declares `(..\$args) -> \$R` (return type a generic name), the mono now infers ret_ty from the body's first explicit `return X;` or falls back to the tail expression of an arrow-form body. Plumbing in src/ir/lower.zig: - `inferPackBodyReturnType(body)` walks the body via the existing `findReturnValueType` helper (return stmts) and falls through to `inferExprType` on the tail expression for arrow-form / tail-expr bodies. - `monomorphizePackFn` now pre-installs `pack_arg_nodes` and `pack_param_count` BEFORE resolving the return type so the inference can substitute `args[<lit>]` to call-site arg AST nodes during type lookup. - Generic-ret detection: `fd.return_type` AST node is a `type_expr` with `is_generic = true`. Concrete returns stay on the standard `resolveReturnType` path. `examples/159-pack-generic-ret.sx` flips from `0 0` (silent- zero coercion through opaque struct ret_ty) to `42 99`. 198/198 example tests + `zig build test` green.
2 lines
6 B
Plaintext
2 lines
6 B
Plaintext
42 99
|