Record Class ControlFlowChainDetails

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

public record ControlFlowChainDetails(String result, String chainType, GuardVariableDetails guardDetails, EvaluationVariableDetails evaluationDetails, ReturnVariableDetails returnDetails, List<ConditionCaseDetails> conditionChain, DefaultCaseDetails defaultDetails, EnumOptimizationDetails enumOptimizationInfo, TryBlockDetails tryBlockDetails, List<IRInstr> finallyBlockEvaluation, DebugInfo debugInfo, String scopeId) extends Record
Record containing all information needed to create a CONTROL_FLOW_CHAIN instruction.

This record aggregates all the necessary data for generating the unified control flow IR, supporting all variants: Question operators, if/else statements, switch statements, guarded assignments, guard variable patterns, and try/catch/finally exception handling.

Used by ControlFlowChainGenerator to coordinate the creation of CONTROL_FLOW_CHAIN instructions with consistent memory management, scope boundaries, and optimization hints.

  • Constructor Details

    • ControlFlowChainDetails

      public ControlFlowChainDetails(String result, String chainType, GuardVariableDetails guardDetails, EvaluationVariableDetails evaluationDetails, ReturnVariableDetails returnDetails, List<ConditionCaseDetails> conditionChain, DefaultCaseDetails defaultDetails, EnumOptimizationDetails enumOptimizationInfo, TryBlockDetails tryBlockDetails, List<IRInstr> finallyBlockEvaluation, DebugInfo debugInfo, String scopeId)
      Creates an instance of a ControlFlowChainDetails record class.
      Parameters:
      result - the value for the result record component
      chainType - the value for the chainType record component
      guardDetails - the value for the guardDetails record component
      evaluationDetails - the value for the evaluationDetails record component
      returnDetails - the value for the returnDetails record component
      conditionChain - the value for the conditionChain record component
      defaultDetails - the value for the defaultDetails record component
      enumOptimizationInfo - the value for the enumOptimizationInfo record component
      tryBlockDetails - the value for the tryBlockDetails record component
      finallyBlockEvaluation - the value for the finallyBlockEvaluation record component
      debugInfo - the value for the debugInfo record component
      scopeId - the value for the scopeId record component
  • Method Details

    • createQuestionOperator

      public static ControlFlowChainDetails createQuestionOperator(String result, List<ConditionCaseDetails> conditionChain, List<IRInstr> defaultBodyEvaluation, String defaultResult, DebugInfo debugInfo, String scopeId)
      Create details for a Question operator (?). STACK-BASED: scopeId parameter extracted from stack context in generator.
    • createNullCoalescing

      public static ControlFlowChainDetails createNullCoalescing(String result, List<ConditionCaseDetails> conditionChain, List<IRInstr> defaultBodyEvaluation, String defaultResult, DebugInfo debugInfo, String scopeId)
      Create details for a Null Coalescing operator (??). STACK-BASED: scopeId parameter extracted from stack context in generator.
    • createElvisCoalescing

      public static ControlFlowChainDetails createElvisCoalescing(String result, List<ConditionCaseDetails> conditionChain, List<IRInstr> defaultBodyEvaluation, String defaultResult, DebugInfo debugInfo, String scopeId)
      Create details for an Elvis Coalescing operator (:?). Returns LHS if both memory allocated AND set, otherwise evaluates and returns RHS. STACK-BASED: scopeId parameter extracted from stack context in generator.
    • createComparisonCoalescing

      public static ControlFlowChainDetails createComparisonCoalescing(String result, List<ConditionCaseDetails> conditionChain, List<IRInstr> defaultBodyEvaluation, String defaultResult, DebugInfo debugInfo, String scopeId, String chainType)
      Create details for comparison coalescing operators (<?, >?, <=?, >=?). Returns LHS if both operands valid and comparison true, else gracefully handles null/unset. STACK-BASED: scopeId parameter extracted from stack context in generator.
    • createIfElse

      public static ControlFlowChainDetails createIfElse(String result, List<ConditionCaseDetails> conditionChain, List<IRInstr> defaultBodyEvaluation, String defaultResult, DebugInfo debugInfo, String scopeId)
      Create details for an if/else statement. STACK-BASED: scopeId parameter extracted from stack context in generator.
    • createIfElseWithGuards

      public static ControlFlowChainDetails createIfElseWithGuards(String result, GuardVariableDetails guardDetails, List<ConditionCaseDetails> conditionChain, List<IRInstr> defaultBodyEvaluation, String defaultResult, DebugInfo debugInfo, String scopeId)
      Create details for an if/else statement with guard variables. STACK-BASED: scopeId parameter extracted from stack context in generator.
    • createWhileLoop

      public static ControlFlowChainDetails createWhileLoop(List<ConditionCaseDetails> conditionChain, DebugInfo debugInfo, String scopeId)
      Create details for a while loop (statement form). STACK-BASED: scopeId parameter extracted from stack context in generator.
      Parameters:
      conditionChain - Single ConditionCaseDetails with loop condition and body
      debugInfo - Debug information
      scopeId - Condition scope ID (_scope_2) where temps are registered
      Returns:
      ControlFlowChainDetails configured for while loop
    • createDoWhileLoop

      public static ControlFlowChainDetails createDoWhileLoop(List<ConditionCaseDetails> conditionChain, DebugInfo debugInfo, String scopeId)
      Create details for a do-while loop (statement form). STACK-BASED: scopeId parameter extracted from stack context in generator.

      Key difference from while loop: Body executes FIRST (at least once), then condition is evaluated. Backend generates IFNE (jump if true) instead of IFEQ (jump if false).

      Parameters:
      conditionChain - Single ConditionCaseDetails with loop body and condition
      debugInfo - Debug information
      scopeId - Whole loop scope ID (_scope_2) for loop control
      Returns:
      ControlFlowChainDetails configured for do-while loop
    • createSwitch

      public static ControlFlowChainDetails createSwitch(String result, String evaluationVariable, String evaluationVariableType, List<IRInstr> evaluationVariableSetup, String returnVariable, String returnVariableType, List<IRInstr> returnVariableSetup, List<ConditionCaseDetails> conditionChain, List<IRInstr> defaultBodyEvaluation, String defaultResult, DebugInfo debugInfo, String scopeId)
      Create details for a general switch statement. STACK-BASED: scopeId parameter extracted from stack context in generator.
    • createTryCatchFinally

      public static ControlFlowChainDetails createTryCatchFinally(String result, GuardVariableDetails guardDetails, ReturnVariableDetails returnDetails, TryBlockDetails tryBlockDetails, List<ConditionCaseDetails> catchHandlers, List<IRInstr> finallyBlockEvaluation, DebugInfo debugInfo, String scopeId)
      Create details for a try/catch/finally construct. STACK-BASED: scopeId parameter extracted from stack context in generator.

      Try/catch/finally uses CONTROL_FLOW_CHAIN with exception handlers as condition cases. Each catch block is represented as a ConditionCaseDetails with EXCEPTION_HANDLER type. The finally block (if present) executes after try/catch completion.

      Parameters:
      result - Result variable for expression forms (null for statement forms)
      guardDetails - Guard variable details for pre-flow (try var <- getValue())
      returnDetails - Return variable details for expression forms
      tryBlockDetails - Try block scope and body evaluation
      catchHandlers - List of catch handlers (each is a ConditionCaseDetails with EXCEPTION_HANDLER type)
      finallyBlockEvaluation - Finally block instructions (empty if no finally)
      debugInfo - Debug information
      scopeId - Outer scope ID for the entire try/catch/finally construct
      Returns:
      ControlFlowChainDetails configured for try/catch/finally
    • hasEnumOptimization

      public boolean hasEnumOptimization()
      Check if this switch has enum optimization information.
    • getScopeId

      public String getScopeId()
      Get the scope ID extracted from stack context at Details creation time. STACK-BASED: scopeId comes from IRGenerationContext.currentScopeId() where this object is created.
    • isQuestionOperator

      public boolean isQuestionOperator()
      Check if this is a Question operator.
    • isIfElse

      public boolean isIfElse()
      Check if this is an if/else construct.
    • isSwitch

      public boolean isSwitch()
      Check if this is a switch construct.
    • toString

      @Nonnull public String toString()
      IR-optimized toString following EK9's bracket-only, no-indentation format. Uses StringBuilder for performance and delegates to Details records for their sections.
      Specified by:
      toString in class Record
    • guardVariables

      public List<String> guardVariables()
      Get guard variables list.
    • guardScopeSetup

      public List<IRInstr> guardScopeSetup()
      Get guard scope setup instructions.
    • guardScopeId

      public String guardScopeId()
      Get guard scope ID.
    • conditionScopeId

      public String conditionScopeId()
      Get condition scope ID.
    • evaluationVariable

      public String evaluationVariable()
      Get evaluation variable.
    • evaluationVariableType

      public String evaluationVariableType()
      Get evaluation variable type.
    • evaluationVariableSetup

      public List<IRInstr> evaluationVariableSetup()
      Get evaluation variable setup instructions.
    • returnVariable

      public String returnVariable()
      Get return variable.
    • returnVariableType

      public String returnVariableType()
      Get return variable type.
    • returnVariableSetup

      public List<IRInstr> returnVariableSetup()
      Get return variable setup instructions.
    • defaultBodyEvaluation

      public List<IRInstr> defaultBodyEvaluation()
      Get default body evaluation instructions.
    • defaultResult

      public String defaultResult()
      Get default result variable.
    • hasGuardVariables

      public boolean hasGuardVariables()
      Check if this construct uses guard variables.
    • hasGuardScope

      public boolean hasGuardScope()
      Check if this construct has a guard scope.
    • hasSharedConditionScope

      public boolean hasSharedConditionScope()
      Check if this construct has a shared condition scope.
    • hasEvaluationVariable

      public boolean hasEvaluationVariable()
      Check if this construct has an evaluation variable.
    • hasReturnVariable

      public boolean hasReturnVariable()
      Check if this construct has a return variable.
    • hasDefaultCase

      public boolean hasDefaultCase()
      Check if this construct has a default case.
    • isGuardEnabled

      public boolean isGuardEnabled()
      Check if this is a guard-enabled construct.
    • hasTryBlock

      public boolean hasTryBlock()
      Check if this construct has a try block.
    • tryScopeId

      public String tryScopeId()
      Get try scope ID.
    • tryBodyEvaluation

      public List<IRInstr> tryBodyEvaluation()
      Get try body evaluation instructions.
    • tryBodyResult

      public String tryBodyResult()
      Get try body result variable.
    • hasFinallyBlock

      public boolean hasFinallyBlock()
      Check if this construct has a finally block.
    • 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. All components in this record class are compared with Objects::equals(Object,Object).
      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.
    • result

      public String result()
      Returns the value of the result record component.
      Returns:
      the value of the result record component
    • chainType

      public String chainType()
      Returns the value of the chainType record component.
      Returns:
      the value of the chainType record component
    • guardDetails

      public GuardVariableDetails guardDetails()
      Returns the value of the guardDetails record component.
      Returns:
      the value of the guardDetails record component
    • evaluationDetails

      public EvaluationVariableDetails evaluationDetails()
      Returns the value of the evaluationDetails record component.
      Returns:
      the value of the evaluationDetails record component
    • returnDetails

      public ReturnVariableDetails returnDetails()
      Returns the value of the returnDetails record component.
      Returns:
      the value of the returnDetails record component
    • conditionChain

      public List<ConditionCaseDetails> conditionChain()
      Returns the value of the conditionChain record component.
      Returns:
      the value of the conditionChain record component
    • defaultDetails

      public DefaultCaseDetails defaultDetails()
      Returns the value of the defaultDetails record component.
      Returns:
      the value of the defaultDetails record component
    • enumOptimizationInfo

      public EnumOptimizationDetails enumOptimizationInfo()
      Returns the value of the enumOptimizationInfo record component.
      Returns:
      the value of the enumOptimizationInfo record component
    • tryBlockDetails

      public TryBlockDetails tryBlockDetails()
      Returns the value of the tryBlockDetails record component.
      Returns:
      the value of the tryBlockDetails record component
    • finallyBlockEvaluation

      public List<IRInstr> finallyBlockEvaluation()
      Returns the value of the finallyBlockEvaluation record component.
      Returns:
      the value of the finallyBlockEvaluation record component
    • debugInfo

      public DebugInfo debugInfo()
      Returns the value of the debugInfo record component.
      Returns:
      the value of the debugInfo record component
    • scopeId

      public String scopeId()
      Returns the value of the scopeId record component.
      Returns:
      the value of the scopeId record component