Class GuardedAssignmentAsmGenerator


final class GuardedAssignmentAsmGenerator extends AbstractControlFlowAsmGenerator
Specialized generator for EK9 guarded assignment (:=?). Handles CONTROL_FLOW_CHAIN with chain_type: "GUARDED_ASSIGNMENT".

EK9 Guarded Assignment Pattern: variable :=? value

  • Assigns value to variable only if variable is null or not set
  • Prevents overwriting already-initialized variables
  • Useful for default value initialization

Current Status: NOT YET IMPLEMENTED (throws CompilerException).

Implementation Plan (after IR generator is finalized):

  • Evaluate condition (variable? returns false if null/unset)
  • If condition false: execute assignment
  • If condition true: skip assignment
  • Follow pattern similar to QuestionOperatorAsmGenerator

Blocked By: IR generation for GUARDED_ASSIGNMENT must be finalized and tested first. The IR generator (ControlFlowChainGenerator.generateGuardedAssignment) exists but bytecode generation is deferred pending complete testing of question operator foundation.

  • Constructor Details

  • Method Details

    • generate

      public void generate(ControlFlowChainInstr instr)
      Generate bytecode for guarded assignment.

      EK9 Pattern: variable :=? value

      Semantic Flow:

      1. Check if target variable is unset (null or _isSet() returns false)
      2. If UNSET: evaluate RHS expression and assign to target
      3. If SET: skip assignment (fall through to end)

      Stack Frame Invariant: Pre-condition: stack is empty Post-condition: stack is empty (assignment stored in variable)

      Parameters:
      instr - CONTROL_FLOW_CHAIN instruction with GUARDED_ASSIGNMENT type