diff --git a/bin/uglifyjs b/bin/uglifyjs index fcbdff6634..da2528d640 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 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 cfbafbe4ee..55645286d5 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; }