drop side_effects-free return values (#2965)
This commit is contained in:
@@ -3644,7 +3644,15 @@ merge(Compressor.prototype, {
|
|||||||
if (this.expression instanceof AST_Function
|
if (this.expression instanceof AST_Function
|
||||||
&& (!this.expression.name || !this.expression.name.definition().references.length)) {
|
&& (!this.expression.name || !this.expression.name.definition().references.length)) {
|
||||||
var node = this.clone();
|
var node = this.clone();
|
||||||
node.expression.process_expression(false, compressor);
|
var exp = node.expression;
|
||||||
|
exp.process_expression(false, compressor);
|
||||||
|
exp.walk(new TreeWalker(function(node) {
|
||||||
|
if (node instanceof AST_Return && node.value) {
|
||||||
|
node.value = node.value.drop_side_effect_free(compressor);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (node instanceof AST_Scope && node !== exp) return true;
|
||||||
|
}));
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
|
|||||||
@@ -3124,7 +3124,57 @@ issue_2425_3: {
|
|||||||
expect_stdout: "15"
|
expect_stdout: "15"
|
||||||
}
|
}
|
||||||
|
|
||||||
issue_2437: {
|
issue_2437_1: {
|
||||||
|
options = {
|
||||||
|
collapse_vars: true,
|
||||||
|
conditionals: true,
|
||||||
|
inline: true,
|
||||||
|
join_vars: true,
|
||||||
|
passes: 2,
|
||||||
|
reduce_funcs: true,
|
||||||
|
reduce_vars: true,
|
||||||
|
side_effects: true,
|
||||||
|
sequences: true,
|
||||||
|
toplevel: true,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
function foo() {
|
||||||
|
return bar();
|
||||||
|
}
|
||||||
|
function bar() {
|
||||||
|
if (xhrDesc) {
|
||||||
|
var req = new XMLHttpRequest();
|
||||||
|
var result = !!req.onreadystatechange;
|
||||||
|
Object.defineProperty(XMLHttpRequest.prototype, 'onreadystatechange', xhrDesc || {});
|
||||||
|
return result;
|
||||||
|
} else {
|
||||||
|
var req = new XMLHttpRequest();
|
||||||
|
var detectFunc = function () {};
|
||||||
|
req.onreadystatechange = detectFunc;
|
||||||
|
var result = req[SYMBOL_FAKE_ONREADYSTATECHANGE_1] === detectFunc;
|
||||||
|
req.onreadystatechange = null;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(foo());
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
console.log(function() {
|
||||||
|
if (xhrDesc) {
|
||||||
|
var result = !!(req = new XMLHttpRequest()).onreadystatechange;
|
||||||
|
return Object.defineProperty(XMLHttpRequest.prototype, "onreadystatechange", xhrDesc || {}),
|
||||||
|
result;
|
||||||
|
}
|
||||||
|
var req, detectFunc = function() {};
|
||||||
|
(req = new XMLHttpRequest()).onreadystatechange = detectFunc;
|
||||||
|
result = req[SYMBOL_FAKE_ONREADYSTATECHANGE_1] === detectFunc;
|
||||||
|
return req.onreadystatechange = null, result;
|
||||||
|
}());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
issue_2437_2: {
|
||||||
options = {
|
options = {
|
||||||
collapse_vars: true,
|
collapse_vars: true,
|
||||||
conditionals: true,
|
conditionals: true,
|
||||||
@@ -3161,14 +3211,12 @@ issue_2437: {
|
|||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
!function() {
|
!function() {
|
||||||
if (xhrDesc) {
|
if (xhrDesc)
|
||||||
var result = !!(req = new XMLHttpRequest()).onreadystatechange;
|
return (req = new XMLHttpRequest()).onreadystatechange,
|
||||||
return Object.defineProperty(XMLHttpRequest.prototype, "onreadystatechange", xhrDesc || {}),
|
Object.defineProperty(XMLHttpRequest.prototype, "onreadystatechange", xhrDesc || {});
|
||||||
result;
|
var req;
|
||||||
}
|
(req = new XMLHttpRequest).onreadystatechange = function(){},
|
||||||
var req, detectFunc = function() {};
|
req[SYMBOL_FAKE_ONREADYSTATECHANGE_1],
|
||||||
(req = new XMLHttpRequest()).onreadystatechange = detectFunc;
|
|
||||||
result = req[SYMBOL_FAKE_ONREADYSTATECHANGE_1] === detectFunc;
|
|
||||||
req.onreadystatechange = null;
|
req.onreadystatechange = null;
|
||||||
}();
|
}();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user