class PeepholeMinimizeConditions extends AbstractPeepholeOptimization
Modifier and Type | Field and Description |
---|---|
private static int |
AND_PRECEDENCE |
private boolean |
late |
Constructor and Description |
---|
PeepholeMinimizeConditions(boolean late) |
Modifier and Type | Method and Description |
---|---|
(package private) boolean |
areMatchingExits(Node nodeThis,
Node nodeThat)
Check whether one exit can be replaced with another.
|
private static boolean |
consumesDanglingElse(Node n)
Does a statement consume a 'dangling else'? A statement consumes
a 'dangling else' if an 'else' token following the statement
would be considered by the parser to be part of the statement.
|
private static Node |
getBlockExpression(Node n) |
private static Node |
getBlockReturnExpression(Node n) |
private static Node |
getBlockVar(Node n) |
(package private) static Node |
getExceptionHandler(Node n) |
(package private) static boolean |
isExceptionPossible(Node n) |
private static boolean |
isFoldableExpressBlock(Node n) |
(package private) static boolean |
isLowerPrecedence(Node n,
int precedence)
Whether the node type has lower precedence than "precedence"
|
private static boolean |
isPropertyAssignmentInExpression(Node n)
Does the expression contain a property assignment?
|
(package private) boolean |
isPure(Node n) |
private static boolean |
isReturnBlock(Node n) |
private static boolean |
isReturnExpressBlock(Node n) |
private static boolean |
isReturnExpression(Node n) |
private static boolean |
isVarBlock(Node n) |
private Node |
maybeReplaceChildWithNumber(Node n,
Node parent,
int num)
Replaces a node with a number node if the new number node is not equivalent
to the current node.
|
Node |
optimizeSubtree(Node node)
Tries to apply our various peephole minimizations on the passed in node.
|
private Node |
performConditionSubstitutions(Node n)
Try to minimize the given condition by applying local substitutions.
|
private Node |
replaceNode(Node lhs,
MinimizedCondition.MeasuredNode rhs) |
(package private) static Node |
skipFinallyNodes(Node n) |
private static boolean |
statementMustExitParent(Node n) |
private void |
tryJoinForCondition(Node n) |
private Node |
tryMinimizeCondition(Node n)
Try to minimize condition expression, as there are additional
assumptions that can be made when it is known that the final result
is a boolean.
|
private Node |
tryMinimizeExprResult(Node n)
Try to remove leading NOTs from EXPR_RESULTS.
|
private Node |
tryMinimizeHook(Node n)
Try flipping HOOKs that have negated conditions.
|
private Node |
tryMinimizeIf(Node n)
Try turning IF nodes into smaller HOOKs
Returns the replacement for n or the original if no replacement was
necessary.
|
private Node |
tryMinimizeNot(Node n)
Try to minimize NOT nodes such as !(x==y).
|
private Node |
tryRemoveRedundantExit(Node n)
Remove duplicate exits.
|
private void |
tryRemoveRepeatedStatements(Node n)
Try to remove duplicate statements from IF blocks.
|
private Node |
tryReplaceExitWithBreak(Node n)
Replace duplicate exits in control structures.
|
private Node |
tryReplaceIf(Node n)
Use "return x?1:2;" in place of "if(x)return 1;return 2;"
|
areDeclaredGlobalExternsOnWindow, areNodesEqualForInlining, beginTraversal, endTraversal, getCodingConvention, isASTNormalized, isEcmaScript5OrGreater, mayEffectMutableState, mayHaveSideEffects, nodeTypeMayHaveSideEffects, report, reportCodeChange
PeepholeMinimizeConditions(boolean late)
late
- When late is false, this mean we are currently running before
most of the other optimizations. In this case we would avoid optimizations
that would make the code harder to analyze (such as using string splitting,
merging statements with commas, etc). When this is true, we would
do anything to minimize for size.public Node optimizeSubtree(Node node)
optimizeSubtree
in class AbstractPeepholeOptimization
node
- The subtree that will be optimized.subtree
.private void tryJoinForCondition(Node n)
private Node tryReplaceIf(Node n)
private static boolean statementMustExitParent(Node n)
private Node tryReplaceExitWithBreak(Node n)
n
- An follow control exit expression (a THROW or RETURN node)private Node tryRemoveRedundantExit(Node n)
n
- An follow control exit expression (a THROW or RETURN node)boolean isPure(Node n)
static Node skipFinallyNodes(Node n)
boolean areMatchingExits(Node nodeThis, Node nodeThat)
static boolean isExceptionPossible(Node n)
private Node tryMinimizeNot(Node n)
private Node tryMinimizeExprResult(Node n)
private Node tryMinimizeHook(Node n)
private Node tryMinimizeIf(Node n)
private void tryRemoveRepeatedStatements(Node n)
n
- The IF node to examine.private static boolean isFoldableExpressBlock(Node n)
private static boolean isReturnBlock(Node n)
private static boolean isReturnExpressBlock(Node n)
private static boolean isReturnExpression(Node n)
private static Node getBlockReturnExpression(Node n)
private static boolean isVarBlock(Node n)
private static boolean consumesDanglingElse(Node n)
static boolean isLowerPrecedence(Node n, int precedence)
private static boolean isPropertyAssignmentInExpression(Node n)
private Node tryMinimizeCondition(Node n)
private Node replaceNode(Node lhs, MinimizedCondition.MeasuredNode rhs)
private Node performConditionSubstitutions(Node n)