Add first-class support for .mjs files in jsc binary
authordino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 30 Nov 2018 21:55:12 +0000 (21:55 +0000)
committerdino@apple.com <dino@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 30 Nov 2018 21:55:12 +0000 (21:55 +0000)
https://bugs.webkit.org/show_bug.cgi?id=192190
<rdar://problem/46375715>

Reviewed by Keith Miller.

JSTests:

* stress/simple-module.mjs: Added.
* stress/simple-script.js: Added.

Source/JavaScriptCore:

Treat files with a .mjs extension as a module, regardless
of whether or not the --module-file argument was given.

* jsc.cpp:
(printUsageStatement): Update usage.
(isMJSFile): Helper to look for .mjs extensions.
(CommandLine::parseArguments): Pick the appropriate script type.

Tools:

Add .mjs files to the regexp looking for all JS files.

* Scripts/run-jsc-stress-tests:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@238753 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JSTests/ChangeLog
JSTests/stress/simple-module.mjs [new file with mode: 0644]
JSTests/stress/simple-script.js [new file with mode: 0644]
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/jsc.cpp
Tools/ChangeLog
Tools/Scripts/run-jsc-stress-tests

index d009ba8..99b0d75 100644 (file)
@@ -1,3 +1,14 @@
+2018-11-30  Dean Jackson  <dino@apple.com>
+
+        Add first-class support for .mjs files in jsc binary
+        https://bugs.webkit.org/show_bug.cgi?id=192190
+        <rdar://problem/46375715>
+
+        Reviewed by Keith Miller.
+
+        * stress/simple-module.mjs: Added.
+        * stress/simple-script.js: Added.
+
 2018-11-30  Caio Lima  <ticaiolima@gmail.com>
 
         [BigInt] Implement ValueBitXor into DFG
diff --git a/JSTests/stress/simple-module.mjs b/JSTests/stress/simple-module.mjs
new file mode 100644 (file)
index 0000000..2d96b58
--- /dev/null
@@ -0,0 +1,2 @@
+if (this !== undefined)
+    throw new Error("this === undefined in module code");
diff --git a/JSTests/stress/simple-script.js b/JSTests/stress/simple-script.js
new file mode 100644 (file)
index 0000000..6f20452
--- /dev/null
@@ -0,0 +1,2 @@
+if (this === undefined)
+    throw new Error("this !== undefined in script code");
index 5bbc272..7197505 100644 (file)
@@ -1,3 +1,19 @@
+2018-11-30  Dean Jackson  <dino@apple.com>
+
+        Add first-class support for .mjs files in jsc binary
+        https://bugs.webkit.org/show_bug.cgi?id=192190
+        <rdar://problem/46375715>
+
+        Reviewed by Keith Miller.
+
+        Treat files with a .mjs extension as a module, regardless
+        of whether or not the --module-file argument was given.
+
+        * jsc.cpp:
+        (printUsageStatement): Update usage.
+        (isMJSFile): Helper to look for .mjs extensions.
+        (CommandLine::parseArguments): Pick the appropriate script type.
+
 2018-11-30  Caio Lima  <ticaiolima@gmail.com>
 
         [BigInt] Implement ValueBitXor into DFG
index e57af00..0c71686 100644 (file)
@@ -2568,10 +2568,22 @@ static NO_RETURN void printUsageStatement(bool help = false)
     fprintf(stderr, "  --dumpOptions              Dumps all non-default JSC VM options before continuing\n");
     fprintf(stderr, "  --<jsc VM option>=<value>  Sets the specified JSC VM option\n");
     fprintf(stderr, "\n");
+    fprintf(stderr, "Files with a .mjs extension will always be evaluated as modules.\n");
+    fprintf(stderr, "\n");
 
     jscExit(help ? EXIT_SUCCESS : EXIT_FAILURE);
 }
 
+static bool isMJSFile(char *filename)
+{
+    filename = strrchr(filename, '.');
+
+    if (filename)
+        return !strcasecmp(filename, ".mjs");
+
+    return false;
+}
+
 void CommandLine::parseArguments(int argc, char** argv)
 {
     Options::initialize();
@@ -2722,7 +2734,8 @@ void CommandLine::parseArguments(int argc, char** argv)
 
         // This arg is not recognized by the VM nor by jsc. Pass it on to the
         // script.
-        m_scripts.append(Script(Script::StrictMode::Sloppy, Script::CodeSource::File, Script::ScriptType::Script, argv[i]));
+        Script::ScriptType scriptType = isMJSFile(argv[i]) ? Script::ScriptType::Module : Script::ScriptType::Script;
+        m_scripts.append(Script(Script::StrictMode::Sloppy, Script::CodeSource::File, scriptType, argv[i]));
     }
 
     if (hasBadJSCOptions && JSC::Options::validateOptions())
index da31d9d..78f29a7 100644 (file)
@@ -1,3 +1,15 @@
+2018-11-30  Dean Jackson  <dino@apple.com>
+
+        Add first-class support for .mjs files in jsc binary
+        https://bugs.webkit.org/show_bug.cgi?id=192190
+        <rdar://problem/46375715>
+
+        Reviewed by Keith Miller.
+
+        Add .mjs files to the regexp looking for all JS files.
+
+        * Scripts/run-jsc-stress-tests:
+
 2018-11-30  Jonathan Bedard  <jbedard@apple.com>
 
         webkitpy: Use DeviceType instead of str to represent device class
index 7040f9b..35a9eb1 100755 (executable)
@@ -1429,7 +1429,7 @@ def allJSFiles(path)
         result = []
         Dir.foreach(path) {
             | filename |
-            next unless filename =~ /\.js$/
+            next unless filename =~ /\.m?js$/
             next unless (path + filename).file?
             result << path + filename
         }