Re-arming the wwstage asserttyped bail surfaced 94 nil-stamp warns in the checked corpus: let (a,b) = mod.fn() left its destructure bindings (and every use) unstamped because exprtype's N_CALL arm resolved an N_DOT callee by bare leaf — the gap its own comment flagged (#16/#17). Fix at the root: when an N_DOT callee's lhs resolves to SK_USE, resolve the result via scopelookupinmodule (mirror cstage cexpr check.c:1035 + cgen fnretlookupmod cgen.ww:2263). The N_MLET backfill then just consumes the resolved tuple, matching harec create_unpack_bindings (check.c:1354-1419), which does no callee resolution — single path, no third copy. The SK_USE gate leaves the module-leaf==type/fn-name collision cases (random/fnmatch) on bare lookup — that nominal-resolution gap is a separate fold. Beyond destructure, the root fix also closes a latent cs!=ww divergence on non-destructure cross-module same-leaf calls (a head-ordered shadow was mis-sizing the receive slot). asserttyped is ww-stage only, so the live ww-driver suite can't see this — the net is the warn count (checked 94->0, collision cases unchanged) + cs==ww .s (probe 956). Compiler binary unchanged; 990-997 byte-id hold.
1013 KiB
1013 KiB