improve fix for #3976 (#3980)

This commit is contained in:
Alex Lam S.L
2020-06-09 17:00:57 +01:00
committed by GitHub
parent ed7c82fa5e
commit 1d15f51238
2 changed files with 9 additions and 11 deletions

View File

@@ -112,7 +112,7 @@ function process_option(name, no_value) {
" --verbose Print diagnostic messages.", " --verbose Print diagnostic messages.",
" --warn Print warning messages.", " --warn Print warning messages.",
" --wrap <name> Embed everything as a function with “exports” corresponding to “name” globally.", " --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")); ].join("\n"));
} }
process.exit(); process.exit();
@@ -303,7 +303,7 @@ function run() {
} }
var result; var result;
if (specified["reduce-test"]) { if (specified["reduce-test"]) {
// load on demand - assumes dev tree checked out // load on demand - assumes cloned repository
var reduce_test = require("../test/reduce"); var reduce_test = require("../test/reduce");
if (Object.keys(files).length != 1) fatal("can only test on a single file"); if (Object.keys(files).length != 1) fatal("can only test on a single file");
result = reduce_test(files[Object.keys(files)[0]], options, { result = reduce_test(files[Object.keys(files)[0]], options, {

View File

@@ -1466,12 +1466,13 @@ merge(Compressor.prototype, {
function is_last_node(node, parent) { function is_last_node(node, parent) {
if (node.TYPE == "Binary") return node.operator == "in" && !is_object(node.right.tail_node()); if (node.TYPE == "Binary") return node.operator == "in" && !is_object(node.right.tail_node());
if (node instanceof AST_Call) { if (node instanceof AST_Call) {
var fn = node.expression; var def, fn = node.expression;
if (fn instanceof AST_SymbolRef) { if (fn instanceof AST_SymbolRef) {
if (recursive_ref(compressor, fn.definition())) return true; def = fn.definition();
fn = fn.fixed_value(); fn = fn.fixed_value();
} }
if (!(fn instanceof AST_Lambda)) return true; if (!(fn instanceof AST_Lambda)) return true;
if (def && recursive_ref(compressor, def)) return true;
if (fn.collapse_scanning) return false; if (fn.collapse_scanning) return false;
fn.collapse_scanning = true; fn.collapse_scanning = true;
var replace = can_replace; var replace = can_replace;
@@ -7572,13 +7573,10 @@ merge(Compressor.prototype, {
}); });
function recursive_ref(compressor, def) { function recursive_ref(compressor, def) {
var node; var level = 0, node = compressor.self();
for (var i = 0; node = compressor.parent(i); i++) { do {
if (node instanceof AST_Lambda) { if (node instanceof AST_Lambda && node.name && node.name.definition() === def) break;
var name = node.name; } while (node = compressor.parent(level++));
if (name && name.definition() === def) break;
}
}
return node; return node;
} }