Class EnumSwitch


public class EnumSwitch extends Expression
A switch expression that matches on enums Each case contains the name of an enum value for the enum being matched. If the name of a EnumSwitchCase matches the enum value returned by expr, then it executes the expression associated with that case. Otherwise it executes the default case. This expression relies on a feature that was added as a preview feature in Java 17, and became a full part of the JVM in Java 21. JFuncMachine will, by default, generate equivalent if statements for the switch if generating for Java 20 or lower, although if the usePreviewFeatures generator option is set, it will only generate the if version for Java 16 or below.
  • Field Details

    • expr

      public final Expression expr
      The expression generating the value to be switched on
    • cases

      public final EnumSwitchCase[] cases
      A case containing a numeric value and an expression to be executed if the switch expression equals the case value
    • defaultCase

      public final Expression defaultCase
      The expression to be executed if none of the cases match the switch value
  • Constructor Details

    • EnumSwitch

      public EnumSwitch(Expression expr, EnumSwitchCase[] cases, Expression defaultCase)
      Create a Switch expression
      Parameters:
      expr - The expression generating the value to be switched on
      cases - A case containing a numeric value and an expression to be executed if the switch expression equals the case value
      defaultCase - The expression to be executed if none of the cases match the switch value
    • EnumSwitch

      public EnumSwitch(Expression expr, EnumSwitchCase[] cases, Expression defaultCase, String filename, int lineNumber)
      Create a Switch expression
      Parameters:
      expr - The expression generating the value to be switched on
      cases - A case containing a numeric value and an expression to be executed if the switch expression equals the case value
      defaultCase - The expression to be executed if none of the cases match the switch value
      filename - The name of the source file where this switch is defined
      lineNumber - The line number in the source file where this switch starts
  • Method Details

    • getType

      public Type getType()
      Description copied from class: Expression
      Get the type returned by this expression
      Specified by:
      getType in class Expression
      Returns:
      The type of this expression
    • reset

      public void reset()
      Description copied from class: Expression
      Resets any labels in expressions so that the method can be regenerated
      Overrides:
      reset in class Expression
    • findCaptured

      public void findCaptured(Environment env)
      Description copied from class: Expression
      Search for local variables that would be captured by a lambda. Each expression has its own implementation of this, because each subexpression must be searched.
      Specified by:
      findCaptured in class Expression
      Parameters:
      env - The environment chain to search
    • convertToFullTailCalls

      public Expression convertToFullTailCalls(boolean inTailPosition)
      Description copied from class: Expression
      Converts this expression to one that is compatible with full tail call optimization
      Specified by:
      convertToFullTailCalls in class Expression
      Parameters:
      inTailPosition - True if this expression is called from the tail position
      Returns:
      A version of this expression whose types are compatible with full tail call optimization
    • generate

      public void generate(ClassGenerator generator, Environment env, boolean inTailPosition)
      Description copied from class: Expression
      Generate the bytecode for this expression
      Specified by:
      generate in class Expression
      Parameters:
      generator - The generator for generating instructions and additional declarations
      env - The environment containing the local variables currently visible to this expression
      inTailPosition - True if this expression is being generated from the tail position of the method