Class IntSwitch
java.lang.Object
org.jfuncmachine.compiler.model.SourceElement
org.jfuncmachine.compiler.model.expr.Expression
org.jfuncmachine.compiler.model.expr.IntSwitch
A switch expression whose cases are all integers
This class maps directly to either Java's tableswitch or lookupswitch instructions,
meaning that the switch items must be integers. Other switches must currently be
implemented with if statements, although switches on classes and enumerations will
be supported by JFuncMachine eventually.
A table switch is a simple jump table that is good when the case values are roughly
consecutive. A lookup switch performs a binary search on a sorted array of case values
to determine which case value to execute.
-
Field Summary
FieldsModifier and TypeFieldDescriptionfinal IntSwitchCase[]A case containing a numeric value and an expression to be executed if the switch expression equals the case valuefinal ExpressionThe expression to be executed if none of the cases match the switch valuefinal ExpressionThe expression generating the value to be switched onfinal intThe maximum number of empty spaces between switch values allowed before the switch is converted to a lookup switch.Fields inherited from class org.jfuncmachine.compiler.model.SourceElement
filename, lineNumber -
Constructor Summary
ConstructorsConstructorDescriptionIntSwitch(Expression expr, IntSwitchCase[] cases, Expression defaultCase) Create a Switch expressionIntSwitch(Expression expr, IntSwitchCase[] cases, Expression defaultCase, int gapThreshold) Create a Switch expressionIntSwitch(Expression expr, IntSwitchCase[] cases, Expression defaultCase, int gapThreshold, String filename, int lineNumber) Create a Switch expressionIntSwitch(Expression expr, IntSwitchCase[] cases, Expression defaultCase, String filename, int lineNumber) Create a Switch expression -
Method Summary
Modifier and TypeMethodDescriptionconvertToFullTailCalls(boolean inTailPosition) Converts this expression to one that is compatible with full tail call optimizationvoidfindCaptured(Environment env) Search for local variables that would be captured by a lambda.voidgenerate(ClassGenerator generator, Environment env, boolean inTailPosition) Generate the bytecode for this expressiongetType()Get the type returned by this expressionvoidreset()Resets any labels in expressions so that the method can be regeneratedMethods inherited from class org.jfuncmachine.compiler.model.SourceElement
generateException
-
Field Details
-
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 -
gapThreshold
public final int gapThresholdThe maximum number of empty spaces between switch values allowed before the switch is converted to a lookup switch.
-
-
Constructor Details
-
IntSwitch
Create a Switch expression- Parameters:
expr- The expression generating the value to be switched oncases- A case containing a numeric value and an expression to be executed if the switch expression equals the case valuedefaultCase- The expression to be executed if none of the cases match the switch value
-
IntSwitch
public IntSwitch(Expression expr, IntSwitchCase[] cases, Expression defaultCase, String filename, int lineNumber) Create a Switch expression- Parameters:
expr- The expression generating the value to be switched oncases- A case containing a numeric value and an expression to be executed if the switch expression equals the case valuedefaultCase- The expression to be executed if none of the cases match the switch valuefilename- The name of the source file where this switch is definedlineNumber- The line number in the source file where this switch starts
-
IntSwitch
Create a Switch expression- Parameters:
expr- The expression generating the value to be switched oncases- A case containing a numeric value and an expression to be executed if the switch expression equals the case valuedefaultCase- The expression to be executed if none of the cases match the switch valuegapThreshold- The maximum number of empty spaces between switch values allowed before the switch is converted to a lookup switch.
-
IntSwitch
public IntSwitch(Expression expr, IntSwitchCase[] cases, Expression defaultCase, int gapThreshold, String filename, int lineNumber) Create a Switch expression- Parameters:
expr- The expression generating the value to be switched oncases- A case containing a numeric value and an expression to be executed if the switch expression equals the case valuedefaultCase- The expression to be executed if none of the cases match the switch valuegapThreshold- The maximum number of empty spaces between switch values allowed before the switch is converted to a lookup switch.filename- The name of the source file where this switch is definedlineNumber- The line number in the source file where this switch starts
-
-
Method Details
-
getType
Description copied from class:ExpressionGet the type returned by this expression- Specified by:
getTypein classExpression- Returns:
- The type of this expression
-
reset
public void reset()Description copied from class:ExpressionResets any labels in expressions so that the method can be regenerated- Overrides:
resetin classExpression
-
findCaptured
Description copied from class:ExpressionSearch 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:
findCapturedin classExpression- Parameters:
env- The environment chain to search
-
convertToFullTailCalls
Description copied from class:ExpressionConverts this expression to one that is compatible with full tail call optimization- Specified by:
convertToFullTailCallsin classExpression- 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
Description copied from class:ExpressionGenerate the bytecode for this expression- Specified by:
generatein classExpression- Parameters:
generator- The generator for generating instructions and additional declarationsenv- The environment containing the local variables currently visible to this expressioninTailPosition- True if this expression is being generated from the tail position of the method
-