}
}
}
+ if (self.args.length == 0
+ && self.expression instanceof AST_Function
+ && self.expression.body[0] instanceof AST_Return
+ && self.expression.body[0].value.is_constant()) {
+ return self.expression.body[0].value;
+ }
if (compressor.option("negate_iife")
&& compressor.parent() instanceof AST_SimpleStatement
&& is_iife_call(self)) {
function f3(x) {
var b = x.prop;
sideeffect1();
- return b + (function() { return -9; })();
+ return b + -9;
}
}
}
}
expect_exact: "function fooλ(δλ){}function λ(δλ){}(function λ(δλ){})();"
}
+
+iifes_returning_constants_keep_fargs_true: {
+ options = {
+ keep_fargs : true,
+ side_effects : true,
+ evaluate : true,
+ unused : true,
+ dead_code : true,
+ conditionals : true,
+ comparisons : true,
+ booleans : true,
+ if_return : true,
+ join_vars : true,
+ reduce_vars : true,
+ cascade : true,
+ }
+ input: {
+ (function(){ return -1.23; }());
+ console.log( function foo(){ return "okay"; }() );
+ console.log( function foo(x, y, z){ return 123; }() );
+ console.log( function(x, y, z){ return z; }() );
+ console.log( function(x, y, z){ if (x) return y; return z; }(1, 2, 3) );
+ console.log( function(x, y){ return x * y; }(2, 3) );
+ console.log( function(x, y){ return x * y; }(2, 3, a(), b()) );
+ }
+ expect: {
+ console.log("okay");
+ console.log(123);
+ console.log(void 0);
+ console.log(function(x,y,z){return 2}(1,2,3));
+ console.log(function(x,y){return 6}(2,3));
+ console.log(function(x, y){return 6}(2,3,a(),b()));
+ }
+}
+
+iifes_returning_constants_keep_fargs_false: {
+ options = {
+ keep_fargs : false,
+ side_effects : true,
+ evaluate : true,
+ unused : true,
+ dead_code : true,
+ conditionals : true,
+ comparisons : true,
+ booleans : true,
+ if_return : true,
+ join_vars : true,
+ reduce_vars : true,
+ cascade : true,
+ }
+ input: {
+ (function(){ return -1.23; }());
+ console.log( function foo(){ return "okay"; }() );
+ console.log( function foo(x, y, z){ return 123; }() );
+ console.log( function(x, y, z){ return z; }() );
+ console.log( function(x, y, z){ if (x) return y; return z; }(1, 2, 3) );
+ console.log( function(x, y){ return x * y; }(2, 3) );
+ console.log( function(x, y){ return x * y; }(2, 3, a(), b()) );
+ }
+ expect: {
+ console.log("okay");
+ console.log(123);
+ console.log(void 0);
+ console.log(2);
+ console.log(6);
+ console.log(function(){return 6}(a(),b()));
+ }
+}
conditionals: true
};
input: {
- (function(){ return true })() ? console.log(true) : console.log(false);
+ (function(){ return t })() ? console.log(true) : console.log(false);
}
expect: {
- !function(){ return true }() ? console.log(false) : console.log(true);
+ !function(){ return t }() ? console.log(false) : console.log(true);
}
}
conditionals: true,
};
input: {
- (function(){ return true })() ? console.log(true) : console.log(false);
+ (function(){ return t })() ? console.log(true) : console.log(false);
}
expect: {
- !function(){ return true }() ? console.log(false) : console.log(true);
+ !function(){ return t }() ? console.log(false) : console.log(true);
}
}
sequences: true
};
input: {
- (function(){ return true })() ? console.log(true) : console.log(false);
+ (function(){ return t })() ? console.log(true) : console.log(false);
(function(){
console.log("something");
})();
}
expect: {
- !function(){ return true }() ? console.log(false) : console.log(true), function(){
+ !function(){ return t }() ? console.log(false) : console.log(true), function(){
console.log("something");
}();
}
};
input: {
function f() {
- (function(){ return true })() ? console.log(true) : console.log(false);
+ (function(){ return t })() ? console.log(true) : console.log(false);
(function(){
console.log("something");
})();
(function(){
console.log("something");
})();
- (function(){ return true })() ? console.log(true) : console.log(false);
+ (function(){ return t })() ? console.log(true) : console.log(false);
}
}
expect: {
function f() {
- !function(){ return true }() ? console.log(false) : console.log(true), function(){
+ !function(){ return t }() ? console.log(false) : console.log(true), function(){
console.log("something");
}();
}
function g() {
(function(){
console.log("something");
- })(), function(){ return true }() ? console.log(true) : console.log(false);
+ })(), function(){ return t }() ? console.log(true) : console.log(false);
}
}
}
conditionals: true,
};
input: {
- if ((function(){ return true })()) {
+ if ((function(){ return t })()) {
foo(true);
} else {
bar(false);
})();
}
expect: {
- !function(){ return true }() ? bar(false) : foo(true), function(){
+ !function(){ return t }() ? bar(false) : foo(true), function(){
console.log("something");
}();
}
conditionals: true,
};
input: {
- if ((function(){ return true })()) {
+ if ((function(){ return t })()) {
foo(true);
} else {
bar(false);
})();
}
expect: {
- !function(){ return true }() ? bar(false) : foo(true), function(){
+ !function(){ return t }() ? bar(false) : foo(true), function(){
console.log("something");
}();
}
assert.strictEqual(code, "// comment1 comment2\nbar();");
});
it("should not drop #__PURE__ hint if function is retained", function() {
- var result = Uglify.minify("var a = /*#__PURE__*/(function(){return 1})();", {
+ var result = Uglify.minify("var a = /*#__PURE__*/(function(){ foo(); })();", {
fromString: true,
output: {
comments: "all",
}
});
var code = result.code;
- assert.strictEqual(code, "var a=/*#__PURE__*/function(){return 1}();");
+ assert.strictEqual(code, "var a=/*#__PURE__*/function(){foo()}();");
})
});