class PhaseOptimizer extends java.lang.Object implements CompilerPass
Modifier and Type | Class and Description |
---|---|
(package private) class |
PhaseOptimizer.Loop
A compound pass that contains atomic passes and runs them until they reach
a fixed point.
|
(package private) class |
PhaseOptimizer.NamedPass
A single compiler pass.
|
(package private) static class |
PhaseOptimizer.ProgressRange
An object used when running many NamedPass loopable passes as a Loop pass,
to keep track of how far along we are.
|
private class |
PhaseOptimizer.ScopedChangeHandler
A change handler that marks scopes as changed when reportChange is called.
|
(package private) static class |
PhaseOptimizer.State
When processing loopable passes in order, the PhaseOptimizer can be in one
of these two states.
|
Modifier and Type | Field and Description |
---|---|
private AbstractCompiler |
compiler |
private boolean |
crossScopeReporting |
private PhaseOptimizer.NamedPass |
currentPass |
private Node |
currentScope |
private boolean |
inLoop |
private Node |
jsRoot |
private Node |
lastAst |
private int |
lastChange |
private java.util.Map<PhaseOptimizer.NamedPass,java.lang.Integer> |
lastRuns |
private static java.util.logging.Logger |
logger |
(package private) static int |
MAX_LOOPS |
private java.util.Map<Node,Node> |
mtoc |
(package private) static java.util.List<java.lang.String> |
OPTIMAL_ORDER |
(package private) static java.lang.String |
OPTIMIZE_LOOP_ERROR |
private java.util.List<CompilerPass> |
passes |
private boolean |
printAstHashcodes |
private double |
progress |
private PhaseOptimizer.ProgressRange |
progressRange |
private double |
progressStep |
private PassFactory |
sanityCheck |
private static int |
START_TIME |
private int |
timestamp |
private PerformanceTracker |
tracker |
Constructor and Description |
---|
PhaseOptimizer(AbstractCompiler comp,
PerformanceTracker tracker,
PhaseOptimizer.ProgressRange range) |
Modifier and Type | Method and Description |
---|---|
(package private) PhaseOptimizer.Loop |
addFixedPointLoop()
Add a loop to the compile sequence.
|
(package private) void |
addOneTimePass(PassFactory factory)
Add the pass generated by the given factory to the compile sequence.
|
(package private) void |
consume(java.util.List<PassFactory> factories)
Add the passes generated by the given factories to the compile sequence.
|
(package private) void |
endCrossScopeReporting()
The currently-running pass won't report cross-scope changes.
|
private Node |
getEnclosingScope(Node n) |
private boolean |
hasHaltingErrors() |
(package private) boolean |
hasScopeChanged(Node n) |
private void |
maybePrintAstHashcodes(java.lang.String passName,
Node root) |
private void |
maybeSanityCheck(Node externs,
Node root)
Runs the sanity check if it is available.
|
void |
process(Node externs,
Node root)
Run all the passes in the optimizer.
|
(package private) void |
reportChangeToEnclosingScope(Node n) |
(package private) void |
setPrintAstHashcodes(boolean printAstHashcodes)
Sets the hashcode of the AST to be logged every pass.
|
(package private) void |
setSanityCheck(PassFactory sanityCheck)
Adds a sanity checker to be run after every pass.
|
private void |
setSanityCheckState() |
(package private) void |
setScope(Node n) |
(package private) void |
startCrossScopeReporting()
Records that the currently-running pass may report cross-scope changes.
|
private static final java.util.logging.Logger logger
private final AbstractCompiler compiler
private final PerformanceTracker tracker
private final java.util.List<CompilerPass> passes
private boolean inLoop
private PassFactory sanityCheck
private boolean printAstHashcodes
private double progress
private double progressStep
private final PhaseOptimizer.ProgressRange progressRange
private PhaseOptimizer.NamedPass currentPass
private java.util.Map<PhaseOptimizer.NamedPass,java.lang.Integer> lastRuns
private Node currentScope
private int timestamp
private int lastChange
private static final int START_TIME
private final Node jsRoot
private boolean crossScopeReporting
private Node lastAst
static final java.util.List<java.lang.String> OPTIMAL_ORDER
static final int MAX_LOOPS
static final java.lang.String OPTIMIZE_LOOP_ERROR
PhaseOptimizer(AbstractCompiler comp, PerformanceTracker tracker, PhaseOptimizer.ProgressRange range)
comp
- the compiler that owns/creates this.tracker
- an optional performance trackerrange
- the progress range for the process function or null
if progress should not be reported.void consume(java.util.List<PassFactory> factories)
Automatically pulls multi-run passes into fixed point loops. If there are 1 or more multi-run passes in a row, they will run together in the same fixed point loop. The passes will run until they are finished making changes.
The PhaseOptimizer is free to tweak the order and frequency of multi-run passes in a fixed-point loop.
void addOneTimePass(PassFactory factory)
PhaseOptimizer.Loop addFixedPointLoop()
void setSanityCheck(PassFactory sanityCheck)
private void setSanityCheckState()
void setPrintAstHashcodes(boolean printAstHashcodes)
public void process(Node externs, Node root)
process
in interface CompilerPass
externs
- Top of external JS treeroot
- Top of JS treeprivate void maybePrintAstHashcodes(java.lang.String passName, Node root)
private void maybeSanityCheck(Node externs, Node root)
private boolean hasHaltingErrors()
void setScope(Node n)
boolean hasScopeChanged(Node n)
void reportChangeToEnclosingScope(Node n)
void startCrossScopeReporting()
void endCrossScopeReporting()