minor clean-ups (#5282)
authorAlex Lam S.L <alexlamsl@gmail.com>
Mon, 10 Jan 2022 05:02:26 +0000 (05:02 +0000)
committerGitHub <noreply@github.com>
Mon, 10 Jan 2022 05:02:26 +0000 (13:02 +0800)
lib/compress.js
lib/minify.js
lib/mozilla-ast.js
lib/output.js
test/compress/awaits.js
test/sandbox.js
test/ufuzz/index.js

index 5cf1606..f1c6e07 100644 (file)
@@ -116,9 +116,7 @@ function Compressor(options, false_by_default) {
     var global_defs = this.options["global_defs"];
     if (typeof global_defs == "object") for (var key in global_defs) {
         if (/^@/.test(key) && HOP(global_defs, key)) {
-            global_defs[key.slice(1)] = parse(global_defs[key], {
-                expression: true
-            });
+            global_defs[key.slice(1)] = parse(global_defs[key], { expression: true });
         }
     }
     if (this.options["inline"] === true) this.options["inline"] = 4;
@@ -4917,7 +4915,7 @@ Compressor.prototype.compress = function(node) {
             return result;
 
             function decimals(operand) {
-                var match = /(\.[0-9]*)?(e.+)?$/.exec(+operand);
+                var match = /(\.[0-9]*)?(e[^e]+)?$/.exec(+operand);
                 return (match[1] || ".").length - 1 - (match[2] || "").slice(1);
             }
         });
@@ -7862,7 +7860,7 @@ Compressor.prototype.compress = function(node) {
                 s = s.parent_scope;
             } while (s && s !== this);
         });
-        prefix = prefix.replace(/(?:^[^a-z_$]|[^a-z0-9_$])/ig, "_");
+        prefix = prefix.replace(/^[^a-z_$]|[^a-z0-9_$]/gi, "_");
         var name = prefix;
         for (var i = 0; !all(scopes, function(scope) {
             return !scope.var_names().has(name);
index 8d4e5d9..b8f0204 100644 (file)
@@ -28,7 +28,7 @@ function read_source_map(name, toplevel) {
         var match = /^# ([^\s=]+)=(\S+)\s*$/.exec(comment.value);
         if (!match) break;
         if (match[1] == "sourceMappingURL") {
-            match = /^data:application\/json(;.*?)?;base64,(\S+)$/.exec(match[2]);
+            match = /^data:application\/json(;.*?)?;base64,([^,]+)$/.exec(match[2]);
             if (!match) break;
             return to_ascii(match[2]);
         }
index 8bf6a97..8cb3231 100644 (file)
     });
 
     def_to_moz(AST_RegExp, function To_Moz_RegExpLiteral(M) {
-        var flags = M.value.toString().match(/[gimuy]*$/)[0];
+        var flags = M.value.toString().match(/\/([gimuy]*)$/)[1];
         var value = "/" + M.value.raw_source + "/" + flags;
         return {
             type: "Literal",
             raw: value,
             regex: {
                 pattern: M.value.raw_source,
-                flags: flags
-            }
+                flags: flags,
+            },
         };
     });
 
index 5c8f583..6890632 100644 (file)
@@ -521,9 +521,7 @@ function OutputStream(options) {
                 indent();
             }
             var preamble = options.preamble;
-            if (preamble) {
-                print(preamble.replace(/\r\n?|[\n\u2028\u2029]|\s*$/g, "\n"));
-            }
+            if (preamble) print(preamble.replace(/\r\n?|\u2028|\u2029|(^|\S)\s*$/g, "$1\n"));
         }
 
         comments = comments.filter(comment_filter, node);
@@ -1870,8 +1868,8 @@ function OutputStream(options) {
             len = match[0].length;
             digits = str.slice(len);
             candidates.push(digits + "e-" + (digits.length + len - 1));
-        } else if (match = /0+$/.exec(str)) {
-            len = match[0].length;
+        } else if (match = /[^0]0+$/.exec(str)) {
+            len = match[0].length - 1;
             candidates.push(str.slice(0, -len) + "e" + len);
         } else if (match = /^(\d)\.(\d+)e(-?\d+)$/.exec(str)) {
             candidates.push(match[1] + match[2] + "e" + (match[3] - match[2].length));
index 96750dc..10d269b 100644 (file)
@@ -11,6 +11,21 @@ async_arrow: {
     node_version: ">=8"
 }
 
+async_computed: {
+    input: {
+        var o = {
+            async [42]() {
+                return this.p;
+            },
+            p: "PASS",
+        };
+        o[42]().then(console.log);
+    }
+    expect_exact: 'var o={async[42](){return this.p},p:"PASS"};o[42]().then(console.log);'
+    expect_stdout: "PASS"
+    node_version: ">=8"
+}
+
 async_label: {
     input: {
         (async function() {
index 296f179..f4a19bb 100644 (file)
@@ -26,9 +26,11 @@ exports.run_code = semver.satisfies(process.version, "0.8") ? function(code, top
     return stdout;
 } : semver.satisfies(process.version, "<0.12") ? run_code_vm : function(code, toplevel, timeout) {
     if ([
-        /\basync[ \t]*\([\s\S]*?\)[ \t]*=>/,
         /\b(async[ \t]+function|Promise|setImmediate|setInterval|setTimeout)\b/,
-        /\basync([ \t]+|[ \t]*#|[ \t]*\*[ \t]*)[^\s()[\]{}#:;,.&|!~=*%/+-]+(\s*\(|[ \t]*=>)/,
+        /\basync([ \t]+|[ \t]*#)[^\s()[\]{}#:;,.&|!~=*%/+-]+(\s*\(|[ \t]*=>)/,
+        /\basync[ \t]*\*[ \t]*[^\s()[\]{}#:;,.&|!~=*%/+-]+\s*\(/,
+        /\basync([ \t]*\*)?[ \t]*\[[\s\S]*?\]\s*\(/,
+        /\basync[ \t]*\([\s\S]*?\)[ \t]*=>/,
     ].some(function(pattern) {
         return pattern.test(code);
     })) {
index 3578daf..6f0c8d2 100644 (file)
@@ -2290,7 +2290,7 @@ function fuzzy_match(original, uglified) {
     return true;
 
     function collect(input, nums) {
-        return input.replace(/-?([1-9][0-9]*(\.[0-9]+)?|0\.[0-9]+)(e-?[1-9][0-9]*)?/ig, function(num) {
+        return input.replace(/-?([1-9][0-9]*(\.[0-9]+)?|0\.[0-9]+)(e-?[1-9][0-9]*)?/gi, function(num) {
             return "<|" + nums.push(+num) + "|>";
         });
     }