Record Class CallDetails
The targetTypeName is the type where the method is actually defined,
which may be a parent class if the method is inherited. This enables correct
method resolution for both JVM (INVOKEVIRTUAL) and LLVM (vtable dispatch) backends.
The isVirtualCall flag indicates whether the call requires runtime
polymorphic dispatch (vtable lookup) or can use static dispatch (direct call).
Virtual calls are needed for non-final methods on non-final classes where the
runtime type may differ from the static type.
The isExplicitTraitDefaultCall flag indicates an explicit call to a trait's
default method implementation using TraitName.method() syntax. In JVM bytecode,
this requires INVOKESPECIAL to bypass virtual dispatch and call the interface's
default method directly (similar to super calls).
The isExternTarget flag indicates whether the target type is externally
implemented (no EK9 source code). For JVM this means Java classes in stdlib,
for LLVM this means C vtable and mangled functions. When true, the LLVM backend
uses mangled function names to match the C runtime; when false, it uses simple
names for EK9-generated code.
metaData is nullable, and its absence is meaningful. Purity, complexity and
side-effects are properties of the callee that the user authored - as pure, complexity
measured by phase 5 from their code. A CALL therefore has exactly two legitimate states, and no
third:
- metadata present - the callee is EK9 language surface, and every field was READ from its resolved symbol (or, for a target with no resolvable member, from the OperatorMap declaration of that operator). Phase 12 may evaluate it.
- metadata absent - the callee is compiler↔runtime PLUMBING that the lowering
invented (
_true,_ofFalse, theEk9Async/Ek9Sort/... stream helpers). It has no EK9 symbol because it is not part of the program at all, so no edit by a user or an AI can change it. Stamping a program-property field on it is a category error, and Phase 12 must never read its absence as a purity signal.
There is deliberately no "default" or "unresolved" tuple. A fabricated pure=true is worse
than no answer, because Phase 12 acts on it. See
docs/ir-and-codegen/EK9_CALL_METADATA_ROOT_C_PLAN.md and
org.ek9lang.compiler.phase7.support.CompilerPlumbingCalls.
-
Constructor Summary
ConstructorsConstructorDescriptionCallDetails(String targetObject, String targetTypeName, String methodName, List<String> parameterTypes, String returnTypeName, List<String> arguments, CallMetaDataDetails metaData, boolean isVirtualCall, boolean isTraitCall, boolean isExplicitTraitDefaultCall) Convenience constructor that defaults isExternTarget to true.CallDetails(String targetObject, String targetTypeName, String methodName, List<String> parameterTypes, String returnTypeName, List<String> arguments, CallMetaDataDetails metaData, boolean isVirtualCall, boolean isTraitCall, boolean isExplicitTraitDefaultCall, boolean isExternTarget) Creates an instance of aCallDetailsrecord class. -
Method Summary
Modifier and TypeMethodDescriptionReturns the value of theargumentsrecord component.final booleanIndicates whether some other object is "equal to" this one.final inthashCode()Returns a hash code value for this object.booleanReturns the value of theisExplicitTraitDefaultCallrecord component.booleanReturns the value of theisExternTargetrecord component.booleanReturns the value of theisTraitCallrecord component.booleanReturns the value of theisVirtualCallrecord component.metaData()Returns the value of themetaDatarecord component.Returns the value of themethodNamerecord component.Returns the value of theparameterTypesrecord component.Returns the value of thereturnTypeNamerecord component.Returns the value of thetargetObjectrecord component.Returns the value of thetargetTypeNamerecord component.toString()Returns a string representation of this record class.
-
Constructor Details
-
CallDetails
public CallDetails(String targetObject, String targetTypeName, String methodName, List<String> parameterTypes, String returnTypeName, List<String> arguments, CallMetaDataDetails metaData, boolean isVirtualCall, boolean isTraitCall, boolean isExplicitTraitDefaultCall) Convenience constructor that defaults isExternTarget to true.Defaulting to true (extern) is safe because it causes the LLVM backend to use mangled names, which is correct for built-in types. For EK9-generated types (Scenario 2/3 wrappers, user-defined types), callers should use CallDetailsBuilder or explicitly pass isExternTarget=false.
-
CallDetails
public CallDetails(String targetObject, String targetTypeName, String methodName, List<String> parameterTypes, String returnTypeName, List<String> arguments, CallMetaDataDetails metaData, boolean isVirtualCall, boolean isTraitCall, boolean isExplicitTraitDefaultCall, boolean isExternTarget) Creates an instance of aCallDetailsrecord class.- Parameters:
targetObject- the value for thetargetObjectrecord componenttargetTypeName- the value for thetargetTypeNamerecord componentmethodName- the value for themethodNamerecord componentparameterTypes- the value for theparameterTypesrecord componentreturnTypeName- the value for thereturnTypeNamerecord componentarguments- the value for theargumentsrecord componentmetaData- the value for themetaDatarecord componentisVirtualCall- the value for theisVirtualCallrecord componentisTraitCall- the value for theisTraitCallrecord componentisExplicitTraitDefaultCall- the value for theisExplicitTraitDefaultCallrecord componentisExternTarget- the value for theisExternTargetrecord component
-
-
Method Details
-
toString
-
hashCode
-
equals
Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. Reference components are compared withObjects::equals(Object,Object); primitive components are compared with thecomparemethod from their corresponding wrapper classes. -
targetObject
Returns the value of thetargetObjectrecord component.- Returns:
- the value of the
targetObjectrecord component
-
targetTypeName
Returns the value of thetargetTypeNamerecord component.- Returns:
- the value of the
targetTypeNamerecord component
-
methodName
Returns the value of themethodNamerecord component.- Returns:
- the value of the
methodNamerecord component
-
parameterTypes
-
returnTypeName
Returns the value of thereturnTypeNamerecord component.- Returns:
- the value of the
returnTypeNamerecord component
-
arguments
-
metaData
Returns the value of themetaDatarecord component.- Returns:
- the value of the
metaDatarecord component
-
isVirtualCall
public boolean isVirtualCall()Returns the value of theisVirtualCallrecord component.- Returns:
- the value of the
isVirtualCallrecord component
-
isTraitCall
public boolean isTraitCall()Returns the value of theisTraitCallrecord component.- Returns:
- the value of the
isTraitCallrecord component
-
isExplicitTraitDefaultCall
public boolean isExplicitTraitDefaultCall()Returns the value of theisExplicitTraitDefaultCallrecord component.- Returns:
- the value of the
isExplicitTraitDefaultCallrecord component
-
isExternTarget
public boolean isExternTarget()Returns the value of theisExternTargetrecord component.- Returns:
- the value of the
isExternTargetrecord component
-