class ShadowVariables extends java.lang.Object implements CompilerPass
var a = function() {
var b = getB();
b();
return function(y) {};
};
Normally, b would be mapped to variable L0, y would be L1.
Instead we are going to make y shadows L0 in hope of using less variables
and reusing frequently used local names.Modifier and Type | Class and Description |
---|---|
private class |
ShadowVariables.DoShadowVariables |
private class |
ShadowVariables.GatherReferenceInfo |
Modifier and Type | Field and Description |
---|---|
private java.util.Map<java.lang.String,RenameVars.Assignment> |
assignments |
private AbstractCompiler |
compiler |
private java.util.Map<Node,java.lang.String> |
deltaPseudoNameMap |
private java.util.Map<Node,java.lang.String> |
oldPseudoNameMap |
private com.google.common.collect.Multimap<Node,java.lang.String> |
scopeUpRefMap |
private java.util.SortedSet<RenameVars.Assignment> |
varsByFrequency |
private com.google.common.collect.Multimap<Var,Node> |
varToNameUsage |
Constructor and Description |
---|
ShadowVariables(AbstractCompiler compiler,
java.util.Map<java.lang.String,RenameVars.Assignment> assignments,
java.util.SortedSet<RenameVars.Assignment> varsByFrequency,
java.util.Map<Node,java.lang.String> pseudoNameMap) |
Modifier and Type | Method and Description |
---|---|
void |
process(Node externs,
Node root)
Process the JS with root node root.
|
private final com.google.common.collect.Multimap<Node,java.lang.String> scopeUpRefMap
private final AbstractCompiler compiler
private final java.util.SortedSet<RenameVars.Assignment> varsByFrequency
private final java.util.Map<java.lang.String,RenameVars.Assignment> assignments
private final java.util.Map<Node,java.lang.String> oldPseudoNameMap
private final java.util.Map<Node,java.lang.String> deltaPseudoNameMap
ShadowVariables(AbstractCompiler compiler, java.util.Map<java.lang.String,RenameVars.Assignment> assignments, java.util.SortedSet<RenameVars.Assignment> varsByFrequency, java.util.Map<Node,java.lang.String> pseudoNameMap)
assignments
- Map of old variable names to its assignment Objects.varsByFrequency
- Sorted variable assignments by Frequency.pseudoNameMap
- The current pseudo name map so this pass can update
it accordingly.public void process(Node externs, Node root)
CompilerPass
process
in interface CompilerPass
externs
- Top of external JS treeroot
- Top of JS tree