class PeepholeRemoveDeadCode extends AbstractPeepholeOptimization
Modifier and Type | Class and Description |
---|---|
private static class |
PeepholeRemoveDeadCode.MatchUnnamedBreak
A predicate for matching anything except function nodes.
|
Modifier and Type | Field and Description |
---|---|
(package private) static com.google.common.base.Predicate<Node> |
MATCH_UNNAMED_BREAK |
Constructor and Description |
---|
PeepholeRemoveDeadCode() |
Modifier and Type | Method and Description |
---|---|
private Node |
getConditionalStatementCondition(Node n) |
private Node |
getSimpleAssignmentName(Node n) |
private Node |
getSimpleAssignmentValue(Node n) |
(package private) static boolean |
hasBreakOrContinue(Node n) |
private boolean |
isConditionalStatement(Node n) |
private static boolean |
isExit(Node n) |
private static boolean |
isExprConditional(Node n) |
private static boolean |
isSimpleAssignment(Node n) |
private static boolean |
isUnremovableNode(Node n)
Some nodes unremovable node don't have side-effects.
|
private boolean |
isUselessCase(Node caseNode,
Node previousCase)
The function assumes that when checking a CASE node there is no
DEFAULT node in the SWITCH.
|
(package private) Node |
optimizeSubtree(Node subtree)
Given a node to optimize and a traversal, optimize the node.
|
private void |
removeCase(Node switchNode,
Node caseNode)
Remove the case from the switch redeclaring any variables declared in it.
|
private Node |
tryFoldAssignment(Node subtree)
Try removing identity assignments
|
private Node |
tryFoldComma(Node n) |
(package private) Node |
tryFoldDoAway(Node n)
Removes DOs that always evaluate to false.
|
(package private) Node |
tryFoldEmptyDo(Node n)
Removes DOs that have empty bodies into FORs, which are
much easier for the CFA to analyze.
|
private Node |
tryFoldExpr(Node subtree)
Try folding EXPR_RESULT nodes by removing useless Ops and expressions.
|
(package private) Node |
tryFoldFor(Node n)
Removes FORs that always evaluate to false.
|
private void |
tryFoldForCondition(Node forCondition)
Remove always true loop conditions.
|
private Node |
tryFoldHook(Node n)
Try folding HOOK (?:) if the condition results of the condition is known.
|
private Node |
tryFoldIf(Node n)
Try folding IF nodes by removing dead branches.
|
private Node |
tryFoldTry(Node n)
Remove try blocks without catch blocks and with empty or not
existent finally blocks.
|
(package private) Node |
tryFoldWhile(Node n)
Removes WHILEs that always evaluate to false.
|
(package private) Node |
tryOptimizeBlock(Node n)
Try removing unneeded block nodes and their useless children
|
private void |
tryOptimizeConditionalAfterAssign(Node n)
Attempt to replace the condition of if or hook immediately that is a
reference to a name that is assigned immediately before.
|
private Node |
tryOptimizeDefaultCase(Node n) |
private Node |
tryOptimizeSwitch(Node n)
Remove useless switches and cases.
|
private Node |
trySimplifyUnusedResult(Node n)
General cascading unused operation node removal.
|
private Node |
trySimplifyUnusedResult(Node n,
boolean removeUnused)
General cascading unused operation node removal.
|
areDeclaredGlobalExternsOnWindow, areNodesEqualForInlining, beginTraversal, endTraversal, getCodingConvention, isASTNormalized, isEcmaScript5OrGreater, mayEffectMutableState, mayHaveSideEffects, nodeTypeMayHaveSideEffects, report, reportCodeChange
static final com.google.common.base.Predicate<Node> MATCH_UNNAMED_BREAK
Node optimizeSubtree(Node subtree)
AbstractPeepholeOptimization
optimizeSubtree
in class AbstractPeepholeOptimization
subtree
- The subtree that will be optimized.subtree
.private Node tryFoldTry(Node n)
private Node tryFoldAssignment(Node subtree)
private Node tryFoldExpr(Node subtree)
private Node trySimplifyUnusedResult(Node n)
n
- The root of the expression to simplify.private Node trySimplifyUnusedResult(Node n, boolean removeUnused)
n
- The root of the expression to simplify.removeUnused
- If true, the node is removed from the AST if
it is not useful, otherwise it replaced with an EMPTY node.private Node tryOptimizeDefaultCase(Node n)
private void removeCase(Node switchNode, Node caseNode)
caseNode
- The case to remove.private boolean isUselessCase(Node caseNode, @Nullable Node previousCase)
private static boolean isExit(Node n)
Node tryOptimizeBlock(Node n)
private static boolean isUnremovableNode(Node n)
private void tryOptimizeConditionalAfterAssign(Node n)
private static boolean isSimpleAssignment(Node n)
private Node getSimpleAssignmentName(Node n)
private Node getSimpleAssignmentValue(Node n)
private boolean isConditionalStatement(Node n)
private static boolean isExprConditional(Node n)
private Node getConditionalStatementCondition(Node n)
private Node tryFoldIf(Node n)
private Node tryFoldHook(Node n)
Node tryFoldDoAway(Node n)
Node tryFoldEmptyDo(Node n)
static boolean hasBreakOrContinue(Node n)
private void tryFoldForCondition(Node forCondition)