class PeepholeReplaceKnownMethods extends AbstractPeepholeOptimization
Modifier and Type | Field and Description |
---|---|
private boolean |
late |
Constructor and Description |
---|
PeepholeReplaceKnownMethods(boolean late) |
Modifier and Type | Method and Description |
---|---|
private java.lang.String[] |
jsSplit(java.lang.String stringValue,
java.lang.String separator,
int limit)
Implement the JS String.split method using a string separator.
|
private static int |
jsSplitMatch(java.lang.String stringValue,
int startIndex,
java.lang.String separator)
Support function for jsSplit, find the first occurrence of
separator within stringValue starting at startIndex.
|
private static java.lang.String |
normalizeNumericString(java.lang.String input) |
(package private) Node |
optimizeSubtree(Node subtree)
Given a node to optimize and a traversal, optimize the node.
|
private Node |
tryFoldArrayJoin(Node n)
Try to fold an array join: ['a', 'b', 'c'].join('') -> 'abc';
|
private Node |
tryFoldKnownMethods(Node subtree) |
private Node |
tryFoldKnownNumericMethods(Node subtree)
Try to evaluate known Numeric methods
parseInt(), parseFloat()
|
private Node |
tryFoldKnownStringMethods(Node subtree)
Try to evaluate known String methods
.indexOf(), .substr(), .substring()
|
private Node |
tryFoldParseNumber(Node n,
java.lang.String functionName,
Node firstArg)
Try to evaluate parseInt, parseFloat:
parseInt("1") -> 1
parseInt("1", 10) -> 1
parseFloat("1.11") -> 1.11
|
private Node |
tryFoldStringCharAt(Node n,
Node stringNode,
Node arg1)
Try to fold .charAt() calls on strings
|
private Node |
tryFoldStringCharCodeAt(Node n,
Node stringNode,
Node arg1)
Try to fold .charCodeAt() calls on strings
|
private Node |
tryFoldStringIndexOf(Node n,
java.lang.String functionName,
Node lstringNode,
Node firstArg)
Try to evaluate String.indexOf/lastIndexOf:
"abcdef".indexOf("bc") -> 1
"abcdefbc".indexOf("bc", 3) -> 6
|
private Node |
tryFoldStringSplit(Node n,
Node stringNode,
Node arg1)
Try to fold .split() calls on strings
|
private Node |
tryFoldStringSubstr(Node n,
Node stringNode,
Node arg1)
Try to fold .substr() calls on strings
|
private Node |
tryFoldStringSubstring(Node n,
Node stringNode,
Node arg1)
Try to fold .substring() calls on strings
|
private Node |
tryFoldStringToLowerCase(Node subtree,
Node stringNode) |
private Node |
tryFoldStringToUpperCase(Node subtree,
Node stringNode) |
areDeclaredGlobalExternsOnWindow, areNodesEqualForInlining, beginTraversal, endTraversal, getCodingConvention, isASTNormalized, isEcmaScript5OrGreater, mayEffectMutableState, mayHaveSideEffects, nodeTypeMayHaveSideEffects, report, reportCodeChange
PeepholeReplaceKnownMethods(boolean late)
late
- When late is true, this mean we are currently running after
most of the other optimizations. In this case we avoid changes that make
the code larger (but otherwise easier to analyze - such as using string
splitting).Node optimizeSubtree(Node subtree)
AbstractPeepholeOptimization
optimizeSubtree
in class AbstractPeepholeOptimization
subtree
- The subtree that will be optimized.subtree
.private Node tryFoldKnownStringMethods(Node subtree)
private Node tryFoldKnownNumericMethods(Node subtree)
private Node tryFoldStringToLowerCase(Node subtree, Node stringNode)
private Node tryFoldStringToUpperCase(Node subtree, Node stringNode)
private static java.lang.String normalizeNumericString(java.lang.String input)
input
- string representation of a numberprivate Node tryFoldParseNumber(Node n, java.lang.String functionName, Node firstArg)
private Node tryFoldStringIndexOf(Node n, java.lang.String functionName, Node lstringNode, Node firstArg)
private Node tryFoldArrayJoin(Node n)
private Node tryFoldStringSubstr(Node n, Node stringNode, Node arg1)
private Node tryFoldStringSubstring(Node n, Node stringNode, Node arg1)
private Node tryFoldStringCharAt(Node n, Node stringNode, Node arg1)
private Node tryFoldStringCharCodeAt(Node n, Node stringNode, Node arg1)
private static int jsSplitMatch(java.lang.String stringValue, int startIndex, java.lang.String separator)
private java.lang.String[] jsSplit(java.lang.String stringValue, java.lang.String separator, int limit)