Record Class CallDetails

java.lang.Object
java.lang.Record
org.ek9lang.compiler.ir.data.CallDetails

public record CallDetails(String targetObject, String targetTypeName, String methodName, List<String> parameterTypes, String returnTypeName, List<String> arguments, CallMetaDataDetails metaData, boolean isVirtualCall, boolean isTraitCall, boolean isExplicitTraitDefaultCall) extends Record
Used with CallInstr, holds all the necessary details to make a call. Includes metadata for backend optimization.

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).

  • 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)
      Creates an instance of a CallDetails record class.
      Parameters:
      targetObject - the value for the targetObject record component
      targetTypeName - the value for the targetTypeName record component
      methodName - the value for the methodName record component
      parameterTypes - the value for the parameterTypes record component
      returnTypeName - the value for the returnTypeName record component
      arguments - the value for the arguments record component
      metaData - the value for the metaData record component
      isVirtualCall - the value for the isVirtualCall record component
      isTraitCall - the value for the isTraitCall record component
      isExplicitTraitDefaultCall - the value for the isExplicitTraitDefaultCall record component
  • Method Details

    • toString

      @Nonnull public String toString()
      Returns a string representation of this record class. The representation contains the name of the class, followed by the name and value of each of the record components.
      Specified by:
      toString in class Record
      Returns:
      a string representation of this object
    • hashCode

      public final int hashCode()
      Returns a hash code value for this object. The value is derived from the hash code of each of the record components.
      Specified by:
      hashCode in class Record
      Returns:
      a hash code value for this object
    • equals

      public final boolean equals(Object o)
      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 with Objects::equals(Object,Object); primitive components are compared with the compare method from their corresponding wrapper classes.
      Specified by:
      equals in class Record
      Parameters:
      o - the object with which to compare
      Returns:
      true if this object is the same as the o argument; false otherwise.
    • targetObject

      public String targetObject()
      Returns the value of the targetObject record component.
      Returns:
      the value of the targetObject record component
    • targetTypeName

      public String targetTypeName()
      Returns the value of the targetTypeName record component.
      Returns:
      the value of the targetTypeName record component
    • methodName

      public String methodName()
      Returns the value of the methodName record component.
      Returns:
      the value of the methodName record component
    • parameterTypes

      public List<String> parameterTypes()
      Returns the value of the parameterTypes record component.
      Returns:
      the value of the parameterTypes record component
    • returnTypeName

      public String returnTypeName()
      Returns the value of the returnTypeName record component.
      Returns:
      the value of the returnTypeName record component
    • arguments

      public List<String> arguments()
      Returns the value of the arguments record component.
      Returns:
      the value of the arguments record component
    • metaData

      public CallMetaDataDetails metaData()
      Returns the value of the metaData record component.
      Returns:
      the value of the metaData record component
    • isVirtualCall

      public boolean isVirtualCall()
      Returns the value of the isVirtualCall record component.
      Returns:
      the value of the isVirtualCall record component
    • isTraitCall

      public boolean isTraitCall()
      Returns the value of the isTraitCall record component.
      Returns:
      the value of the isTraitCall record component
    • isExplicitTraitDefaultCall

      public boolean isExplicitTraitDefaultCall()
      Returns the value of the isExplicitTraitDefaultCall record component.
      Returns:
      the value of the isExplicitTraitDefaultCall record component