7 console.log(function f(a, b, c, d, e) {
12 console.log(function(a, b) {
25 console.log(function f(a, b, c, d, e) {
30 console.log(function(a, c) {
37 unused_nested_function: {
56 unused_circular_references_1: {
79 unused_circular_references_2: {
85 var foo = 1, bar = baz, baz = foo + bar, qwe = moo();
91 moo(); // keeps side effect
97 unused_circular_references_3: {
103 var g = function() { return h() };
104 var h = function() { return g() };
115 unused_keep_setter_arg: {
141 unused_var_in_catch: {
197 return function bar(baz) {};
202 return function bar(baz) {};
257 unused: "keep_assign",
307 drop_toplevel_funcs: {
332 drop_toplevel_vars: {
385 drop_toplevel_retain: {
414 drop_toplevel_retain_array: {
447 drop_toplevel_retain_regex: {
449 top_retain: /^[fao]$/,
476 drop_toplevel_all_retain: {
506 drop_toplevel_funcs_retain: {
537 drop_toplevel_vars_retain: {
569 drop_toplevel_keep_assign: {
572 unused: "keep_assign",
599 console.log(function f(a) {
604 console.log(function() {}());
606 expect_stdout: "undefined"
616 return function g() {
623 return function() {};
639 typeof c === "undefined";
770 return (function(a) {
780 return (function(a) {
781 return function(a) {};
800 expect_exact: "for (;;);"
974 console.log(delete (a = undefined));
975 console.log(delete (a = void 0));
976 console.log(delete (a = Infinity));
977 console.log(delete (a = 1 / 0));
978 console.log(delete (a = NaN));
979 console.log(delete (a = 0 / 0));
1003 keep_infinity: true,
1009 console.log(delete (a = undefined));
1010 console.log(delete (a = void 0));
1011 console.log(delete (a = Infinity));
1012 console.log(delete (a = 1 / 0));
1013 console.log(delete (a = NaN));
1014 console.log(delete (a = 0 / 0));
1055 "undefined undefined",
1067 L: for (var b = console.log(1); !1;) continue L;
1072 L: for (console.log(1); !1;) continue L;
1084 L: for (var a = 1, b = console.log(a); --a;) continue L;
1090 L: for (console.log(a); --a;) continue L;
1118 var_catch_toplevel: {
1155 collapse_vars: true,
1164 !function(factory) {
1167 return function(fn) {
1171 var quux = function() {
1172 console.log("PASS");
1173 }, foo = function() {
1177 return { prop: foo };
1187 console.log("PASS");
1191 expect_stdout: "PASS"
1196 collapse_vars: true,
1200 pure_getters: "strict",
1208 !function(factory) {
1211 return function(fn) {
1215 var quux = function() {
1216 console.log("PASS");
1217 }, foo = function() {
1221 return { prop: foo };
1228 console.log("PASS");
1230 expect_stdout: "PASS"
1241 !function(factory) {
1244 return function(fn) {
1248 var quux = function() {
1249 console.log("PASS");
1250 }, foo = function() {
1254 return { prop: foo };
1264 void console.log("PASS");
1268 expect_stdout: "PASS"
1318 collapse_vars: true,
1324 console.log(function(a, b) {
1330 console.log(function(a, b) {
1339 collapse_vars: true,
1344 console.log(function(a, b) {
1350 console.log(function(a, b) {
1366 for (var j = o.a, i = 0; i < 0; i++);
1367 for (var i = 0; i < 0; i++);
1373 for (var i = 0; i < 0; i++);
1374 for (i = 0; i < 0; i++);
1381 collapse_vars: true,
1393 var trouble = x || never_called();
1394 var value = (FOUR - 1) * trouble;
1395 console.log(value == 6 ? "PASS" : value);
1407 var trouble = x || never_called();
1408 var value = (4 - 1) * trouble;
1409 console.log(6 == value ? "PASS" : value);
1421 collapse_vars: true,
1434 var trouble = x || never_called();
1435 var value = (FOUR - 1) * trouble;
1436 console.log(value == 6 ? "PASS" : value);
1448 var value = (4 - 1) * (x || never_called());
1449 console.log(6 == value ? "PASS" : value);
1459 defun_lambda_same_name: {
1466 return n ? n * f(n - 1) : 1;
1468 console.log(function f(n) {
1469 return n ? n * f(n - 1) : 1;
1473 console.log(function f(n) {
1474 return n ? n * f(n - 1) : 1;
1477 expect_stdout: "120"
1490 return b && f() || a--;
1498 return b && f() || a--;
1507 collapse_vars: true,
1552 typeof h == "function" && h();
1554 typeof g == "function" && g();
1606 console.log(f1(), f2(), f3(), f4(), f5(), f6());
1632 console.log(f1(), f2(), f3(), f4(), f5(), f6());
1644 for (var i = 0; i < 2; i++)
1645 a = void 0, a = {}, console.log(a);
1649 for (var i = 0; i < 2; i++)
1650 a = {}, console.log(a);
1662 for (var i = 0; i < 2; i++)
1663 a = void 0, a = { a: a }, console.log(a);
1667 for (var i = 0; i < 2; i++)
1668 a = void 0, a = { a: a }, console.log(a);
1673 cascade_drop_assign: {
1680 var a, b = a = "PASS";
1687 expect_stdout: "PASS"
1696 console.log(function(a, b) {
1703 console.log(function(a, b) {
1722 var a = "FAIL", c = 1;
1723 var c = function(b) {
1725 var e = --b + (d && (a = "PASS"));
1727 console.log(a, typeof c);
1731 var c = (d = a, void (d && (a = "PASS")));
1733 console.log(a, typeof c);
1735 expect_stdout: "PASS undefined"
1740 collapse_vars: true,
1755 var c = function(a, b) {
1769 pure_getters: "strict",
1777 var unused = function() {};
1778 unused.prototype[a()] = 42;
1779 (unused.prototype.bar = function() {
1802 pure_getters: "strict",
1810 function unused() {}
1811 unused.prototype[a()] = 42;
1812 (unused.prototype.bar = function() {
1833 pure_getters: "strict",
1840 a.b = b = function() {};
1850 a.b = b = function() {};
1857 expect_stdout: "PASS"
1862 collapse_vars: true,
1887 expect_stdout: "PASS"
1917 expect_stdout: "PASS"
1922 collapse_vars: true,
1929 f("console.log(g)", g[g]);
1938 f("console.log(g)", g[g]);
1943 expect_stdout: "PASS"
1955 f("console.log(g)", g[g]);
1964 f("console.log(g)", g[g]);
1969 expect_stdout: "PASS"
1978 console.log(a = "foo", arguments[0]);
1982 console.log(a = "foo", arguments[0]);
1987 console.log(a = "foo", arguments[0]);
1991 console.log("foo", arguments[0]);
2008 console.log(a = "foo", arguments[0]);
2014 console.log("foo", arguments[0]);
2017 expect_stdout: "foo bar"
2022 pure_getters: "strict",
2027 var a = function b() {
2034 var a = function b() {
2040 expect_stdout: "PASS"
2051 var a = c = [], c = --b + ("function" == typeof f && f());
2057 var a = [], c = --b + ("function" == typeof f && f());
2061 expect_stdout: "0 0"
2086 console.log(s = s || "FAIL");
2092 console.log(s = s || "FAIL");
2095 expect_stdout: "PASS"
2101 pure_getters: "strict",
2106 console.log(function f() {
2112 console.log(void 0);
2114 expect_stdout: "undefined"
2119 pure_getters: "strict",
2125 console.log(function(b) {
2131 console.log(function(b) {
2135 expect_stdout: "undefined"
2140 collapse_vars: true,
2150 for (var key20 in expr20);
2157 for (var key20 in !(this[c++] = 0));
2173 typeof b === "number";
2176 var b = f(a = "PASS");
2187 expect_stdout: "PASS"
2192 collapse_vars: true,
2203 var a = function g(b) {
2221 expect_stdout: "PASS"
2226 pure_getters: "strict",
2232 console.log(function() {
2246 console.log(function() {
2255 expect_stdout: "PASS"
2260 collapse_vars: true,
2282 (void ((void 0).p = 0))[!1];
2287 expect_stdout: "PASS"
2304 function f(a, b, c) {
2309 function g(a, b, c) {
2316 function f(a, b, c) {}
2317 function g(a, b, c) {}
2321 function_argument_reference: {
2343 expect_stdout: "1 42"
2346 function_parameter_ie8: {
2356 console.log("PASS");
2364 console.log("PASS");
2368 expect_stdout: "PASS"
2373 pure_getters: "strict",
2378 console.log(function() {
2379 var a, b = (a = (a = [ b && console.log("FAIL") ]).p = 0, 0);
2384 console.log(function() {
2385 var a, b = (a = (a = [ b && console.log("FAIL") ]).p = 0, 0);
2389 expect_stdout: "PASS"
2394 pure_getters: "strict",
2403 console.log("PASS");
2406 console.log("PASS");
2408 expect_stdout: "PASS"
2426 console.log("PASS");
2437 console.log("PASS");
2439 expect_stdout: "PASS"
2442 drop_duplicated_side_effects: {
2449 for (var i = 1; i--;)
2455 for (var i = 1; i--;)
2462 drop_duplicated_var_catch: {
2496 var a = function() {};
2497 console.log(typeof a);
2503 console.log(typeof a);
2505 expect_stdout: "function"
2519 var a = function() {};
2520 console.log(typeof a);
2524 var a = function() {};
2525 console.log(typeof a);
2527 expect_stdout: "function"
2546 var a = function f(b) {
2551 console.log(typeof a);
2557 console.log(typeof a);
2559 expect_stdout: "function"
2562 cross_scope_assign_chain: {
2576 console.log(a ? "PASS" : "FAIL");
2585 console.log(a ? "PASS" : "FAIL");
2587 expect_stdout: "PASS"
2590 assign_if_assign_read: {
2600 if (Array.isArray(a)) {
2612 if (Array.isArray(a)) {
2619 expect_stdout: "PASS"
2624 pure_getters: "strict",
2631 var a = console.log("PASS");
2634 console.log(a.p = 0);
2638 var a = console.log("PASS");
2641 console.log(a.p = 0);
2652 collapse_vars: true,
2671 })(console.log(a) ^ 1, c);
2677 d = 1 ^ console.log(1),
2699 var d = console + e, e = 0..toString() === b;
2701 if (c) console.log("PASS");
2713 if (c) console.log("PASS");
2717 expect_stdout: "PASS"
2732 var d = console + e, e = 0..toString() === b;
2734 if (c) console.log("PASS");
2746 if (c) console.log("PASS");
2749 expect_stdout: "PASS"
2788 pure_getters: "strict",
2794 console.log(function f() {
2796 var c = a++ + (A = a);
2802 console.log(function() {
2809 expect_stdout: "undefined"
2814 collapse_vars: true,
2822 var a = 0, b = 0, c = 0, d = a++;
2824 var e = console.log(c), f = b;
2826 var d = b = 1, d = c + 1;
2829 console.log(a, b, d);
2839 console.log(1, 1, d);
2855 for (k in { PASS: 3 })
2860 for (var k in [ 1, 2 ])
2862 for (k in { PASS: 3 })
2879 console.log(function() {
2886 for (var c = 0; a;);
2891 console.log(function() {
2901 expect_stdout: "undefined"
2908 pure_getters: "strict",
2915 var b = [ a-- ], c = b && b[c];
2933 var b = console, c = ++b;
2934 })(console.log("PASS"), 0);
2940 })(console.log("PASS"));
2942 expect_stdout: "PASS"
2957 console.log(typeof a);
2966 console.log(typeof a);
2969 expect_stdout: "function"
2972 var_catch_redefined: {
3001 expect_stdout: "PASS"
3004 single_use_catch_redefined: {
3042 var a = function() {}, b = [ a, 1 && b, a = {} ];
3054 var b = [ function() {}, 1 && b, {} ];
3078 var f = console.log(f);
3084 var f = console.log(f);
3087 expect_stdout: "undefined"
3105 var f = console.log(f);
3110 console.log(void 0);
3112 expect_stdout: "undefined"
3117 pure_getters: "strict",
3122 arguments[0] = "PASS";
3129 arguments[0] = "PASS";
3134 expect_stdout: "PASS"
3143 console.log(function f(arguments) {
3144 var arguments = function() {};
3145 return arguments.length;
3149 console.log(function(arguments) {
3150 return function() {}.length;
3163 var a = function() {};
3164 return [ arguments, a ];
3166 console.log(typeof f()[1]);
3171 return [ arguments, a ];
3173 console.log(typeof f()[1]);
3175 expect_stdout: "function"
3185 var a = function() {};
3186 return [ arguments, a ];
3188 console.log(typeof f(42)[0][0]);
3193 return [ arguments, a ];
3195 console.log(typeof f(42)[0][0]);
3197 expect_stdout: "function"
3207 var a = function() {};
3208 return [ arguments[0], a ];
3209 })(42).forEach(function(b) {
3210 console.log(typeof b);
3216 return [ arguments[0], a ];
3217 })(42).forEach(function(b) {
3218 console.log(typeof b);
3239 var b = 1, b = c >>>= a;
3264 var b = (a = NaN) || (console.log("PASS"), 2);
3271 (a = NaN) || console.log("PASS");
3275 expect_stdout: "PASS"
3298 expect_stdout: "1 1"
3311 console.log(this === O ? "FAIL" : "PASS");
3321 console.log(this === O ? "FAIL" : "PASS");
3327 expect_stdout: "PASS"
3339 console.log(this === O ? "FAIL" : "PASS");
3349 console.log(this === O ? "FAIL" : "PASS");
3354 expect_stdout: "PASS"
3366 console.log(this === O ? "FAIL" : "PASS");
3376 console.log(this === O ? "FAIL" : "PASS");
3381 expect_stdout: "PASS"
3388 pure_getters: "strict",
3396 new function(a, b) {
3401 console.log("PASS");
3408 console.log("PASS");
3412 expect_stdout: "PASS"
3417 pure_getters: "strict",
3423 var a = A = function() {};
3427 console.log("PASS");
3433 var a = A = function() {};
3437 console.log("PASS");
3442 expect_stdout: "PASS"
3447 pure_getters: "strict",
3451 console.log(function() {
3452 var g, f = function() {};
3454 (g = f.p.q = function() {}).r = "PASS";
3459 console.log(function() {
3460 var g, f = function() {};
3462 (f.p.q = function() {}).r = "PASS";
3466 expect_stdout: "PASS"
3471 pure_getters: "strict",
3477 console.log(function(f, g) {
3480 g = f.p.q = function() {};
3486 console.log(function(f, g) {
3489 g = f.p.q = function() {};
3494 expect_stdout: "PASS"
3499 collapse_vars: true,
3500 pure_getters: "strict",
3510 } while (console.log("PASS"));
3515 } while (console.log("PASS"));
3517 expect_stdout: "PASS"
3531 var b = function() {
3535 }(new function(c, d) {
3538 }("FAIL 2", Infinity));
3561 expect_stdout: "Infinity"