@@ -6042,27 +6042,16 @@ merge(Compressor.prototype, {
|
|||||||
function compose(child, level, find) {
|
function compose(child, level, find) {
|
||||||
var parent = compressor.parent(level);
|
var parent = compressor.parent(level);
|
||||||
if (!parent) return find;
|
if (!parent) return find;
|
||||||
if (parent instanceof AST_DestructuredKeyVal) {
|
var in_arg = parent instanceof AST_Lambda && member(child, parent.argnames);
|
||||||
var destructured = compressor.parent(level + 1);
|
return compose(parent, level + 1, in_arg ? function(name) {
|
||||||
if (parent.key === child) {
|
|
||||||
var fn = compressor.parent(level + 2);
|
|
||||||
if (fn instanceof AST_Lambda) {
|
|
||||||
return compose(fn, level + 3, fn.argnames.indexOf(destructured) >= 0 ? function(name) {
|
|
||||||
var def = find(name);
|
var def = find(name);
|
||||||
if (def) return def;
|
if (def) return def;
|
||||||
def = fn.variables.get(name);
|
def = parent.variables.get(name);
|
||||||
if (def) {
|
if (def) {
|
||||||
var sym = def.orig[0];
|
var sym = def.orig[0];
|
||||||
if (sym instanceof AST_SymbolFunarg || sym instanceof AST_SymbolLambda) return def;
|
if (sym instanceof AST_SymbolFunarg || sym instanceof AST_SymbolLambda) return def;
|
||||||
}
|
}
|
||||||
} : function(name) {
|
} : parent.variables ? function(name) {
|
||||||
return find(name) || fn.variables.get(name);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return compose(destructured, level + 2, find);
|
|
||||||
}
|
|
||||||
return compose(parent, level + 1, parent.variables ? function(name) {
|
|
||||||
return find(name) || parent.variables.get(name);
|
return find(name) || parent.variables.get(name);
|
||||||
} : find);
|
} : find);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1726,3 +1726,28 @@ issue_4916: {
|
|||||||
expect_stdout: "undefined"
|
expect_stdout: "undefined"
|
||||||
node_version: ">=6"
|
node_version: ">=6"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_4994: {
|
||||||
|
options = {
|
||||||
|
loops: true,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = "FAIL";
|
||||||
|
(function(b = function() {
|
||||||
|
for (a in { PASS: 42 });
|
||||||
|
}()) {
|
||||||
|
var a;
|
||||||
|
})();
|
||||||
|
console.log(a);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = "FAIL";
|
||||||
|
(function(b = function() {
|
||||||
|
for (a in { PASS: 42 });
|
||||||
|
}()) {})();
|
||||||
|
console.log(a);
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
node_version: ">=6"
|
||||||
|
}
|
||||||
|
|||||||
@@ -2592,3 +2592,36 @@ issue_4608_2: {
|
|||||||
expect_stdout: "f"
|
expect_stdout: "f"
|
||||||
node_version: ">=6"
|
node_version: ">=6"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_4994: {
|
||||||
|
options = {
|
||||||
|
loops: true,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = "FAIL";
|
||||||
|
(function([
|
||||||
|
{
|
||||||
|
[function() {
|
||||||
|
for (a in { PASS: null });
|
||||||
|
}()]: b,
|
||||||
|
},
|
||||||
|
]) {
|
||||||
|
var a;
|
||||||
|
})([ 42 ]);
|
||||||
|
console.log(a);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = "FAIL";
|
||||||
|
(function([
|
||||||
|
{
|
||||||
|
[function() {
|
||||||
|
for (a in { PASS: null });
|
||||||
|
}()]: b,
|
||||||
|
},
|
||||||
|
]) {})([ 42 ]);
|
||||||
|
console.log(a);
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
node_version: ">=6"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user