diff --git a/lib/compress.js b/lib/compress.js index 5cf16062..f1c6e07d 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -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); diff --git a/lib/minify.js b/lib/minify.js index 8d4e5d98..b8f02040 100644 --- a/lib/minify.js +++ b/lib/minify.js @@ -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]); } diff --git a/lib/mozilla-ast.js b/lib/mozilla-ast.js index 8bf6a97b..8cb32319 100644 --- a/lib/mozilla-ast.js +++ b/lib/mozilla-ast.js @@ -1005,7 +1005,7 @@ }); 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", @@ -1013,8 +1013,8 @@ raw: value, regex: { pattern: M.value.raw_source, - flags: flags - } + flags: flags, + }, }; }); diff --git a/lib/output.js b/lib/output.js index 5c8f5838..68906328 100644 --- a/lib/output.js +++ b/lib/output.js @@ -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)); diff --git a/test/compress/awaits.js b/test/compress/awaits.js index 96750dc0..10d269b2 100644 --- a/test/compress/awaits.js +++ b/test/compress/awaits.js @@ -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() { diff --git a/test/sandbox.js b/test/sandbox.js index 296f1794..f4a19bb6 100644 --- a/test/sandbox.js +++ b/test/sandbox.js @@ -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); })) { diff --git a/test/ufuzz/index.js b/test/ufuzz/index.js index 3578daf7..6f0c8d2a 100644 --- a/test/ufuzz/index.js +++ b/test/ufuzz/index.js @@ -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) + "|>"; }); }