123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- constant_switch_1: {
- options = { dead_code: true, evaluate: true };
- input: {
- switch (1+1) {
- case 1: foo(); break;
- case 1+1: bar(); break;
- case 1+1+1: baz(); break;
- }
- }
- expect: {
- bar();
- }
- }
- constant_switch_2: {
- options = { dead_code: true, evaluate: true };
- input: {
- switch (1) {
- case 1: foo();
- case 1+1: bar(); break;
- case 1+1+1: baz();
- }
- }
- expect: {
- foo();
- bar();
- }
- }
- constant_switch_3: {
- options = { dead_code: true, evaluate: true };
- input: {
- switch (10) {
- case 1: foo();
- case 1+1: bar(); break;
- case 1+1+1: baz();
- default:
- def();
- }
- }
- expect: {
- def();
- }
- }
- constant_switch_4: {
- options = { dead_code: true, evaluate: true };
- input: {
- switch (2) {
- case 1:
- x();
- if (foo) break;
- y();
- break;
- case 1+1:
- bar();
- default:
- def();
- }
- }
- expect: {
- bar();
- def();
- }
- }
- constant_switch_5: {
- options = { dead_code: true, evaluate: true };
- input: {
- switch (1) {
- case 1:
- x();
- if (foo) break;
- y();
- break;
- case 1+1:
- bar();
- default:
- def();
- }
- }
- expect: {
- // the break inside the if ruins our job
- // we can still get rid of irrelevant cases.
- switch (1) {
- case 1:
- x();
- if (foo) break;
- y();
- }
- // XXX: we could optimize this better by inventing an outer
- // labeled block, but that's kinda tricky.
- }
- }
- constant_switch_6: {
- options = { dead_code: true, evaluate: true };
- input: {
- OUT: {
- foo();
- switch (1) {
- case 1:
- x();
- if (foo) break OUT;
- y();
- case 1+1:
- bar();
- break;
- default:
- def();
- }
- }
- }
- expect: {
- OUT: {
- foo();
- x();
- if (foo) break OUT;
- y();
- bar();
- }
- }
- }
- constant_switch_7: {
- options = { dead_code: true, evaluate: true };
- input: {
- OUT: {
- foo();
- switch (1) {
- case 1:
- x();
- if (foo) break OUT;
- for (var x = 0; x < 10; x++) {
- if (x > 5) break; // this break refers to the for, not to the switch; thus it
- // shouldn't ruin our optimization
- console.log(x);
- }
- y();
- case 1+1:
- bar();
- break;
- default:
- def();
- }
- }
- }
- expect: {
- OUT: {
- foo();
- x();
- if (foo) break OUT;
- for (var x = 0; x < 10; x++) {
- if (x > 5) break;
- console.log(x);
- }
- y();
- bar();
- }
- }
- }
- constant_switch_8: {
- options = { dead_code: true, evaluate: true };
- input: {
- OUT: switch (1) {
- case 1:
- x();
- for (;;) break OUT;
- y();
- break;
- case 1+1:
- bar();
- default:
- def();
- }
- }
- expect: {
- OUT: {
- x();
- for (;;) break OUT;
- y();
- }
- }
- }
- constant_switch_9: {
- options = { dead_code: true, evaluate: true };
- input: {
- OUT: switch (1) {
- case 1:
- x();
- for (;;) if (foo) break OUT;
- y();
- case 1+1:
- bar();
- default:
- def();
- }
- }
- expect: {
- OUT: {
- x();
- for (;;) if (foo) break OUT;
- y();
- bar();
- def();
- }
- }
- }
- drop_default_1: {
- options = { dead_code: true };
- input: {
- switch (foo) {
- case 'bar': baz();
- default:
- }
- }
- expect: {
- switch (foo) {
- case 'bar': baz();
- }
- }
- }
- drop_default_2: {
- options = { dead_code: true };
- input: {
- switch (foo) {
- case 'bar': baz(); break;
- default:
- break;
- }
- }
- expect: {
- switch (foo) {
- case 'bar': baz();
- }
- }
- }
- keep_default: {
- options = { dead_code: true };
- input: {
- switch (foo) {
- case 'bar': baz();
- default:
- something();
- break;
- }
- }
- expect: {
- switch (foo) {
- case 'bar': baz();
- default:
- something();
- }
- }
- }
|