@@ -4674,9 +4674,13 @@ merge(Compressor.prototype, {
|
|||||||
var rhs = assign.right;
|
var rhs = assign.right;
|
||||||
if (!assign.write_only) return rhs;
|
if (!assign.write_only) return rhs;
|
||||||
if (!(rhs instanceof AST_Binary && lazy_op[rhs.operator])) return rhs;
|
if (!(rhs instanceof AST_Binary && lazy_op[rhs.operator])) return rhs;
|
||||||
var sym = assign.left;
|
if (!(rhs.left instanceof AST_SymbolRef)) return rhs;
|
||||||
if (!(sym instanceof AST_SymbolRef) || sym.name != rhs.left.name) return rhs;
|
if (!(assign.left instanceof AST_SymbolRef)) return rhs;
|
||||||
return rhs.right.has_side_effects(compressor) ? rhs : rhs.right;
|
var def = assign.left.definition();
|
||||||
|
if (rhs.left.definition() !== def) return rhs;
|
||||||
|
if (rhs.right.has_side_effects(compressor)) return rhs;
|
||||||
|
if (track_assigns(def, rhs.left)) add_assigns(def, rhs.left);
|
||||||
|
return rhs.right;
|
||||||
}
|
}
|
||||||
|
|
||||||
function scan_ref_scoped(node, descend, init) {
|
function scan_ref_scoped(node, descend, init) {
|
||||||
|
|||||||
@@ -2755,3 +2755,37 @@ issue_3962_2: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "PASS"
|
expect_stdout: "PASS"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_3986: {
|
||||||
|
options = {
|
||||||
|
reduce_vars: true,
|
||||||
|
side_effects: true,
|
||||||
|
toplevel: true,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = 0, b = 0;
|
||||||
|
(function() {
|
||||||
|
try {
|
||||||
|
throw 42;
|
||||||
|
} catch (e) {
|
||||||
|
a++;
|
||||||
|
}
|
||||||
|
b = b && 0;
|
||||||
|
})(b *= a);
|
||||||
|
console.log(b);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = 0, b = 0;
|
||||||
|
(function() {
|
||||||
|
try {
|
||||||
|
throw 42;
|
||||||
|
} catch (e) {
|
||||||
|
a++;
|
||||||
|
}
|
||||||
|
b = b && 0;
|
||||||
|
})(b *= a);
|
||||||
|
console.log(b);
|
||||||
|
}
|
||||||
|
expect_stdout: "0"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user