JS: split SourceType.MODULE into two

This commit is contained in:
Asger F
2019-01-23 18:45:45 +00:00
parent f00b16e500
commit 30ba7aedfe
11 changed files with 29 additions and 11 deletions

View File

@@ -306,7 +306,7 @@ public class ASTExtractor {
public V(Platform platform, SourceType sourceType) {
this.platform = platform;
this.sourceType = sourceType;
this.isStrict = sourceType == SourceType.MODULE;
this.isStrict = sourceType == SourceType.ES6_MODULE || sourceType == SourceType.CLOSURE_MODULE;
}
private Label visit(INode child, Label parent, int childIndex) {
@@ -557,10 +557,12 @@ public class ASTExtractor {
if (!".mjs".equals(locationManager.getSourceFileExtension()))
scopeManager.addVariables("require", "module", "exports", "__filename", "__dirname", "arguments");
trapwriter.addTuple("isModule", toplevelLabel);
} else if (sourceType == SourceType.MODULE) {
} else if (sourceType == SourceType.ES6_MODULE || sourceType == SourceType.CLOSURE_MODULE) {
Label moduleScopeKey = trapwriter.globalID("module;{" + locationManager.getFileLabel() + "}," + locationManager.getStartLine() + "," + locationManager.getStartColumn());
scopeManager.enterScope(3, moduleScopeKey, toplevelLabel);
scopeManager.addVariables("exports"); // needed for Closure modules - spuriously added for ES6 modules
if (sourceType == SourceType.CLOSURE_MODULE) {
scopeManager.addVariables("exports");
}
trapwriter.addTuple("isModule", toplevelLabel);
}
@@ -571,7 +573,7 @@ public class ASTExtractor {
visitAll(nd.getBody(), toplevelLabel);
// if we're extracting a Node.js/ES2015 module, leave its scope
if (platform == Platform.NODE || sourceType == SourceType.MODULE)
if (platform == Platform.NODE || sourceType == SourceType.ES6_MODULE || sourceType == SourceType.CLOSURE_MODULE)
scopeManager.leaveScope();
contextManager.leaveContainer();

View File

@@ -51,7 +51,7 @@ public class ExtractorConfig {
};
public static enum SourceType {
SCRIPT, MODULE, AUTO;
SCRIPT, ES6_MODULE, CLOSURE_MODULE, AUTO;
@Override
public String toString() {

View File

@@ -140,14 +140,14 @@ public class HTMLExtractor implements IExtractor {
if ("text/babel".equals(scriptType)) {
String plugins = getAttributeValueLC(script, "data-plugins");
if (plugins != null && plugins.contains("transform-es2015-modules-umd")) {
return SourceType.MODULE;
return SourceType.ES6_MODULE;
}
return config.getSourceType();
}
// if `type` is "module", extract as module
if ("module".equals(scriptType))
return SourceType.MODULE;
return SourceType.ES6_MODULE;
return null;
}

View File

@@ -70,8 +70,9 @@ public class JSExtractor {
return sourceType;
if (config.getEcmaVersion().compareTo(ECMAVersion.ECMA2015) >= 0) {
Matcher m = containsModuleIndicator.matcher(source);
if (m.find() && (allowLeadingWS || m.group(1).isEmpty()))
return SourceType.MODULE;
if (m.find() && (allowLeadingWS || m.group(1).isEmpty())) {
return m.group(2).startsWith("goog") ? SourceType.CLOSURE_MODULE : SourceType.ES6_MODULE;
}
}
return SourceType.SCRIPT;
}
@@ -125,7 +126,7 @@ public class JSExtractor {
if (config.isExterns())
textualExtractor.getTrapwriter().addTuple("isExterns", toplevelLabel);
if (platform == Platform.NODE && sourceType != SourceType.MODULE)
if (platform == Platform.NODE && sourceType != SourceType.ES6_MODULE && sourceType != SourceType.CLOSURE_MODULE)
textualExtractor.getTrapwriter().addTuple("isNodejs", toplevelLabel);
return Pair.make(toplevelLabel, loc);

View File

@@ -52,7 +52,7 @@ public class ScriptExtractor implements IExtractor {
// Some file extensions are interpreted as modules by default.
if (isAlwaysModule(locationManager.getSourceFileExtension())) {
if (config.getSourceType() == SourceType.AUTO)
config = config.withSourceType(SourceType.MODULE);
config = config.withSourceType(SourceType.ES6_MODULE);
}
ScopeManager scopeManager = new ScopeManager(textualExtractor.getTrapwriter(), config.getEcmaVersion());