Class BindingRecurse
java.lang.Object
org.jfuncmachine.compiler.model.SourceElement
org.jfuncmachine.compiler.model.expr.Expression
org.jfuncmachine.compiler.model.expr.BindingRecurse
Loops back to the beginning of the named binding, updating each of the binding variables to have
new values.
There are two ways to provide values for the recursion:
- Provide an expression for each variable defined in the binding in the same order as they are defined in the binding.
- Provide a list of binding pairs containing the variables to be updates and their new values. This can be handy if the binding has many variables and only a few need to be updated when recursing.
-
Field Summary
FieldsModifier and TypeFieldDescriptionfinal Binding.BindingPair[]The bindings specifying which values in the binding should be updatedfinal TypeThe return type of the binding being recursed tofinal StringThe name of the binding to recurse back tofinal Expression[]The expressions for each binding variable in the binding being recursed toFields inherited from class org.jfuncmachine.compiler.model.SourceElement
filename, lineNumber -
Constructor Summary
ConstructorsConstructorDescriptionBindingRecurse(String name, Type bindingType, Binding.BindingPair[] bindingPairs) Create a binding recurse expression providing binding pairs for the variables that should be updatedBindingRecurse(String name, Type bindingType, Binding.BindingPair[] bindingPairs, String filename, int lineNumber) Create a binding recurse expression providing binding pairs for the variables that should be updatedBindingRecurse(String name, Type bindingType, Expression[] nextValues) Create a binding recurse expression providing new values for each bound variableBindingRecurse(String name, Type bindingType, Expression[] nextValues, String filename, int lineNumber) Create a binding recurse expression providing new values for each bound variable -
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
-
name
The name of the binding to recurse back to -
bindingType
The return type of the binding being recursed to -
nextValues
The expressions for each binding variable in the binding being recursed to -
bindingPairs
The bindings specifying which values in the binding should be updated
-
-
Constructor Details
-
BindingRecurse
Create a binding recurse expression providing new values for each bound variable- Parameters:
name- The name of the binding to recurse tobindingType- The return type of the binding being recursed tonextValues- The new values for each of the binding's variables
-
BindingRecurse
public BindingRecurse(String name, Type bindingType, Expression[] nextValues, String filename, int lineNumber) Create a binding recurse expression providing new values for each bound variable- Parameters:
name- The name of the binding to recurse tobindingType- The return type of the binding being recursed tonextValues- The new values for each of the binding's variablesfilename- The source filename this expression is associated withlineNumber- The source line number this expression is associated with
-
BindingRecurse
Create a binding recurse expression providing binding pairs for the variables that should be updated- Parameters:
name- The name of the binding to recurse tobindingType- The return type of the binding being recursed tobindingPairs- The binding pairs containing the new values for some variables in the binding.
-
BindingRecurse
public BindingRecurse(String name, Type bindingType, Binding.BindingPair[] bindingPairs, String filename, int lineNumber) Create a binding recurse expression providing binding pairs for the variables that should be updated- Parameters:
name- The name of the binding to recurse tobindingType- The return type of the binding being recursed tobindingPairs- The binding pairs containing the new values for some variables in the binding.filename- The source filename this expression is associated withlineNumber- The source line number this expression is associated with
-
-
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
-