Class CallTargetResolution
java.lang.Object
org.ek9lang.compiler.phase7.calls.CallTargetResolution
THE single source of truth for the descriptor OWNER and dispatch of a resolved call - the signpost of the family;
hold its parts, one question each, never re-derive them:
DefiningType- the type where a resolved method's body is actually emitted (its "defining type"), the descriptor owner.IsVirtualCall- the virtual-dispatch decision of a resolved call.IsOpenAggregate- is a type open for extension (traits and abstract functions always are).IsVirtualForSynthesisedCallee- the dispatch flag of a call the compiler synthesised.IsNonDispatchableLifecycleMethod- the constructor,_i_initand_c_init, never dispatched.
CallDetailsBuilder) and the chained object-access path
(ChainedCallDispatch) so the two never re-derive - and drift on - the CALL descriptor owner. See
docs/ir-and-codegen/EK9_UNIFIED_CALL_TARGET_RESOLUTION_DESIGN.md.
Invariant (enforced by the JVM back-end): the descriptor owner type and isTraitCall move
TOGETHER - INVOKEINTERFACE iff the owner is an interface (trait / Any) - so a caller derives
BOTH from the SAME DefiningType: targetType = definingType and
isTraitCall = TraitCall.requiredFor(definingType) (never one from the defining type and the
other from the static receiver).
-
Method Summary