fix dead_code on escaped return assignment (#2693)

fixes #2692
This commit is contained in:
Alex Lam S.L
2017-12-30 15:20:25 +08:00
committed by GitHub
parent d819559a01
commit ed7a0a454e
2 changed files with 30 additions and 4 deletions

View File

@@ -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),

View File

@@ -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"
}