if (this.expression instanceof AST_Function
&& (!this.expression.name || !this.expression.name.definition().references.length)) {
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 this;
expect_stdout: "15"
}
-issue_2437: {
+issue_2437_1: {
options = {
collapse_vars: true,
conditionals: true,
}
input: {
function foo() {
- bar();
+ return bar();
}
function bar() {
if (xhrDesc) {
return result;
}
}
- foo();
+ console.log(foo());
}
expect: {
- !function() {
+ console.log(function() {
if (xhrDesc) {
var result = !!(req = new XMLHttpRequest()).onreadystatechange;
return Object.defineProperty(XMLHttpRequest.prototype, "onreadystatechange", xhrDesc || {}),
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 = {
+ 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() {
+ 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;
+ }
+ }
+ foo();
+ }
+ expect: {
+ !function() {
+ if (xhrDesc)
+ return (req = new XMLHttpRequest()).onreadystatechange,
+ Object.defineProperty(XMLHttpRequest.prototype, "onreadystatechange", xhrDesc || {});
+ var req;
+ (req = new XMLHttpRequest).onreadystatechange = function(){},
+ req[SYMBOL_FAKE_ONREADYSTATECHANGE_1],
req.onreadystatechange = null;
}();
}