agra
08feb6040b
ffi M5.A.next.1d.B: pack impl matching — bind $args + $R per call
...
Pack-shaped impls (`impl P(...) for Closure(..$args) -> $R`) now
match concrete closure sources at xx resolution time. Concrete
impls keep their priority — pack matching only fires on a
concrete-key miss in `param_impl_map`.
New plumbing in src/ir/lower.zig:
- `PackParamImplEntry` carries the pack-shaped source TypeId plus
the pack-var and ret-var names extracted from the impl AST's
`target_type_expr`. `registerParamImpl` detects pack-shaped
sources via `pack_start != null` on the resolved closure type
and additionally registers in a new `param_impl_pack_map`
keyed by `"Proto\x00<arg_mangled>"` (no source suffix).
- `tryUserConversion` re-shapes the concrete lookup so the pack
path runs on miss. `tryPackImplMatch` walks the pack entries,
verifies the source's fixed prefix matches the impl's prefix,
binds the pack-var to the source's tail param TypeIds, binds
the ret-var (when the impl's return is generic) to the source
return, and monomorphises the convert method. Mangled name
stays keyed on the concrete source so distinct call shapes
monomorphise separately.
- `pack_bindings: ?StringHashMap([]const TypeId)` is saved/
restored around monomorphisation, mirroring `type_bindings`.
- `resolveClosureTypeWithBindings` handles the closure_type_expr
node during type resolution: when the closure carries a
`pack_name` AND `pack_bindings` has a binding for it, the
bound TypeIds are appended after the fixed prefix and the
result is a concrete (non-pack) closure type — so the impl
body's `self: Closure(..$args) -> $R` substitutes to the
concrete source closure during monomorphisation. Without an
active binding, the pack shape is preserved.
`examples/155-pack-impl-match.sx` flips from the
"no Into(Block) for cl_s32_bool__bool" lock-in diagnostic to
"pack impl match ok": one user-declared
`impl Into(Block) for Closure(..$args) -> $R` covers a
`Closure(s32, bool) -> bool` source that stdlib has no
hand-rolled impl for. Constructed Block isn't invoked
(invoke=null) — the test exercises only the matching +
monomorphisation, not the trampoline (step 5 of the plan).
Existing concrete-impl paths unchanged: 95-objc-block-noop,
96-objc-block-multi-arg, and stdlib's hand-rolled
`Into(Block) for Closure(bool) -> void` continue to pass through
the concrete map first. Same-file duplicate pack impls
diagnose at registration; cross-module visibility and
multi-pack-impl specificity stay TODOs (matching the deferred
Phase 5 work on the concrete path).
193/193 example tests + `zig build test` green.
2026-05-27 12:57:45 +03:00
..
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 19:44:20 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-05-17 13:19:08 +03:00
2026-05-25 09:10:04 +03:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-05-24 22:59:20 +03:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-20 18:22:42 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 19:44:20 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-15 12:02:36 +02:00
2026-02-22 22:16:30 +02:00
2026-02-22 22:16:30 +02:00
2026-02-22 17:24:04 +02:00
2026-02-22 17:24:04 +02:00
2026-02-22 17:24:04 +02:00
2026-02-22 17:24:04 +02:00
2026-02-22 17:24:04 +02:00
2026-02-28 18:03:38 +02:00
2026-02-23 13:45:44 +02:00
2026-02-23 13:45:44 +02:00
2026-02-25 15:51:22 +02:00
2026-02-25 15:51:22 +02:00
2026-03-02 21:00:55 +02:00
2026-03-02 21:00:55 +02:00
2026-02-15 19:44:20 +02:00
2026-05-25 15:33:28 +03:00
2026-03-05 16:20:36 +02:00
2026-03-05 16:20:36 +02:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 13:19:08 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-17 19:36:37 +03:00
2026-05-18 00:11:23 +03:00
2026-05-18 00:11:23 +03:00
2026-05-18 00:11:23 +03:00
2026-05-18 00:11:23 +03:00
2026-05-18 00:11:23 +03:00
2026-05-18 00:11:23 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-19 12:06:08 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-27 00:26:30 +03:00
2026-05-27 00:26:30 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 18:32:55 +03:00
2026-05-18 18:32:55 +03:00
2026-05-24 22:59:20 +03:00
2026-05-24 22:59:20 +03:00
2026-05-19 00:22:35 +03:00
2026-05-19 00:22:35 +03:00
2026-05-19 11:31:04 +03:00
2026-05-19 11:31:04 +03:00
2026-05-19 19:18:31 +03:00
2026-05-19 19:18:31 +03:00
2026-05-19 21:14:31 +03:00
2026-05-19 21:14:31 +03:00
2026-05-22 19:03:31 +03:00
2026-05-22 19:03:31 +03:00
2026-05-22 19:03:31 +03:00
2026-05-22 19:03:31 +03:00
2026-05-22 19:03:31 +03:00
2026-05-22 19:03:31 +03:00
2026-05-22 19:03:31 +03:00
2026-05-22 19:03:31 +03:00
2026-05-22 19:03:31 +03:00
2026-05-22 19:03:31 +03:00
2026-05-22 19:03:31 +03:00
2026-05-22 19:03:31 +03:00
2026-05-22 19:03:31 +03:00
2026-05-22 19:03:31 +03:00
2026-05-23 01:28:32 +03:00
2026-05-23 01:28:32 +03:00
2026-05-24 22:59:20 +03:00
2026-05-24 22:59:20 +03:00
2026-05-24 22:59:20 +03:00
2026-05-24 22:59:20 +03:00
2026-05-24 22:59:20 +03:00
2026-05-24 22:59:20 +03:00
2026-05-24 22:59:20 +03:00
2026-05-24 22:59:20 +03:00
2026-05-24 22:59:20 +03:00
2026-05-24 22:59:20 +03:00
2026-05-24 22:59:20 +03:00
2026-05-24 22:59:20 +03:00
2026-05-25 09:50:37 +03:00
2026-05-25 09:50:37 +03:00
2026-05-25 11:41:59 +03:00
2026-05-25 11:41:59 +03:00
2026-05-25 12:18:27 +03:00
2026-05-25 12:18:27 +03:00
2026-05-25 15:01:58 +03:00
2026-05-25 15:01:58 +03:00
2026-05-25 15:23:13 +03:00
2026-05-25 15:23:13 +03:00
2026-05-25 15:45:33 +03:00
2026-05-25 15:45:33 +03:00
2026-05-25 15:59:32 +03:00
2026-05-25 15:59:32 +03:00
2026-05-25 17:52:53 +03:00
2026-05-25 17:52:53 +03:00
2026-05-25 21:15:44 +03:00
2026-05-25 21:15:44 +03:00
2026-05-25 21:18:09 +03:00
2026-05-25 21:18:09 +03:00
2026-05-25 21:33:20 +03:00
2026-05-25 21:33:20 +03:00
2026-05-25 22:08:23 +03:00
2026-05-26 22:30:48 +03:00
2026-05-25 22:08:23 +03:00
2026-05-25 22:14:31 +03:00
2026-05-25 22:14:31 +03:00
2026-05-25 22:23:59 +03:00
2026-05-25 22:23:59 +03:00
2026-05-25 22:58:20 +03:00
2026-05-25 22:58:20 +03:00
2026-05-25 23:17:30 +03:00
2026-05-25 23:17:30 +03:00
2026-05-25 23:25:13 +03:00
2026-05-25 23:25:13 +03:00
2026-05-25 23:33:52 +03:00
2026-05-25 23:33:52 +03:00
2026-05-25 23:40:51 +03:00
2026-05-25 23:40:51 +03:00
2026-05-25 23:43:46 +03:00
2026-05-25 23:43:46 +03:00
2026-05-27 09:49:41 +03:00
2026-05-27 09:49:41 +03:00
2026-05-26 01:45:21 +03:00
2026-05-26 01:45:21 +03:00
2026-05-26 01:49:31 +03:00
2026-05-26 01:49:31 +03:00
2026-05-26 01:56:25 +03:00
2026-05-26 01:56:25 +03:00
2026-05-27 12:12:16 +03:00
2026-05-27 12:12:16 +03:00
2026-05-27 12:57:45 +03:00
2026-05-27 12:57:45 +03:00
2026-05-19 11:15:13 +03:00
2026-05-19 11:15:13 +03:00
2026-05-19 11:21:16 +03:00
2026-05-19 11:32:36 +03:00
2026-05-19 11:41:06 +03:00
2026-05-19 11:41:06 +03:00
2026-05-19 11:44:43 +03:00
2026-05-19 11:44:43 +03:00
2026-05-19 11:46:47 +03:00
2026-05-19 11:46:47 +03:00
2026-05-19 11:48:34 +03:00
2026-05-19 11:48:34 +03:00
2026-05-19 11:51:34 +03:00
2026-05-19 11:51:34 +03:00
2026-05-19 11:57:44 +03:00
2026-05-19 11:57:44 +03:00
2026-05-19 11:59:18 +03:00
2026-05-19 11:59:18 +03:00
2026-05-22 13:13:43 +03:00
2026-05-22 13:13:43 +03:00
2026-05-19 12:46:53 +03:00
2026-05-19 12:46:53 +03:00
2026-05-19 21:25:42 +03:00
2026-05-19 21:25:42 +03:00
2026-05-19 21:41:26 +03:00
2026-05-25 15:33:28 +03:00
2026-05-19 21:41:26 +03:00
2026-05-19 22:26:03 +03:00
2026-05-25 15:33:28 +03:00
2026-05-19 22:26:03 +03:00
2026-05-19 22:30:05 +03:00
2026-05-25 15:33:28 +03:00
2026-05-19 22:30:05 +03:00
2026-05-19 22:31:58 +03:00
2026-05-25 15:33:28 +03:00
2026-05-19 22:31:58 +03:00
2026-05-19 22:33:58 +03:00
2026-05-25 15:33:28 +03:00
2026-05-19 22:33:58 +03:00
2026-05-19 22:36:36 +03:00
2026-05-25 15:33:28 +03:00
2026-05-19 22:36:36 +03:00
2026-05-19 22:40:47 +03:00
2026-05-25 15:33:28 +03:00
2026-05-19 22:40:47 +03:00
2026-05-23 01:28:32 +03:00
2026-05-23 01:28:32 +03:00
2026-05-23 01:28:32 +03:00
2026-05-23 01:28:32 +03:00
2026-05-20 09:24:14 +03:00
2026-05-20 09:24:14 +03:00
2026-05-20 09:30:02 +03:00
2026-05-20 09:30:02 +03:00
2026-05-20 09:35:09 +03:00
2026-05-20 09:35:09 +03:00
2026-05-20 10:02:56 +03:00
2026-05-20 10:02:56 +03:00
2026-05-20 10:05:30 +03:00
2026-05-20 10:05:30 +03:00
2026-05-20 10:10:23 +03:00
2026-05-20 10:10:23 +03:00
2026-05-20 10:15:10 +03:00
2026-05-20 10:15:10 +03:00
2026-05-20 11:07:41 +03:00
2026-05-25 15:33:28 +03:00
2026-05-20 11:07:41 +03:00
2026-05-23 01:28:32 +03:00
2026-05-23 01:28:32 +03:00
2026-05-20 10:41:24 +03:00
2026-05-20 10:41:24 +03:00
2026-05-20 10:54:37 +03:00
2026-05-25 15:33:28 +03:00
2026-05-20 10:54:37 +03:00
2026-05-20 13:53:25 +03:00
2026-05-20 13:53:25 +03:00
2026-05-20 14:42:03 +03:00
2026-05-20 14:42:03 +03:00
2026-05-20 16:57:30 +03:00
2026-05-20 16:57:30 +03:00
2026-05-20 17:14:51 +03:00
2026-05-20 17:14:51 +03:00
2026-05-26 22:46:56 +03:00
2026-05-26 22:46:56 +03:00
2026-05-26 22:46:56 +03:00
2026-05-26 22:46:56 +03:00
2026-05-26 22:38:32 +03:00
2026-05-26 22:38:32 +03:00
2026-05-26 23:10:00 +03:00
2026-05-26 23:10:00 +03:00
2026-05-26 23:02:08 +03:00
2026-05-26 23:02:08 +03:00
2026-05-19 12:45:49 +03:00
2026-05-19 12:45:49 +03:00
2026-05-19 12:56:53 +03:00
2026-05-19 12:56:53 +03:00
2026-05-19 12:59:13 +03:00
2026-05-25 15:33:28 +03:00
2026-05-19 12:59:13 +03:00
2026-05-19 18:39:10 +03:00
2026-05-19 18:39:10 +03:00
2026-05-19 18:44:14 +03:00
2026-05-19 18:44:14 +03:00
2026-05-19 18:45:57 +03:00
2026-05-26 22:38:32 +03:00
2026-05-19 18:50:26 +03:00
2026-05-19 18:51:56 +03:00
2026-05-19 18:51:56 +03:00
2026-05-19 18:53:19 +03:00
2026-05-19 18:53:19 +03:00
2026-05-19 18:57:41 +03:00
2026-05-19 18:57:41 +03:00
2026-05-19 19:00:47 +03:00
2026-05-19 19:00:47 +03:00
2026-05-19 20:12:09 +03:00
2026-05-19 20:12:09 +03:00
2026-05-19 21:19:09 +03:00
2026-05-19 21:19:09 +03:00
2026-05-25 23:29:55 +03:00
2026-05-25 23:29:55 +03:00
2026-05-25 16:10:22 +03:00
2026-05-25 16:10:22 +03:00
2026-05-25 16:10:22 +03:00
2026-05-25 16:10:22 +03:00
2026-05-25 16:10:22 +03:00
2026-05-25 16:10:22 +03:00
2026-05-25 16:07:19 +03:00
2026-05-25 17:00:23 +03:00
2026-05-25 16:23:24 +03:00
2026-05-25 16:23:24 +03:00
2026-05-25 17:00:23 +03:00
2026-05-25 17:00:23 +03:00
2026-05-25 17:03:16 +03:00
2026-05-26 22:38:32 +03:00
2026-05-25 17:03:16 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-18 17:40:10 +03:00
2026-05-26 16:42:21 +03:00
2026-05-26 16:42:21 +03:00