Class StackSpiller
java.lang.Object
com.strobel.expressions.StackSpiller
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate final classRewrites child expressions, spilling them into temps if needed.private static classprivate static enum(package private) static final classA special subtype of BlockExpression that indicates to the compiler that this block is a spilled expression and should not allow jumps in.private static enum/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////private static class -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate StackSpiller.RewriteActionLambda rewrite result.private final StackSpiller.StackInitial stack state.private final StackSpiller.TempMaker///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) static <T> LambdaExpression<T> analyzeLambda(LambdaExpression<T> lambda) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////private static <T> T[]clone(ReadOnlyList<T> original, int max) private static <T extends Expression>
T[]clone(ExpressionList<T> original, int max) private voidfree(int mark) private static ExpressionmakeBlock(ExpressionList<? extends Expression> expressions) Creates a special block that is marked as not allowing jumps in.private ParameterExpressionprivate intmark()(package private) <T> LambdaExpression<T> rewrite(LambdaExpression<T> lambda) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////private StackSpiller.ResultrewriteAssignBinaryExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteBinaryExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteBlockExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteConditionalExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteExpression(Expression node, StackSpiller.Stack stack) private StackSpiller.ResultrewriteExpressionFreeTemps(Expression expression, StackSpiller.Stack stack) private StackSpiller.ResultrewriteExtensionAssignment(BinaryExpression node, StackSpiller.Stack stack) private StackSpiller.ResultrewriteExtensionExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteGotoExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteInvocationExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteLabelExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteLambdaExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteLogicalBinaryExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteLoopExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteMemberAssignment(BinaryExpression node, StackSpiller.Stack stack) private StackSpiller.ResultrewriteMemberExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteMethodCallExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteNewArrayExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteNewExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteReducibleExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteSwitchExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteThrowUnaryExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteTryExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteTypeBinaryExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteUnaryExpression(Expression expr, StackSpiller.Stack stack) private StackSpiller.ResultrewriteVariableAssignment(BinaryExpression node, StackSpiller.Stack stack) private ParameterExpressiontoTemp(Expression expression, StrongBox<Expression> save) private static voidverifyRewrite(StackSpiller.Result result, Expression node) private void
-
Field Details
-
_tm
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -
_startingStack
Initial stack state. Normally empty, but when inlining the lambda we might have a non-empty starting stack state. -
_lambdaRewrite
Lambda rewrite result. We need this for inlined lambdas to figure out whether we need to guarantee it an empty stack.
-
-
Constructor Details
-
StackSpiller
-
-
Method Details
-
verifyTemps
private void verifyTemps() -
makeTemp
-
mark
private int mark() -
free
private void free(int mark) -
toTemp
-
makeBlock
Creates a special block that is marked as not allowing jumps in. This should not be used for rewriting BlockExpression itself, or anything else that supports jumping.- Parameters:
expressions- the expressions within the block- Returns:
- the new block
-
verifyRewrite
-
clone
-
clone
-
analyzeLambda
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -
rewrite
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -
rewriteExpressionFreeTemps
private StackSpiller.Result rewriteExpressionFreeTemps(Expression expression, StackSpiller.Stack stack) -
rewriteExpression
-
rewriteReducibleExpression
-
rewriteTryExpression
-
rewriteThrowUnaryExpression
-
rewriteSwitchExpression
-
rewriteLoopExpression
-
rewriteLabelExpression
-
rewriteGotoExpression
-
rewriteExtensionExpression
-
rewriteBlockExpression
-
rewriteAssignBinaryExpression
private StackSpiller.Result rewriteAssignBinaryExpression(Expression expr, StackSpiller.Stack stack) -
rewriteExtensionAssignment
private StackSpiller.Result rewriteExtensionAssignment(BinaryExpression node, StackSpiller.Stack stack) -
rewriteVariableAssignment
private StackSpiller.Result rewriteVariableAssignment(BinaryExpression node, StackSpiller.Stack stack) -
rewriteMemberAssignment
private StackSpiller.Result rewriteMemberAssignment(BinaryExpression node, StackSpiller.Stack stack) -
rewriteNewArrayExpression
-
rewriteNewExpression
-
rewriteMemberExpression
-
rewriteLambdaExpression
-
rewriteInvocationExpression
-
rewriteTypeBinaryExpression
-
rewriteConditionalExpression
-
rewriteMethodCallExpression
-
rewriteUnaryExpression
-
rewriteLogicalBinaryExpression
private StackSpiller.Result rewriteLogicalBinaryExpression(Expression expr, StackSpiller.Stack stack) -
rewriteBinaryExpression
-