The bare-fn-as-value site (func_ref / fn-ptr / closure coercion) eagerly lazily-lowered the name-keyed first-wins WINNER before the resolveBareCallee block could reroute a genuine flat same-name collision to its per-source author. Taking a SHADOW author's fn value therefore lowered (and could mis-diagnose) the unused winner's body. Move lazyLowerFunction INSIDE blk_fv onto the `.none` fallback only, mirroring the closure(fn) and free-function UFCS sites: on `.func` use the resolved author's FuncId and never touch the winner; on `.none` fall through to lazy-lower + resolveFuncByName the winner. Regression: examples/0735-modules-flat-same-name-fn-value-winner — the first-wins winner's body is independently broken and never used; a shadow taken as a function value binds the shadow and runs (exit 0) while the winner is not lowered. Fails-before (unresolved symbol in the winner), passes-after.
8 lines
261 B
Plaintext
8 lines
261 B
Plaintext
// b.sx authors its OWN `pick` (returns 2) and takes it as a function VALUE. The
|
|
// value binds b.pick (own-author wins), never the broken winner from a.sx.
|
|
pick :: () -> s64 { return 2; }
|
|
from_b_value :: () -> s64 {
|
|
g : () -> s64 = pick;
|
|
return g();
|
|
}
|