non_ascii_function_identifier_name: {
input: {
function fooλ(δλ) {}
function λ(δλ) {}
(function λ(δλ) {})()
}
expect_exact: "function fooλ(δλ){}function λ(δλ){}(function λ(δλ){})();"
}
iifes_returning_constants_keep_fargs_true: {
options = {
booleans: true,
collapse_vars: true,
comparisons: true,
conditionals: true,
dead_code: true,
evaluate: true,
if_return: true,
inline: true,
join_vars: true,
keep_fargs: true,
reduce_funcs: true,
reduce_vars: true,
side_effects: true,
unused: 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((a(), b(), 6));
}
expect_stdout: true
}
iifes_returning_constants_keep_fargs_false: {
options = {
booleans: true,
collapse_vars: true,
comparisons: true,
conditionals: true,
dead_code: true,
evaluate: true,
if_return: true,
inline: true,
join_vars: true,
keep_fargs: false,
reduce_funcs: true,
reduce_vars: true,
side_effects: true,
unused: 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((a(), b(), 6));
}
expect_stdout: true
}
issue_485_crashing_1530: {
options = {
conditionals: true,
dead_code: true,
evaluate: true,
inline: true,
side_effects: true,
}
input: {
(function(a) {
if (true) return;
var b = 42;
})(this);
}
expect: {}
}
issue_1841_1: {
options = {
keep_fargs: false,
pure_getters: "strict",
reduce_funcs: true,
reduce_vars: true,
unused: true,
}
input: {
var b = 10;
!function(arg) {
for (var key in "hi")
var n = arg.baz, n = [ b = 42 ];
}(--b);
console.log(b);
}
expect: {
var b = 10;
!function() {
for (var key in "hi")
b = 42;
}(--b);
console.log(b);
}
expect_exact: "42"
}
issue_1841_2: {
options = {
keep_fargs: false,
pure_getters: false,
reduce_funcs: true,
reduce_vars: true,
unused: true,
}
input: {
var b = 10;
!function(arg) {
for (var key in "hi")
var n = arg.baz, n = [ b = 42 ];
}(--b);
console.log(b);
}
expect: {
var b = 10;
!function(arg) {
for (var key in "hi")
arg.baz, b = 42;
}(--b);
console.log(b);
}
expect_exact: "42"
}
function_returning_constant_literal: {
options = {
inline: true,
passes: 2,
properties: true,
reduce_funcs: true,
reduce_vars: true,
side_effects: true,
toplevel: true,
unused: true,
}
input: {
function greeter() {
return { message: 'Hello there' };
}
var greeting = greeter();
console.log(greeting.message);
}
expect: {
console.log("Hello there");
}
expect_stdout: "Hello there"
}
hoist_funs: {
options = {
hoist_funs: true,
}
input: {
console.log(1, typeof f, typeof g);
if (console.log(2, typeof f, typeof g))
console.log(3, typeof f, typeof g);
else {
console.log(4, typeof f, typeof g);
function f() {}
console.log(5, typeof f, typeof g);
}
function g() {}
console.log(6, typeof f, typeof g);
}
expect: {
function f() {}
function g() {}
console.log(1, typeof f, typeof g);
if (console.log(2, typeof f, typeof g))
console.log(3, typeof f, typeof g);
else {
console.log(4, typeof f, typeof g);
console.log(5, typeof f, typeof g);
}
console.log(6, typeof f, typeof g);
}
expect_stdout: [
"1 'function' 'function'",
"2 'function' 'function'",
"4 'function' 'function'",
"5 'function' 'function'",
"6 'function' 'function'",
]
node_version: "<=4"
}
issue_203: {
options = {
2022-09-08 | gnu: bootloader: Report error in menu-entry....* gnu/bootloader.scm (report-menu-entry-error): New procedure.
(menu-entry->sexp): Add a call to `report-menu-entry-error'.
Co-Authored-By: Julien Lepiller <julien@lepiller.eu>
Signed-off-by: Julien Lepiller <julien@lepiller.eu>
| tiantian |
2022-09-08 | gnu: bootloader: Extend `<menu-entry>' for chain-loader....* gnu/bootloader.scm (<menu-entry>)[chain-loader]: New field.
(menu-entry->sexp, sexp->menu-entry): Support chain-loader.
* doc/guix.texi (Bootloader Configuration): Document it.
Co-Authored-By: Julien Lepiller <julien@lepiller.eu>
Signed-off-by: Julien Lepiller <julien@lepiller.eu>
| tiantian |
= 0;
23..toString(),
console.log(c);
}
expect_stdout: "0"
}
issue_2097: {
options = {
negate_iife: true,
reduce_funcs: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
function f() {
try {
throw 0;
} catch (e) {
console.log(arguments[0]);
}
}
f(1);
}
expect: {
!function() {
try {
throw 0;
} catch (e) {
console.log(arguments[0]);
}
}(1);
}
expect_stdout: "1"
}
issue_2101: {
options = {
inline: true,
}
input: {
a = {};
console.log(function() {
return function() {
return this.a;
}();
}() === function() {
return a;
}());
}
expect: {
a = {};
console.log(function() {
return this.a;
}() === a);
}
expect_stdout: "true"
}
inner_ref: {
options = {
inline: true,
unused: true,
}
input: {
console.log(function(a) {
return function() {
return a;
}();
}(1), function(a) {
return function(a) {
return a;
}();
}(2));
}
expect: {
console.log(1, void 0);
}
expect_stdout: "1 undefined"
}
issue_2107: {
options = {
assignments: true,
collapse_vars: true,
inline: true,
passes: 3,
sequences: true,
side_effects: true,
unused: true,
}
input: {
var c = 0;
!function() {
c++;
}(c++ + new function() {
this.a = 0;
var a = (c = c + 1) + (c = 1 + c);
return c++ + a;
}());
console.log(c);
}
expect: {
var c = 0;
c++, new function() {
this.a = 0, c = 1 + (c += 1), c++;
}(), c++, console.log(c);
}
expect_stdout: "5"
}
issue_2114_1: {
options = {
assignments: true,
collapse_vars: true,
if_return: true,
inline: true,
keep_fargs: false,
side_effects: true,
unused: true,
}
input: {
var c = 0;
!function(a) {
a = 0;
}([ {
0: c = c + 1,
length: c = 1 + c
}, typeof void function a() {
var b = function f1(a) {
}(b && (b.b += (c = c + 1, 0)));
}() ]);
console.log(c);
}
expect: {
var c = 0;
c = 1 + (c += 1), function() {
var b = void (b && (b.b += (c += 1, 0)));
}();
console.log(c);
}
expect_stdout: "2"
}
issue_2114_2: {
options = {
assignments: true,
collapse_vars: true,
if_return: true,
inline: true,
keep_fargs: false,
passes: 2,
side_effects: true,
unused: true,
}
input: {
var c = 0;
!function(a) {
a = 0;
}([ {
0: c = c + 1,
length: c = 1 + c
}, typeof void function a() {
var b = function f1(a) {
}(b && (b.b += (c = c + 1, 0)));
}() ]);
console.log(c);
}
expect: {
var c = 0;
c = 1 + (c += 1), function() {
var b = void (b && (b.b += (c += 1, 0)));
}();
console.log(c);
}
expect_stdout: "2"
}
issue_2428: {
options = {
collapse_vars: true,
inline: true,
passes: 3,
pure_getters: "strict",
reduce_funcs: true,
reduce_vars: true,
side_effects: true,
toplevel: true,
unsafe: true,
unused: true,
}
input: {
function bar(k) {
console.log(k);
}
function foo(x) {
return bar(x);
}
function baz(a) {
foo(a);
}
baz(42);
baz("PASS");
}
expect: {
function baz(a) {
console.log(a);
}
baz(42);
baz("PASS");
}
expect_stdout: [
"42",
"PASS",
]
}
issue_2531_1: {
options = {
evaluate: true,
inline: true,
reduce_funcs: true,
reduce_vars: true,
unused: true,
}
input: {
function outer() {
function inner(value) {
function closure() {
return value;
}
return function() {
return closure();
};
}
return inner("Hello");
}
console.log("Greeting:", outer()());
}
expect: {
function outer() {
return value = "Hello", function() {
return value;
};
var value;
}
console.log("Greeting:", outer()());
}
expect_stdout: "Greeting: Hello"
}
issue_2531_2: {
options = {
evaluate: true,
inline: true,
passes: 3,
reduce_funcs: true,
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
function outer() {
function inner(value) {
function closure() {
return value;
}
return function() {
return closure();
};
}
return inner("Hello");
}
console.log("Greeting:", outer()());
}
expect: {
function outer() {
return function() {
return "Hello";
};
}
console.log("Greeting:", outer()());
}
expect_stdout: "Greeting: Hello"
}
issue_2531_3: {
options = {
evaluate: true,
inline: true,
passes: 3,
reduce_funcs: true,
reduce_vars: true,
side_effects: true,
toplevel: true,
unused: true,
}
input: {
function outer() {
function inner(value) {
function closure() {
return value;
}
return function() {
return closure();
};
}
return inner("Hello");
}
console.log("Greeting:", outer()());
}
expect: {
console.log("Greeting:", "Hello");
}
expect_stdout: "Greeting: Hello"
}
empty_body: {
options = {
reduce_vars: true,
side_effects: true,
}
input: {
function f() {
function noop() {}
noop();
return noop;
}
}
expect: {
function f() {
function noop() {}
return noop;
}
}
}
inline_loop_1: {
options = {
inline: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
function f() {
return x();
}
for (;;) f();
}
expect: {
for (;;) x();
}
}
inline_loop_2: {
options = {
inline: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
for (;;) f();
function f() {
return x();
}
}
expect: {
for (;;) x();
}
}
inline_loop_3: {
options = {
inline: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
var f = function() {
return x();
};
for (;;) f();
}
expect: {
for (;;) x();
}
}
inline_loop_4: {
options = {
inline: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
for (;;) f();
var f = function() {
return x();
};
}
expect: {
for (;;) f();
var f = function() {
return x();
};
}
}
issue_2476: {
options = {
inline: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
function foo(x, y, z) {
return x < y ? x * y + z : x * z - y;
}
for (var sum = 0, i = 0; i < 10; i++)
sum += foo(i, i + 1, 3 * i);
console.log(sum);
}
expect: {
for (var sum = 0, i = 0; i < 10; i++)
sum += (x = i, y = i + 1, z = 3 * i, x < y ? x * y + z : x * z - y);
var x, y, z;
console.log(sum);
}
expect_stdout: "465"
}
issue_2601_1: {
options = {
inline: true,
reduce_vars: true,
sequences: true,
side_effects: true,
unused: true,
}
input: {
var a = "FAIL";
(function() {
function f(b) {
function g(b) {
b && b();
}
g();
(function() {
b && (a = "PASS");
})();
}
f("foo");
})();
console.log(a);
}
expect: {
var a = "FAIL";
(function() {
var b;
b = "foo",
function(b) {
b && b();
}(),
b && (a = "PASS");
})(),
console.log(a);
}
expect_stdout: "PASS"
}
issue_2601_2: {
rename = true
options = {
evaluate: true,
inline: true,
passes: 3,
reduce_vars: true,
sequences: true,
side_effects: true,
unused: true,
}
mangle = {}
input: {
var a = "FAIL";
(function() {
function f(b) {
function g(b) {
b && b();
}
g();
(function() {
b && (a = "PASS");
})();
}
f("foo");
})();
console.log(a);
}
expect: {
var a = "FAIL";
a = "PASS",
console.log(a);
}
expect_stdout: "PASS"
}
issue_2604_1: {
options = {
inline: true,
side_effects: true,
unused: true,
}
input: {
var a = "FAIL";
(function() {
try {
throw 1;
} catch (b) {
(function f(b) {
b && b();
})();
b && (a = "PASS");
}
})();
console.log(a);
}
expect: {
var a = "FAIL";
(function() {
try {
throw 1;
} catch (b) {
(function(b) {
b && b();
})();
b && (a = "PASS");
}
})();
console.log(a);
}
expect_stdout: "PASS"
}
issue_2604_2: {
rename = true
options = {
evaluate: true,
inline: true,
passes: 3,
reduce_vars: true,
side_effects: true,
unused: true,
}
mangle = {}
input: {
var a = "FAIL";
(function() {
try {
throw 1;
} catch (b) {
(function f(b) {
b && b();
})();
b && (a = "PASS");
}
})();
console.log(a);
}
expect: {
var a = "FAIL";
(function() {
try {
throw 1;
} catch (o) {
o && (a = "PASS");
}
})();
console.log(a);
}
expect_stdout: "PASS"
}
unsafe_apply_1: {
options = {
inline: true,
passes: 2,
reduce_vars: true,
side_effects: true,
unsafe: true,
unused: true,
}
input: {
(function(a, b) {
console.log(a, b);
}).apply("foo", [ "bar" ]);
(function(a, b) {
console.log(this, a, b);
}).apply("foo", [ "bar" ]);
(function(a, b) {
console.log(a, b);
}).apply("foo", [ "bar" ], "baz");
}
expect: {
console.log("bar", void 0);
(function(a, b) {
console.log(this, a, b);
}).call("foo", "bar");
(function(a, b) {
console.log(a, b);
}).apply("foo", [ "bar" ], "baz");
}
expect_stdout: true
}
unsafe_apply_2: {
options = {
reduce_vars: true,
side_effects: true,
toplevel: true,
unsafe: true,
}
input: {
function foo() {
console.log(a, b);
}
var bar = function(a, b) {
console.log(this, a, b);
}
(function() {
foo.apply("foo", [ "bar" ]);
bar.apply("foo", [ "bar" ]);
})();
}
expect: {
function foo() {
console.log(a, b);
}
var bar = function(a, b) {
console.log(this, a, b);
}
(function() {
foo("bar");
bar.call("foo", "bar");
})();
}
expect_stdout: true
}
unsafe_call_1: {
options = {
inline: true,
passes: 2,
reduce_vars: true,
side_effects: true,
unsafe: true,
unused: true,
}
input: {
(function(a, b) {
console.log(a, b);
}).call("foo", "bar");
(function(a, b) {
console.log(this, a, b);
}).call("foo", "bar");
}
expect: {
console.log("bar", void 0);
(function(a, b) {
console.log(this, a, b);
}).call("foo", "bar");
}
expect_stdout: true
}
unsafe_call_2: {
options = {
reduce_vars: true,
side_effects: true,
toplevel: true,
unsafe: true,
}
input: {
function foo() {
console.log(a, b);
}
var bar = function(a, b) {
console.log(this, a, b);
}
(function() {
foo.call("foo", "bar");
bar.call("foo", "bar");
})();
}
expect: {
function foo() {
console.log(a, b);
}
var bar = function(a, b) {
console.log(this, a, b);
}
(function() {
foo("bar");
bar.call("foo", "bar");
})();
}
expect_stdout: true
}
unsafe_call_3: {
options = {
side_effects: true,
unsafe: true,
}
input: {
console.log(function() {
return arguments[0] + eval("arguments")[1];
}.call(0, 1, 2));
}
expect: {
console.log(function() {
return arguments[0] + eval("arguments")[1];
}(1, 2));
}
expect_stdout: "3"
}
issue_2616: {
options = {
evaluate: true,
inline: true,
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
var c = "FAIL";
(function() {
function f() {
function g(NaN) {
(true << NaN) - 0/0 || (c = "PASS");
}
g([]);
}
f();
})();
console.log(c);
}
expect: {
var c = "FAIL";
(true << []) - NaN || (c = "PASS");
console.log(c);
}
expect_stdout: "PASS"
}
issue_2620_1: {
options = {
inline: true,
reduce_vars: true,
sequences: true,
side_effects: true,
unused: true,
}
input: {
var c = "FAIL";
(function() {
function f(a) {
var b = function g(a) {
a && a();
}();
if (a) {
var d = c = "PASS";
}
}
f(1);
})();
console.log(c);
}
expect: {
var c = "FAIL";
!function(a) {
if (function(a) {
a && a();
}(), a) c = "PASS";
}(1),
console.log(c);
}
expect_stdout: "PASS"
}
issue_2620_2: {
options = {
conditionals: true,
evaluate: true,
inline: true,
passes: 2,
reduce_vars: true,
sequences: true,
side_effects: true,
unused: true,
}
input: {
var c = "FAIL";
(function() {
function f(a) {
var b = function g(a) {
a && a();
}();
if (a) {
var d = c = "PASS";
}
}
f(1);
})();
console.log(c);
}
expect: {
var c = "FAIL";
c = "PASS",
console.log(c);
}
expect_stdout: "PASS"
}
issue_2620_3: {
options = {
evaluate: true,
inline: true,
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
var c = "FAIL";
(function() {
function f(a, NaN) {
function g() {
switch (a) {
case a:
break;
case c = "PASS", NaN:
break;
}
}
g();
}
f(0/0);
})();
console.log(c);
}
expect: {
var c = "FAIL";
!function(a, NaN) {
(function() {
switch (a) {
case a:
break;
case c = "PASS", NaN:
break;
}
})();
}(NaN);
console.log(c);
}
expect_stdout: "PASS"
}
issue_2620_4: {
rename = true
options = {
dead_code: true,
evaluate: true,
inline: true,
passes: 2,
reduce_vars: true,
side_effects: true,
switches: true,
unused: true,
}
input: {
var c = "FAIL";
(function() {
function f(a, NaN) {
function g() {
switch (a) {
case a:
break;
case c = "PASS", NaN:
break;
}
}
g();
}
f(0/0);
})();
console.log(c);
}
expect: {
var c = "FAIL";
!function() {
switch (NaN) {
case void (c = "PASS"):
}
}();
console.log(c);
}
expect_stdout: "PASS"
}
issue_2630_1: {
options = {
collapse_vars: true,
inline: true,
passes: 2,
reduce_funcs: true,
reduce_vars: true,
sequences: true,
side_effects: true,
unused: true,
}
input: {
var c = 0;
(function() {
while (f());
function f() {
var a = function() {
var b = c++, d = c = 1 + c;
}();
}
})();
console.log(c);
}
expect: {
var c = 0;
(function() {
while (void (c = 1 + ++c));
})(),
console.log(c);
}
expect_stdout: "2"
}
issue_2630_2: {
options = {
assignments: true,
collapse_vars: true,
inline: true,
passes: 2,
reduce_vars: true,
sequences: true,
side_effects: true,
unused: true,
}
input: {
var c = 0;
!function() {
while (f()) {}
function f() {
var not_used = function() {
c = 1 + c;
}(c = c + 1);
}
}();
console.log(c);
}
expect: {
var c = 0;
!function() {
while (void (c = 1 + (c += 1)));
}(), console.log(c);
}
expect_stdout: "2"
}
issue_2630_3: {
options = {
inline: true,
reduce_vars: true,
unused: true,
}
input: {
var x = 2, a = 1;
(function() {
function f1(a) {
f2();
--x >= 0 && f1({});
}
f1(a++);
function f2() {
a++;
}
})();
console.log(a);
}
expect: {
var x = 2, a = 1;
(function() {
(function f1(a) {
f2();
--x >= 0 && f1();
})(a++);
function f2() {
a++;
}
})();
console.log(a);
}
expect_stdout: "5"
}
issue_2630_4: {
options = {
collapse_vars: true,
inline: true,
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
var x = 3, a = 1, b = 2;
(function() {
(function f1() {
while (--x >= 0 && f2());
}());
function f2() {
a++ + (b += a);
}
})();
console.log(a);
}
expect: {
var x = 3, a = 1, b = 2;
!function() {
while (--x >= 0 && void (b += ++a));
}();
console.log(a);
}
expect_stdout: "2"
}
issue_2630_5: {
options = {
assignments: true,
collapse_vars: true,
inline: true,
reduce_vars: true,
unused: true,
}
input: {
var c = 1;
!function() {
do {
c *= 10;
} while (f());
function f() {
return function() {
return (c = 2 + c) < 100;
}(c = c + 3);
}
}();
console.log(c);
}
expect: {
var c = 1;
!function() {
do {
c *= 10;
} while ((c = 2 + (c += 3)) < 100);
}();
console.log(c);
}
expect_stdout: "155"
}
recursive_inline_1: {
options = {
inline: true,
reduce_funcs: true,
reduce_vars: true,
sequences: true,
toplevel: true,
unused: true,
}
input: {
function f() {
h();
}
function g(a) {
a();
}
function h(b) {
g();
if (b) x();
}
}
expect: {}
}
recursive_inline_2: {
options = {
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
function f(n) {
return n ? n * f(n - 1) : 1;
}
console.log(f(5));
}
expect: {
console.log(function f(n) {
return n ? n * f(n - 1) : 1;
}(5));
}
expect_stdout: "120"
}
issue_2657: {
options = {
inline: true,
passes: 2,
reduce_funcs: true,
reduce_vars: true,
sequences: true,
unused: true,
}
input: {
"use strict";
console.log(function f() {
return h;
function g(b) {
return b || b();
}
function h(a) {
g(a);
return a;
}
}()(42));
}
expect: {
"use strict";
console.log(function(a) {
return b = a, b || b(), a;
var b;
}(42));
}
expect_stdout: "42"
}
issue_2663_1: {
options = {
inline: true,
reduce_vars: true,
unused: true,
}
input: {
(function() {
var i, o = {};
function createFn(j) {
return function() {
console.log(j);
};
}
for (i in { a: 1, b: 2, c: 3 })
o[i] = createFn(i);
for (i in o)
o[i]();
})();
}
expect: {
(function() {
var i, o = {};
function createFn(j) {
return function() {
console.log(j);
};
}
for (i in { a: 1, b: 2, c: 3 })
o[i] = createFn(i);
for (i in o)
o[i]();
})();
}
expect_stdout: [
"a",
"b",
"c",
]
}
issue_2663_2: {
options = {
inline: true,
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
(function() {
var i;
function fn(j) {
return function() {
console.log(j);
}();
}
for (i in { a: 1, b: 2, c: 3 })
fn(i);
})();
}
expect: {
(function() {
for (var i in { a: 1, b: 2, c: 3 })
j = i, console.log(j);
var j;
})();
}
expect_stdout: [
"a",
"b",
"c",
]
}
issue_2663_3: {
options = {
inline: true,
reduce_vars: true,
unused: true,
}
input: {
(function() {
var outputs = [
{ type: 0, target: null, eventName: "ngSubmit", propName: null },
{ type: 0, target: null, eventName: "submit", propName: null },
{ type: 0, target: null, eventName: "reset", propName: null },
];
function listenToElementOutputs(outputs) {
var handlers = [];
for (var i = 0; i < outputs.length; i++) {
var output = outputs[i];
var handleEventClosure = renderEventHandlerClosure(output.eventName);
handlers.push(handleEventClosure)
}
var target, name;
return handlers;
}
function renderEventHandlerClosure(eventName) {
return function() {
return console.log(eventName);
};
}
listenToElementOutputs(outputs).forEach(function(handler) {
return handler()
});
})();
}
expect: {
(function() {
function renderEventHandlerClosure(eventName) {
return function() {
return console.log(eventName);
};
}
(function(outputs) {
var handlers = [];
for (var i = 0; i < outputs.length; i++) {
var output = outputs[i];
var handleEventClosure = renderEventHandlerClosure(output.eventName);
handlers.push(handleEventClosure);
}
return handlers;
})([ {
type: 0,
target: null,
eventName: "ngSubmit",
propName: null
}, {
type: 0,
target: null,
eventName: "submit",
propName: null
}, {
type: 0,
target: null,
eventName: "reset",
propName: null
} ]).forEach(function(handler) {
return handler();
});
})();
}
expect_stdout: [
"ngSubmit",
"submit",
"reset",
]
}
duplicate_argnames_1: {
options = {
inline: true,
side_effects: true,
}
input: {
console.log(function(a, a, a) {
return a;
}("FAIL", 42, "PASS"));
}
expect: {
console.log("PASS");
}
expect_stdout: "PASS"
}
duplicate_argnames_2: {
options = {
inline: true,
reduce_vars: true,
side_effects: true,
toplevel: true,
unused: true,
}
input: {
var a = "PASS";
function f(b, b, b) {
b && (a = "FAIL");
}
f(0, console);
console.log(a);
}
expect: {
var a = "PASS";
console, void 0 && (a = "FAIL");
console.log(a);
}
expect_stdout: "PASS"
}
duplicate_argnames_3: {
options = {
inline: true,
reduce_vars: true,
side_effects: true,
toplevel: true,
unused: true,
}
input: {
var a = "FAIL";
function f(b, b, b) {
b && (a = "PASS");
}
f(null, 0, console, "42".toString());
console.log(a);
}
expect: {
var a = "FAIL";
b = console, "42".toString(), b && (a = "PASS");
var b;
console.log(a);
}
expect_stdout: "PASS"
}
loop_init_arg: {
options = {
inline: true,
side_effects: true,
toplevel: true,
}
input: {
var a = "PASS";
for (var k in "12") (function(b) {
(b >>= 1) && (a = "FAIL"), b = 2;
})();
console.log(a);
}
expect: {
var a = "PASS";
for (var k in "12")
b = void 0, (b >>= 1) && (a = "FAIL"), b = 2;
var b;
console.log(a);
}
expect_stdout: "PASS"
}
inline_false: {
options = {
inline: false,
side_effects: true,
toplevel: true,
}
input: {
(function() {
console.log(1);
})();
(function(a) {
console.log(a);
})(2);
(function(b) {
var c = b;
console.log(c);
})(3);
}
expect: {
(function() {
console.log(1);
})();
(function(a) {
console.log(a);
})(2);
(function(b) {
var c = b;
console.log(c);
})(3);
}
expect_stdout: [
"1",
"2",
"3",
]
}
inline_0: {
options = {
inline: 0,
side_effects: true,
toplevel: true,
}
input: {
(function() {
console.log(1);
})();
(function(a) {
console.log(a);
})(2);
(function(b) {
var c = b;
console.log(c);
})(3);
}
expect: {
(function() {
console.log(1);
})();
(function(a) {
console.log(a);
})(2);
(function(b) {
var c = b;
console.log(c);
})(3);
}
expect_stdout: [
"1",
"2",
"3",
]
}
inline_1: {
options = {
inline: 1,
side_effects: true,
toplevel: true,
}
input: {
(function() {
console.log(1);
})();
(function(a) {
console.log(a);
})(2);
(function(b) {
var c = b;
console.log(c);
})(3);
}
expect: {
console.log(1);
(function(a) {
console.log(a);
})(2);
(function(b) {
var c = b;
console.log(c);
})(3);
}
expect_stdout: [
"1",
"2",
"3",
]
}
inline_2: {
options = {
inline: 2,
side_effects: true,
toplevel: true,
}
input: {
(function() {
console.log(1);
})();
(function(a) {
console.log(a);
})(2);
(function(b) {
var c = b;
console.log(c);
})(3);
}
expect: {
console.log(1);
console.log(2);
(function(b) {
var c = b;
console.log(c);
})(3);
}
expect_stdout: [
"1",
"2",
"3",
]
}
inline_3: {
options = {
inline: 3,
side_effects: true,
toplevel: true,
}
input: {
(function() {
console.log(1);
})();
(function(a) {
console.log(a);
})(2);
(function(b) {
var c = b;
console.log(c);
})(3);
}
expect: {
console.log(1);
console.log(2);
b = 3, c = b, console.log(c);
var b, c;
}
expect_stdout: [
"1",
"2",
"3",
]
}
inline_true: {
options = {
inline: true,
side_effects: true,
toplevel: true,
}
input: {
(function() {
console.log(1);
})();
(function(a) {
console.log(a);
})(2);
(function(b) {
var c = b;
console.log(c);
})(3);
}
expect: {
console.log(1);
console.log(2);
b = 3, c = b, console.log(c);
var b, c;
}
expect_stdout: [
"1",
"2",
"3",
]
}
use_before_init_in_loop: {
options = {
inline: true,
side_effects: true,
toplevel: true,
}
input: {
var a = "PASS";
for (var b = 2; --b >= 0;) (function() {
var c = function() {
return 1;
}(c && (a = "FAIL"));
})();
console.log(a);
}
expect: {
var a = "PASS";
for (var b = 2; --b >= 0;)
c = void 0, c = (c && (a = "FAIL"), 1);
var c;
console.log(a);
}
expect_stdout: "PASS"
}
duplicate_arg_var_1: {
options = {
inline: true,
}
input: {
console.log(function(b) {
return b;
var b;
}("PASS"));
}
expect: {
console.log("PASS");
}
expect_stdout: "PASS"
}
duplicate_arg_var_2: {
options = {
inline: true,
toplevel: true,
}
input: {
console.log(function(b) {
return b + "SS";
var b;
}("PA"));
}
expect: {
console.log("PA" + "SS");
}
expect_stdout: "PASS"
}
duplicate_arg_var_3: {
options = {
inline: true,
toplevel: true,
}
input: {
console.log(function(b) {
return b + "SS";
var b;
}("PA", "42".toString()));
}
expect: {
console.log((b = "PA", "42".toString(), b + "SS"));
var b;
}
expect_stdout: "PASS"
}
issue_2737_1: {
options = {
inline: true,
reduce_vars: true,
unused: true,
}
input: {
(function(a) {
while (a());
})(function f() {
console.log(typeof f);
});
}
expect: {
(function(a) {
while (a());
})(function f() {
console.log(typeof f);
});
}
expect_stdout: "function"
}
issue_2737_2: {
options = {
inline: true,
reduce_vars: true,
unused: true,
}
input: {
(function(bar) {
for (;bar();) break;
})(function qux() {
return console.log("PASS"), qux;
});
}
expect: {
(function(bar) {
for (;bar();) break;
})(function qux() {
return console.log("PASS"), qux;
});
}
expect_stdout: "PASS"
}
issue_2783: {
options = {
collapse_vars: true,
conditionals: true,
if_return: true,
inline: true,
reduce_vars: true,
unused: true,
}
input: {
(function() {
return g;
function f(a) {
var b = a.b;
if (b) return b;
return a;
}
function g(o, i) {
while (i--) {
console.log(f(o));
}
}
})()({ b: "PASS" }, 1);
}
expect: {
(function() {
return function(o,i) {
while (i--) console.log(f(o));
};
function f(a) {
var b = a.b;
return b || a;
}
})()({ b: "PASS" },1);
}
expect_stdout: "PASS"
}
issue_2898: {
options = {
collapse_vars: true,
inline: true,
reduce_vars: true,
sequences: true,
unused: true,
}
input: {
var c = 0;
(function() {
while (f());
function f() {
var b = (c = 1 + c, void (c = 1 + c));
b && b[0];
}
})();
console.log(c);
}
expect: {
var c = 0;
(function() {
while (b = void 0, void ((b = void (c = 1 + (c = 1 + c))) && b[0]));
var b;
})(),
console.log(c);
}
expect_stdout: "2"
}
deduplicate_parenthesis: {
input: {
({}).a = b;
(({}).a = b)();
(function() {}).a = b;
((function() {}).a = b)();
}
expect_exact: "({}).a=b;({}.a=b)();(function(){}).a=b;(function(){}.a=b)();"
}
issue_3016_1: {
options = {
inline: true,
toplevel: true,
}
input: {
var b = 1;
do {
(function(a) {
return a[b];
var a;
})(3);
} while (0);
console.log(b);
}
expect: {
var b = 1;
do {
3[b];
} while(0);
console.log(b);
}
expect_stdout: "1"
}
issue_3016_2: {
options = {
dead_code: true,
inline: true,
toplevel: true,
}
input: {
var b = 1;
do {
(function(a) {
return a[b];
try {
a = 2;
} catch (a) {
var a;
}
})(3);
} while (0);
console.log(b);
}
expect: {
var b = 1;
do {
a = 3,
a[b];
} while(0);
var a;
console.log(b);
}
expect_stdout: "1"
}
issue_3016_2_ie8: {
options = {
dead_code: true,
ie8: true,
inline: true,
toplevel: true,
}
input: {
var b = 1;
do {
(function(a) {
return a[b];
try {
a = 2;
} catch (a) {
var a;
}
})(3);
} while (0);
console.log(b);
}
expect: {
var b = 1;
do {
a = 3,
a[b];
} while(0);
var a;
console.log(b);
}
expect_stdout: "1"
}
issue_3016_3: {
options = {
dead_code: true,
inline: true,
toplevel: true,
}
input: {
var b = 1;
do {
console.log(function() {
return a ? "FAIL" : a = "PASS";
try {
a = 2;
} catch (a) {
var a;
}
}());
} while (b--);
}
expect: {
var b = 1;
do {
console.log((a = void 0, a ? "FAIL" : a = "PASS"));
} while(b--);
var a;
}
expect_stdout: [
"PASS",
"PASS",
]
}
issue_3016_3_ie8: {
options = {
dead_code: true,
ie8: true,
inline: true,
toplevel: true,
}
input: {
var b = 1;
do {
console.log(function() {
return a ? "FAIL" : a = "PASS";
try {
a = 2;
} catch (a) {
var a;
}
}());
} while (b--);
}
expect: {
var b = 1;
do {
console.log((a = void 0, a ? "FAIL" : a = "PASS"));
} while(b--);
var a;
}
expect_stdout: [
"PASS",
"PASS",
]
}
issue_3018: {
options = {
inline: true,
side_effects: true,
toplevel: true,
}
input: {
var b = 1, c = "PASS";
do {
(function() {
(function(a) {
a = 0 != (a && (c = "FAIL"));
})();
})();
} while (b--);
console.log(c);
}
expect: {
var b = 1, c = "PASS";
do {
a = void 0,
a = 0 != (a && (c = "FAIL"));
} while (b--);
var a;
console.log(c);
}
expect_stdout: "PASS"
}
issue_3054: {
options = {
booleans: true,
collapse_vars: true,
inline: 1,
reduce_vars: true,
toplevel: true,
}
input: {
"use strict";
function f() {
return { a: true };
}
console.log(function(b) {
b = false;
return f();
}().a, f.call().a);
}
expect: {
"use strict";
function f() {
return { a: !0 };
}
console.log(function(b) {
b = !1;
return f();
}().a, f.call().a);
}
expect_stdout: "true true"
}
issue_3076: {
options = {
dead_code: true,
inline: true,
sequences: true,
unused: true,
}
input: {
var c = "PASS";
(function(b) {
var n = 2;
while (--b + function() {
e && (c = "FAIL");
e = 5;
return 1;
try {
var a = 5;
} catch (e) {
var e;
}
}().toString() && --n > 0);
})(2);
console.log(c);
}
expect: {
var c = "PASS";
(function(b) {
var n = 2;
while (--b + (e = void 0, e && (c = "FAIL"), e = 5, 1..toString()) && --n > 0);
var e;
})(2),
console.log(c);
}
expect_stdout: "PASS"
}
issue_3125: {
options = {
inline: true,
unsafe: true,
}
input: {
console.log(function() {
return "PASS";
}.call());
}
expect: {
console.log("PASS");
}
expect_stdout: "PASS"
}
issue_3274: {
options = {
collapse_vars: true,
inline: true,
join_vars: true,
loops: true,
passes: 2,
reduce_vars: true,
unused: true,
}
input: {
(function() {
var g = function(a) {
var c = a.p, b = c;
return b != c;
};
while (g(1))
console.log("FAIL");
console.log("PASS");
})();
}
expect: {
(function() {
for (var c; (c = 1..p) != c;)
console.log("FAIL");
console.log("PASS");
})();
}
expect_stdout: "PASS"
}
issue_3297_1: {
options = {
collapse_vars: true,
inline: true,
reduce_vars: true,
unused: true,
}
mangle = {}
input: {
function function1() {
var r = {
function2: function2
};
function function2() {
alert(1234);
function function3() {
function2();
};
function3();
}
return r;
}
}
expect: {
function function1() {
return {
function2: function n() {
alert(1234);
function t() {
n();
}
t();
}
};
}
}
}
issue_3297_2: {
options = {
collapse_vars: true,
conditionals: true,
inline: true,
reduce_vars: true,
unused: true,
}
mangle = {}
input: {
function function1(session) {
var public = {
processBulk: processBulk
};
return public;
function processBulk(bulk) {
var subparam1 = session();
function processOne(param1) {
var param2 = {
subparam1: subparam1
};
doProcessOne({
param1: param1,
param2: param2,
}, function() {
processBulk(bulk);
});
};
if (bulk && bulk.length > 0)
processOne(bulk.shift());
}
function doProcessOne(config, callback) {
console.log(JSON.stringify(config));
callback();
}
}
function1(function session() {
return 42;
}).processBulk([1, 2, 3]);
}
expect: {
function function1(o) {
return {
processBulk: function t(u) {
var r = o();
function n(n) {
var o = {
subparam1: r
};
c({
param1: n,
param2: o
}, function() {
t(u);
});
}
u && u.length > 0 && n(u.shift());
}
};
function c(n, o) {
console.log(JSON.stringify(n));
o();
}
}
function1(function() {
return 42;
}).processBulk([ 1, 2, 3 ]);
}
expect_stdout: [
'{"param1":1,"param2":{"subparam1":42}}',
'{"param1":2,"param2":{"subparam1":42}}',
'{"param1":3,"param2":{"subparam1":42}}',
]
}
issue_3297_3: {
options = {
collapse_vars: true,
comparisons: true,
conditionals: true,
inline: true,
join_vars: true,
passes: 3,
reduce_funcs: true,
reduce_vars: true,
sequences: true,
side_effects: true,
unused: true,
}
mangle = {}
input: {
function function1(session) {
var public = {
processBulk: processBulk
};
return public;
function processBulk(bulk) {
var subparam1 = session();
function processOne(param1) {
var param2 = {
subparam1: subparam1
};
doProcessOne({
param1: param1,
param2: param2,
}, function() {
processBulk(bulk);
});
};
if (bulk && bulk.length > 0)
processOne(bulk.shift());
}
function doProcessOne(config, callback) {
console.log(JSON.stringify(config));
callback();
}
}
function1(function session() {
return 42;
}).processBulk([1, 2, 3]);
}
expect: {
function function1(c) {
return {
processBulk: function n(o) {
var r, t, u = c();
o && 0 < o.length && (r = {
param1: o.shift(),
param2: {
subparam1: u
}
},
t = function() {
n(o);
},
console.log(JSON.stringify(r)),
t());
}
};
}
function1(function() {
return 42;
}).processBulk([ 1, 2, 3 ]);
}
expect_stdout: [
'{"param1":1,"param2":{"subparam1":42}}',
'{"param1":2,"param2":{"subparam1":42}}',
'{"param1":3,"param2":{"subparam1":42}}',
]
}
cross_references_1: {
options = {
inline: true,
reduce_vars: true,
unused: true,
}
input: {
var Math = {
square: function(n) {
return n * n;
}
};
console.log((function(factory) {
return factory();
})(function() {
return function(Math) {
return function(n) {
return Math.square(n);
};
}(Math);
})(3));
}
expect: {
var Math = {
square: function(n) {
return n * n;
}
};
console.log(function(Math) {
return function(n) {
return Math.square(n);
};
}(Math)(3));
}
expect_stdout: "9"
}
cross_references_2: {
options = {
collapse_vars: true,
evaluate: true,
inline: true,
passes: 6,
properties: true,
reduce_vars: true,
sequences: true,
side_effects: true,
toplevel: true,
unused: true,
}
input: {
var Math = {
square: function(n) {
return n * n;
}
};
console.log((function(factory) {
return factory();
})(function() {
return function(Math) {
return function(n) {
return Math.square(n);
};
}(Math);
})(3));
}
expect: {
console.log(9);
}
expect_stdout: "9"
}
cross_references_3: {
options = {
inline: true,
reduce_vars: true,
unused: true,
}
input: {
var Math = {
square: function(n) {
return n * n;
},
cube: function(n) {
return n * n * n;
}
};
console.log(function(factory) {
return factory();
}(function() {
return function(Math) {
return function(n) {
Math = {
square: function(x) {
return "(SQUARE" + x + ")";
},
cube: function(x) {
return "(CUBE" + x + ")";
}
};
return Math.square(n) + Math.cube(n);
};
}(Math);
})(2));
console.log(Math.square(3), Math.cube(3));
}
expect: {
var Math = {
square: function(n) {
return n * n;
},
cube: function(n) {
return n * n * n;
}
};
console.log(function(Math) {
return function(n) {
Math = {
square: function(x) {
return "(SQUARE" + x + ")";
},
cube: function(x) {
return "(CUBE" + x + ")";
}
};
return Math.square(n) + Math.cube(n);
};
}()(2));
console.log(Math.square(3), Math.cube(3));
}
expect_stdout: [
"(SQUARE2)(CUBE2)",
"9 27",
]
}
loop_inline: {
options = {
inline: true,
reduce_vars: true,
unused: true,
}
input: {
console.log(function(o) {
function g(p) {
return o[p];
}
function h(q) {
while (g(q));
}
return h;
}([ 1, "foo", 0 ])(2));
}
expect: {
console.log(function(o) {
return function(q) {
while (p = q, o[p]);
var p;
};
}([ 1, "foo", 0 ])(2));
}
expect_stdout: "undefined"
}
functions: {
options = {
functions: true,
reduce_vars: true,
unused: true,
}
input: {
!function() {
var a = function a() {
return a && "a";
};
var b = function x() {
return !!x;
};
var c = function(c) {
return c;
};
if (c(b(a()))) {
var d = function() {};
var e = function y() {
return typeof y;
};
var f = function(f) {
return f;
};
console.log(a(d()), b(e()), c(f(42)), typeof d, e(), typeof f);
}
}();
}
expect: {
!function() {
function a() {
return a && "a";
}
function b() {
return !!b;
}
var c = function(c) {
return c;
};
if (c(b(a()))) {
function d() {}
function e() {
return typeof e;
}
var f = function(f) {
return f;
};
console.log(a(d()), b(e()), c(f(42)), typeof d, e(), typeof f);
}
}();
}
expect_stdout: "a true 42 function function function"
}
functions_use_strict: {
options = {
functions: true,
reduce_vars: true,
unused: true,
}
input: {
"use strict";
!function() {
var a = function a() {
return a && "a";
};
var b = function x() {
return !!x;
};
var c = function(c) {
return c;
};
if (c(b(a()))) {
var d = function() {};
var e = function y() {
return typeof y;
};
var f = function(f) {
return f;
};
console.log(a(d()), b(e()), c(f(42)), typeof d, e(), typeof f);
}
}();
}
expect: {
"use strict";
!function() {
function a() {
return a && "a";
}
function b() {
return !!b;
}
var c = function(c) {
return c;
};
if (c(b(a()))) {
var d = function() {};
var e = function y() {
return typeof y;
};
var f = function(f) {
return f;
};
console.log(a(d()), b(e()), c(f(42)), typeof d, e(), typeof f);
}
}();
}
expect_stdout: "a true 42 function function function"
}
issue_2437: {
options = {
collapse_vars: true,
conditionals: true,
functions: true,
inline: true,
join_vars: true,
passes: 2,
reduce_funcs: true,
reduce_vars: true,
sequences: true,
side_effects: 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;
}
function detectFunc() {}
var req = new XMLHttpRequest();
return req.onreadystatechange = detectFunc,
result = req[SYMBOL_FAKE_ONREADYSTATECHANGE_1] === detectFunc,
req.onreadystatechange = null, result;
}());
}
}
issue_2485_1: {
options = {
functions: true,
reduce_funcs: true,
reduce_vars: true,
unused: true,
}
input: {
var foo = function(bar) {
var n = function(a, b) {
return a + b;
};
var sumAll = function(arg) {
return arg.reduce(n, 0);
};
var runSumAll = function(arg) {
return sumAll(arg);
};
bar.baz = function(arg) {
var n = runSumAll(arg);
return (n.get = 1), n;
};
return bar;
};
var bar = foo({});
console.log(bar.baz([1, 2, 3]));
}
expect: {
var foo = function(bar) {
function n(a, b) {
return a + b;
}
function runSumAll(arg) {
return function(arg) {
return arg.reduce(n, 0);
}(arg);
}
bar.baz = function(arg) {
var n = runSumAll(arg);
return (n.get = 1), n;
};
return bar;
};
var bar = foo({});
console.log(bar.baz([1, 2, 3]));
}
expect_stdout: "6"
}
issue_2485_2: {
options = {
functions: true,
inline: true,
reduce_funcs: true,
reduce_vars: true,
unused: true,
}
input: {
var foo = function(bar) {
var n = function(a, b) {
return a + b;
};
var sumAll = function(arg) {
return arg.reduce(n, 0);
};
var runSumAll = function(arg) {
return sumAll(arg);
};
bar.baz = function(arg) {
var n = runSumAll(arg);
return (n.get = 1), n;
};
return bar;
};
var bar = foo({});
console.log(bar.baz([1, 2, 3]));
}
expect: {
var foo = function(bar) {
function n(a, b) {
return a + b;
}
function runSumAll(arg) {
return arg.reduce(n, 0);
}
bar.baz = function(arg) {
var n = runSumAll(arg);
return (n.get = 1), n;
};
return bar;
};
var bar = foo({});
console.log(bar.baz([1, 2, 3]));
}
expect_stdout: "6"
}
issue_3364: {
options = {
functions: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
mangle = {}
input: {
var s = 2, a = 100, b = 10, c = 0;
function f(p, e, r) {
try {
for (var i = 1; i-- > 0;)
var a = function(x) {
function g(y) {
y && y[a++];
}
var x = g(--s >= 0 && f(c++));
for (var j = 1; --j > 0;);
}();
} catch (e) {
try {
return;
} catch (z) {
for (var k = 1; --k > 0;) {
for (var l = 1; l > 0; --l) {
var n = function() {};
for (var k in n)
var o = (n, k);
}
}
}
}
}
var r = f();
console.log(c);
}
expect: {
var s = 2, c = 0;
(function n(r, o, a) {
try {
for (var f = 1; f-- >0;)
var t = function(r) {
(function(r) {
r && r[t++];
})(--s >= 0 && n(c++));
for (var o = 1; --o > 0;);
}();
} catch (o) {
try {
return;
} catch (r) {
for (var v = 1; --v > 0;)
for (var i = 1; i > 0;--i) {
function u() {}
for (var v in u);
}
}
}
})();
console.log(c);
}
expect_stdout: "2"
}
issue_3366: {
options = {
functions: true,
inline: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
function f() {
function g() {
return function() {};
}
var a = g();
(function() {
this && a && console.log("PASS");
})();
}
f();
}
expect: {
void function() {
this && a && console.log("PASS");
}();
function a() {}
}
expect_stdout: "PASS"
}
issue_3371: {
options = {
functions: true,
inline: true,
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
(function() {
var a = function f() {
(function() {
console.log(typeof f);
})();
};
while (a());
})();
}
expect: {
(function() {
function a() {
console.log(typeof a);
}
while (a());
})();
}
expect_stdout: "function"
}
class_iife: {
options = {
inline: true,
sequences: true,
toplevel: true,
}
input: {
var A = function() {
function B() {}
B.prototype.m = function() {
console.log("PASS");
};
return B;
}();
new A().m();
}
expect: {
var A = (B.prototype.m = function() {
console.log("PASS");
}, B);
function B() {}
new A().m();
}
expect_stdout: "PASS"
}
issue_3400_1: {
options = {
collapse_vars: true,
inline: true,
reduce_funcs: true,
reduce_vars: true,
unused: true,
}
input: {
(function(f) {
console.log(f()()[0].p);
})(function() {
function g() {
function h(u) {
var o = {
p: u
};
return console.log(o[g]), o;
}
function e() {
return [ 42 ].map(function(v) {
return h(v);
});
}
return e();
}
return g;
});
}
expect: {
void console.log(function g() {
function h(u) {
var o = {
p: u
};
return console.log(o[g]), o;
}
function e() {
return [ 42 ].map(h);
}
return e();
}()[0].p);
}
expect_stdout: [
"undefined",
"42",
]
}
issue_3400_2: {
options = {
collapse_vars: true,
inline: true,
passes: 3,
reduce_funcs: true,
reduce_vars: true,
unused: true,
}
input: {
(function(f) {
console.log(f()()[0].p);
})(function() {
function g() {
function h(u) {
var o = {
p: u
};
return console.log(o[g]), o;
}
function e() {
return [ 42 ].map(function(v) {
return h(v);
});
}
return e();
}
return g;
});
}
expect: {
void console.log(function g() {
return [ 42 ].map(function(u) {
var o = {
p: u
};
return console.log(o[g]), o;
});
}()[0].p);
}
expect_stdout: [
"undefined",
"42",
]
}
issue_3402: {
options = {
evaluate: true,
functions: true,
reduce_vars: true,
side_effects: true,
toplevel: true,
typeofs: true,
unused: true,
}
input: {
var f = function f() {
f = 42;
console.log(typeof f);
};
"function" == typeof f && f();
"function" == typeof f && f();
console.log(typeof f);
}
expect: {
var f = function f() {
f = 42;
console.log(typeof f);
};
f();
f();
console.log(typeof f);
}
expect_stdout: [
"function",
"function",
"function",
]
}
issue_3439: {
options = {
inline: true,
}
input: {
console.log(typeof function() {
return function(a) {
function a() {}
return a;
}(42);
}());
}
expect: {
console.log(typeof function(a) {
function a() {}
return a;
}(42));
}
expect_stdout: "function"
}
issue_3444: {
options = {
inline: true,
reduce_vars: true,
unused: true,
}
input: {
(function(h) {
return f;
function f() {
g();
}
function g() {
h("PASS");
}
})(console.log)();
}
expect: {
(function(h) {
return function() {
void h("PASS");
};
})(console.log)();
}
expect_stdout: "PASS"
}
issue_3506_1: {
options = {
collapse_vars: true,
evaluate: true,
inline: true,
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
var a = "FAIL";
(function(b) {
(function(b) {
b && (a = "PASS");
})(b);
})(a);
console.log(a);
}
expect: {
var a = "FAIL";
!function(b) {
b && (a = "PASS");
}(a);
console.log(a);
}
expect_stdout: "PASS"
}
issue_3506_2: {
options = {
collapse_vars: true,
evaluate: true,
inline: true,
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
var a = "FAIL";
(function(b) {
(function(c) {
var d = 1;
for (;c && (a = "PASS") && 0 < --d;);
})(b);
})(a);
console.log(a);
}
expect: {
var a = "FAIL";
!function(c) {
var d = 1;
for (;c && (a = "PASS") && 0 < --d;);
}(a);
console.log(a);
}
expect_stdout: "PASS"
}
issue_3506_3: {
options = {
collapse_vars: true,
dead_code: true,
evaluate: true,
inline: true,
loops: true,
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
var a = "FAIL";
(function(b) {
(function(c) {
var d = 1;
for (;c && (a = "PASS") && 0 < --d;);
})(b);
})(a);
console.log(a);
}
expect: {
var a = "FAIL";
!function(c) {
var d = 1;
for (;c && (a = "PASS") && 0 < --d;);
}(a);
console.log(a);
}
expect_stdout: "PASS"
}
issue_3512: {
options = {
collapse_vars: true,
pure_getters: "strict",
sequences: true,
side_effects: true,
unused: true,
}
input: {
var a = "PASS";
(function(b) {
(function() {
b <<= this || 1;
b.a = "FAIL";
})();
})();
console.log(a);
}
expect: {
var a = "PASS";
(function(b) {
(function() {
(b <<= this || 1).a = "FAIL";
})();
})(),
console.log(a);
}
expect_stdout: "PASS"
}
issue_3562: {
options = {
collapse_vars: true,
reduce_vars: true,
}
input: {
var a = "PASS";
function f(b) {
f = function() {
console.log(b);
};
return "FAIL";
}
a = f(a);
f(a);
}
expect: {
var a = "PASS";
function f(b) {
f = function() {
console.log(b);
};
return "FAIL";
}
a = f(a);
f(a);
}
expect_stdout: "PASS"
}
hoisted_inline: {
options = {
inline: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
function f() {
console.log("PASS");
}
function g() {
for (var console in [ 0 ])
h();
}
function h() {
f();
}
g();
}
expect: {
function f() {
console.log("PASS");
}
(function() {
for (var console in [ 0 ])
void f();
})();
}
expect_stdout: "PASS"
}
hoisted_single_use: {
options = {
reduce_funcs: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
function f(a) {
for (var r in a) g(r);
}
function g(a) {
console.log(a);
}
function h(a) {
var g = a.bar;
g();
g();
i(a);
}
function i(b) {
f(b);
}
h({
bar: function() {
console.log("foo");
}
});
}
expect: {
function f(a) {
for (var r in a) (function(a) {
console.log(a);
})(r);
}
(function(a) {
var g = a.bar;
g();
g();
(function(b) {
f(b);
})(a);
})({
bar: function() {
console.log("foo");
}
});
}
expect_stdout: [
"foo",
"foo",
"bar",
]
}
pr_3592_1: {
options = {
inline: true,
reduce_funcs: false,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
function problem(w) {
return g.indexOf(w);
}
function unused(x) {
return problem(x);
}
function B(problem) {
return g[problem];
}
function A(y) {
return problem(y);
}
function main(z) {
return B(A(z));
}
var g = [ "PASS" ];
console.log(main("PASS"));
}
expect: {
function problem(w) {
return g.indexOf(w);
}
function B(problem) {
return g[problem];
}
var g = [ "PASS" ];
console.log((z = "PASS", B((y = z, problem(y)))));
var z, y;
}
expect_stdout: "PASS"
}
pr_3592_2: {
options = {
inline: true,
reduce_funcs: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
function problem(w) {
return g.indexOf(w);
}
function unused(x) {
return problem(x);
}
function B(problem) {
return g[problem];
}
function A(y) {
return problem(y);
}
function main(z) {
return B(A(z));
}
var g = [ "PASS" ];
console.log(main("PASS"));
}
expect: {
function problem(w) {
return g.indexOf(w);
}
var g = [ "PASS" ];
console.log((z = "PASS", function(problem) {
return g[problem];
}(problem(z))));
var z;
}
expect_stdout: "PASS"
}
inline_use_strict: {
options = {
evaluate: true,
inline: true,
reduce_vars: true,
sequences: true,
side_effects: true,
unused: true,
}
input: {
console.log(function() {
"use strict";
return function() {
"use strict";
var a = "foo";
a += "bar";
return a;
};
}()());
}
expect: {
console.log("foobar");
}
expect_stdout: "foobar"
}
pr_3595_1: {
options = {
collapse_vars: false,
inline: true,
reduce_funcs: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
var g = [ "PASS" ];
function problem(arg) {
return g.indexOf(arg);
}
function unused(arg) {
return problem(arg);
}
function a(arg) {
return problem(arg);
}
function b(problem) {
return g[problem];
}
function c(arg) {
return b(a(arg));
}
console.log(c("PASS"));
}
expect: {
var g = [ "PASS" ];
function problem(arg) {
return g.indexOf(arg);
}
console.log((arg = "PASS", function(problem) {
return g[problem];
}(problem(arg))));
var arg;
}
expect_stdout: "PASS"
}
pr_3595_2: {
options = {
collapse_vars: true,
inline: true,
reduce_funcs: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
var g = [ "PASS" ];
function problem(arg) {
return g.indexOf(arg);
}
function unused(arg) {
return problem(arg);
}
function a(arg) {
return problem(arg);
}
function b(problem) {
return g[problem];
}
function c(arg) {
return b(a(arg));
}
console.log(c("PASS"));
}
expect: {
var g = [ "PASS" ];
function problem(arg) {
return g.indexOf(arg);
}
console.log(function(problem) {
return g[problem];
}(problem("PASS")));
}
expect_stdout: "PASS"
}
pr_3595_3: {
options = {
collapse_vars: true,
inline: true,
passes: 2,
reduce_funcs: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
var g = [ "PASS" ];
function problem(arg) {
return g.indexOf(arg);
}
function unused(arg) {
return problem(arg);
}
function a(arg) {
return problem(arg);
}
function b(problem) {
return g[problem];
}
function c(arg) {
return b(a(arg));
}
console.log(c("PASS"));
}
expect: {
var g = [ "PASS" ];
console.log(function(problem) {
return g[problem];
}(g.indexOf("PASS")));
}
expect_stdout: "PASS"
}
pr_3595_4: {
options = {
collapse_vars: true,
inline: true,
passes: 3,
reduce_funcs: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
var g = [ "PASS" ];
function problem(arg) {
return g.indexOf(arg);
}
function unused(arg) {
return problem(arg);
}
function a(arg) {
return problem(arg);
}
function b(problem) {
return g[problem];
}
function c(arg) {
return b(a(arg));
}
console.log(c("PASS"));
}
expect: {
var g = [ "PASS" ];
console.log((problem = g.indexOf("PASS"), g[problem]));
var problem;
}
expect_stdout: "PASS"
}
issue_3679_1: {
options = {
collapse_vars: true,
inline: true,
pure_getters: "strict",
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
(function() {
var f = function() {};
f.g = function() {
console.log("PASS");
};
f.g();
})();
}
expect: {
console.log("PASS");
}
expect_stdout: "PASS"
}
issue_3679_2: {
options = {
collapse_vars: true,
inline: true,
passes: 2,
pure_getters: "strict",
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
(function() {
"use strict";
var f = function() {};
f.g = function() {
console.log("PASS");
};
f.g();
})();
}
expect: {
(function() {
"use strict";
console.log("PASS");
})();
}
expect_stdout: "PASS"
}
issue_3679_3: {
options = {
collapse_vars: true,
inline: true,
functions: true,
pure_getters: "strict",
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
(function() {
var f = function() {};
f.p = "PASS";
f.g = function() {
console.log(f.p);
};
f.g();
})();
}
expect: {
(function() {
function f() {};
f.p = "PASS";
(f.g = function() {
console.log(f.p);
})();
})();
}
expect_stdout: "PASS"
}
preceding_side_effects: {
options = {
inline: true,
}
input: {
console.log(function(a, b, c) {
return b;
}(console, "PASS", 42));
}
expect: {
console.log((console, 42, "PASS"));
}
expect_stdout: "PASS"
}
trailing_side_effects: {
options = {
inline: true,
}
input: {
console.log(function(a, b, c) {
return b;
}(42, "PASS", console));
}
expect: {
console.log(function(a, b, c) {
return b;
}(42, "PASS", console));
}
expect_stdout: "PASS"
}
preserve_binding_1: {
options = {
inline: true,
}
input: {
var o = {
f: function() {
return this === o ? "FAIL" : "PASS";
},
};
console.log(function(a) {
return a;
}(o.f)());
}
expect: {
var o = {
f: function() {
return this === o ? "FAIL" : "PASS";
},
};
console.log((0, o.f)());
}
expect_stdout: "PASS"
}
preserve_binding_2: {
options = {
collapse_vars: true,
inline: true,
unused: true,
}
input: {
var o = {
f: function() {
return this === o ? "FAIL" : "PASS";
},
};
console.log(function(a) {
return a;
}(o.f)());
}
expect: {
var o = {
f: function() {
return this === o ? "FAIL" : "PASS";
},
};
console.log((0, o.f)());
}
expect_stdout: "PASS"
}
issue_3770: {
options = {
inline: true,
reduce_vars: true,
side_effects: true,
unused: true,
}
input: {
(function() {
function f(a, a) {
var b = function() {
return a || "PASS";
}();
console.log(b);
}
f("FAIL");
})();
}
expect: {
(function() {
b = a || "PASS",
console.log(b);
var a, b;
})();
}
expect_stdout: "PASS"
}
issue_3771: {
options = {
inline: true,
reduce_vars: true,
side_effects: true,
toplevel: true,
unused: true,
}
input: {
try {
function f(a) {
var a = f(1234);
}
f();
} catch (e) {
console.log("PASS");
}
}
expect: {
try {
(function f(a) {
f();
})();
} catch (e) {
console.log("PASS");
}
}
expect_stdout: "PASS"
}
issue_3772: {
options = {
collapse_vars: true,
dead_code: true,
inline: true,
reduce_vars: true,
side_effects: true,
toplevel: true,
unused: true,
}
input: {
var a = "PASS";
function f() {
return a;
}
var b = f();
function g() {
console.log(f());
}
g();
}
expect: {
var a = "PASS";
console.log(a);
}
expect_stdout: "PASS"
}
issue_3777_1: {
options = {
inline: true,
reduce_vars: true,
side_effects: true,
}
input: {
(function() {
ff && ff(NaN);
function ff(a) {
var a = console.log("PASS");
}
})();
}
expect: {
(function() {
ff && ff(NaN);
function ff(a) {
var a = console.log("PASS");
}
})();
}
expect_stdout: "PASS"
}
issue_3777_2: {
options = {
inline: true,
pure_getters: "strict",
reduce_vars: true,
side_effects: true,
toplevel: true,
}
input: {
ff(ff.p);
function ff(a) {
var a = console.log("PASS");
}
}
expect: {
ff(ff.p);
function ff(a) {
var a = console.log("PASS");
}
}
expect_stdout: "PASS"
}
issue_3821_1: {
options = {
inline: true,
}
input: {
var a = 0;
console.log(function(b) {
return +a + b;
}(--a));
}
expect: {
var a = 0;
console.log(function(b) {
return +a + b;
}(--a));
}
expect_stdout: "-2"
}
issue_3821_2: {
options = {
inline: true,
reduce_vars: true,
toplevel: true,
}
input: {
var a = "PASS";
function f(g, b) {
return g(), b;
}
console.log(f(function() {
a = "FAIL";
}, a));
}
expect: {
var a = "PASS";
function f(g, b) {
return g(), b;
}
console.log(f(function() {
a = "FAIL";
}, a));
}
expect_stdout: "PASS"
}
substitute: {
options = {
inline: true,
reduce_vars: true,
toplevel: true,
}
input: {
var o = {};
function f(a) {
return a === o ? "PASS" : "FAIL";
}
[
function() {
return f;
},
function() {
return function(b) {
return f(b);
};
},
function() {
"use strict";
return function(c) {
return f(c);
};
},
function() {
return function(c) {
"use strict";
return f(c);
};
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o), g().call(o, o), g().length);
});
}
expect: {
var o = {};
function f(a) {
return a === o ? "PASS" : "FAIL";
}
[
function() {
return f;
},
function() {
return f;
},
function() {
"use strict";
return f;
},
function() {
return f;
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o), g().call(o, o), g().length);
});
}
expect_stdout: [
"PASS PASS 1",
"PASS PASS 1",
"PASS PASS 1",
"PASS PASS 1",
"PASS PASS 2",
]
}
substitute_add_farg: {
options = {
inline: true,
keep_fargs: "strict",
}
input: {
function f(g) {
console.log(g.length);
g(null, "FAIL");
}
f(function() {
return function(a, b) {
return function(c) {
do {
console.log("PASS");
} while (c);
}(a, b);
};
}());
}
expect: {
function f(g) {
console.log(g.length);
g(null, "FAIL");
}
f(function(c, argument_1) {
do {
console.log("PASS");
} while (c);
});
}
expect_stdout: [
"2",
"PASS",
]
}
substitute_arguments: {
options = {
inline: true,
reduce_vars: true,
toplevel: true,
}
input: {
var o = {};
function f(a) {
return arguments[0] === o ? "PASS" : "FAIL";
}
[
function() {
return f;
},
function() {
return function(b) {
return f(b);
};
},
function() {
"use strict";
return function(c) {
return f(c);
};
},
function() {
return function(c) {
"use strict";
return f(c);
};
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o), g().call(o, o), g().length);
});
}
expect: {
var o = {};
function f(a) {
return arguments[0] === o ? "PASS" : "FAIL";
}
[
function() {
return f;
},
function() {
return function(b) {
return f(b);
};
},
function() {
"use strict";
return function(c) {
return f(c);
};
},
function() {
return function(c) {
"use strict";
return f(c);
};
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o), g().call(o, o), g().length);
});
}
expect_stdout: [
"PASS PASS 1",
"PASS PASS 1",
"PASS PASS 1",
"PASS PASS 1",
"PASS PASS 2",
]
}
substitute_drop_farg: {
options = {
inline: true,
keep_fargs: false,
reduce_vars: true,
toplevel: true,
}
input: {
var o = {};
function f(a) {
return a === o ? "PASS" : "FAIL";
}
[
function() {
return f;
},
function() {
return function(b) {
return f(b);
};
},
function() {
"use strict";
return function(c) {
return f(c);
};
},
function() {
return function(c) {
"use strict";
return f(c);
};
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o), g().call(o, o));
});
}
expect: {
var o = {};
function f(a) {
return a === o ? "PASS" : "FAIL";
}
[
function() {
return f;
},
function() {
return f;
},
function() {
"use strict";
return f;
},
function() {
return f;
},
function() {
return f;
},
].forEach(function(g) {
console.log(g()(o), g().call(o, o));
});
}
expect_stdout: [
"PASS PASS",
"PASS PASS",
"PASS PASS",
"PASS PASS",
"PASS PASS",
]
}
substitute_this: {
options = {
inline: true,
reduce_vars: true,
toplevel: true,
}
input: {
var o = {};
function f(a) {
return a === o ? this === o : "FAIL";
}
[
function() {
return f;
},
function() {
return function(b) {
return f(b);
};
},
function() {
"use strict";
return function(c) {
return f(c);
};
},
function() {
return function(c) {
"use strict";
return f(c);
};
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o), g().call(o, o), g().length);
});
}
expect: {
var o = {};
function f(a) {
return a === o ? this === o : "FAIL";
}
[
function() {
return f;
},
function() {
return function(b) {
return f(b);
};
},
function() {
"use strict";
return function(c) {
return f(c);
};
},
function() {
return function(c) {
"use strict";
return f(c);
};
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o), g().call(o, o), g().length);
});
}
expect_stdout: [
"false true 1",
"false false 1",
"false false 1",
"false false 1",
"false false 2",
]
}
substitute_use_strict: {
options = {
inline: true,
reduce_vars: true,
toplevel: true,
}
input: {
var o = {};
function f(a) {
"use strict";
return a === o ? "PASS" : "FAIL";
}
[
function() {
return f;
},
function() {
return function(b) {
return f(b);
};
},
function() {
"use strict";
return function(c) {
return f(c);
};
},
function() {
return function(c) {
"use strict";
return f(c);
};
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o), g().call(o, o), g().length);
});
}
expect: {
var o = {};
function f(a) {
"use strict";
return a === o ? "PASS" : "FAIL";
}
[
function() {
return f;
},
function() {
return f;
},
function() {
"use strict";
return f;
},
function() {
return f;
},
function() {
return function(d, e) {
return f(d, e);
};
},
].forEach(function(g) {
console.log(g()(o), g().call(o, o), g().length);
});
}
expect_stdout: [
"PASS PASS 1",
"PASS PASS 1",
"PASS PASS 1",
"PASS PASS 1",
"PASS PASS 2",
]
}
issue_3833: {
options = {
inline: true,
keep_fargs: "strict",
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
function f(a) {
return function() {
while (a);
console.log("PASS");
}();
}
f();
}
expect: {
(function() {
while (a);
console.log("PASS");
})();
var a;
}
expect_stdout: "PASS"
}
issue_3835: {
options = {
inline: true,
reduce_vars: true,
}
input: {
(function f() {
return function() {
return f();
}();
})();
}
expect: {
(function f() {
return f();
})();
}
expect_stdout: true
}
issue_3836: {
options = {
inline: true,
}
input: {
(function() {
return function() {
for (var a in 0)
console.log(k);
}(console.log("PASS"));
})();
}
expect: {
(function() {
for (var a in 0)
console.log(k);
})(console.log("PASS"));
}
expect_stdout: "PASS"
}
issue_3852: {
options = {
collapse_vars: true,
inline: true,
unused: true,
}
input: {
console.log(function(a) {
return function(b) {
return b && (b[0] = 0), "PASS";
}(a);
}(42));
}
expect: {
console.log(function(a) {
return a && (a[0] = 0), "PASS";
}(42));
}
expect_stdout: "PASS"
}
issue_3911: {
options = {
collapse_vars: true,
conditionals: true,
inline: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
function f() {
return function() {
if (a) (a++, b += a);
f();
};
}
var a = f, b;
console.log("PASS");
}
expect: {
console.log("PASS");
}
expect_stdout: "PASS"
}
issue_3929: {
options = {
functions: true,
reduce_vars: true,
unused: true,
}
input: {
(function() {
var abc = function f() {
(function() {
switch (f) {
default:
var abc = 0;
case 0:
abc.p;
}
console.log(typeof f);
})();
};
typeof abc && abc();
})();
}
expect: {
(function() {
var abc = function f() {
(function() {
switch (f) {
default:
var abc = 0;
case 0:
abc.p;
}
console.log(typeof f);
})();
};
typeof abc && abc();
})();
}
expect_stdout: "function"
}
issue_4006: {
options = {
dead_code: true,
evaluate: true,
inline: true,
keep_fargs: "strict",
reduce_vars: true,
sequences: true,
side_effects: true,
unused: true,
}
input: {
var a = 0;
(function() {
(function(b, c) {
for (var k in console.log(c), 0)
return b += 0;
})(0, --a);
return a ? 0 : --a;
})();
}
expect: {
var a = 0;
(function(c) {
for (var k in console.log(c), 0)
return;
})(--a), a || --a;
}
expect_stdout: "-1"
}
issue_4155: {
options = {
functions: true,
inline: true,
merge_vars: true,
reduce_vars: true,
unused: true,
}
input: {
(function() {
var a;
(function() {
console.log(a);
})(a);
var b = function() {};
b && console.log(typeof b);
})();
}
expect: {
(function() {
void console.log(b);
var b = function() {};
b && console.log(typeof b);
})();
}
expect_stdout: [
"undefined",
"function",
]
}
issue_4159: {
options = {
collapse_vars: true,
inline: true,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
var a = 42, c = function(b) {
(b = a) && console.log(a++, b);
}(c = a);
}
expect: {
var a = 42;
(b = a) && console.log(a++, b);
var b;
}
expect_stdout: "42 42"
}