@@ -2051,7 +2051,7 @@ Compressor.prototype.compress = function(node) {
|
|||||||
if (node instanceof AST_BlockScope
|
if (node instanceof AST_BlockScope
|
||||||
&& !(node instanceof AST_Scope)
|
&& !(node instanceof AST_Scope)
|
||||||
&& !(node.variables && node.variables.all(function(def) {
|
&& !(node.variables && node.variables.all(function(def) {
|
||||||
return !lvalues.has(def.name);
|
return !enclosed.has(def.name) && !lvalues.has(def.name);
|
||||||
}))) {
|
}))) {
|
||||||
var replace = can_replace;
|
var replace = can_replace;
|
||||||
can_replace = false;
|
can_replace = false;
|
||||||
@@ -2149,6 +2149,7 @@ Compressor.prototype.compress = function(node) {
|
|||||||
var read_toplevel = false;
|
var read_toplevel = false;
|
||||||
var modify_toplevel = false;
|
var modify_toplevel = false;
|
||||||
// Locate symbols which may execute code outside of scanning range
|
// Locate symbols which may execute code outside of scanning range
|
||||||
|
var enclosed = new Dictionary();
|
||||||
var well_defined = true;
|
var well_defined = true;
|
||||||
var lvalues = get_lvalues(candidate);
|
var lvalues = get_lvalues(candidate);
|
||||||
var lhs_local = is_lhs_local(lhs);
|
var lhs_local = is_lhs_local(lhs);
|
||||||
@@ -3010,6 +3011,9 @@ Compressor.prototype.compress = function(node) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
node.enclosed.forEach(function(def) {
|
||||||
|
if (def.scope !== node) enclosed.set(def.name, true);
|
||||||
|
});
|
||||||
return true;
|
return true;
|
||||||
} else if (find_arguments && node instanceof AST_Sub) {
|
} else if (find_arguments && node instanceof AST_Sub) {
|
||||||
scope.each_argname(function(argname) {
|
scope.each_argname(function(argname) {
|
||||||
|
|||||||
@@ -1752,3 +1752,38 @@ issue_5254: {
|
|||||||
"bar",
|
"bar",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_5260: {
|
||||||
|
options = {
|
||||||
|
collapse_vars: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
"use strict";
|
||||||
|
var a = "foo", o;
|
||||||
|
while (console.log("bar"));
|
||||||
|
o = {
|
||||||
|
baz: function(b) {
|
||||||
|
console.log(a, b);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
for (const a in o)
|
||||||
|
o[a](a);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
"use strict";
|
||||||
|
var a = "foo", o;
|
||||||
|
while (console.log("bar"));
|
||||||
|
o = {
|
||||||
|
baz: function(b) {
|
||||||
|
console.log(a, b);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
for (const a in o)
|
||||||
|
o[a](a);
|
||||||
|
}
|
||||||
|
expect_stdout: [
|
||||||
|
"bar",
|
||||||
|
"foo baz",
|
||||||
|
]
|
||||||
|
node_version: ">=4"
|
||||||
|
}
|
||||||
|
|||||||
@@ -1906,3 +1906,38 @@ issue_5254: {
|
|||||||
]
|
]
|
||||||
node_version: ">=4"
|
node_version: ">=4"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_5260: {
|
||||||
|
options = {
|
||||||
|
collapse_vars: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
"use strict";
|
||||||
|
var a = "foo", o;
|
||||||
|
while (console.log("bar"));
|
||||||
|
o = {
|
||||||
|
baz: function(b) {
|
||||||
|
console.log(a, b);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
for (let a in o)
|
||||||
|
o[a](a);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
"use strict";
|
||||||
|
var a = "foo", o;
|
||||||
|
while (console.log("bar"));
|
||||||
|
o = {
|
||||||
|
baz: function(b) {
|
||||||
|
console.log(a, b);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
for (let a in o)
|
||||||
|
o[a](a);
|
||||||
|
}
|
||||||
|
expect_stdout: [
|
||||||
|
"bar",
|
||||||
|
"foo baz",
|
||||||
|
]
|
||||||
|
node_version: ">=4"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user