1 redefine_arguments_1: {
7 function f([ arguments ]) {}
16 redefine_arguments_1_toplevel: {
22 function f([ arguments ]) {}
29 redefine_arguments_2: {
34 (function([], arguments) {});
41 redefine_arguments_3: {
47 (function([], arguments) {})([]);
56 redefine_arguments_4: {
63 (function({}, arguments) {});
71 uses_arguments_1_merge_vars: {
76 console.log(typeof function({}) {
81 console.log(typeof function({}) {
85 expect_stdout: "object"
89 uses_arguments_1_unused: {
94 console.log(typeof function({}) {
99 console.log(typeof function({}) {
103 expect_stdout: "object"
113 console.log(typeof function({ a }) {
119 console.log(typeof function({ a }) {
124 expect_stdout: "object"
128 funarg_merge_vars_1: {
148 expect_stdout: "PASS"
152 funarg_merge_vars_2: {
174 expect_stdout: "number"
178 funarg_side_effects_1: {
196 expect_stdout: "PASS"
200 funarg_side_effects_2: {
222 expect_stdout: "PASS"
226 funarg_side_effects_3: {
256 expect_stdout: "PASS"
266 (function([]) {})([ console.log("PASS") ]);
269 (function() {})(console.log("PASS"));
271 expect_stdout: "PASS"
280 function f([ a, b, c ]) {
283 f([ "FAIL", "PASS" ]);
286 function f([ , b ]) {
289 f([ "FAIL", "PASS" ]);
291 expect_stdout: "PASS"
307 console.log(f([ "FAIL" ]));
313 console.log(f([ "FAIL" ]));
315 expect_stdout: "PASS"
322 pure_getters: "strict",
326 console.log(function([ a ], { b }, c) {
328 }([ 1 ], { b: 2 }, 3));
331 console.log(function() {
335 expect_stdout: "PASS"
361 expect_stdout: "PASS"
365 funarg_unused_6_inline: {
368 pure_getters: "strict",
373 var {} = (a = console, 42);
375 console.log(typeof a);
379 console.log(typeof a);
381 expect_stdout: "undefined"
385 funarg_unused_6_keep_fargs: {
392 var {} = (a = console, 42);
394 console.log(typeof a);
398 var {} = (console, 42);
400 console.log(typeof a);
402 expect_stdout: "undefined"
406 funarg_collapse_vars_1: {
412 console.log(function(a, {}) {
418 console.log(function(a, {}) {
419 return typeof (0, console);
422 expect_stdout: "object"
426 funarg_collapse_vars_2: {
433 console.log(function([ a ], { b }, c) {
435 }([ "P" ], { b: "A" }, "SS"));
438 console.log(function([ a ], { b }) {
440 }([ "P" ], { b: "A" }));
442 expect_stdout: "PASS"
446 funarg_collapse_vars_3: {
470 expect_stdout: "PASS"
474 funarg_reduce_vars_1: {
501 expect_stdout: "PASS"
505 funarg_reduce_vars_2: {
509 pure_getters: "strict",
515 console.log(function([ a ], { b }, c) {
517 }([ "P" ], { b: "A" }, "SS"));
522 expect_stdout: "PASS"
526 funarg_reduce_vars_3: {
550 funarg_reduce_vars_4: {
573 expect_stdout: "PASS"
577 funarg_computed_key_scope_1: {
599 expect_stdout: "PASS 42"
603 funarg_computed_key_scope_2: {
612 console.log(typeof f);
621 console.log(typeof f);
625 expect_stdout: "undefined"
629 funarg_computed_key_scope_3: {
640 console.log(typeof f, typeof g, typeof h);
656 console.log(typeof f, typeof function() {}, typeof h);
662 expect_stdout: "undefined function undefined"
690 expect_stdout: "PASS"
694 process_boolean_returns: {
699 console.log(function({ length }) {
700 return length ? "FAIL" : "PASS";
706 console.log(function({ length }) {
707 return length ? "FAIL" : "PASS";
712 expect_stdout: "PASS"
726 const [ a ] = [ "PASS" ];
732 expect_stdout: "PASS"
746 let [ a ] = [ "PASS" ];
752 expect_stdout: "PASS"
765 var [ a ] = [ "PASS" ];
771 expect_stdout: "PASS"
781 [console.log("FAIL")]: e,
789 expect_stdout: "PASS"
799 throw new Error("PASS");
800 } catch ({ name, message }) {
801 console.log(message);
806 throw new Error("PASS");
807 } catch ({ message }) {
808 console.log(message);
811 expect_stdout: "PASS"
831 expect_stdout: "PASS"
840 console.log(function() {
846 console.log(function() {
851 expect_stdout: "PASS"
860 console.log(function(a) {
861 [ a ] = (a = "FAIL", [ "PASS" ]);
866 console.log(function(a) {
867 [ a ] = (a = "FAIL", [ "PASS" ]);
871 expect_stdout: "PASS"
934 var [] = (a = 42, null);
943 var [] = (a = 42, null);
961 [] = (a = "PASS", null);
972 [] = (a = "PASS", null);
979 expect_stdout: "PASS"
991 var {} = (a = "PASS", null);
1002 var {} = (a = "PASS", null);
1009 expect_stdout: "PASS"
1015 collapse_vars: true,
1018 console.log(function(a) {
1020 var b = function([ c ]) {
1032 console.log(function(a) {
1034 var b = function([ c ]) {
1045 expect_stdout: "PASS"
1054 if (console.log("PASS")) {
1059 console.log("PASS") && ([] = 0);
1061 expect_stdout: "PASS"
1074 var { a, b: [ c ] } = null;
1076 console.log("PASS");
1081 console.log("PASS");
1083 expect_stdout: "PASS"
1094 case console.log(a, a):
1104 case console.log(a, a):
1112 expect_stdout: "undefined undefined"
1119 pure_getters: "strict",
1126 var b = [ console.log("PASS"), a ], {
1134 console.log("PASS");
1137 expect_stdout: "PASS"
1153 expect_stdout: "undefined"
1165 [(console.log("PASS"), 42)]: null,
1170 [(console.log("PASS"), 42)]: 0,
1173 expect_stdout: "PASS"
1184 var { 42: a } = { [(console.log("PASS"), 42)](){} };
1187 var {} = { [(console.log("PASS"), 42)]: 0 };
1189 expect_stdout: "PASS"
1193 keep_key_2_pure_getters: {
1196 pure_getters: "strict",
1201 var { 42: a } = { [(console.log("PASS"), 42)](){} };
1204 console.log("PASS");
1206 expect_stdout: "PASS"
1219 console.log(a[0] === b ? "PASS" : "FAIL");
1224 console.log(a[0] === b ? "PASS" : "FAIL");
1226 expect_stdout: "PASS"
1230 maintain_position_assign: {
1235 console.log(([ , ] = [ , "PASS" ])[1]);
1238 console.log([ , "PASS" ][1]);
1240 expect_stdout: "PASS"
1244 maintain_position_var: {
1251 var [ a, b ] = [ A ];
1252 console.log(b || "PASS");
1256 var [ , b ] = [ A ];
1257 console.log(b || "PASS");
1259 expect_stdout: "PASS"
1263 side_effects_array: {
1271 console.log("PASS");
1278 console.log("PASS");
1281 expect_stdout: "PASS"
1285 side_effects_object: {
1291 var a = null, b = console, { c } = 42;
1299 var a = null, c = (console, 42["c"]);
1306 expect_stdout: "PASS"
1316 const [ a ] = [ "PASS" ];
1321 const [ a ] = [ "PASS" ];
1325 expect_stdout: "PASS"
1335 console.log(function f(a) {
1340 console.log(function(a) {
1344 expect_stdout: "undefined"
1356 console.log("PASS") && ([ a ] = 0);
1360 console.log("PASS") && ([ a ] = 0);
1362 expect_stdout: "PASS"
1374 var a = "FAIL", b = 42;
1376 [console.log(a, b)]: b.p
1381 [console.log("PASS", 42)]: 42..p
1384 expect_stdout: "PASS 42"
1388 computed_key_evaluate: {
1397 } = [ "FAIL 1", a ? "FAIL 2" : "PASS" ];
1403 } = [ "FAIL 1", 0 ? "FAIL 2" : "PASS" ];
1406 expect_stdout: "PASS"
1410 computed_key_unused: {
1417 [console.log("bar")]: a,
1418 [console.log("baz")]: { b },
1419 [console.log("moo")]: [
1422 [console.log("moz")]: d,
1427 [console.log("foo")]: [ null, 42 ],
1432 [console.log("bar")]: a,
1433 [console.log("baz")]: {},
1434 [console.log("moo")]: [
1437 [console.log("moz")]: d,
1441 [console.log("foo")]: [ null, 42 ],
1461 for (var { a } in console.log("PASS"));
1464 for (var { a } in console.log("PASS"));
1466 expect_stdout: "PASS"
1476 for (var { b } in console.log("PASS"));
1480 for ({ b } in console.log("PASS"));
1482 expect_stdout: "PASS"
1492 for (var { length: a } in [ 42 ])
1496 for (var { length: a } in [ 42 ])
1511 console.log(function f({
1522 console.log(function f({
1532 expect_stdout: "PASS"
1541 console.log(function f({
1552 console.log(function f({
1562 expect_stdout: "PASS"
1580 expect_stdout: "PASS 42"
1591 var [ a ] = "P", b, o = {};
1592 [ { 1: o.p } ] = [ "FAIL" ];
1593 ({ foo: [ o.q ] } = { foo: "S" });
1595 console.log(a + o.p + o.q + b);
1598 var b, a = "P"[0], o = {};
1599 o.p = [ "FAIL"["1"] ][0];
1600 o.q = { foo: "S"[0] }["foo"];
1602 console.log(a + o.p + o.q + b);
1604 expect_stdout: "PASS"
1618 var [ a ] = "P", b, o = {};
1619 [ { 1: o.p } ] = [ "FAIL" ];
1620 ({ foo: [ o.q ] } = { foo: "S" });
1622 console.log(a + o.p + o.q + b);
1625 var b, a = "P", o = {};
1629 console.log(a + o.p + o.q + b);
1631 expect_stdout: "PASS"
1635 singleton_side_effects: {
1641 [ 42[console.log("foo")] ] = [ console.log("bar") ];
1644 [ 42[console.log("foo")] ] = [ console.log("bar") ];
1669 console.log(void 0);
1671 expect_stdout: "undefined"
1684 [a = "bar"]: 0[console.log(a)],
1691 [a = "bar"]: 0[console.log(a)],
1715 expect_stdout: "foo f"
1721 collapse_vars: true,
1725 [console.log(a)]: b,
1726 } = (a = "PASS", 0);
1731 [console.log(a)]: b,
1732 } = (a = "PASS", 0);
1735 expect_stdout: "PASS"
1741 collapse_vars: true,
1746 [console.log(a)]: b,
1747 } = (a = "PASS", 0));
1753 [console.log(a)]: b,
1754 } = (a = "PASS", 0));
1757 expect_stdout: "PASS"
1763 collapse_vars: true,
1768 (0 && a)[{ a } = b = a];
1773 (0 && a)[{ a } = b = a];
1776 expect_stdout: "PASS"
1782 collapse_vars: true,
1787 var b, { a } = b = a;
1791 var b, { a } = b = a = [ "PASS" ];
1794 expect_stdout: "PASS"
1805 console.log(typeof b);
1816 console.log(typeof b);
1824 expect_stdout: "undefined"
1856 expect_stdout: "PASS"
1866 console.log(typeof function(a) {
1871 console.log(typeof function(a) {
1875 expect_stdout: "function"
1913 expect_stdout: "PASS"
1923 console.log(function() {
1935 console.log(function() {
1951 collapse_vars: true,
1956 console.log(function({
1964 console.log(function({
1970 expect_stdout: "PASS"
1976 collapse_vars: true,
2005 expect_stdout: "PASS"
2026 var a = function() {
2027 if ([ 0[f && f] ] = [])
2031 console.log("PASS");
2032 } while (0 && (b = 0), b && a);
2039 console.log("PASS");
2042 expect_stdout: "PASS"
2056 console.log(function({}) {
2064 console.log(([ {} ] = [ 0 ], f(console)));
2066 expect_stdout: "undefined"
2077 console.log(function({}) {
2083 console.log("PASS");
2088 console.log(([ {} ] = [], function() {
2092 console.log("PASS");
2095 expect_stdout: "PASS"
2112 console.log(typeof a);
2124 console.log(typeof a);
2135 expect_stdout: "function"
2175 [console.log(a)]: a,
2181 [console.log(a)]: a,
2184 expect_stdout: "PASS"
2194 [ a ] = a = [ "PASS", "FAIL" ];
2199 [ a ] = a = [ "PASS", "FAIL" ];
2202 expect_stdout: "PASS"
2213 console.log(function(a) {
2219 console.log(function(a) {
2234 return arguments[0];
2236 console.log(f("PASS"));
2240 return arguments[0];
2242 console.log(f("PASS"));
2244 expect_stdout: "PASS"
2253 console.log(function(a, {}) {
2255 return arguments[0];
2259 console.log(function(a, {}) {
2261 return arguments[0];
2264 expect_stdout: "PASS"
2273 console.log(function({
2280 console.log(function({
2286 expect_stdout: "PASS"
2295 console.log(function() {
2298 throw [ "FAIL", "PASS" ];
2308 console.log(function() {
2311 throw [ "FAIL", "PASS" ];
2319 expect_stdout: "PASS"
2327 console.log(function() {
2342 console.log(function() {
2355 expect_stdout: "PASS"
2359 issue_4436_Infinity: {
2364 console.log(function({
2365 [delete Infinity]: a,
2375 console.log(function({
2376 [delete Infinity]: a,
2393 console.log(function({
2404 console.log(function({
2417 issue_4436_undefined: {
2422 console.log(function({
2423 [delete undefined]: a,
2433 console.log(function({
2434 [delete undefined]: a,
2448 collapse_vars: true,
2452 var a = [ a[0] ] = [ a ];
2457 var a = [ a[0] ] = [ a ];
2460 expect_stdout: "PASS"
2466 pure_getters: "strict",
2479 }().p ] = [ "PASS" ];
2491 }().p ] = [ "PASS" ];
2493 expect_stdout: "PASS"
2499 pure_getters: "strict",
2508 console.log("PASS");
2518 console.log("PASS");
2528 pure_getters: "strict",
2533 var arguments = null;
2537 console.log("PASS");
2543 var arguments = null;
2547 console.log("PASS");
2551 expect_stdout: "PASS"
2566 console.log("PASS");
2576 console.log("PASS");
2593 var a = function f(b) {
2594 return [ b ] = [], b;
2596 console.log(a || "PASS");
2599 var a = function f(b) {
2600 return [ b ] = [], b;
2602 console.log(a || "PASS");
2604 expect_stdout: "PASS"
2617 [console.log(a)]: 0[(b => console + b)(A)]
2625 [console.log(a)]: 0[b = A, console + b]
2630 expect_stdout: "PASS"
2641 for (var i = 0; i < 2; i++)
2642 (function f([ a ]) {
2643 var a = console.log(a) && b, b = null;
2647 for (var i = 0; i < 2; i++)
2648 [ [ a ] ] = [ [ "PASS" ] ],
2650 a = console.log(a) && b,
2667 console.log(function([ a, b = a ]) {}([]));
2670 console.log(function([ a, b = a ]) {}([]));
2672 expect_stdout: "undefined"
2684 var [ arguments ] = [];
2688 console.log("PASS");
2694 var [ arguments ] = [];
2698 console.log("PASS");
2701 expect_stdout: "PASS"
2707 pure_getters: "strict",
2713 var [ arguments ] = [];
2717 console.log("PASS");
2723 var [ arguments ] = [];
2727 console.log("PASS");
2730 expect_stdout: "PASS"
2736 collapse_vars: true,
2761 expect_stdout: "PASS"
2773 [console.log(a = "FAIL")]: a,
2776 console.log("PASS");
2782 [console.log(a = "FAIL")]: a,
2785 console.log("PASS");
2788 expect_stdout: "PASS"
2799 [ arguments ] = [ "foo" ];
2800 console.log(arguments[0]);
2805 [ arguments ] = [ "foo" ];
2806 console.log(arguments[0]);
2820 [ arguments ] = [ "foo" ];
2821 console.log(arguments[0]);
2826 [ arguments ] = [ "foo" ];
2827 console.log(arguments[0]);
2844 for (a in { PASS: null });
2857 for (a in { PASS: null });
2863 expect_stdout: "PASS"
2869 collapse_vars: true,
2874 var a = function() {};
2876 var c = [ c ] = [ c ];
2877 console.log(c[0] === a ? "PASS" : "FAIL");
2880 var a = function() {};
2882 var c = [ c ] = [ c = a ];
2883 console.log(c[0] === a ? "PASS" : "FAIL");
2885 expect_stdout: "PASS"
2895 console.log(([ , a ] = [ "PA", , ]).join("SS"));
2899 console.log(([ , a ] = [ "PA", , ]).join("SS"));
2901 expect_stdout: "PASS"
2907 pure_getters: "strict",
2912 ([ a ] = []).p = console.log("PASS");
2916 ([ a ] = []).p = console.log("PASS");
2918 expect_stdout: "PASS"
2922 issue_5074_getter: {
2929 ({} = { get [(console.log("PASS"), 42)]() {} });
2932 ({} = { [(console.log("PASS"), 42)]: 0 });
2934 expect_stdout: "PASS"
2938 issue_5074_getter_pure_getters: {
2941 pure_getters: "strict",
2946 ({} = { get [(console.log("PASS"), 42)]() {} });
2949 console.log("PASS");
2951 expect_stdout: "PASS"
2955 issue_5074_setter: {
2962 ({} = { set [(console.log("PASS"), 42)](v) {} });
2965 ({} = { [(console.log("PASS"), 42)]: 0 });
2967 expect_stdout: "PASS"
2971 issue_5074_setter_pure_getters: {
2974 pure_getters: "strict",
2979 ({} = { set [(console.log("PASS"), 42)](v) {} });
2982 console.log("PASS");
2984 expect_stdout: "PASS"
2988 issue_5074_method: {
2995 ({} = { [(console.log("PASS"), 42)]() {} });
2998 ({} = { [(console.log("PASS"), 42)]: 0 });
3000 expect_stdout: "PASS"
3004 issue_5074_method_pure_getters: {
3007 pure_getters: "strict",
3012 ({} = { [(console.log("PASS"), 42)]() {} });
3015 console.log("PASS");
3017 expect_stdout: "PASS"
3031 var [ b ] = [ 42, a ], c = b ? 0 : a = "FAIL";
3040 expect_stdout: "PASS"
3056 var c = b ? 0 : a = "FAIL";
3067 expect_stdout: "PASS"
3073 collapse_vars: true,
3085 b && console.log(b);
3094 (b = a) && console.log(b);
3097 expect_stdout: "PASS"
3103 collapse_vars: true,
3117 b && console.log(b);
3124 a && console.log(a);
3126 expect_stdout: "PASS"
3137 (function({}, a) {})(42);
3146 expect_stdout: "PASS"
3153 pure_getters: "strict",
3160 (function f([], a) {
3170 expect_stdout: "PASS"
3177 pure_getters: "strict",
3184 (function f(a, {}) {
3194 expect_stdout: "PASS"
3198 issue_5153_array_assign: {
3203 var a = function*() {
3207 console.log(a === b ? "PASS" : "FAIL");
3210 var a = function*() {
3214 console.log(a === b ? "PASS" : "FAIL");
3216 expect_stdout: "PASS"
3220 issue_5153_array_var: {
3225 var a = function*() {
3228 console.log(a === b ? "PASS" : "FAIL");
3231 var a = function*() {
3234 console.log(a === b ? "PASS" : "FAIL");
3236 expect_stdout: "PASS"
3240 issue_5153_object_assign: {
3253 console.log(a === b ? "PASS" : "FAIL");
3264 console.log(a === b ? "PASS" : "FAIL");
3266 expect_stdout: "PASS"
3270 issue_5153_object_var: {
3282 console.log(a === b ? "PASS" : "FAIL");
3292 console.log(a === b ? "PASS" : "FAIL");
3294 expect_stdout: "PASS"
3300 collapse_vars: true,
3304 [console.log(typeof function() {
3314 [console.log(typeof function() {
3322 expect_stdout: "function"