Class FunctionImplementationLinker
java.lang.Object
org.ek9lang.compiler.phase5.callgraph.FunctionImplementationLinker
Links an abstract function to every concrete function that implements it, so whatever reaches the abstract one -
a call through a variable of its type, or a concurrent-entry-point mark on it - reaches the bodies that can run. The
function twin of
PolymorphicOverrideLinker.
Why this is needed. An async stage marks the stream's ELEMENT type as the concurrent entry point.
With one worker function in cat [worker] that type is the worker itself; with two different workers it is
their common abstract supertype (task), which has no body and, until this edge, no successor - so neither
worker's body was checked by E08251 and two workers writing one captured value compiled clean (2026-10-31,
cycle-collector-evidence/2026-10-31-e08251-inconsistency.md).
Every implementation, not RTA. A named function always exists (it is never "allocated"), and a dynamic function exists where it is written; so, unlike an override on a class nothing constructs, no implementation can be left out as unreachable. Fail closed.
-
Constructor Summary
ConstructorsConstructorDescriptionFunctionImplementationLinker(CallGraph callGraph, ConcreteSubtypeFinder subtypeFinder) -
Method Summary
Modifier and TypeMethodDescriptionvoidlink()Add a polymorphic edge from each abstract function to each concrete function that implements it.
-
Constructor Details
-
FunctionImplementationLinker
-
-
Method Details
-
link
public void link()Add a polymorphic edge from each abstract function to each concrete function that implements it.
-