Skip to content

Commit

Permalink
Rollback of "Skip most ES6 check and transpilation passes if the parser
Browse files Browse the repository at this point in the history
detects no ES6 feature in a file"

*** Reason for rollback ***
breaks cultural frontend. https://sponge.corp.google.com/target?id=8f7e95b3-d96d-4281-8f30-a75b6148b6c1&target=//javatests/com/google/cultural/frontend/common:all_compiled_js_test

*** Original change description ***

Rollforward of cl/130339419: Skip most ES6 check and transpilation passes if the parser detects no ES6 feature in a file

NEW:
  - Changed VariableReferenceCheck to allow patterns like
    "var foo = foo || window['foo'] || {};".
  - Fixed PolymerPass to carry over potential new language features from
    behavior files to class files when extracting behaviors.
  - Run Es6RewriteArrowFunction on externs since some project use arrow
    functions in externs.
  - Run VariableReferenceCheck on exte...

***

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=130811418
  • Loading branch information
tbreisacher authored and brad4d committed Aug 22, 2016
1 parent afb4a02 commit b9e28ac
Show file tree
Hide file tree
Showing 28 changed files with 84 additions and 264 deletions.
7 changes: 5 additions & 2 deletions src/com/google/javascript/jscomp/CheckMissingSuper.java
Expand Up @@ -36,12 +36,15 @@ public CheckMissingSuper(AbstractCompiler compiler) {

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

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

@Override
Expand Down
10 changes: 1 addition & 9 deletions src/com/google/javascript/jscomp/Compiler.java
Expand Up @@ -998,18 +998,10 @@ 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, transpiledFiles);
sourceMap, externExports, state.cssNames, state.idGeneratorMap);
}

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

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

// 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,15 +1549,6 @@ 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: 3 additions & 4 deletions src/com/google/javascript/jscomp/Es6ConvertSuper.java
Expand Up @@ -179,13 +179,12 @@ private Node baseCall(String baseClass, String methodName, Node arguments) {

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

@Override
public void hotSwapScript(Node scriptRoot, Node originalRoot) {
TranspilationPasses.hotSwapTranspile(compiler, scriptRoot, this);
NodeTraversal.traverseEs6(compiler, scriptRoot, this);
}
}
7 changes: 5 additions & 2 deletions src/com/google/javascript/jscomp/Es6ExtractClasses.java
Expand Up @@ -26,6 +26,7 @@
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 @@ -67,12 +68,14 @@ public final class Es6ExtractClasses

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

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

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

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 @@ -85,12 +86,13 @@ public final boolean shouldTraverse(NodeTraversal t, Node n, Node parent) {

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

@Override
public void hotSwapScript(Node scriptRoot, Node originalRoot) {
TranspilationPasses.hotSwapTranspile(compiler, scriptRoot, this);
NodeTraversal.traverseEs6(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) {
TranspilationPasses.processTranspile(compiler, externs, this);
TranspilationPasses.processTranspile(compiler, root, this);
NodeTraversal.traverseEs6(compiler, externs, this);
NodeTraversal.traverseEs6(compiler, root, this);
}

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

@Override
Expand Down
Expand Up @@ -28,6 +28,7 @@
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 @@ -110,27 +111,24 @@ && inLoop(n)) {

@Override
public void process(Node externs, Node 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));
NodeTraversal.traverseRootsEs6(compiler, new CollectUndeclaredNames(), externs, root);
NodeTraversal.traverseRootsEs6(compiler, this, externs, root);
NodeTraversal.traverseRootsEs6(compiler, new Es6RenameReferences(renameMap), externs, root);

LoopClosureTransformer transformer = new LoopClosureTransformer();
NodeTraversal.traverseEs6(compiler, root, transformer);
NodeTraversal.traverseRootsEs6(compiler, transformer, externs, root);
transformer.transformLoopClosure();
varify();
TranspilationPasses.processTranspile(
compiler, externs, new RewriteBlockScopedFunctionDeclaration());
NodeTraversal.traverseEs6(compiler, root, new RewriteBlockScopedFunctionDeclaration());
NodeTraversal.traverseRootsEs6(
compiler, new RewriteBlockScopedFunctionDeclaration(), externs, root);
}

@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: 3 additions & 2 deletions src/com/google/javascript/jscomp/Es6RewriteDestructuring.java
Expand Up @@ -41,12 +41,13 @@ public Es6RewriteDestructuring(AbstractCompiler compiler) {

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

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

@Override
Expand Down
7 changes: 5 additions & 2 deletions src/com/google/javascript/jscomp/Es6RewriteGenerators.java
Expand Up @@ -26,6 +26,7 @@
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 @@ -97,12 +98,14 @@ public Es6RewriteGenerators(AbstractCompiler compiler) {

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

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

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

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

@Override
public void hotSwapScript(Node scriptRoot, Node originalRoot) {
TranspilationPasses.hotSwapTranspile(compiler, scriptRoot, this);
NodeTraversal.traverseEs6(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) {
TranspilationPasses.processCheck(compiler, root, this);
NodeTraversal.traverseEs6(compiler, root, this);
}

@Override
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) {
TranspilationPasses.processTranspile(compiler, externs, this);
TranspilationPasses.processTranspile(compiler, root, this);
NodeTraversal.traverseEs6(compiler, externs, this);
NodeTraversal.traverseEs6(compiler, root, this);
}

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

/**
Expand Down
16 changes: 3 additions & 13 deletions src/com/google/javascript/jscomp/PolymerBehaviorExtractor.java
Expand Up @@ -21,7 +21,6 @@
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 @@ -71,8 +70,7 @@ ImmutableList<BehaviorDefinition> extractBehaviors(Node behaviorArray) {
PolymerPassStaticUtils.extractProperties(behaviorName),
getBehaviorFunctionsToCopy(behaviorName),
getNonPropertyMembersToCopy(behaviorName),
!NodeUtil.isInFunction(behaviorName),
(FeatureSet) NodeUtil.getEnclosingScript(behaviorName).getProp(Node.FEATURE_SET)));
!NodeUtil.isInFunction(behaviorName)));
continue;
}

Expand Down Expand Up @@ -123,8 +121,7 @@ ImmutableList<BehaviorDefinition> extractBehaviors(Node behaviorArray) {
PolymerPassStaticUtils.extractProperties(behaviorValue),
getBehaviorFunctionsToCopy(behaviorValue),
getNonPropertyMembersToCopy(behaviorValue),
isGlobalDeclaration,
(FeatureSet) NodeUtil.getEnclosingScript(behaviorValue).getProp(Node.FEATURE_SET)));
isGlobalDeclaration));
} else {
compiler.report(JSError.make(behaviorName, PolymerPassErrors.POLYMER_UNQUALIFIED_BEHAVIOR));
}
Expand Down Expand Up @@ -197,20 +194,13 @@ 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,
FeatureSet features) {
List<MemberDefinition> nonPropertyMembersToCopy, boolean isGlobalDeclaration) {
this.props = props;
this.functionsToCopy = functionsToCopy;
this.nonPropertyMembersToCopy = nonPropertyMembersToCopy;
this.isGlobalDeclaration = isGlobalDeclaration;
this.features = features;
}
}
}
19 changes: 2 additions & 17 deletions src/com/google/javascript/jscomp/PolymerClassDefinition.java
Expand Up @@ -20,7 +20,6 @@
import com.google.common.collect.ImmutableList;
import com.google.javascript.jscomp.PolymerBehaviorExtractor.BehaviorDefinition;
import com.google.javascript.jscomp.PolymerPass.MemberDefinition;
import com.google.javascript.jscomp.parsing.parser.FeatureSet;
import com.google.javascript.rhino.IR;
import com.google.javascript.rhino.JSDocInfo;
import com.google.javascript.rhino.Node;
Expand Down Expand Up @@ -54,26 +53,21 @@ final class PolymerClassDefinition {
/** Flattened list of behavior definitions used by this element. */
final ImmutableList<BehaviorDefinition> behaviors;

/** Language features that should be carried over to the extraction destination. */
final FeatureSet features;

PolymerClassDefinition(
Node target,
Node descriptor,
JSDocInfo classInfo,
MemberDefinition constructor,
String nativeBaseElement,
List<MemberDefinition> props,
ImmutableList<BehaviorDefinition> behaviors,
FeatureSet features) {
ImmutableList<BehaviorDefinition> behaviors) {
this.target = target;
Preconditions.checkState(descriptor.isObjectLit());
this.descriptor = descriptor;
this.constructor = constructor;
this.nativeBaseElement = nativeBaseElement;
this.props = props;
this.behaviors = behaviors;
this.features = features;
}

/**
Expand Down Expand Up @@ -138,23 +132,14 @@ final class PolymerClassDefinition {
}
overwriteMembersIfPresent(allProperties, PolymerPassStaticUtils.extractProperties(descriptor));

FeatureSet newFeatures = null;
if (!behaviors.isEmpty()) {
newFeatures = behaviors.get(0).features;
for (int i = 1; i < behaviors.size(); i++) {
newFeatures = newFeatures.union(behaviors.get(i).features);
}
}

return new PolymerClassDefinition(
target,
descriptor,
classInfo,
new MemberDefinition(ctorInfo, null, constructor),
nativeBaseElement,
allProperties,
behaviors,
newFeatures);
behaviors);
}

/**
Expand Down

0 comments on commit b9e28ac

Please sign in to comment.