Skip to content

Commit

Permalink
Rollforward of "Skip most ES6 check and transpilation passes if the p…
Browse files Browse the repository at this point in the history
…arser detects no ES6 feature in a file" (take 2)

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130952925
  • Loading branch information
Dominator008 authored and brad4d committed Aug 23, 2016
1 parent de5fc00 commit dad7e24
Show file tree
Hide file tree
Showing 30 changed files with 304 additions and 95 deletions.
7 changes: 2 additions & 5 deletions src/com/google/javascript/jscomp/CheckMissingSuper.java
Expand Up @@ -36,15 +36,12 @@ public CheckMissingSuper(AbstractCompiler compiler) {

@Override
public void process(Node externs, Node root) {
if (!compiler.getOptions().getLanguageIn().isEs6OrHigher()) {
return;
}
NodeTraversal.traverseEs6(compiler, root, this);
TranspilationPasses.processCheck(compiler, root, this);
}

@Override
public void hotSwapScript(Node scriptRoot, Node originalRoot) {
process(null, scriptRoot);
TranspilationPasses.hotSwapCheck(compiler, scriptRoot, this);
}

@Override
Expand Down
10 changes: 9 additions & 1 deletion src/com/google/javascript/jscomp/Compiler.java
Expand Up @@ -998,10 +998,18 @@ void stopTracer(Tracer t, String passName) {
*/
public Result getResult() {
PassConfig.State state = getPassConfig().getIntermediateState();
Set<SourceFile> transpiledFiles = new HashSet<>();
if (jsRoot != null) {
for (Node scriptNode : jsRoot.children()) {
if (scriptNode.getBooleanProp(Node.TRANSPILED)) {
transpiledFiles.add(getSourceFileByName(scriptNode.getSourceFileName()));
}
}
}
return new Result(getErrors(), getWarnings(), debugLog.toString(),
state.variableMap, state.propertyMap,
state.anonymousFunctionNameMap, state.stringMap, functionInformationMap,
sourceMap, externExports, state.cssNames, state.idGeneratorMap);
sourceMap, externExports, state.cssNames, state.idGeneratorMap, transpiledFiles);
}

/**
Expand Down
11 changes: 10 additions & 1 deletion src/com/google/javascript/jscomp/DefaultPassConfig.java
Expand Up @@ -195,7 +195,7 @@ protected List<PassFactory> getTranspileOnlyPasses() {
}

passes.add(checkMissingSuper);
passes.add(checkVariableReferences);
passes.add(checkVariableReferencesForTranspileOnly);

// It's important that the Dart super accessors pass run *before* es6ConvertSuper,
// which is a "late" ES6 pass. This is enforced in the assertValidOrder method.
Expand Down Expand Up @@ -1549,6 +1549,15 @@ public void process(Node externs, Node root) {
}
};

/** Checks that references to variables look reasonable. */
private final HotSwapPassFactory checkVariableReferencesForTranspileOnly =
new HotSwapPassFactory("checkVariableReferences", true) {
@Override
protected HotSwapCompilerPass create(AbstractCompiler compiler) {
return new VariableReferenceCheck(compiler, true);
}
};

/** Checks that references to variables look reasonable. */
private final HotSwapPassFactory checkVariableReferences =
new HotSwapPassFactory("checkVariableReferences", true) {
Expand Down
7 changes: 4 additions & 3 deletions src/com/google/javascript/jscomp/Es6ConvertSuper.java
Expand Up @@ -179,12 +179,13 @@ private Node baseCall(String baseClass, String methodName, Node arguments) {

@Override
public void process(Node externs, Node root) {
NodeTraversal.traverseEs6(compiler, externs, this);
NodeTraversal.traverseEs6(compiler, root, this);
// Might need to synthesize constructors for ambient classes in .d.ts externs
TranspilationPasses.processTranspile(compiler, externs, this);
TranspilationPasses.processTranspile(compiler, root, this);
}

@Override
public void hotSwapScript(Node scriptRoot, Node originalRoot) {
NodeTraversal.traverseEs6(compiler, scriptRoot, this);
TranspilationPasses.hotSwapTranspile(compiler, scriptRoot, this);
}
}
7 changes: 2 additions & 5 deletions src/com/google/javascript/jscomp/Es6ExtractClasses.java
Expand Up @@ -26,7 +26,6 @@
import com.google.javascript.rhino.JSDocInfoBuilder;
import com.google.javascript.rhino.Node;
import com.google.javascript.rhino.Token;

import java.util.Deque;
import java.util.HashSet;
import java.util.LinkedList;
Expand Down Expand Up @@ -68,14 +67,12 @@ public final class Es6ExtractClasses

@Override
public void process(Node externs, Node root) {
NodeTraversal.traverseRootsEs6(compiler, this, externs, root);
NodeTraversal.traverseRootsEs6(compiler, new SelfReferenceRewriter(), externs, root);
TranspilationPasses.processTranspile(compiler, root, this, new SelfReferenceRewriter());
}

@Override
public void hotSwapScript(Node scriptRoot, Node originalRoot) {
NodeTraversal.traverseEs6(compiler, scriptRoot, this);
NodeTraversal.traverseEs6(compiler, scriptRoot, new SelfReferenceRewriter());
TranspilationPasses.hotSwapTranspile(compiler, scriptRoot, this, new SelfReferenceRewriter());
}

@Override
Expand Down
Expand Up @@ -18,7 +18,6 @@

import com.google.javascript.jscomp.NodeTraversal.AbstractPostOrderCallback;
import com.google.javascript.rhino.Node;

import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
Expand Down Expand Up @@ -86,13 +85,12 @@ public final boolean shouldTraverse(NodeTraversal t, Node n, Node parent) {

@Override
public void process(Node externs, Node root) {
NodeTraversal.traverseEs6(compiler, externs, this);
NodeTraversal.traverseEs6(compiler, root, this);
TranspilationPasses.processTranspile(compiler, root, this);
}

@Override
public void hotSwapScript(Node scriptRoot, Node originalRoot) {
NodeTraversal.traverseEs6(compiler, scriptRoot, this);
TranspilationPasses.hotSwapTranspile(compiler, scriptRoot, this);
}

/**
Expand Down
6 changes: 3 additions & 3 deletions src/com/google/javascript/jscomp/Es6RewriteArrowFunction.java
Expand Up @@ -39,13 +39,13 @@ public Es6RewriteArrowFunction(AbstractCompiler compiler) {

@Override
public void process(Node externs, Node root) {
NodeTraversal.traverseEs6(compiler, externs, this);
NodeTraversal.traverseEs6(compiler, root, this);
TranspilationPasses.processTranspile(compiler, externs, this);
TranspilationPasses.processTranspile(compiler, root, this);
}

@Override
public void hotSwapScript(Node scriptRoot, Node originalRoot) {
NodeTraversal.traverseEs6(compiler, scriptRoot, this);
TranspilationPasses.hotSwapTranspile(compiler, scriptRoot, this);
}

@Override
Expand Down
Expand Up @@ -28,7 +28,6 @@
import com.google.javascript.rhino.JSTypeExpression;
import com.google.javascript.rhino.Node;
import com.google.javascript.rhino.Token;

import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
Expand Down Expand Up @@ -111,24 +110,27 @@ && inLoop(n)) {

@Override
public void process(Node externs, Node root) {
NodeTraversal.traverseRootsEs6(compiler, new CollectUndeclaredNames(), externs, root);
NodeTraversal.traverseRootsEs6(compiler, this, externs, root);
NodeTraversal.traverseRootsEs6(compiler, new Es6RenameReferences(renameMap), externs, root);

// Since block-scoped function declarations can appear in any language mode, we need to run
// this pass unconditionally.
NodeTraversal.traverseEs6(compiler, root, new CollectUndeclaredNames());
NodeTraversal.traverseEs6(compiler, root, this);
// Needed for let / const declarations in .d.ts externs.
TranspilationPasses.processTranspile(compiler, externs, this);
NodeTraversal.traverseEs6(compiler, root, new Es6RenameReferences(renameMap));
LoopClosureTransformer transformer = new LoopClosureTransformer();
NodeTraversal.traverseRootsEs6(compiler, transformer, externs, root);
NodeTraversal.traverseEs6(compiler, root, transformer);
transformer.transformLoopClosure();
varify();
NodeTraversal.traverseRootsEs6(
compiler, new RewriteBlockScopedFunctionDeclaration(), externs, root);
TranspilationPasses.processTranspile(
compiler, externs, new RewriteBlockScopedFunctionDeclaration());
NodeTraversal.traverseEs6(compiler, root, new RewriteBlockScopedFunctionDeclaration());
}

@Override
public void hotSwapScript(Node scriptRoot, Node originalRoot) {
NodeTraversal.traverseEs6(compiler, scriptRoot, new CollectUndeclaredNames());
NodeTraversal.traverseEs6(compiler, scriptRoot, this);
NodeTraversal.traverseEs6(compiler, scriptRoot, new Es6RenameReferences(renameMap));

LoopClosureTransformer transformer = new LoopClosureTransformer();
NodeTraversal.traverseEs6(compiler, scriptRoot, transformer);
transformer.transformLoopClosure();
Expand Down
5 changes: 2 additions & 3 deletions src/com/google/javascript/jscomp/Es6RewriteDestructuring.java
Expand Up @@ -41,13 +41,12 @@ public Es6RewriteDestructuring(AbstractCompiler compiler) {

@Override
public void process(Node externs, Node root) {
NodeTraversal.traverseEs6(compiler, externs, this);
NodeTraversal.traverseEs6(compiler, root, this);
TranspilationPasses.processTranspile(compiler, root, this);
}

@Override
public void hotSwapScript(Node scriptRoot, Node originalRoot) {
NodeTraversal.traverseEs6(compiler, scriptRoot, this);
TranspilationPasses.hotSwapTranspile(compiler, scriptRoot, this);
}

@Override
Expand Down
7 changes: 2 additions & 5 deletions src/com/google/javascript/jscomp/Es6RewriteGenerators.java
Expand Up @@ -26,7 +26,6 @@
import com.google.javascript.rhino.JSDocInfoBuilder;
import com.google.javascript.rhino.Node;
import com.google.javascript.rhino.Token;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
Expand Down Expand Up @@ -98,14 +97,12 @@ public Es6RewriteGenerators(AbstractCompiler compiler) {

@Override
public void process(Node externs, Node root) {
NodeTraversal.traverseEs6(compiler, root, new DecomposeYields(compiler));
NodeTraversal.traverseEs6(compiler, root, this);
TranspilationPasses.processTranspile(compiler, root, new DecomposeYields(compiler), this);
}

@Override
public void hotSwapScript(Node scriptRoot, Node originalRoot) {
NodeTraversal.traverseEs6(compiler, scriptRoot, new DecomposeYields(compiler));
NodeTraversal.traverseEs6(compiler, scriptRoot, this);
TranspilationPasses.hotSwapTranspile(compiler, scriptRoot, new DecomposeYields(compiler), this);
}

@Override
Expand Down
Expand Up @@ -45,13 +45,12 @@ public Es6SplitVariableDeclarations(AbstractCompiler compiler) {

@Override
public void process(Node externs, Node root) {
NodeTraversal.traverseEs6(compiler, externs, this);
NodeTraversal.traverseEs6(compiler, root, this);
TranspilationPasses.processTranspile(compiler, root, this);
}

@Override
public void hotSwapScript(Node scriptRoot, Node originalRoot) {
NodeTraversal.traverseEs6(compiler, scriptRoot, this);
TranspilationPasses.hotSwapTranspile(compiler, scriptRoot, this);
}

@Override
Expand Down
2 changes: 1 addition & 1 deletion src/com/google/javascript/jscomp/Es6SuperCheck.java
Expand Up @@ -38,7 +38,7 @@ final class Es6SuperCheck extends AbstractPostOrderCallback implements CompilerP

@Override
public void process(Node externs, Node root) {
NodeTraversal.traverseEs6(compiler, root, this);
TranspilationPasses.processCheck(compiler, root, this);
}

@Override
Expand Down
Expand Up @@ -124,15 +124,15 @@ public Es6ToEs3ClassSideInheritance(AbstractCompiler compiler) {
@Override
public void process(Node externs, Node root) {
FindStaticMembers findStaticMembers = new FindStaticMembers();
NodeTraversal.traverseEs6(compiler, externs, findStaticMembers);
NodeTraversal.traverseEs6(compiler, root, findStaticMembers);
TranspilationPasses.processTranspile(compiler, externs, findStaticMembers);
TranspilationPasses.processTranspile(compiler, root, findStaticMembers);
processInherits(findStaticMembers.inheritsCalls);
}

@Override
public void hotSwapScript(Node scriptRoot, Node originalRoot) {
FindStaticMembers findStaticMembers = new FindStaticMembers();
NodeTraversal.traverseEs6(compiler, scriptRoot, findStaticMembers);
TranspilationPasses.processTranspile(compiler, scriptRoot, findStaticMembers);
processInherits(findStaticMembers.inheritsCalls);
}

Expand Down
6 changes: 3 additions & 3 deletions src/com/google/javascript/jscomp/Es6ToEs3Converter.java
Expand Up @@ -97,13 +97,13 @@ public Es6ToEs3Converter(AbstractCompiler compiler) {

@Override
public void process(Node externs, Node root) {
NodeTraversal.traverseEs6(compiler, externs, this);
NodeTraversal.traverseEs6(compiler, root, this);
TranspilationPasses.processTranspile(compiler, externs, this);
TranspilationPasses.processTranspile(compiler, root, this);
}

@Override
public void hotSwapScript(Node scriptRoot, Node originalRoot) {
NodeTraversal.traverseEs6(compiler, scriptRoot, this);
TranspilationPasses.hotSwapTranspile(compiler, scriptRoot, this);
}

/**
Expand Down
16 changes: 13 additions & 3 deletions src/com/google/javascript/jscomp/PolymerBehaviorExtractor.java
Expand Up @@ -21,6 +21,7 @@
import com.google.javascript.jscomp.GlobalNamespace.Name;
import com.google.javascript.jscomp.GlobalNamespace.Ref;
import com.google.javascript.jscomp.PolymerPass.MemberDefinition;
import com.google.javascript.jscomp.parsing.parser.FeatureSet;
import com.google.javascript.rhino.JSDocInfo;
import com.google.javascript.rhino.Node;

Expand Down Expand Up @@ -70,7 +71,8 @@ ImmutableList<BehaviorDefinition> extractBehaviors(Node behaviorArray) {
PolymerPassStaticUtils.extractProperties(behaviorName),
getBehaviorFunctionsToCopy(behaviorName),
getNonPropertyMembersToCopy(behaviorName),
!NodeUtil.isInFunction(behaviorName)));
!NodeUtil.isInFunction(behaviorName),
(FeatureSet) NodeUtil.getEnclosingScript(behaviorName).getProp(Node.FEATURE_SET)));
continue;
}

Expand Down Expand Up @@ -121,7 +123,8 @@ ImmutableList<BehaviorDefinition> extractBehaviors(Node behaviorArray) {
PolymerPassStaticUtils.extractProperties(behaviorValue),
getBehaviorFunctionsToCopy(behaviorValue),
getNonPropertyMembersToCopy(behaviorValue),
isGlobalDeclaration));
isGlobalDeclaration,
(FeatureSet) NodeUtil.getEnclosingScript(behaviorValue).getProp(Node.FEATURE_SET)));
} else {
compiler.report(JSError.make(behaviorName, PolymerPassErrors.POLYMER_UNQUALIFIED_BEHAVIOR));
}
Expand Down Expand Up @@ -194,13 +197,20 @@ static final class BehaviorDefinition {
*/
final boolean isGlobalDeclaration;

/**
* Language features to carry over to the extraction destination.
*/
final FeatureSet features;

BehaviorDefinition(
List<MemberDefinition> props, List<MemberDefinition> functionsToCopy,
List<MemberDefinition> nonPropertyMembersToCopy, boolean isGlobalDeclaration) {
List<MemberDefinition> nonPropertyMembersToCopy, boolean isGlobalDeclaration,
FeatureSet features) {
this.props = props;
this.functionsToCopy = functionsToCopy;
this.nonPropertyMembersToCopy = nonPropertyMembersToCopy;
this.isGlobalDeclaration = isGlobalDeclaration;
this.features = features;
}
}
}

0 comments on commit dad7e24

Please sign in to comment.