Attempt-3 fix for the F2 review finding. After resolveBareCallee picks a shadowed same-name author at a normal call site, the call's PARAMETER TARGET TYPING still ran first-wins: resolveCallParamTypes' bare-identifier branch resolved param types via resolveFuncByName(name) / fn_ast_map.get(name) — both keyed by name, not by the resolved author. Because that runs in lowerCall BEFORE the resolveBareCallee routing, a shadow author whose parameter TYPE differs from the first-wins winner had its args lowered against the WINNER's signature (no implicit address-of for a *T param typed as T), then the correctly-resolved shadow FuncId was called with the mis-typed arg — a value bit-cast to a pointer → segfault. The bare-identifier branch now routes through the SAME resolveBareCallee resolver one layer earlier and takes the param target types from the RESOLVED author's lowered func.params (userParamTypes). Only the .func (single resolved author) outcome reroutes; .ambiguous keeps the existing loud call-site diagnostic and .none keeps the first-wins fallback, so single-author / local / std / qualified resolution is byte-for-byte unchanged. Method-call / namespace / foreign / generic branches of resolveCallParamTypes are untouched. The resolver is idempotent (bareAuthorFuncId guards body lowering via lowered_fids) so the extra call from param-type resolution is safe; lowerFunctionBodyInto already saves/restores all lowering state for mid-call reentry. Regression: examples/0728-modules-flat-same-name-paramtype — two flat file imports each author `apply` with a divergent param type (a.sx value `s64` winner, b.sx pointer `*s64` shadow). b.sx's from_b passes a value local to its pointer-param author via implicit address-of (×2 → 42); a.sx's from_a (own == winner) is unchanged (value + 1 → 11). Fails on the pre-fix typing (segfault at from_b); passes after. Gate (worktree): zig build, zig build test (400/400), bash tests/run_examples.sh (464 passed / 0 failed) all green. Matrix 0722-0727 unchanged. Guardrail: m3te builds via the worktree binary (sx build --target ios-sim, exit 0) — single- author / local resolution intact. Default-arg / closure / UFCS / comptime SITES remain first-wins (fix-0102d).
6 lines
334 B
Plaintext
6 lines
334 B
Plaintext
// a.sx authors `apply` taking a VALUE. It is imported first, so it is the
|
|
// first-wins merge winner. `from_a` calls `apply` bare on a value local — its
|
|
// own author wins (own == winner → existing path, byte-for-byte unchanged).
|
|
apply :: (x: s64) -> s64 { return x + 1; }
|
|
from_a :: () -> s64 { v : s64 = 10; return apply(v); }
|