fix(stdlib/E4): kind-aware type-fn head gate (non-fn must not vouch)
The type-fn head visibility check (`headFnLeak`) used the module-scope NAME predicate `isNameVisible`, so a same-name 1-hop NON-function (a value const `Make :: 123`) reported the name "visible" and let the global `fn_ast_map` type-fn — whose real author is 2 flat hops away — silently instantiate. `size_of(Make(s64))` printed 8 at exit 0 instead of a visibility diagnostic. Decide visibility from the ELIGIBLE FUNCTION authors directly reachable from the use site (`flatFnAuthorVisible`, mirroring `flatFnAuthorAmbiguous`'s fn-only author view): visible iff the own author or a 1-hop flat-import author is a `fn_decl`. A non-function does not vouch. Guarded to fall open when the import facts aren't wired (comptime / directory imports), mirroring `headTypeGate`. Own / scope-local / 1-hop / directly-imported type-fn heads still resolve; 0769 ambiguity unchanged. Regression: examples/0770-modules-type-fn-head-non-transitive (main → b [`Make :: 123` + flat-imports c] → c [`Make :: ($T) -> Type`]); the bare `Make(s64)` head emits "type 'Make' is not visible", exit 1.
This commit is contained in:
@@ -0,0 +1 @@
|
||||
1
|
||||
@@ -0,0 +1,5 @@
|
||||
error: type 'Make' is not visible; #import the module that declares it
|
||||
--> examples/0770-modules-type-fn-head-non-transitive.sx:21:32
|
||||
|
|
||||
21 | print("size={}\n", size_of(Make(s64)));
|
||||
| ^^^^
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
Reference in New Issue
Block a user