aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2020-06-09 17:00:57 +0100
committerGitHub <noreply@github.com>2020-06-10 00:00:57 +0800
commit1d15f51238559bf0c508d2eddcd0f9d70517b82b (patch)
tree4b421d2f4b4739eeca6e8fc35742ecec57abf740
parented7c82fa5eeffba48513f017ec8115e88b9638ac (diff)
downloadtracifyjs-1d15f51238559bf0c508d2eddcd0f9d70517b82b.tar.gz
tracifyjs-1d15f51238559bf0c508d2eddcd0f9d70517b82b.zip
improve fix for #3976 (#3980)
-rwxr-xr-xbin/uglifyjs4
-rw-r--r--lib/compress.js16
2 files changed, 9 insertions, 11 deletions
diff --git a/bin/uglifyjs b/bin/uglifyjs
index fcbdff66..da2528d6 100755
--- a/bin/uglifyjs
+++ b/bin/uglifyjs
@@ -112,7 +112,7 @@ function process_option(name, no_value) {
" --verbose Print diagnostic messages.",
" --warn Print warning messages.",
" --wrap <name> Embed everything as a function with “exports” corresponding to “name” globally.",
- " --reduce-test Reduce a standalone test case.",
+ " --reduce-test Reduce a standalone test case (assumes cloned repository).",
].join("\n"));
}
process.exit();
@@ -303,7 +303,7 @@ function run() {
}
var result;
if (specified["reduce-test"]) {
- // load on demand - assumes dev tree checked out
+ // load on demand - assumes cloned repository
var reduce_test = require("../test/reduce");
if (Object.keys(files).length != 1) fatal("can only test on a single file");
result = reduce_test(files[Object.keys(files)[0]], options, {
diff --git a/lib/compress.js b/lib/compress.js
index cfbafbe4..55645286 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -1466,12 +1466,13 @@ merge(Compressor.prototype, {
function is_last_node(node, parent) {
if (node.TYPE == "Binary") return node.operator == "in" && !is_object(node.right.tail_node());
if (node instanceof AST_Call) {
- var fn = node.expression;
+ var def, fn = node.expression;
if (fn instanceof AST_SymbolRef) {
- if (recursive_ref(compressor, fn.definition())) return true;
+ def = fn.definition();
fn = fn.fixed_value();
}
if (!(fn instanceof AST_Lambda)) return true;
+ if (def && recursive_ref(compressor, def)) return true;
if (fn.collapse_scanning) return false;
fn.collapse_scanning = true;
var replace = can_replace;
@@ -7572,13 +7573,10 @@ merge(Compressor.prototype, {
});
function recursive_ref(compressor, def) {
- var node;
- for (var i = 0; node = compressor.parent(i); i++) {
- if (node instanceof AST_Lambda) {
- var name = node.name;
- if (name && name.definition() === def) break;
- }
- }
+ var level = 0, node = compressor.self();
+ do {
+ if (node instanceof AST_Lambda && node.name && node.name.definition() === def) break;
+ } while (node = compressor.parent(level++));
return node;
}