@@ -4838,7 +4838,7 @@ merge(Compressor.prototype, {
|
||||
return self;
|
||||
});
|
||||
|
||||
function is_reachable(node, defs) {
|
||||
function is_reachable(self, defs) {
|
||||
var reachable = false;
|
||||
var find_ref = new TreeWalker(function(node) {
|
||||
if (reachable) return true;
|
||||
@@ -4848,7 +4848,7 @@ merge(Compressor.prototype, {
|
||||
});
|
||||
var scan_scope = new TreeWalker(function(node) {
|
||||
if (reachable) return true;
|
||||
if (node instanceof AST_Scope) {
|
||||
if (node instanceof AST_Scope && node !== self) {
|
||||
var parent = scan_scope.parent();
|
||||
if (!(parent instanceof AST_Call && parent.expression === node)) {
|
||||
node.walk(find_ref);
|
||||
@@ -4856,7 +4856,7 @@ merge(Compressor.prototype, {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
node.walk(scan_scope);
|
||||
self.walk(scan_scope);
|
||||
return reachable;
|
||||
}
|
||||
|
||||
@@ -4873,7 +4873,7 @@ merge(Compressor.prototype, {
|
||||
parent = compressor.parent(level++);
|
||||
if (parent instanceof AST_Exit) {
|
||||
if (in_try(level, parent instanceof AST_Throw)) break;
|
||||
if (is_reachable(self, [ def ])) break;
|
||||
if (is_reachable(def.scope, [ def ])) break;
|
||||
if (self.operator == "=") return self.right;
|
||||
return make_node(AST_Binary, self, {
|
||||
operator: self.operator.slice(0, -1),
|
||||
|
||||
@@ -855,3 +855,29 @@ issue_2666: {
|
||||
}
|
||||
expect_stdout: "object"
|
||||
}
|
||||
|
||||
issue_2692: {
|
||||
options = {
|
||||
dead_code: true,
|
||||
reduce_vars: false,
|
||||
}
|
||||
input: {
|
||||
function f(a) {
|
||||
return a = g;
|
||||
function g() {
|
||||
return a;
|
||||
}
|
||||
}
|
||||
console.log(typeof f()());
|
||||
}
|
||||
expect: {
|
||||
function f(a) {
|
||||
return a = g;
|
||||
function g() {
|
||||
return a;
|
||||
}
|
||||
}
|
||||
console.log(typeof f()());
|
||||
}
|
||||
expect_stdout: "function"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user