Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Side by Side Diff: test/mjsunit/compiler/inline-exception.js

Issue 2216353002: [turbofan] Also inline into try blocks. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@p5-base
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are
4 // met:
5 //
6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided
11 // with the distribution.
12 // * Neither the name of Google Inc. nor the names of its
13 // contributors may be used to endorse or promote products derived
14 // from this software without specific prior written permission.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28 // Flags: --allow-natives-syntax --turbo
29
30 // This test file was generated by tools/gen-inlining-tests.py .
31
32 function assertOptResultEquals(expected, f) {
33 // f();
34 // %DebugPrint(f);
35 eval("'dont optimize this function itself please, but do optimize f'");
36 %OptimizeFunctionOnNextCall(f);
37 assertEquals(expected, f());
38 }
39
40 function assertOptThrowsWith(expected, f) {
41 // f();
42 // %DebugPrint(f);
43 eval("'dont optimize this function itself please, but do optimize f'");
44 %OptimizeFunctionOnNextCall(f);
45 try {
46 var result = f();
47 fail("assertOptThrowsWith", "exception: " + expected, "result: " + result);
48 } catch (ex) {
49 assertEquals(expected, ex);
50 }
51 }
52
53 var counter = 0;
54
55 function increaseAndReturn15() {
56 counter++;
57 return 15;
58 }
59
60 function increaseAndThrow42() {
61 counter++;
62 throw 42;
63 }
64
65 function returnOrThrow(doReturn) {
66 if (doReturn) {
67 return increaseAndReturn15();
68 } else {
69 return increaseAndThrow42();
70 }
71 }
72
73 // When passed either {increaseAndReturn15} or {increaseAndThrow42}, it acts
74 // as the other one.
75 function invertFunctionCall(f) {
76 var result;
77 try {
78 result = f();
79 } catch (ex) {
80 return ex - 27;
81 }
82 throw result + 27;
83 }
84
85 // Variant flags: [tryThrows, doFinally]
86
87 counter = 0;
88 var f = function() {
89 var local = 3;
90 try {
91 counter++;
92 return increaseAndThrow42();
93 counter++;
94 } finally {
95 counter++;
96 local += 2;
97 counter++;
98 }
99 counter++;
100 }
101 assertOptThrowsWith(42, f);
102 assertEquals(4, counter);
103
104 // Variant flags: [tryThrows, doFinally, endReturnLocal]
105
106 counter = 0;
107 var f = function() {
108 var local = 3;
109 try {
110 counter++;
111 return increaseAndThrow42();
112 counter++;
113 } finally {
114 counter++;
115 local += 2;
116 counter++;
117 }
118 counter++;
119 return 5 + local;
120 }
121 assertOptThrowsWith(42, f);
122 assertEquals(4, counter);
123
124 // Variant flags: [tryThrows, doFinally, finallyThrows]
125
126 counter = 0;
127 var f = function() {
128 var local = 3;
129 try {
130 counter++;
131 return increaseAndThrow42();
132 counter++;
133 } finally {
134 counter++;
135 throw 25;
136 counter++;
137 }
138 counter++;
139 }
140 assertOptThrowsWith(25, f);
141 assertEquals(3, counter);
142
143 // Variant flags: [tryThrows, doFinally, finallyThrows,
144 // endReturnLocal]
145
146 counter = 0;
147 var f = function() {
148 var local = 3;
149 try {
150 counter++;
151 return increaseAndThrow42();
152 counter++;
153 } finally {
154 counter++;
155 throw 25;
156 counter++;
157 }
158 counter++;
159 return 5 + local;
160 }
161 assertOptThrowsWith(25, f);
162 assertEquals(3, counter);
163
164 // Variant flags: [tryThrows, doFinally, finallyReturns]
165
166 counter = 0;
167 var f = function() {
168 var local = 3;
169 try {
170 counter++;
171 return increaseAndThrow42();
172 counter++;
173 } finally {
174 counter++;
175 return 3 + local;
176 counter++;
177 }
178 counter++;
179 }
180 assertOptResultEquals(6, f);
181 assertEquals(3, counter);
182
183 // Variant flags: [tryThrows, doFinally, finallyReturns,
184 // endReturnLocal]
185
186 counter = 0;
187 var f = function() {
188 var local = 3;
189 try {
190 counter++;
191 return increaseAndThrow42();
192 counter++;
193 } finally {
194 counter++;
195 return 3 + local;
196 counter++;
197 }
198 counter++;
199 return 5 + local;
200 }
201 assertOptResultEquals(6, f);
202 assertEquals(3, counter);
203
204 // Variant flags: [tryThrows, doCatch]
205
206 counter = 0;
207 var f = function() {
208 var local = 3;
209 try {
210 counter++;
211 return increaseAndThrow42();
212 counter++;
213 } catch (ex) {
214 counter++;
215 counter++;
216 }
217 counter++;
218 }
219 assertOptResultEquals(undefined, f);
220 assertEquals(5, counter);
221
222 // Variant flags: [tryThrows, doCatch, endReturnLocal]
223
224 counter = 0;
225 var f = function() {
226 var local = 3;
227 try {
228 counter++;
229 return increaseAndThrow42();
230 counter++;
231 } catch (ex) {
232 counter++;
233 counter++;
234 }
235 counter++;
236 return 5 + local;
237 }
238 assertOptResultEquals(8, f);
239 assertEquals(5, counter);
240
241 // Variant flags: [tryThrows, doCatch, doFinally]
242
243 counter = 0;
244 var f = function() {
245 var local = 3;
246 try {
247 counter++;
248 return increaseAndThrow42();
249 counter++;
250 } catch (ex) {
251 counter++;
252 counter++;
253 } finally {
254 counter++;
255 local += 2;
256 counter++;
257 }
258 counter++;
259 }
260 assertOptResultEquals(undefined, f);
261 assertEquals(7, counter);
262
263 // Variant flags: [tryThrows, doCatch, doFinally, endReturnLocal]
264
265 counter = 0;
266 var f = function() {
267 var local = 3;
268 try {
269 counter++;
270 return increaseAndThrow42();
271 counter++;
272 } catch (ex) {
273 counter++;
274 counter++;
275 } finally {
276 counter++;
277 local += 2;
278 counter++;
279 }
280 counter++;
281 return 5 + local;
282 }
283 assertOptResultEquals(10, f);
284 assertEquals(7, counter);
285
286 // Variant flags: [tryThrows, doCatch, doFinally, finallyThrows]
287
288 counter = 0;
289 var f = function() {
290 var local = 3;
291 try {
292 counter++;
293 return increaseAndThrow42();
294 counter++;
295 } catch (ex) {
296 counter++;
297 counter++;
298 } finally {
299 counter++;
300 throw 25;
301 counter++;
302 }
303 counter++;
304 }
305 assertOptThrowsWith(25, f);
306 assertEquals(5, counter);
307
308 // Variant flags: [tryThrows, doCatch, doFinally, finallyThrows,
309 // endReturnLocal]
310
311 counter = 0;
312 var f = function() {
313 var local = 3;
314 try {
315 counter++;
316 return increaseAndThrow42();
317 counter++;
318 } catch (ex) {
319 counter++;
320 counter++;
321 } finally {
322 counter++;
323 throw 25;
324 counter++;
325 }
326 counter++;
327 return 5 + local;
328 }
329 assertOptThrowsWith(25, f);
330 assertEquals(5, counter);
331
332 // Variant flags: [tryThrows, doCatch, doFinally, finallyReturns]
333
334 counter = 0;
335 var f = function() {
336 var local = 3;
337 try {
338 counter++;
339 return increaseAndThrow42();
340 counter++;
341 } catch (ex) {
342 counter++;
343 counter++;
344 } finally {
345 counter++;
346 return 3 + local;
347 counter++;
348 }
349 counter++;
350 }
351 assertOptResultEquals(6, f);
352 assertEquals(5, counter);
353
354 // Variant flags: [tryThrows, doCatch, doFinally, finallyReturns,
355 // endReturnLocal]
356
357 counter = 0;
358 var f = function() {
359 var local = 3;
360 try {
361 counter++;
362 return increaseAndThrow42();
363 counter++;
364 } catch (ex) {
365 counter++;
366 counter++;
367 } finally {
368 counter++;
369 return 3 + local;
370 counter++;
371 }
372 counter++;
373 return 5 + local;
374 }
375 assertOptResultEquals(6, f);
376 assertEquals(5, counter);
377
378 // Variant flags: [tryThrows, doCatch, catchThrows]
379
380 counter = 0;
381 var f = function() {
382 var local = 3;
383 try {
384 counter++;
385 return increaseAndThrow42();
386 counter++;
387 } catch (ex) {
388 counter++;
389 throw 2 + ex;
390 counter++;
391 }
392 counter++;
393 }
394 assertOptThrowsWith(44, f);
395 assertEquals(3, counter);
396
397 // Variant flags: [tryThrows, doCatch, catchThrows, endReturnLocal]
398
399 counter = 0;
400 var f = function() {
401 var local = 3;
402 try {
403 counter++;
404 return increaseAndThrow42();
405 counter++;
406 } catch (ex) {
407 counter++;
408 throw 2 + ex;
409 counter++;
410 }
411 counter++;
412 return 5 + local;
413 }
414 assertOptThrowsWith(44, f);
415 assertEquals(3, counter);
416
417 // Variant flags: [tryThrows, doCatch, catchThrows, doFinally]
418
419 counter = 0;
420 var f = function() {
421 var local = 3;
422 try {
423 counter++;
424 return increaseAndThrow42();
425 counter++;
426 } catch (ex) {
427 counter++;
428 throw 2 + ex;
429 counter++;
430 } finally {
431 counter++;
432 local += 2;
433 counter++;
434 }
435 counter++;
436 }
437 assertOptThrowsWith(44, f);
438 assertEquals(5, counter);
439
440 // Variant flags: [tryThrows, doCatch, catchThrows, doFinally,
441 // endReturnLocal]
442
443 counter = 0;
444 var f = function() {
445 var local = 3;
446 try {
447 counter++;
448 return increaseAndThrow42();
449 counter++;
450 } catch (ex) {
451 counter++;
452 throw 2 + ex;
453 counter++;
454 } finally {
455 counter++;
456 local += 2;
457 counter++;
458 }
459 counter++;
460 return 5 + local;
461 }
462 assertOptThrowsWith(44, f);
463 assertEquals(5, counter);
464
465 // Variant flags: [tryThrows, doCatch, catchThrows, doFinally,
466 // finallyThrows]
467
468 counter = 0;
469 var f = function() {
470 var local = 3;
471 try {
472 counter++;
473 return increaseAndThrow42();
474 counter++;
475 } catch (ex) {
476 counter++;
477 throw 2 + ex;
478 counter++;
479 } finally {
480 counter++;
481 throw 25;
482 counter++;
483 }
484 counter++;
485 }
486 assertOptThrowsWith(25, f);
487 assertEquals(4, counter);
488
489 // Variant flags: [tryThrows, doCatch, catchThrows, doFinally,
490 // finallyThrows, endReturnLocal]
491
492 counter = 0;
493 var f = function() {
494 var local = 3;
495 try {
496 counter++;
497 return increaseAndThrow42();
498 counter++;
499 } catch (ex) {
500 counter++;
501 throw 2 + ex;
502 counter++;
503 } finally {
504 counter++;
505 throw 25;
506 counter++;
507 }
508 counter++;
509 return 5 + local;
510 }
511 assertOptThrowsWith(25, f);
512 assertEquals(4, counter);
513
514 // Variant flags: [tryThrows, doCatch, catchThrows, doFinally,
515 // finallyReturns]
516
517 counter = 0;
518 var f = function() {
519 var local = 3;
520 try {
521 counter++;
522 return increaseAndThrow42();
523 counter++;
524 } catch (ex) {
525 counter++;
526 throw 2 + ex;
527 counter++;
528 } finally {
529 counter++;
530 return 3 + local;
531 counter++;
532 }
533 counter++;
534 }
535 assertOptResultEquals(6, f);
536 assertEquals(4, counter);
537
538 // Variant flags: [tryThrows, doCatch, catchThrows, doFinally,
539 // finallyReturns, endReturnLocal]
540
541 counter = 0;
542 var f = function() {
543 var local = 3;
544 try {
545 counter++;
546 return increaseAndThrow42();
547 counter++;
548 } catch (ex) {
549 counter++;
550 throw 2 + ex;
551 counter++;
552 } finally {
553 counter++;
554 return 3 + local;
555 counter++;
556 }
557 counter++;
558 return 5 + local;
559 }
560 assertOptResultEquals(6, f);
561 assertEquals(4, counter);
562
563 // Variant flags: [tryThrows, doCatch, catchWithLocal]
564
565 counter = 0;
566 var f = function() {
567 var local = 3;
568 try {
569 counter++;
570 return increaseAndThrow42();
571 counter++;
572 } catch (ex) {
573 counter++;
574 local += ex;
575 counter++;
576 }
577 counter++;
578 }
579 assertOptResultEquals(undefined, f);
580 assertEquals(5, counter);
581
582 // Variant flags: [tryThrows, doCatch, catchWithLocal, endReturnLocal]
583
584 counter = 0;
585 var f = function() {
586 var local = 3;
587 try {
588 counter++;
589 return increaseAndThrow42();
590 counter++;
591 } catch (ex) {
592 counter++;
593 local += ex;
594 counter++;
595 }
596 counter++;
597 return 5 + local;
598 }
599 assertOptResultEquals(50, f);
600 assertEquals(5, counter);
601
602 // Variant flags: [tryThrows, doCatch, catchWithLocal, doFinally]
603
604 counter = 0;
605 var f = function() {
606 var local = 3;
607 try {
608 counter++;
609 return increaseAndThrow42();
610 counter++;
611 } catch (ex) {
612 counter++;
613 local += ex;
614 counter++;
615 } finally {
616 counter++;
617 local += 2;
618 counter++;
619 }
620 counter++;
621 }
622 assertOptResultEquals(undefined, f);
623 assertEquals(7, counter);
624
625 // Variant flags: [tryThrows, doCatch, catchWithLocal, doFinally,
626 // endReturnLocal]
627
628 counter = 0;
629 var f = function() {
630 var local = 3;
631 try {
632 counter++;
633 return increaseAndThrow42();
634 counter++;
635 } catch (ex) {
636 counter++;
637 local += ex;
638 counter++;
639 } finally {
640 counter++;
641 local += 2;
642 counter++;
643 }
644 counter++;
645 return 5 + local;
646 }
647 assertOptResultEquals(52, f);
648 assertEquals(7, counter);
649
650 // Variant flags: [tryThrows, doCatch, catchWithLocal, doFinally,
651 // finallyThrows]
652
653 counter = 0;
654 var f = function() {
655 var local = 3;
656 try {
657 counter++;
658 return increaseAndThrow42();
659 counter++;
660 } catch (ex) {
661 counter++;
662 local += ex;
663 counter++;
664 } finally {
665 counter++;
666 throw 25;
667 counter++;
668 }
669 counter++;
670 }
671 assertOptThrowsWith(25, f);
672 assertEquals(5, counter);
673
674 // Variant flags: [tryThrows, doCatch, catchWithLocal, doFinally,
675 // finallyThrows, endReturnLocal]
676
677 counter = 0;
678 var f = function() {
679 var local = 3;
680 try {
681 counter++;
682 return increaseAndThrow42();
683 counter++;
684 } catch (ex) {
685 counter++;
686 local += ex;
687 counter++;
688 } finally {
689 counter++;
690 throw 25;
691 counter++;
692 }
693 counter++;
694 return 5 + local;
695 }
696 assertOptThrowsWith(25, f);
697 assertEquals(5, counter);
698
699 // Variant flags: [tryThrows, doCatch, catchWithLocal, doFinally,
700 // finallyReturns]
701
702 counter = 0;
703 var f = function() {
704 var local = 3;
705 try {
706 counter++;
707 return increaseAndThrow42();
708 counter++;
709 } catch (ex) {
710 counter++;
711 local += ex;
712 counter++;
713 } finally {
714 counter++;
715 return 3 + local;
716 counter++;
717 }
718 counter++;
719 }
720 assertOptResultEquals(48, f);
721 assertEquals(5, counter);
722
723 // Variant flags: [tryThrows, doCatch, catchWithLocal, doFinally,
724 // finallyReturns, endReturnLocal]
725
726 counter = 0;
727 var f = function() {
728 var local = 3;
729 try {
730 counter++;
731 return increaseAndThrow42();
732 counter++;
733 } catch (ex) {
734 counter++;
735 local += ex;
736 counter++;
737 } finally {
738 counter++;
739 return 3 + local;
740 counter++;
741 }
742 counter++;
743 return 5 + local;
744 }
745 assertOptResultEquals(48, f);
746 assertEquals(5, counter);
747
748 // Variant flags: [tryThrows, doCatch, catchWithLocal, catchThrows]
749
750 counter = 0;
751 var f = function() {
752 var local = 3;
753 try {
754 counter++;
755 return increaseAndThrow42();
756 counter++;
757 } catch (ex) {
758 counter++;
759 throw 2 + ex;
760 counter++;
761 }
762 counter++;
763 }
764 assertOptThrowsWith(44, f);
765 assertEquals(3, counter);
766
767 // Variant flags: [tryThrows, doCatch, catchWithLocal, catchThrows,
768 // endReturnLocal]
769
770 counter = 0;
771 var f = function() {
772 var local = 3;
773 try {
774 counter++;
775 return increaseAndThrow42();
776 counter++;
777 } catch (ex) {
778 counter++;
779 throw 2 + ex;
780 counter++;
781 }
782 counter++;
783 return 5 + local;
784 }
785 assertOptThrowsWith(44, f);
786 assertEquals(3, counter);
787
788 // Variant flags: [tryThrows, doCatch, catchWithLocal, catchThrows,
789 // doFinally]
790
791 counter = 0;
792 var f = function() {
793 var local = 3;
794 try {
795 counter++;
796 return increaseAndThrow42();
797 counter++;
798 } catch (ex) {
799 counter++;
800 throw 2 + ex;
801 counter++;
802 } finally {
803 counter++;
804 local += 2;
805 counter++;
806 }
807 counter++;
808 }
809 assertOptThrowsWith(44, f);
810 assertEquals(5, counter);
811
812 // Variant flags: [tryThrows, doCatch, catchWithLocal, catchThrows,
813 // doFinally, endReturnLocal]
814
815 counter = 0;
816 var f = function() {
817 var local = 3;
818 try {
819 counter++;
820 return increaseAndThrow42();
821 counter++;
822 } catch (ex) {
823 counter++;
824 throw 2 + ex;
825 counter++;
826 } finally {
827 counter++;
828 local += 2;
829 counter++;
830 }
831 counter++;
832 return 5 + local;
833 }
834 assertOptThrowsWith(44, f);
835 assertEquals(5, counter);
836
837 // Variant flags: [tryThrows, doCatch, catchWithLocal, catchThrows,
838 // doFinally, finallyThrows]
839
840 counter = 0;
841 var f = function() {
842 var local = 3;
843 try {
844 counter++;
845 return increaseAndThrow42();
846 counter++;
847 } catch (ex) {
848 counter++;
849 throw 2 + ex;
850 counter++;
851 } finally {
852 counter++;
853 throw 25;
854 counter++;
855 }
856 counter++;
857 }
858 assertOptThrowsWith(25, f);
859 assertEquals(4, counter);
860
861 // Variant flags: [tryThrows, doCatch, catchWithLocal, catchThrows,
862 // doFinally, finallyThrows, endReturnLocal]
863
864 counter = 0;
865 var f = function() {
866 var local = 3;
867 try {
868 counter++;
869 return increaseAndThrow42();
870 counter++;
871 } catch (ex) {
872 counter++;
873 throw 2 + ex;
874 counter++;
875 } finally {
876 counter++;
877 throw 25;
878 counter++;
879 }
880 counter++;
881 return 5 + local;
882 }
883 assertOptThrowsWith(25, f);
884 assertEquals(4, counter);
885
886 // Variant flags: [tryThrows, doCatch, catchWithLocal, catchThrows,
887 // doFinally, finallyReturns]
888
889 counter = 0;
890 var f = function() {
891 var local = 3;
892 try {
893 counter++;
894 return increaseAndThrow42();
895 counter++;
896 } catch (ex) {
897 counter++;
898 throw 2 + ex;
899 counter++;
900 } finally {
901 counter++;
902 return 3 + local;
903 counter++;
904 }
905 counter++;
906 }
907 assertOptResultEquals(6, f);
908 assertEquals(4, counter);
909
910 // Variant flags: [tryThrows, doCatch, catchWithLocal, catchThrows,
911 // doFinally, finallyReturns, endReturnLocal]
912
913 counter = 0;
914 var f = function() {
915 var local = 3;
916 try {
917 counter++;
918 return increaseAndThrow42();
919 counter++;
920 } catch (ex) {
921 counter++;
922 throw 2 + ex;
923 counter++;
924 } finally {
925 counter++;
926 return 3 + local;
927 counter++;
928 }
929 counter++;
930 return 5 + local;
931 }
932 assertOptResultEquals(6, f);
933 assertEquals(4, counter);
934
935 // Variant flags: [tryThrows, doCatch, catchReturns]
936
937 counter = 0;
938 var f = function() {
939 var local = 3;
940 try {
941 counter++;
942 return increaseAndThrow42();
943 counter++;
944 } catch (ex) {
945 counter++;
946 return 2 + ex;
947 counter++;
948 }
949 counter++;
950 }
951 assertOptResultEquals(44, f);
952 assertEquals(3, counter);
953
954 // Variant flags: [tryThrows, doCatch, catchReturns, endReturnLocal]
955
956 counter = 0;
957 var f = function() {
958 var local = 3;
959 try {
960 counter++;
961 return increaseAndThrow42();
962 counter++;
963 } catch (ex) {
964 counter++;
965 return 2 + ex;
966 counter++;
967 }
968 counter++;
969 return 5 + local;
970 }
971 assertOptResultEquals(44, f);
972 assertEquals(3, counter);
973
974 // Variant flags: [tryThrows, doCatch, catchReturns, doFinally]
975
976 counter = 0;
977 var f = function() {
978 var local = 3;
979 try {
980 counter++;
981 return increaseAndThrow42();
982 counter++;
983 } catch (ex) {
984 counter++;
985 return 2 + ex;
986 counter++;
987 } finally {
988 counter++;
989 local += 2;
990 counter++;
991 }
992 counter++;
993 }
994 assertOptResultEquals(44, f);
995 assertEquals(5, counter);
996
997 // Variant flags: [tryThrows, doCatch, catchReturns, doFinally,
998 // endReturnLocal]
999
1000 counter = 0;
1001 var f = function() {
1002 var local = 3;
1003 try {
1004 counter++;
1005 return increaseAndThrow42();
1006 counter++;
1007 } catch (ex) {
1008 counter++;
1009 return 2 + ex;
1010 counter++;
1011 } finally {
1012 counter++;
1013 local += 2;
1014 counter++;
1015 }
1016 counter++;
1017 return 5 + local;
1018 }
1019 assertOptResultEquals(44, f);
1020 assertEquals(5, counter);
1021
1022 // Variant flags: [tryThrows, doCatch, catchReturns, doFinally,
1023 // finallyThrows]
1024
1025 counter = 0;
1026 var f = function() {
1027 var local = 3;
1028 try {
1029 counter++;
1030 return increaseAndThrow42();
1031 counter++;
1032 } catch (ex) {
1033 counter++;
1034 return 2 + ex;
1035 counter++;
1036 } finally {
1037 counter++;
1038 throw 25;
1039 counter++;
1040 }
1041 counter++;
1042 }
1043 assertOptThrowsWith(25, f);
1044 assertEquals(4, counter);
1045
1046 // Variant flags: [tryThrows, doCatch, catchReturns, doFinally,
1047 // finallyThrows, endReturnLocal]
1048
1049 counter = 0;
1050 var f = function() {
1051 var local = 3;
1052 try {
1053 counter++;
1054 return increaseAndThrow42();
1055 counter++;
1056 } catch (ex) {
1057 counter++;
1058 return 2 + ex;
1059 counter++;
1060 } finally {
1061 counter++;
1062 throw 25;
1063 counter++;
1064 }
1065 counter++;
1066 return 5 + local;
1067 }
1068 assertOptThrowsWith(25, f);
1069 assertEquals(4, counter);
1070
1071 // Variant flags: [tryThrows, doCatch, catchReturns, doFinally,
1072 // finallyReturns]
1073
1074 counter = 0;
1075 var f = function() {
1076 var local = 3;
1077 try {
1078 counter++;
1079 return increaseAndThrow42();
1080 counter++;
1081 } catch (ex) {
1082 counter++;
1083 return 2 + ex;
1084 counter++;
1085 } finally {
1086 counter++;
1087 return 3 + local;
1088 counter++;
1089 }
1090 counter++;
1091 }
1092 assertOptResultEquals(6, f);
1093 assertEquals(4, counter);
1094
1095 // Variant flags: [tryThrows, doCatch, catchReturns, doFinally,
1096 // finallyReturns, endReturnLocal]
1097
1098 counter = 0;
1099 var f = function() {
1100 var local = 3;
1101 try {
1102 counter++;
1103 return increaseAndThrow42();
1104 counter++;
1105 } catch (ex) {
1106 counter++;
1107 return 2 + ex;
1108 counter++;
1109 } finally {
1110 counter++;
1111 return 3 + local;
1112 counter++;
1113 }
1114 counter++;
1115 return 5 + local;
1116 }
1117 assertOptResultEquals(6, f);
1118 assertEquals(4, counter);
1119
1120 // Variant flags: [tryThrows, doCatch, catchReturns, catchWithLocal]
1121
1122 counter = 0;
1123 var f = function() {
1124 var local = 3;
1125 try {
1126 counter++;
1127 return increaseAndThrow42();
1128 counter++;
1129 } catch (ex) {
1130 counter++;
1131 return 2 + local;
1132 counter++;
1133 }
1134 counter++;
1135 }
1136 assertOptResultEquals(5, f);
1137 assertEquals(3, counter);
1138
1139 // Variant flags: [tryThrows, doCatch, catchReturns, catchWithLocal,
1140 // endReturnLocal]
1141
1142 counter = 0;
1143 var f = function() {
1144 var local = 3;
1145 try {
1146 counter++;
1147 return increaseAndThrow42();
1148 counter++;
1149 } catch (ex) {
1150 counter++;
1151 return 2 + local;
1152 counter++;
1153 }
1154 counter++;
1155 return 5 + local;
1156 }
1157 assertOptResultEquals(5, f);
1158 assertEquals(3, counter);
1159
1160 // Variant flags: [tryThrows, doCatch, catchReturns, catchWithLocal,
1161 // doFinally]
1162
1163 counter = 0;
1164 var f = function() {
1165 var local = 3;
1166 try {
1167 counter++;
1168 return increaseAndThrow42();
1169 counter++;
1170 } catch (ex) {
1171 counter++;
1172 return 2 + local;
1173 counter++;
1174 } finally {
1175 counter++;
1176 local += 2;
1177 counter++;
1178 }
1179 counter++;
1180 }
1181 assertOptResultEquals(5, f);
1182 assertEquals(5, counter);
1183
1184 // Variant flags: [tryThrows, doCatch, catchReturns, catchWithLocal,
1185 // doFinally, endReturnLocal]
1186
1187 counter = 0;
1188 var f = function() {
1189 var local = 3;
1190 try {
1191 counter++;
1192 return increaseAndThrow42();
1193 counter++;
1194 } catch (ex) {
1195 counter++;
1196 return 2 + local;
1197 counter++;
1198 } finally {
1199 counter++;
1200 local += 2;
1201 counter++;
1202 }
1203 counter++;
1204 return 5 + local;
1205 }
1206 assertOptResultEquals(5, f);
1207 assertEquals(5, counter);
1208
1209 // Variant flags: [tryThrows, doCatch, catchReturns, catchWithLocal,
1210 // doFinally, finallyThrows]
1211
1212 counter = 0;
1213 var f = function() {
1214 var local = 3;
1215 try {
1216 counter++;
1217 return increaseAndThrow42();
1218 counter++;
1219 } catch (ex) {
1220 counter++;
1221 return 2 + local;
1222 counter++;
1223 } finally {
1224 counter++;
1225 throw 25;
1226 counter++;
1227 }
1228 counter++;
1229 }
1230 assertOptThrowsWith(25, f);
1231 assertEquals(4, counter);
1232
1233 // Variant flags: [tryThrows, doCatch, catchReturns, catchWithLocal,
1234 // doFinally, finallyThrows, endReturnLocal]
1235
1236 counter = 0;
1237 var f = function() {
1238 var local = 3;
1239 try {
1240 counter++;
1241 return increaseAndThrow42();
1242 counter++;
1243 } catch (ex) {
1244 counter++;
1245 return 2 + local;
1246 counter++;
1247 } finally {
1248 counter++;
1249 throw 25;
1250 counter++;
1251 }
1252 counter++;
1253 return 5 + local;
1254 }
1255 assertOptThrowsWith(25, f);
1256 assertEquals(4, counter);
1257
1258 // Variant flags: [tryThrows, doCatch, catchReturns, catchWithLocal,
1259 // doFinally, finallyReturns]
1260
1261 counter = 0;
1262 var f = function() {
1263 var local = 3;
1264 try {
1265 counter++;
1266 return increaseAndThrow42();
1267 counter++;
1268 } catch (ex) {
1269 counter++;
1270 return 2 + local;
1271 counter++;
1272 } finally {
1273 counter++;
1274 return 3 + local;
1275 counter++;
1276 }
1277 counter++;
1278 }
1279 assertOptResultEquals(6, f);
1280 assertEquals(4, counter);
1281
1282 // Variant flags: [tryThrows, doCatch, catchReturns, catchWithLocal,
1283 // doFinally, finallyReturns, endReturnLocal]
1284
1285 counter = 0;
1286 var f = function() {
1287 var local = 3;
1288 try {
1289 counter++;
1290 return increaseAndThrow42();
1291 counter++;
1292 } catch (ex) {
1293 counter++;
1294 return 2 + local;
1295 counter++;
1296 } finally {
1297 counter++;
1298 return 3 + local;
1299 counter++;
1300 }
1301 counter++;
1302 return 5 + local;
1303 }
1304 assertOptResultEquals(6, f);
1305 assertEquals(4, counter);
1306
1307 // Variant flags: [tryThrows, tryResultToLocal, doFinally]
1308
1309 counter = 0;
1310 var f = function() {
1311 var local = 3;
1312 try {
1313 counter++;
1314 local += increaseAndThrow42();
1315 counter++;
1316 } finally {
1317 counter++;
1318 local += 2;
1319 counter++;
1320 }
1321 counter++;
1322 }
1323 assertOptThrowsWith(42, f);
1324 assertEquals(4, counter);
1325
1326 // Variant flags: [tryThrows, tryResultToLocal, doFinally,
1327 // endReturnLocal]
1328
1329 counter = 0;
1330 var f = function() {
1331 var local = 3;
1332 try {
1333 counter++;
1334 local += increaseAndThrow42();
1335 counter++;
1336 } finally {
1337 counter++;
1338 local += 2;
1339 counter++;
1340 }
1341 counter++;
1342 return 5 + local;
1343 }
1344 assertOptThrowsWith(42, f);
1345 assertEquals(4, counter);
1346
1347 // Variant flags: [tryThrows, tryResultToLocal, doFinally,
1348 // finallyThrows]
1349
1350 counter = 0;
1351 var f = function() {
1352 var local = 3;
1353 try {
1354 counter++;
1355 local += increaseAndThrow42();
1356 counter++;
1357 } finally {
1358 counter++;
1359 throw 25;
1360 counter++;
1361 }
1362 counter++;
1363 }
1364 assertOptThrowsWith(25, f);
1365 assertEquals(3, counter);
1366
1367 // Variant flags: [tryThrows, tryResultToLocal, doFinally,
1368 // finallyThrows, endReturnLocal]
1369
1370 counter = 0;
1371 var f = function() {
1372 var local = 3;
1373 try {
1374 counter++;
1375 local += increaseAndThrow42();
1376 counter++;
1377 } finally {
1378 counter++;
1379 throw 25;
1380 counter++;
1381 }
1382 counter++;
1383 return 5 + local;
1384 }
1385 assertOptThrowsWith(25, f);
1386 assertEquals(3, counter);
1387
1388 // Variant flags: [tryThrows, tryResultToLocal, doFinally,
1389 // finallyReturns]
1390
1391 counter = 0;
1392 var f = function() {
1393 var local = 3;
1394 try {
1395 counter++;
1396 local += increaseAndThrow42();
1397 counter++;
1398 } finally {
1399 counter++;
1400 return 3 + local;
1401 counter++;
1402 }
1403 counter++;
1404 }
1405 assertOptResultEquals(6, f);
1406 assertEquals(3, counter);
1407
1408 // Variant flags: [tryThrows, tryResultToLocal, doFinally,
1409 // finallyReturns, endReturnLocal]
1410
1411 counter = 0;
1412 var f = function() {
1413 var local = 3;
1414 try {
1415 counter++;
1416 local += increaseAndThrow42();
1417 counter++;
1418 } finally {
1419 counter++;
1420 return 3 + local;
1421 counter++;
1422 }
1423 counter++;
1424 return 5 + local;
1425 }
1426 assertOptResultEquals(6, f);
1427 assertEquals(3, counter);
1428
1429 // Variant flags: [tryThrows, tryResultToLocal, doCatch]
1430
1431 counter = 0;
1432 var f = function() {
1433 var local = 3;
1434 try {
1435 counter++;
1436 local += increaseAndThrow42();
1437 counter++;
1438 } catch (ex) {
1439 counter++;
1440 counter++;
1441 }
1442 counter++;
1443 }
1444 assertOptResultEquals(undefined, f);
1445 assertEquals(5, counter);
1446
1447 // Variant flags: [tryThrows, tryResultToLocal, doCatch,
1448 // endReturnLocal]
1449
1450 counter = 0;
1451 var f = function() {
1452 var local = 3;
1453 try {
1454 counter++;
1455 local += increaseAndThrow42();
1456 counter++;
1457 } catch (ex) {
1458 counter++;
1459 counter++;
1460 }
1461 counter++;
1462 return 5 + local;
1463 }
1464 assertOptResultEquals(8, f);
1465 assertEquals(5, counter);
1466
1467 // Variant flags: [tryThrows, tryResultToLocal, doCatch, doFinally]
1468
1469 counter = 0;
1470 var f = function() {
1471 var local = 3;
1472 try {
1473 counter++;
1474 local += increaseAndThrow42();
1475 counter++;
1476 } catch (ex) {
1477 counter++;
1478 counter++;
1479 } finally {
1480 counter++;
1481 local += 2;
1482 counter++;
1483 }
1484 counter++;
1485 }
1486 assertOptResultEquals(undefined, f);
1487 assertEquals(7, counter);
1488
1489 // Variant flags: [tryThrows, tryResultToLocal, doCatch, doFinally,
1490 // endReturnLocal]
1491
1492 counter = 0;
1493 var f = function() {
1494 var local = 3;
1495 try {
1496 counter++;
1497 local += increaseAndThrow42();
1498 counter++;
1499 } catch (ex) {
1500 counter++;
1501 counter++;
1502 } finally {
1503 counter++;
1504 local += 2;
1505 counter++;
1506 }
1507 counter++;
1508 return 5 + local;
1509 }
1510 assertOptResultEquals(10, f);
1511 assertEquals(7, counter);
1512
1513 // Variant flags: [tryThrows, tryResultToLocal, doCatch, doFinally,
1514 // finallyThrows]
1515
1516 counter = 0;
1517 var f = function() {
1518 var local = 3;
1519 try {
1520 counter++;
1521 local += increaseAndThrow42();
1522 counter++;
1523 } catch (ex) {
1524 counter++;
1525 counter++;
1526 } finally {
1527 counter++;
1528 throw 25;
1529 counter++;
1530 }
1531 counter++;
1532 }
1533 assertOptThrowsWith(25, f);
1534 assertEquals(5, counter);
1535
1536 // Variant flags: [tryThrows, tryResultToLocal, doCatch, doFinally,
1537 // finallyThrows, endReturnLocal]
1538
1539 counter = 0;
1540 var f = function() {
1541 var local = 3;
1542 try {
1543 counter++;
1544 local += increaseAndThrow42();
1545 counter++;
1546 } catch (ex) {
1547 counter++;
1548 counter++;
1549 } finally {
1550 counter++;
1551 throw 25;
1552 counter++;
1553 }
1554 counter++;
1555 return 5 + local;
1556 }
1557 assertOptThrowsWith(25, f);
1558 assertEquals(5, counter);
1559
1560 // Variant flags: [tryThrows, tryResultToLocal, doCatch, doFinally,
1561 // finallyReturns]
1562
1563 counter = 0;
1564 var f = function() {
1565 var local = 3;
1566 try {
1567 counter++;
1568 local += increaseAndThrow42();
1569 counter++;
1570 } catch (ex) {
1571 counter++;
1572 counter++;
1573 } finally {
1574 counter++;
1575 return 3 + local;
1576 counter++;
1577 }
1578 counter++;
1579 }
1580 assertOptResultEquals(6, f);
1581 assertEquals(5, counter);
1582
1583 // Variant flags: [tryThrows, tryResultToLocal, doCatch, doFinally,
1584 // finallyReturns, endReturnLocal]
1585
1586 counter = 0;
1587 var f = function() {
1588 var local = 3;
1589 try {
1590 counter++;
1591 local += increaseAndThrow42();
1592 counter++;
1593 } catch (ex) {
1594 counter++;
1595 counter++;
1596 } finally {
1597 counter++;
1598 return 3 + local;
1599 counter++;
1600 }
1601 counter++;
1602 return 5 + local;
1603 }
1604 assertOptResultEquals(6, f);
1605 assertEquals(5, counter);
1606
1607 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchThrows]
1608
1609 counter = 0;
1610 var f = function() {
1611 var local = 3;
1612 try {
1613 counter++;
1614 local += increaseAndThrow42();
1615 counter++;
1616 } catch (ex) {
1617 counter++;
1618 throw 2 + ex;
1619 counter++;
1620 }
1621 counter++;
1622 }
1623 assertOptThrowsWith(44, f);
1624 assertEquals(3, counter);
1625
1626 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchThrows,
1627 // endReturnLocal]
1628
1629 counter = 0;
1630 var f = function() {
1631 var local = 3;
1632 try {
1633 counter++;
1634 local += increaseAndThrow42();
1635 counter++;
1636 } catch (ex) {
1637 counter++;
1638 throw 2 + ex;
1639 counter++;
1640 }
1641 counter++;
1642 return 5 + local;
1643 }
1644 assertOptThrowsWith(44, f);
1645 assertEquals(3, counter);
1646
1647 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchThrows,
1648 // doFinally]
1649
1650 counter = 0;
1651 var f = function() {
1652 var local = 3;
1653 try {
1654 counter++;
1655 local += increaseAndThrow42();
1656 counter++;
1657 } catch (ex) {
1658 counter++;
1659 throw 2 + ex;
1660 counter++;
1661 } finally {
1662 counter++;
1663 local += 2;
1664 counter++;
1665 }
1666 counter++;
1667 }
1668 assertOptThrowsWith(44, f);
1669 assertEquals(5, counter);
1670
1671 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchThrows,
1672 // doFinally, endReturnLocal]
1673
1674 counter = 0;
1675 var f = function() {
1676 var local = 3;
1677 try {
1678 counter++;
1679 local += increaseAndThrow42();
1680 counter++;
1681 } catch (ex) {
1682 counter++;
1683 throw 2 + ex;
1684 counter++;
1685 } finally {
1686 counter++;
1687 local += 2;
1688 counter++;
1689 }
1690 counter++;
1691 return 5 + local;
1692 }
1693 assertOptThrowsWith(44, f);
1694 assertEquals(5, counter);
1695
1696 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchThrows,
1697 // doFinally, finallyThrows]
1698
1699 counter = 0;
1700 var f = function() {
1701 var local = 3;
1702 try {
1703 counter++;
1704 local += increaseAndThrow42();
1705 counter++;
1706 } catch (ex) {
1707 counter++;
1708 throw 2 + ex;
1709 counter++;
1710 } finally {
1711 counter++;
1712 throw 25;
1713 counter++;
1714 }
1715 counter++;
1716 }
1717 assertOptThrowsWith(25, f);
1718 assertEquals(4, counter);
1719
1720 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchThrows,
1721 // doFinally, finallyThrows, endReturnLocal]
1722
1723 counter = 0;
1724 var f = function() {
1725 var local = 3;
1726 try {
1727 counter++;
1728 local += increaseAndThrow42();
1729 counter++;
1730 } catch (ex) {
1731 counter++;
1732 throw 2 + ex;
1733 counter++;
1734 } finally {
1735 counter++;
1736 throw 25;
1737 counter++;
1738 }
1739 counter++;
1740 return 5 + local;
1741 }
1742 assertOptThrowsWith(25, f);
1743 assertEquals(4, counter);
1744
1745 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchThrows,
1746 // doFinally, finallyReturns]
1747
1748 counter = 0;
1749 var f = function() {
1750 var local = 3;
1751 try {
1752 counter++;
1753 local += increaseAndThrow42();
1754 counter++;
1755 } catch (ex) {
1756 counter++;
1757 throw 2 + ex;
1758 counter++;
1759 } finally {
1760 counter++;
1761 return 3 + local;
1762 counter++;
1763 }
1764 counter++;
1765 }
1766 assertOptResultEquals(6, f);
1767 assertEquals(4, counter);
1768
1769 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchThrows,
1770 // doFinally, finallyReturns, endReturnLocal]
1771
1772 counter = 0;
1773 var f = function() {
1774 var local = 3;
1775 try {
1776 counter++;
1777 local += increaseAndThrow42();
1778 counter++;
1779 } catch (ex) {
1780 counter++;
1781 throw 2 + ex;
1782 counter++;
1783 } finally {
1784 counter++;
1785 return 3 + local;
1786 counter++;
1787 }
1788 counter++;
1789 return 5 + local;
1790 }
1791 assertOptResultEquals(6, f);
1792 assertEquals(4, counter);
1793
1794 // Variant flags: [tryThrows, tryResultToLocal, doCatch,
1795 // catchWithLocal]
1796
1797 counter = 0;
1798 var f = function() {
1799 var local = 3;
1800 try {
1801 counter++;
1802 local += increaseAndThrow42();
1803 counter++;
1804 } catch (ex) {
1805 counter++;
1806 local += ex;
1807 counter++;
1808 }
1809 counter++;
1810 }
1811 assertOptResultEquals(undefined, f);
1812 assertEquals(5, counter);
1813
1814 // Variant flags: [tryThrows, tryResultToLocal, doCatch,
1815 // catchWithLocal, endReturnLocal]
1816
1817 counter = 0;
1818 var f = function() {
1819 var local = 3;
1820 try {
1821 counter++;
1822 local += increaseAndThrow42();
1823 counter++;
1824 } catch (ex) {
1825 counter++;
1826 local += ex;
1827 counter++;
1828 }
1829 counter++;
1830 return 5 + local;
1831 }
1832 assertOptResultEquals(50, f);
1833 assertEquals(5, counter);
1834
1835 // Variant flags: [tryThrows, tryResultToLocal, doCatch,
1836 // catchWithLocal, doFinally]
1837
1838 counter = 0;
1839 var f = function() {
1840 var local = 3;
1841 try {
1842 counter++;
1843 local += increaseAndThrow42();
1844 counter++;
1845 } catch (ex) {
1846 counter++;
1847 local += ex;
1848 counter++;
1849 } finally {
1850 counter++;
1851 local += 2;
1852 counter++;
1853 }
1854 counter++;
1855 }
1856 assertOptResultEquals(undefined, f);
1857 assertEquals(7, counter);
1858
1859 // Variant flags: [tryThrows, tryResultToLocal, doCatch,
1860 // catchWithLocal, doFinally, endReturnLocal]
1861
1862 counter = 0;
1863 var f = function() {
1864 var local = 3;
1865 try {
1866 counter++;
1867 local += increaseAndThrow42();
1868 counter++;
1869 } catch (ex) {
1870 counter++;
1871 local += ex;
1872 counter++;
1873 } finally {
1874 counter++;
1875 local += 2;
1876 counter++;
1877 }
1878 counter++;
1879 return 5 + local;
1880 }
1881 assertOptResultEquals(52, f);
1882 assertEquals(7, counter);
1883
1884 // Variant flags: [tryThrows, tryResultToLocal, doCatch,
1885 // catchWithLocal, doFinally, finallyThrows]
1886
1887 counter = 0;
1888 var f = function() {
1889 var local = 3;
1890 try {
1891 counter++;
1892 local += increaseAndThrow42();
1893 counter++;
1894 } catch (ex) {
1895 counter++;
1896 local += ex;
1897 counter++;
1898 } finally {
1899 counter++;
1900 throw 25;
1901 counter++;
1902 }
1903 counter++;
1904 }
1905 assertOptThrowsWith(25, f);
1906 assertEquals(5, counter);
1907
1908 // Variant flags: [tryThrows, tryResultToLocal, doCatch,
1909 // catchWithLocal, doFinally, finallyThrows, endReturnLocal]
1910
1911 counter = 0;
1912 var f = function() {
1913 var local = 3;
1914 try {
1915 counter++;
1916 local += increaseAndThrow42();
1917 counter++;
1918 } catch (ex) {
1919 counter++;
1920 local += ex;
1921 counter++;
1922 } finally {
1923 counter++;
1924 throw 25;
1925 counter++;
1926 }
1927 counter++;
1928 return 5 + local;
1929 }
1930 assertOptThrowsWith(25, f);
1931 assertEquals(5, counter);
1932
1933 // Variant flags: [tryThrows, tryResultToLocal, doCatch,
1934 // catchWithLocal, doFinally, finallyReturns]
1935
1936 counter = 0;
1937 var f = function() {
1938 var local = 3;
1939 try {
1940 counter++;
1941 local += increaseAndThrow42();
1942 counter++;
1943 } catch (ex) {
1944 counter++;
1945 local += ex;
1946 counter++;
1947 } finally {
1948 counter++;
1949 return 3 + local;
1950 counter++;
1951 }
1952 counter++;
1953 }
1954 assertOptResultEquals(48, f);
1955 assertEquals(5, counter);
1956
1957 // Variant flags: [tryThrows, tryResultToLocal, doCatch,
1958 // catchWithLocal, doFinally, finallyReturns, endReturnLocal]
1959
1960 counter = 0;
1961 var f = function() {
1962 var local = 3;
1963 try {
1964 counter++;
1965 local += increaseAndThrow42();
1966 counter++;
1967 } catch (ex) {
1968 counter++;
1969 local += ex;
1970 counter++;
1971 } finally {
1972 counter++;
1973 return 3 + local;
1974 counter++;
1975 }
1976 counter++;
1977 return 5 + local;
1978 }
1979 assertOptResultEquals(48, f);
1980 assertEquals(5, counter);
1981
1982 // Variant flags: [tryThrows, tryResultToLocal, doCatch,
1983 // catchWithLocal, catchThrows]
1984
1985 counter = 0;
1986 var f = function() {
1987 var local = 3;
1988 try {
1989 counter++;
1990 local += increaseAndThrow42();
1991 counter++;
1992 } catch (ex) {
1993 counter++;
1994 throw 2 + ex;
1995 counter++;
1996 }
1997 counter++;
1998 }
1999 assertOptThrowsWith(44, f);
2000 assertEquals(3, counter);
2001
2002 // Variant flags: [tryThrows, tryResultToLocal, doCatch,
2003 // catchWithLocal, catchThrows, endReturnLocal]
2004
2005 counter = 0;
2006 var f = function() {
2007 var local = 3;
2008 try {
2009 counter++;
2010 local += increaseAndThrow42();
2011 counter++;
2012 } catch (ex) {
2013 counter++;
2014 throw 2 + ex;
2015 counter++;
2016 }
2017 counter++;
2018 return 5 + local;
2019 }
2020 assertOptThrowsWith(44, f);
2021 assertEquals(3, counter);
2022
2023 // Variant flags: [tryThrows, tryResultToLocal, doCatch,
2024 // catchWithLocal, catchThrows, doFinally]
2025
2026 counter = 0;
2027 var f = function() {
2028 var local = 3;
2029 try {
2030 counter++;
2031 local += increaseAndThrow42();
2032 counter++;
2033 } catch (ex) {
2034 counter++;
2035 throw 2 + ex;
2036 counter++;
2037 } finally {
2038 counter++;
2039 local += 2;
2040 counter++;
2041 }
2042 counter++;
2043 }
2044 assertOptThrowsWith(44, f);
2045 assertEquals(5, counter);
2046
2047 // Variant flags: [tryThrows, tryResultToLocal, doCatch,
2048 // catchWithLocal, catchThrows, doFinally, endReturnLocal]
2049
2050 counter = 0;
2051 var f = function() {
2052 var local = 3;
2053 try {
2054 counter++;
2055 local += increaseAndThrow42();
2056 counter++;
2057 } catch (ex) {
2058 counter++;
2059 throw 2 + ex;
2060 counter++;
2061 } finally {
2062 counter++;
2063 local += 2;
2064 counter++;
2065 }
2066 counter++;
2067 return 5 + local;
2068 }
2069 assertOptThrowsWith(44, f);
2070 assertEquals(5, counter);
2071
2072 // Variant flags: [tryThrows, tryResultToLocal, doCatch,
2073 // catchWithLocal, catchThrows, doFinally, finallyThrows]
2074
2075 counter = 0;
2076 var f = function() {
2077 var local = 3;
2078 try {
2079 counter++;
2080 local += increaseAndThrow42();
2081 counter++;
2082 } catch (ex) {
2083 counter++;
2084 throw 2 + ex;
2085 counter++;
2086 } finally {
2087 counter++;
2088 throw 25;
2089 counter++;
2090 }
2091 counter++;
2092 }
2093 assertOptThrowsWith(25, f);
2094 assertEquals(4, counter);
2095
2096 // Variant flags: [tryThrows, tryResultToLocal, doCatch,
2097 // catchWithLocal, catchThrows, doFinally, finallyThrows,
2098 // endReturnLocal]
2099
2100 counter = 0;
2101 var f = function() {
2102 var local = 3;
2103 try {
2104 counter++;
2105 local += increaseAndThrow42();
2106 counter++;
2107 } catch (ex) {
2108 counter++;
2109 throw 2 + ex;
2110 counter++;
2111 } finally {
2112 counter++;
2113 throw 25;
2114 counter++;
2115 }
2116 counter++;
2117 return 5 + local;
2118 }
2119 assertOptThrowsWith(25, f);
2120 assertEquals(4, counter);
2121
2122 // Variant flags: [tryThrows, tryResultToLocal, doCatch,
2123 // catchWithLocal, catchThrows, doFinally, finallyReturns]
2124
2125 counter = 0;
2126 var f = function() {
2127 var local = 3;
2128 try {
2129 counter++;
2130 local += increaseAndThrow42();
2131 counter++;
2132 } catch (ex) {
2133 counter++;
2134 throw 2 + ex;
2135 counter++;
2136 } finally {
2137 counter++;
2138 return 3 + local;
2139 counter++;
2140 }
2141 counter++;
2142 }
2143 assertOptResultEquals(6, f);
2144 assertEquals(4, counter);
2145
2146 // Variant flags: [tryThrows, tryResultToLocal, doCatch,
2147 // catchWithLocal, catchThrows, doFinally, finallyReturns,
2148 // endReturnLocal]
2149
2150 counter = 0;
2151 var f = function() {
2152 var local = 3;
2153 try {
2154 counter++;
2155 local += increaseAndThrow42();
2156 counter++;
2157 } catch (ex) {
2158 counter++;
2159 throw 2 + ex;
2160 counter++;
2161 } finally {
2162 counter++;
2163 return 3 + local;
2164 counter++;
2165 }
2166 counter++;
2167 return 5 + local;
2168 }
2169 assertOptResultEquals(6, f);
2170 assertEquals(4, counter);
2171
2172 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchReturns]
2173
2174 counter = 0;
2175 var f = function() {
2176 var local = 3;
2177 try {
2178 counter++;
2179 local += increaseAndThrow42();
2180 counter++;
2181 } catch (ex) {
2182 counter++;
2183 return 2 + ex;
2184 counter++;
2185 }
2186 counter++;
2187 }
2188 assertOptResultEquals(44, f);
2189 assertEquals(3, counter);
2190
2191 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchReturns,
2192 // endReturnLocal]
2193
2194 counter = 0;
2195 var f = function() {
2196 var local = 3;
2197 try {
2198 counter++;
2199 local += increaseAndThrow42();
2200 counter++;
2201 } catch (ex) {
2202 counter++;
2203 return 2 + ex;
2204 counter++;
2205 }
2206 counter++;
2207 return 5 + local;
2208 }
2209 assertOptResultEquals(44, f);
2210 assertEquals(3, counter);
2211
2212 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchReturns,
2213 // doFinally]
2214
2215 counter = 0;
2216 var f = function() {
2217 var local = 3;
2218 try {
2219 counter++;
2220 local += increaseAndThrow42();
2221 counter++;
2222 } catch (ex) {
2223 counter++;
2224 return 2 + ex;
2225 counter++;
2226 } finally {
2227 counter++;
2228 local += 2;
2229 counter++;
2230 }
2231 counter++;
2232 }
2233 assertOptResultEquals(44, f);
2234 assertEquals(5, counter);
2235
2236 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchReturns,
2237 // doFinally, endReturnLocal]
2238
2239 counter = 0;
2240 var f = function() {
2241 var local = 3;
2242 try {
2243 counter++;
2244 local += increaseAndThrow42();
2245 counter++;
2246 } catch (ex) {
2247 counter++;
2248 return 2 + ex;
2249 counter++;
2250 } finally {
2251 counter++;
2252 local += 2;
2253 counter++;
2254 }
2255 counter++;
2256 return 5 + local;
2257 }
2258 assertOptResultEquals(44, f);
2259 assertEquals(5, counter);
2260
2261 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchReturns,
2262 // doFinally, finallyThrows]
2263
2264 counter = 0;
2265 var f = function() {
2266 var local = 3;
2267 try {
2268 counter++;
2269 local += increaseAndThrow42();
2270 counter++;
2271 } catch (ex) {
2272 counter++;
2273 return 2 + ex;
2274 counter++;
2275 } finally {
2276 counter++;
2277 throw 25;
2278 counter++;
2279 }
2280 counter++;
2281 }
2282 assertOptThrowsWith(25, f);
2283 assertEquals(4, counter);
2284
2285 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchReturns,
2286 // doFinally, finallyThrows, endReturnLocal]
2287
2288 counter = 0;
2289 var f = function() {
2290 var local = 3;
2291 try {
2292 counter++;
2293 local += increaseAndThrow42();
2294 counter++;
2295 } catch (ex) {
2296 counter++;
2297 return 2 + ex;
2298 counter++;
2299 } finally {
2300 counter++;
2301 throw 25;
2302 counter++;
2303 }
2304 counter++;
2305 return 5 + local;
2306 }
2307 assertOptThrowsWith(25, f);
2308 assertEquals(4, counter);
2309
2310 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchReturns,
2311 // doFinally, finallyReturns]
2312
2313 counter = 0;
2314 var f = function() {
2315 var local = 3;
2316 try {
2317 counter++;
2318 local += increaseAndThrow42();
2319 counter++;
2320 } catch (ex) {
2321 counter++;
2322 return 2 + ex;
2323 counter++;
2324 } finally {
2325 counter++;
2326 return 3 + local;
2327 counter++;
2328 }
2329 counter++;
2330 }
2331 assertOptResultEquals(6, f);
2332 assertEquals(4, counter);
2333
2334 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchReturns,
2335 // doFinally, finallyReturns, endReturnLocal]
2336
2337 counter = 0;
2338 var f = function() {
2339 var local = 3;
2340 try {
2341 counter++;
2342 local += increaseAndThrow42();
2343 counter++;
2344 } catch (ex) {
2345 counter++;
2346 return 2 + ex;
2347 counter++;
2348 } finally {
2349 counter++;
2350 return 3 + local;
2351 counter++;
2352 }
2353 counter++;
2354 return 5 + local;
2355 }
2356 assertOptResultEquals(6, f);
2357 assertEquals(4, counter);
2358
2359 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchReturns,
2360 // catchWithLocal]
2361
2362 counter = 0;
2363 var f = function() {
2364 var local = 3;
2365 try {
2366 counter++;
2367 local += increaseAndThrow42();
2368 counter++;
2369 } catch (ex) {
2370 counter++;
2371 return 2 + local;
2372 counter++;
2373 }
2374 counter++;
2375 }
2376 assertOptResultEquals(5, f);
2377 assertEquals(3, counter);
2378
2379 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchReturns,
2380 // catchWithLocal, endReturnLocal]
2381
2382 counter = 0;
2383 var f = function() {
2384 var local = 3;
2385 try {
2386 counter++;
2387 local += increaseAndThrow42();
2388 counter++;
2389 } catch (ex) {
2390 counter++;
2391 return 2 + local;
2392 counter++;
2393 }
2394 counter++;
2395 return 5 + local;
2396 }
2397 assertOptResultEquals(5, f);
2398 assertEquals(3, counter);
2399
2400 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchReturns,
2401 // catchWithLocal, doFinally]
2402
2403 counter = 0;
2404 var f = function() {
2405 var local = 3;
2406 try {
2407 counter++;
2408 local += increaseAndThrow42();
2409 counter++;
2410 } catch (ex) {
2411 counter++;
2412 return 2 + local;
2413 counter++;
2414 } finally {
2415 counter++;
2416 local += 2;
2417 counter++;
2418 }
2419 counter++;
2420 }
2421 assertOptResultEquals(5, f);
2422 assertEquals(5, counter);
2423
2424 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchReturns,
2425 // catchWithLocal, doFinally, endReturnLocal]
2426
2427 counter = 0;
2428 var f = function() {
2429 var local = 3;
2430 try {
2431 counter++;
2432 local += increaseAndThrow42();
2433 counter++;
2434 } catch (ex) {
2435 counter++;
2436 return 2 + local;
2437 counter++;
2438 } finally {
2439 counter++;
2440 local += 2;
2441 counter++;
2442 }
2443 counter++;
2444 return 5 + local;
2445 }
2446 assertOptResultEquals(5, f);
2447 assertEquals(5, counter);
2448
2449 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchReturns,
2450 // catchWithLocal, doFinally, finallyThrows]
2451
2452 counter = 0;
2453 var f = function() {
2454 var local = 3;
2455 try {
2456 counter++;
2457 local += increaseAndThrow42();
2458 counter++;
2459 } catch (ex) {
2460 counter++;
2461 return 2 + local;
2462 counter++;
2463 } finally {
2464 counter++;
2465 throw 25;
2466 counter++;
2467 }
2468 counter++;
2469 }
2470 assertOptThrowsWith(25, f);
2471 assertEquals(4, counter);
2472
2473 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchReturns,
2474 // catchWithLocal, doFinally, finallyThrows, endReturnLocal]
2475
2476 counter = 0;
2477 var f = function() {
2478 var local = 3;
2479 try {
2480 counter++;
2481 local += increaseAndThrow42();
2482 counter++;
2483 } catch (ex) {
2484 counter++;
2485 return 2 + local;
2486 counter++;
2487 } finally {
2488 counter++;
2489 throw 25;
2490 counter++;
2491 }
2492 counter++;
2493 return 5 + local;
2494 }
2495 assertOptThrowsWith(25, f);
2496 assertEquals(4, counter);
2497
2498 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchReturns,
2499 // catchWithLocal, doFinally, finallyReturns]
2500
2501 counter = 0;
2502 var f = function() {
2503 var local = 3;
2504 try {
2505 counter++;
2506 local += increaseAndThrow42();
2507 counter++;
2508 } catch (ex) {
2509 counter++;
2510 return 2 + local;
2511 counter++;
2512 } finally {
2513 counter++;
2514 return 3 + local;
2515 counter++;
2516 }
2517 counter++;
2518 }
2519 assertOptResultEquals(6, f);
2520 assertEquals(4, counter);
2521
2522 // Variant flags: [tryThrows, tryResultToLocal, doCatch, catchReturns,
2523 // catchWithLocal, doFinally, finallyReturns, endReturnLocal]
2524
2525 counter = 0;
2526 var f = function() {
2527 var local = 3;
2528 try {
2529 counter++;
2530 local += increaseAndThrow42();
2531 counter++;
2532 } catch (ex) {
2533 counter++;
2534 return 2 + local;
2535 counter++;
2536 } finally {
2537 counter++;
2538 return 3 + local;
2539 counter++;
2540 }
2541 counter++;
2542 return 5 + local;
2543 }
2544 assertOptResultEquals(6, f);
2545 assertEquals(4, counter);
2546
2547 // Variant flags: [tryReturns, doFinally]
2548
2549 counter = 0;
2550 var f = function() {
2551 var local = 3;
2552 try {
2553 counter++;
2554 return increaseAndReturn15();
2555 counter++;
2556 } finally {
2557 counter++;
2558 local += 2;
2559 counter++;
2560 }
2561 counter++;
2562 }
2563 assertOptResultEquals(15, f);
2564 assertEquals(4, counter);
2565
2566 // Variant flags: [tryReturns, doFinally, endReturnLocal]
2567
2568 counter = 0;
2569 var f = function() {
2570 var local = 3;
2571 try {
2572 counter++;
2573 return increaseAndReturn15();
2574 counter++;
2575 } finally {
2576 counter++;
2577 local += 2;
2578 counter++;
2579 }
2580 counter++;
2581 return 5 + local;
2582 }
2583 assertOptResultEquals(15, f);
2584 assertEquals(4, counter);
2585
2586 // Variant flags: [tryReturns, doFinally, finallyThrows]
2587
2588 counter = 0;
2589 var f = function() {
2590 var local = 3;
2591 try {
2592 counter++;
2593 return increaseAndReturn15();
2594 counter++;
2595 } finally {
2596 counter++;
2597 throw 25;
2598 counter++;
2599 }
2600 counter++;
2601 }
2602 assertOptThrowsWith(25, f);
2603 assertEquals(3, counter);
2604
2605 // Variant flags: [tryReturns, doFinally, finallyThrows,
2606 // endReturnLocal]
2607
2608 counter = 0;
2609 var f = function() {
2610 var local = 3;
2611 try {
2612 counter++;
2613 return increaseAndReturn15();
2614 counter++;
2615 } finally {
2616 counter++;
2617 throw 25;
2618 counter++;
2619 }
2620 counter++;
2621 return 5 + local;
2622 }
2623 assertOptThrowsWith(25, f);
2624 assertEquals(3, counter);
2625
2626 // Variant flags: [tryReturns, doFinally, finallyReturns]
2627
2628 counter = 0;
2629 var f = function() {
2630 var local = 3;
2631 try {
2632 counter++;
2633 return increaseAndReturn15();
2634 counter++;
2635 } finally {
2636 counter++;
2637 return 3 + local;
2638 counter++;
2639 }
2640 counter++;
2641 }
2642 assertOptResultEquals(6, f);
2643 assertEquals(3, counter);
2644
2645 // Variant flags: [tryReturns, doFinally, finallyReturns,
2646 // endReturnLocal]
2647
2648 counter = 0;
2649 var f = function() {
2650 var local = 3;
2651 try {
2652 counter++;
2653 return increaseAndReturn15();
2654 counter++;
2655 } finally {
2656 counter++;
2657 return 3 + local;
2658 counter++;
2659 }
2660 counter++;
2661 return 5 + local;
2662 }
2663 assertOptResultEquals(6, f);
2664 assertEquals(3, counter);
2665
2666 // Variant flags: [tryReturns, doCatch]
2667
2668 counter = 0;
2669 var f = function() {
2670 var local = 3;
2671 try {
2672 counter++;
2673 return increaseAndReturn15();
2674 counter++;
2675 } catch (ex) {
2676 counter++;
2677 counter++;
2678 }
2679 counter++;
2680 }
2681 assertOptResultEquals(15, f);
2682 assertEquals(2, counter);
2683
2684 // Variant flags: [tryReturns, doCatch, endReturnLocal]
2685
2686 counter = 0;
2687 var f = function() {
2688 var local = 3;
2689 try {
2690 counter++;
2691 return increaseAndReturn15();
2692 counter++;
2693 } catch (ex) {
2694 counter++;
2695 counter++;
2696 }
2697 counter++;
2698 return 5 + local;
2699 }
2700 assertOptResultEquals(15, f);
2701 assertEquals(2, counter);
2702
2703 // Variant flags: [tryReturns, doCatch, doFinally]
2704
2705 counter = 0;
2706 var f = function() {
2707 var local = 3;
2708 try {
2709 counter++;
2710 return increaseAndReturn15();
2711 counter++;
2712 } catch (ex) {
2713 counter++;
2714 counter++;
2715 } finally {
2716 counter++;
2717 local += 2;
2718 counter++;
2719 }
2720 counter++;
2721 }
2722 assertOptResultEquals(15, f);
2723 assertEquals(4, counter);
2724
2725 // Variant flags: [tryReturns, doCatch, doFinally, endReturnLocal]
2726
2727 counter = 0;
2728 var f = function() {
2729 var local = 3;
2730 try {
2731 counter++;
2732 return increaseAndReturn15();
2733 counter++;
2734 } catch (ex) {
2735 counter++;
2736 counter++;
2737 } finally {
2738 counter++;
2739 local += 2;
2740 counter++;
2741 }
2742 counter++;
2743 return 5 + local;
2744 }
2745 assertOptResultEquals(15, f);
2746 assertEquals(4, counter);
2747
2748 // Variant flags: [tryReturns, doCatch, doFinally, finallyThrows]
2749
2750 counter = 0;
2751 var f = function() {
2752 var local = 3;
2753 try {
2754 counter++;
2755 return increaseAndReturn15();
2756 counter++;
2757 } catch (ex) {
2758 counter++;
2759 counter++;
2760 } finally {
2761 counter++;
2762 throw 25;
2763 counter++;
2764 }
2765 counter++;
2766 }
2767 assertOptThrowsWith(25, f);
2768 assertEquals(3, counter);
2769
2770 // Variant flags: [tryReturns, doCatch, doFinally, finallyThrows,
2771 // endReturnLocal]
2772
2773 counter = 0;
2774 var f = function() {
2775 var local = 3;
2776 try {
2777 counter++;
2778 return increaseAndReturn15();
2779 counter++;
2780 } catch (ex) {
2781 counter++;
2782 counter++;
2783 } finally {
2784 counter++;
2785 throw 25;
2786 counter++;
2787 }
2788 counter++;
2789 return 5 + local;
2790 }
2791 assertOptThrowsWith(25, f);
2792 assertEquals(3, counter);
2793
2794 // Variant flags: [tryReturns, doCatch, doFinally, finallyReturns]
2795
2796 counter = 0;
2797 var f = function() {
2798 var local = 3;
2799 try {
2800 counter++;
2801 return increaseAndReturn15();
2802 counter++;
2803 } catch (ex) {
2804 counter++;
2805 counter++;
2806 } finally {
2807 counter++;
2808 return 3 + local;
2809 counter++;
2810 }
2811 counter++;
2812 }
2813 assertOptResultEquals(6, f);
2814 assertEquals(3, counter);
2815
2816 // Variant flags: [tryReturns, doCatch, doFinally, finallyReturns,
2817 // endReturnLocal]
2818
2819 counter = 0;
2820 var f = function() {
2821 var local = 3;
2822 try {
2823 counter++;
2824 return increaseAndReturn15();
2825 counter++;
2826 } catch (ex) {
2827 counter++;
2828 counter++;
2829 } finally {
2830 counter++;
2831 return 3 + local;
2832 counter++;
2833 }
2834 counter++;
2835 return 5 + local;
2836 }
2837 assertOptResultEquals(6, f);
2838 assertEquals(3, counter);
2839
2840 // Variant flags: [tryReturns, doCatch, catchThrows]
2841
2842 counter = 0;
2843 var f = function() {
2844 var local = 3;
2845 try {
2846 counter++;
2847 return increaseAndReturn15();
2848 counter++;
2849 } catch (ex) {
2850 counter++;
2851 throw 2 + ex;
2852 counter++;
2853 }
2854 counter++;
2855 }
2856 assertOptResultEquals(15, f);
2857 assertEquals(2, counter);
2858
2859 // Variant flags: [tryReturns, doCatch, catchThrows, endReturnLocal]
2860
2861 counter = 0;
2862 var f = function() {
2863 var local = 3;
2864 try {
2865 counter++;
2866 return increaseAndReturn15();
2867 counter++;
2868 } catch (ex) {
2869 counter++;
2870 throw 2 + ex;
2871 counter++;
2872 }
2873 counter++;
2874 return 5 + local;
2875 }
2876 assertOptResultEquals(15, f);
2877 assertEquals(2, counter);
2878
2879 // Variant flags: [tryReturns, doCatch, catchThrows, doFinally]
2880
2881 counter = 0;
2882 var f = function() {
2883 var local = 3;
2884 try {
2885 counter++;
2886 return increaseAndReturn15();
2887 counter++;
2888 } catch (ex) {
2889 counter++;
2890 throw 2 + ex;
2891 counter++;
2892 } finally {
2893 counter++;
2894 local += 2;
2895 counter++;
2896 }
2897 counter++;
2898 }
2899 assertOptResultEquals(15, f);
2900 assertEquals(4, counter);
2901
2902 // Variant flags: [tryReturns, doCatch, catchThrows, doFinally,
2903 // endReturnLocal]
2904
2905 counter = 0;
2906 var f = function() {
2907 var local = 3;
2908 try {
2909 counter++;
2910 return increaseAndReturn15();
2911 counter++;
2912 } catch (ex) {
2913 counter++;
2914 throw 2 + ex;
2915 counter++;
2916 } finally {
2917 counter++;
2918 local += 2;
2919 counter++;
2920 }
2921 counter++;
2922 return 5 + local;
2923 }
2924 assertOptResultEquals(15, f);
2925 assertEquals(4, counter);
2926
2927 // Variant flags: [tryReturns, doCatch, catchThrows, doFinally,
2928 // finallyThrows]
2929
2930 counter = 0;
2931 var f = function() {
2932 var local = 3;
2933 try {
2934 counter++;
2935 return increaseAndReturn15();
2936 counter++;
2937 } catch (ex) {
2938 counter++;
2939 throw 2 + ex;
2940 counter++;
2941 } finally {
2942 counter++;
2943 throw 25;
2944 counter++;
2945 }
2946 counter++;
2947 }
2948 assertOptThrowsWith(25, f);
2949 assertEquals(3, counter);
2950
2951 // Variant flags: [tryReturns, doCatch, catchThrows, doFinally,
2952 // finallyThrows, endReturnLocal]
2953
2954 counter = 0;
2955 var f = function() {
2956 var local = 3;
2957 try {
2958 counter++;
2959 return increaseAndReturn15();
2960 counter++;
2961 } catch (ex) {
2962 counter++;
2963 throw 2 + ex;
2964 counter++;
2965 } finally {
2966 counter++;
2967 throw 25;
2968 counter++;
2969 }
2970 counter++;
2971 return 5 + local;
2972 }
2973 assertOptThrowsWith(25, f);
2974 assertEquals(3, counter);
2975
2976 // Variant flags: [tryReturns, doCatch, catchThrows, doFinally,
2977 // finallyReturns]
2978
2979 counter = 0;
2980 var f = function() {
2981 var local = 3;
2982 try {
2983 counter++;
2984 return increaseAndReturn15();
2985 counter++;
2986 } catch (ex) {
2987 counter++;
2988 throw 2 + ex;
2989 counter++;
2990 } finally {
2991 counter++;
2992 return 3 + local;
2993 counter++;
2994 }
2995 counter++;
2996 }
2997 assertOptResultEquals(6, f);
2998 assertEquals(3, counter);
2999
3000 // Variant flags: [tryReturns, doCatch, catchThrows, doFinally,
3001 // finallyReturns, endReturnLocal]
3002
3003 counter = 0;
3004 var f = function() {
3005 var local = 3;
3006 try {
3007 counter++;
3008 return increaseAndReturn15();
3009 counter++;
3010 } catch (ex) {
3011 counter++;
3012 throw 2 + ex;
3013 counter++;
3014 } finally {
3015 counter++;
3016 return 3 + local;
3017 counter++;
3018 }
3019 counter++;
3020 return 5 + local;
3021 }
3022 assertOptResultEquals(6, f);
3023 assertEquals(3, counter);
3024
3025 // Variant flags: [tryReturns, doCatch, catchWithLocal]
3026
3027 counter = 0;
3028 var f = function() {
3029 var local = 3;
3030 try {
3031 counter++;
3032 return increaseAndReturn15();
3033 counter++;
3034 } catch (ex) {
3035 counter++;
3036 local += ex;
3037 counter++;
3038 }
3039 counter++;
3040 }
3041 assertOptResultEquals(15, f);
3042 assertEquals(2, counter);
3043
3044 // Variant flags: [tryReturns, doCatch, catchWithLocal,
3045 // endReturnLocal]
3046
3047 counter = 0;
3048 var f = function() {
3049 var local = 3;
3050 try {
3051 counter++;
3052 return increaseAndReturn15();
3053 counter++;
3054 } catch (ex) {
3055 counter++;
3056 local += ex;
3057 counter++;
3058 }
3059 counter++;
3060 return 5 + local;
3061 }
3062 assertOptResultEquals(15, f);
3063 assertEquals(2, counter);
3064
3065 // Variant flags: [tryReturns, doCatch, catchWithLocal, doFinally]
3066
3067 counter = 0;
3068 var f = function() {
3069 var local = 3;
3070 try {
3071 counter++;
3072 return increaseAndReturn15();
3073 counter++;
3074 } catch (ex) {
3075 counter++;
3076 local += ex;
3077 counter++;
3078 } finally {
3079 counter++;
3080 local += 2;
3081 counter++;
3082 }
3083 counter++;
3084 }
3085 assertOptResultEquals(15, f);
3086 assertEquals(4, counter);
3087
3088 // Variant flags: [tryReturns, doCatch, catchWithLocal, doFinally,
3089 // endReturnLocal]
3090
3091 counter = 0;
3092 var f = function() {
3093 var local = 3;
3094 try {
3095 counter++;
3096 return increaseAndReturn15();
3097 counter++;
3098 } catch (ex) {
3099 counter++;
3100 local += ex;
3101 counter++;
3102 } finally {
3103 counter++;
3104 local += 2;
3105 counter++;
3106 }
3107 counter++;
3108 return 5 + local;
3109 }
3110 assertOptResultEquals(15, f);
3111 assertEquals(4, counter);
3112
3113 // Variant flags: [tryReturns, doCatch, catchWithLocal, doFinally,
3114 // finallyThrows]
3115
3116 counter = 0;
3117 var f = function() {
3118 var local = 3;
3119 try {
3120 counter++;
3121 return increaseAndReturn15();
3122 counter++;
3123 } catch (ex) {
3124 counter++;
3125 local += ex;
3126 counter++;
3127 } finally {
3128 counter++;
3129 throw 25;
3130 counter++;
3131 }
3132 counter++;
3133 }
3134 assertOptThrowsWith(25, f);
3135 assertEquals(3, counter);
3136
3137 // Variant flags: [tryReturns, doCatch, catchWithLocal, doFinally,
3138 // finallyThrows, endReturnLocal]
3139
3140 counter = 0;
3141 var f = function() {
3142 var local = 3;
3143 try {
3144 counter++;
3145 return increaseAndReturn15();
3146 counter++;
3147 } catch (ex) {
3148 counter++;
3149 local += ex;
3150 counter++;
3151 } finally {
3152 counter++;
3153 throw 25;
3154 counter++;
3155 }
3156 counter++;
3157 return 5 + local;
3158 }
3159 assertOptThrowsWith(25, f);
3160 assertEquals(3, counter);
3161
3162 // Variant flags: [tryReturns, doCatch, catchWithLocal, doFinally,
3163 // finallyReturns]
3164
3165 counter = 0;
3166 var f = function() {
3167 var local = 3;
3168 try {
3169 counter++;
3170 return increaseAndReturn15();
3171 counter++;
3172 } catch (ex) {
3173 counter++;
3174 local += ex;
3175 counter++;
3176 } finally {
3177 counter++;
3178 return 3 + local;
3179 counter++;
3180 }
3181 counter++;
3182 }
3183 assertOptResultEquals(6, f);
3184 assertEquals(3, counter);
3185
3186 // Variant flags: [tryReturns, doCatch, catchWithLocal, doFinally,
3187 // finallyReturns, endReturnLocal]
3188
3189 counter = 0;
3190 var f = function() {
3191 var local = 3;
3192 try {
3193 counter++;
3194 return increaseAndReturn15();
3195 counter++;
3196 } catch (ex) {
3197 counter++;
3198 local += ex;
3199 counter++;
3200 } finally {
3201 counter++;
3202 return 3 + local;
3203 counter++;
3204 }
3205 counter++;
3206 return 5 + local;
3207 }
3208 assertOptResultEquals(6, f);
3209 assertEquals(3, counter);
3210
3211 // Variant flags: [tryReturns, doCatch, catchWithLocal, catchThrows]
3212
3213 counter = 0;
3214 var f = function() {
3215 var local = 3;
3216 try {
3217 counter++;
3218 return increaseAndReturn15();
3219 counter++;
3220 } catch (ex) {
3221 counter++;
3222 throw 2 + ex;
3223 counter++;
3224 }
3225 counter++;
3226 }
3227 assertOptResultEquals(15, f);
3228 assertEquals(2, counter);
3229
3230 // Variant flags: [tryReturns, doCatch, catchWithLocal, catchThrows,
3231 // endReturnLocal]
3232
3233 counter = 0;
3234 var f = function() {
3235 var local = 3;
3236 try {
3237 counter++;
3238 return increaseAndReturn15();
3239 counter++;
3240 } catch (ex) {
3241 counter++;
3242 throw 2 + ex;
3243 counter++;
3244 }
3245 counter++;
3246 return 5 + local;
3247 }
3248 assertOptResultEquals(15, f);
3249 assertEquals(2, counter);
3250
3251 // Variant flags: [tryReturns, doCatch, catchWithLocal, catchThrows,
3252 // doFinally]
3253
3254 counter = 0;
3255 var f = function() {
3256 var local = 3;
3257 try {
3258 counter++;
3259 return increaseAndReturn15();
3260 counter++;
3261 } catch (ex) {
3262 counter++;
3263 throw 2 + ex;
3264 counter++;
3265 } finally {
3266 counter++;
3267 local += 2;
3268 counter++;
3269 }
3270 counter++;
3271 }
3272 assertOptResultEquals(15, f);
3273 assertEquals(4, counter);
3274
3275 // Variant flags: [tryReturns, doCatch, catchWithLocal, catchThrows,
3276 // doFinally, endReturnLocal]
3277
3278 counter = 0;
3279 var f = function() {
3280 var local = 3;
3281 try {
3282 counter++;
3283 return increaseAndReturn15();
3284 counter++;
3285 } catch (ex) {
3286 counter++;
3287 throw 2 + ex;
3288 counter++;
3289 } finally {
3290 counter++;
3291 local += 2;
3292 counter++;
3293 }
3294 counter++;
3295 return 5 + local;
3296 }
3297 assertOptResultEquals(15, f);
3298 assertEquals(4, counter);
3299
3300 // Variant flags: [tryReturns, doCatch, catchWithLocal, catchThrows,
3301 // doFinally, finallyThrows]
3302
3303 counter = 0;
3304 var f = function() {
3305 var local = 3;
3306 try {
3307 counter++;
3308 return increaseAndReturn15();
3309 counter++;
3310 } catch (ex) {
3311 counter++;
3312 throw 2 + ex;
3313 counter++;
3314 } finally {
3315 counter++;
3316 throw 25;
3317 counter++;
3318 }
3319 counter++;
3320 }
3321 assertOptThrowsWith(25, f);
3322 assertEquals(3, counter);
3323
3324 // Variant flags: [tryReturns, doCatch, catchWithLocal, catchThrows,
3325 // doFinally, finallyThrows, endReturnLocal]
3326
3327 counter = 0;
3328 var f = function() {
3329 var local = 3;
3330 try {
3331 counter++;
3332 return increaseAndReturn15();
3333 counter++;
3334 } catch (ex) {
3335 counter++;
3336 throw 2 + ex;
3337 counter++;
3338 } finally {
3339 counter++;
3340 throw 25;
3341 counter++;
3342 }
3343 counter++;
3344 return 5 + local;
3345 }
3346 assertOptThrowsWith(25, f);
3347 assertEquals(3, counter);
3348
3349 // Variant flags: [tryReturns, doCatch, catchWithLocal, catchThrows,
3350 // doFinally, finallyReturns]
3351
3352 counter = 0;
3353 var f = function() {
3354 var local = 3;
3355 try {
3356 counter++;
3357 return increaseAndReturn15();
3358 counter++;
3359 } catch (ex) {
3360 counter++;
3361 throw 2 + ex;
3362 counter++;
3363 } finally {
3364 counter++;
3365 return 3 + local;
3366 counter++;
3367 }
3368 counter++;
3369 }
3370 assertOptResultEquals(6, f);
3371 assertEquals(3, counter);
3372
3373 // Variant flags: [tryReturns, doCatch, catchWithLocal, catchThrows,
3374 // doFinally, finallyReturns, endReturnLocal]
3375
3376 counter = 0;
3377 var f = function() {
3378 var local = 3;
3379 try {
3380 counter++;
3381 return increaseAndReturn15();
3382 counter++;
3383 } catch (ex) {
3384 counter++;
3385 throw 2 + ex;
3386 counter++;
3387 } finally {
3388 counter++;
3389 return 3 + local;
3390 counter++;
3391 }
3392 counter++;
3393 return 5 + local;
3394 }
3395 assertOptResultEquals(6, f);
3396 assertEquals(3, counter);
3397
3398 // Variant flags: [tryReturns, doCatch, catchReturns]
3399
3400 counter = 0;
3401 var f = function() {
3402 var local = 3;
3403 try {
3404 counter++;
3405 return increaseAndReturn15();
3406 counter++;
3407 } catch (ex) {
3408 counter++;
3409 return 2 + ex;
3410 counter++;
3411 }
3412 counter++;
3413 }
3414 assertOptResultEquals(15, f);
3415 assertEquals(2, counter);
3416
3417 // Variant flags: [tryReturns, doCatch, catchReturns, endReturnLocal]
3418
3419 counter = 0;
3420 var f = function() {
3421 var local = 3;
3422 try {
3423 counter++;
3424 return increaseAndReturn15();
3425 counter++;
3426 } catch (ex) {
3427 counter++;
3428 return 2 + ex;
3429 counter++;
3430 }
3431 counter++;
3432 return 5 + local;
3433 }
3434 assertOptResultEquals(15, f);
3435 assertEquals(2, counter);
3436
3437 // Variant flags: [tryReturns, doCatch, catchReturns, doFinally]
3438
3439 counter = 0;
3440 var f = function() {
3441 var local = 3;
3442 try {
3443 counter++;
3444 return increaseAndReturn15();
3445 counter++;
3446 } catch (ex) {
3447 counter++;
3448 return 2 + ex;
3449 counter++;
3450 } finally {
3451 counter++;
3452 local += 2;
3453 counter++;
3454 }
3455 counter++;
3456 }
3457 assertOptResultEquals(15, f);
3458 assertEquals(4, counter);
3459
3460 // Variant flags: [tryReturns, doCatch, catchReturns, doFinally,
3461 // endReturnLocal]
3462
3463 counter = 0;
3464 var f = function() {
3465 var local = 3;
3466 try {
3467 counter++;
3468 return increaseAndReturn15();
3469 counter++;
3470 } catch (ex) {
3471 counter++;
3472 return 2 + ex;
3473 counter++;
3474 } finally {
3475 counter++;
3476 local += 2;
3477 counter++;
3478 }
3479 counter++;
3480 return 5 + local;
3481 }
3482 assertOptResultEquals(15, f);
3483 assertEquals(4, counter);
3484
3485 // Variant flags: [tryReturns, doCatch, catchReturns, doFinally,
3486 // finallyThrows]
3487
3488 counter = 0;
3489 var f = function() {
3490 var local = 3;
3491 try {
3492 counter++;
3493 return increaseAndReturn15();
3494 counter++;
3495 } catch (ex) {
3496 counter++;
3497 return 2 + ex;
3498 counter++;
3499 } finally {
3500 counter++;
3501 throw 25;
3502 counter++;
3503 }
3504 counter++;
3505 }
3506 assertOptThrowsWith(25, f);
3507 assertEquals(3, counter);
3508
3509 // Variant flags: [tryReturns, doCatch, catchReturns, doFinally,
3510 // finallyThrows, endReturnLocal]
3511
3512 counter = 0;
3513 var f = function() {
3514 var local = 3;
3515 try {
3516 counter++;
3517 return increaseAndReturn15();
3518 counter++;
3519 } catch (ex) {
3520 counter++;
3521 return 2 + ex;
3522 counter++;
3523 } finally {
3524 counter++;
3525 throw 25;
3526 counter++;
3527 }
3528 counter++;
3529 return 5 + local;
3530 }
3531 assertOptThrowsWith(25, f);
3532 assertEquals(3, counter);
3533
3534 // Variant flags: [tryReturns, doCatch, catchReturns, doFinally,
3535 // finallyReturns]
3536
3537 counter = 0;
3538 var f = function() {
3539 var local = 3;
3540 try {
3541 counter++;
3542 return increaseAndReturn15();
3543 counter++;
3544 } catch (ex) {
3545 counter++;
3546 return 2 + ex;
3547 counter++;
3548 } finally {
3549 counter++;
3550 return 3 + local;
3551 counter++;
3552 }
3553 counter++;
3554 }
3555 assertOptResultEquals(6, f);
3556 assertEquals(3, counter);
3557
3558 // Variant flags: [tryReturns, doCatch, catchReturns, doFinally,
3559 // finallyReturns, endReturnLocal]
3560
3561 counter = 0;
3562 var f = function() {
3563 var local = 3;
3564 try {
3565 counter++;
3566 return increaseAndReturn15();
3567 counter++;
3568 } catch (ex) {
3569 counter++;
3570 return 2 + ex;
3571 counter++;
3572 } finally {
3573 counter++;
3574 return 3 + local;
3575 counter++;
3576 }
3577 counter++;
3578 return 5 + local;
3579 }
3580 assertOptResultEquals(6, f);
3581 assertEquals(3, counter);
3582
3583 // Variant flags: [tryReturns, doCatch, catchReturns, catchWithLocal]
3584
3585 counter = 0;
3586 var f = function() {
3587 var local = 3;
3588 try {
3589 counter++;
3590 return increaseAndReturn15();
3591 counter++;
3592 } catch (ex) {
3593 counter++;
3594 return 2 + local;
3595 counter++;
3596 }
3597 counter++;
3598 }
3599 assertOptResultEquals(15, f);
3600 assertEquals(2, counter);
3601
3602 // Variant flags: [tryReturns, doCatch, catchReturns, catchWithLocal,
3603 // endReturnLocal]
3604
3605 counter = 0;
3606 var f = function() {
3607 var local = 3;
3608 try {
3609 counter++;
3610 return increaseAndReturn15();
3611 counter++;
3612 } catch (ex) {
3613 counter++;
3614 return 2 + local;
3615 counter++;
3616 }
3617 counter++;
3618 return 5 + local;
3619 }
3620 assertOptResultEquals(15, f);
3621 assertEquals(2, counter);
3622
3623 // Variant flags: [tryReturns, doCatch, catchReturns, catchWithLocal,
3624 // doFinally]
3625
3626 counter = 0;
3627 var f = function() {
3628 var local = 3;
3629 try {
3630 counter++;
3631 return increaseAndReturn15();
3632 counter++;
3633 } catch (ex) {
3634 counter++;
3635 return 2 + local;
3636 counter++;
3637 } finally {
3638 counter++;
3639 local += 2;
3640 counter++;
3641 }
3642 counter++;
3643 }
3644 assertOptResultEquals(15, f);
3645 assertEquals(4, counter);
3646
3647 // Variant flags: [tryReturns, doCatch, catchReturns, catchWithLocal,
3648 // doFinally, endReturnLocal]
3649
3650 counter = 0;
3651 var f = function() {
3652 var local = 3;
3653 try {
3654 counter++;
3655 return increaseAndReturn15();
3656 counter++;
3657 } catch (ex) {
3658 counter++;
3659 return 2 + local;
3660 counter++;
3661 } finally {
3662 counter++;
3663 local += 2;
3664 counter++;
3665 }
3666 counter++;
3667 return 5 + local;
3668 }
3669 assertOptResultEquals(15, f);
3670 assertEquals(4, counter);
3671
3672 // Variant flags: [tryReturns, doCatch, catchReturns, catchWithLocal,
3673 // doFinally, finallyThrows]
3674
3675 counter = 0;
3676 var f = function() {
3677 var local = 3;
3678 try {
3679 counter++;
3680 return increaseAndReturn15();
3681 counter++;
3682 } catch (ex) {
3683 counter++;
3684 return 2 + local;
3685 counter++;
3686 } finally {
3687 counter++;
3688 throw 25;
3689 counter++;
3690 }
3691 counter++;
3692 }
3693 assertOptThrowsWith(25, f);
3694 assertEquals(3, counter);
3695
3696 // Variant flags: [tryReturns, doCatch, catchReturns, catchWithLocal,
3697 // doFinally, finallyThrows, endReturnLocal]
3698
3699 counter = 0;
3700 var f = function() {
3701 var local = 3;
3702 try {
3703 counter++;
3704 return increaseAndReturn15();
3705 counter++;
3706 } catch (ex) {
3707 counter++;
3708 return 2 + local;
3709 counter++;
3710 } finally {
3711 counter++;
3712 throw 25;
3713 counter++;
3714 }
3715 counter++;
3716 return 5 + local;
3717 }
3718 assertOptThrowsWith(25, f);
3719 assertEquals(3, counter);
3720
3721 // Variant flags: [tryReturns, doCatch, catchReturns, catchWithLocal,
3722 // doFinally, finallyReturns]
3723
3724 counter = 0;
3725 var f = function() {
3726 var local = 3;
3727 try {
3728 counter++;
3729 return increaseAndReturn15();
3730 counter++;
3731 } catch (ex) {
3732 counter++;
3733 return 2 + local;
3734 counter++;
3735 } finally {
3736 counter++;
3737 return 3 + local;
3738 counter++;
3739 }
3740 counter++;
3741 }
3742 assertOptResultEquals(6, f);
3743 assertEquals(3, counter);
3744
3745 // Variant flags: [tryReturns, doCatch, catchReturns, catchWithLocal,
3746 // doFinally, finallyReturns, endReturnLocal]
3747
3748 counter = 0;
3749 var f = function() {
3750 var local = 3;
3751 try {
3752 counter++;
3753 return increaseAndReturn15();
3754 counter++;
3755 } catch (ex) {
3756 counter++;
3757 return 2 + local;
3758 counter++;
3759 } finally {
3760 counter++;
3761 return 3 + local;
3762 counter++;
3763 }
3764 counter++;
3765 return 5 + local;
3766 }
3767 assertOptResultEquals(6, f);
3768 assertEquals(3, counter);
3769
3770 // Variant flags: [tryReturns, tryResultToLocal, doFinally]
3771
3772 counter = 0;
3773 var f = function() {
3774 var local = 3;
3775 try {
3776 counter++;
3777 local += increaseAndReturn15();
3778 counter++;
3779 } finally {
3780 counter++;
3781 local += 2;
3782 counter++;
3783 }
3784 counter++;
3785 }
3786 assertOptResultEquals(undefined, f);
3787 assertEquals(6, counter);
3788
3789 // Variant flags: [tryReturns, tryResultToLocal, doFinally,
3790 // endReturnLocal]
3791
3792 counter = 0;
3793 var f = function() {
3794 var local = 3;
3795 try {
3796 counter++;
3797 local += increaseAndReturn15();
3798 counter++;
3799 } finally {
3800 counter++;
3801 local += 2;
3802 counter++;
3803 }
3804 counter++;
3805 return 5 + local;
3806 }
3807 assertOptResultEquals(25, f);
3808 assertEquals(6, counter);
3809
3810 // Variant flags: [tryReturns, tryResultToLocal, doFinally,
3811 // finallyThrows]
3812
3813 counter = 0;
3814 var f = function() {
3815 var local = 3;
3816 try {
3817 counter++;
3818 local += increaseAndReturn15();
3819 counter++;
3820 } finally {
3821 counter++;
3822 throw 25;
3823 counter++;
3824 }
3825 counter++;
3826 }
3827 assertOptThrowsWith(25, f);
3828 assertEquals(4, counter);
3829
3830 // Variant flags: [tryReturns, tryResultToLocal, doFinally,
3831 // finallyThrows, endReturnLocal]
3832
3833 counter = 0;
3834 var f = function() {
3835 var local = 3;
3836 try {
3837 counter++;
3838 local += increaseAndReturn15();
3839 counter++;
3840 } finally {
3841 counter++;
3842 throw 25;
3843 counter++;
3844 }
3845 counter++;
3846 return 5 + local;
3847 }
3848 assertOptThrowsWith(25, f);
3849 assertEquals(4, counter);
3850
3851 // Variant flags: [tryReturns, tryResultToLocal, doFinally,
3852 // finallyReturns]
3853
3854 counter = 0;
3855 var f = function() {
3856 var local = 3;
3857 try {
3858 counter++;
3859 local += increaseAndReturn15();
3860 counter++;
3861 } finally {
3862 counter++;
3863 return 3 + local;
3864 counter++;
3865 }
3866 counter++;
3867 }
3868 assertOptResultEquals(21, f);
3869 assertEquals(4, counter);
3870
3871 // Variant flags: [tryReturns, tryResultToLocal, doFinally,
3872 // finallyReturns, endReturnLocal]
3873
3874 counter = 0;
3875 var f = function() {
3876 var local = 3;
3877 try {
3878 counter++;
3879 local += increaseAndReturn15();
3880 counter++;
3881 } finally {
3882 counter++;
3883 return 3 + local;
3884 counter++;
3885 }
3886 counter++;
3887 return 5 + local;
3888 }
3889 assertOptResultEquals(21, f);
3890 assertEquals(4, counter);
3891
3892 // Variant flags: [tryReturns, tryResultToLocal, doCatch]
3893
3894 counter = 0;
3895 var f = function() {
3896 var local = 3;
3897 try {
3898 counter++;
3899 local += increaseAndReturn15();
3900 counter++;
3901 } catch (ex) {
3902 counter++;
3903 counter++;
3904 }
3905 counter++;
3906 }
3907 assertOptResultEquals(undefined, f);
3908 assertEquals(4, counter);
3909
3910 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
3911 // endReturnLocal]
3912
3913 counter = 0;
3914 var f = function() {
3915 var local = 3;
3916 try {
3917 counter++;
3918 local += increaseAndReturn15();
3919 counter++;
3920 } catch (ex) {
3921 counter++;
3922 counter++;
3923 }
3924 counter++;
3925 return 5 + local;
3926 }
3927 assertOptResultEquals(23, f);
3928 assertEquals(4, counter);
3929
3930 // Variant flags: [tryReturns, tryResultToLocal, doCatch, doFinally]
3931
3932 counter = 0;
3933 var f = function() {
3934 var local = 3;
3935 try {
3936 counter++;
3937 local += increaseAndReturn15();
3938 counter++;
3939 } catch (ex) {
3940 counter++;
3941 counter++;
3942 } finally {
3943 counter++;
3944 local += 2;
3945 counter++;
3946 }
3947 counter++;
3948 }
3949 assertOptResultEquals(undefined, f);
3950 assertEquals(6, counter);
3951
3952 // Variant flags: [tryReturns, tryResultToLocal, doCatch, doFinally,
3953 // endReturnLocal]
3954
3955 counter = 0;
3956 var f = function() {
3957 var local = 3;
3958 try {
3959 counter++;
3960 local += increaseAndReturn15();
3961 counter++;
3962 } catch (ex) {
3963 counter++;
3964 counter++;
3965 } finally {
3966 counter++;
3967 local += 2;
3968 counter++;
3969 }
3970 counter++;
3971 return 5 + local;
3972 }
3973 assertOptResultEquals(25, f);
3974 assertEquals(6, counter);
3975
3976 // Variant flags: [tryReturns, tryResultToLocal, doCatch, doFinally,
3977 // finallyThrows]
3978
3979 counter = 0;
3980 var f = function() {
3981 var local = 3;
3982 try {
3983 counter++;
3984 local += increaseAndReturn15();
3985 counter++;
3986 } catch (ex) {
3987 counter++;
3988 counter++;
3989 } finally {
3990 counter++;
3991 throw 25;
3992 counter++;
3993 }
3994 counter++;
3995 }
3996 assertOptThrowsWith(25, f);
3997 assertEquals(4, counter);
3998
3999 // Variant flags: [tryReturns, tryResultToLocal, doCatch, doFinally,
4000 // finallyThrows, endReturnLocal]
4001
4002 counter = 0;
4003 var f = function() {
4004 var local = 3;
4005 try {
4006 counter++;
4007 local += increaseAndReturn15();
4008 counter++;
4009 } catch (ex) {
4010 counter++;
4011 counter++;
4012 } finally {
4013 counter++;
4014 throw 25;
4015 counter++;
4016 }
4017 counter++;
4018 return 5 + local;
4019 }
4020 assertOptThrowsWith(25, f);
4021 assertEquals(4, counter);
4022
4023 // Variant flags: [tryReturns, tryResultToLocal, doCatch, doFinally,
4024 // finallyReturns]
4025
4026 counter = 0;
4027 var f = function() {
4028 var local = 3;
4029 try {
4030 counter++;
4031 local += increaseAndReturn15();
4032 counter++;
4033 } catch (ex) {
4034 counter++;
4035 counter++;
4036 } finally {
4037 counter++;
4038 return 3 + local;
4039 counter++;
4040 }
4041 counter++;
4042 }
4043 assertOptResultEquals(21, f);
4044 assertEquals(4, counter);
4045
4046 // Variant flags: [tryReturns, tryResultToLocal, doCatch, doFinally,
4047 // finallyReturns, endReturnLocal]
4048
4049 counter = 0;
4050 var f = function() {
4051 var local = 3;
4052 try {
4053 counter++;
4054 local += increaseAndReturn15();
4055 counter++;
4056 } catch (ex) {
4057 counter++;
4058 counter++;
4059 } finally {
4060 counter++;
4061 return 3 + local;
4062 counter++;
4063 }
4064 counter++;
4065 return 5 + local;
4066 }
4067 assertOptResultEquals(21, f);
4068 assertEquals(4, counter);
4069
4070 // Variant flags: [tryReturns, tryResultToLocal, doCatch, catchThrows]
4071
4072 counter = 0;
4073 var f = function() {
4074 var local = 3;
4075 try {
4076 counter++;
4077 local += increaseAndReturn15();
4078 counter++;
4079 } catch (ex) {
4080 counter++;
4081 throw 2 + ex;
4082 counter++;
4083 }
4084 counter++;
4085 }
4086 assertOptResultEquals(undefined, f);
4087 assertEquals(4, counter);
4088
4089 // Variant flags: [tryReturns, tryResultToLocal, doCatch, catchThrows,
4090 // endReturnLocal]
4091
4092 counter = 0;
4093 var f = function() {
4094 var local = 3;
4095 try {
4096 counter++;
4097 local += increaseAndReturn15();
4098 counter++;
4099 } catch (ex) {
4100 counter++;
4101 throw 2 + ex;
4102 counter++;
4103 }
4104 counter++;
4105 return 5 + local;
4106 }
4107 assertOptResultEquals(23, f);
4108 assertEquals(4, counter);
4109
4110 // Variant flags: [tryReturns, tryResultToLocal, doCatch, catchThrows,
4111 // doFinally]
4112
4113 counter = 0;
4114 var f = function() {
4115 var local = 3;
4116 try {
4117 counter++;
4118 local += increaseAndReturn15();
4119 counter++;
4120 } catch (ex) {
4121 counter++;
4122 throw 2 + ex;
4123 counter++;
4124 } finally {
4125 counter++;
4126 local += 2;
4127 counter++;
4128 }
4129 counter++;
4130 }
4131 assertOptResultEquals(undefined, f);
4132 assertEquals(6, counter);
4133
4134 // Variant flags: [tryReturns, tryResultToLocal, doCatch, catchThrows,
4135 // doFinally, endReturnLocal]
4136
4137 counter = 0;
4138 var f = function() {
4139 var local = 3;
4140 try {
4141 counter++;
4142 local += increaseAndReturn15();
4143 counter++;
4144 } catch (ex) {
4145 counter++;
4146 throw 2 + ex;
4147 counter++;
4148 } finally {
4149 counter++;
4150 local += 2;
4151 counter++;
4152 }
4153 counter++;
4154 return 5 + local;
4155 }
4156 assertOptResultEquals(25, f);
4157 assertEquals(6, counter);
4158
4159 // Variant flags: [tryReturns, tryResultToLocal, doCatch, catchThrows,
4160 // doFinally, finallyThrows]
4161
4162 counter = 0;
4163 var f = function() {
4164 var local = 3;
4165 try {
4166 counter++;
4167 local += increaseAndReturn15();
4168 counter++;
4169 } catch (ex) {
4170 counter++;
4171 throw 2 + ex;
4172 counter++;
4173 } finally {
4174 counter++;
4175 throw 25;
4176 counter++;
4177 }
4178 counter++;
4179 }
4180 assertOptThrowsWith(25, f);
4181 assertEquals(4, counter);
4182
4183 // Variant flags: [tryReturns, tryResultToLocal, doCatch, catchThrows,
4184 // doFinally, finallyThrows, endReturnLocal]
4185
4186 counter = 0;
4187 var f = function() {
4188 var local = 3;
4189 try {
4190 counter++;
4191 local += increaseAndReturn15();
4192 counter++;
4193 } catch (ex) {
4194 counter++;
4195 throw 2 + ex;
4196 counter++;
4197 } finally {
4198 counter++;
4199 throw 25;
4200 counter++;
4201 }
4202 counter++;
4203 return 5 + local;
4204 }
4205 assertOptThrowsWith(25, f);
4206 assertEquals(4, counter);
4207
4208 // Variant flags: [tryReturns, tryResultToLocal, doCatch, catchThrows,
4209 // doFinally, finallyReturns]
4210
4211 counter = 0;
4212 var f = function() {
4213 var local = 3;
4214 try {
4215 counter++;
4216 local += increaseAndReturn15();
4217 counter++;
4218 } catch (ex) {
4219 counter++;
4220 throw 2 + ex;
4221 counter++;
4222 } finally {
4223 counter++;
4224 return 3 + local;
4225 counter++;
4226 }
4227 counter++;
4228 }
4229 assertOptResultEquals(21, f);
4230 assertEquals(4, counter);
4231
4232 // Variant flags: [tryReturns, tryResultToLocal, doCatch, catchThrows,
4233 // doFinally, finallyReturns, endReturnLocal]
4234
4235 counter = 0;
4236 var f = function() {
4237 var local = 3;
4238 try {
4239 counter++;
4240 local += increaseAndReturn15();
4241 counter++;
4242 } catch (ex) {
4243 counter++;
4244 throw 2 + ex;
4245 counter++;
4246 } finally {
4247 counter++;
4248 return 3 + local;
4249 counter++;
4250 }
4251 counter++;
4252 return 5 + local;
4253 }
4254 assertOptResultEquals(21, f);
4255 assertEquals(4, counter);
4256
4257 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4258 // catchWithLocal]
4259
4260 counter = 0;
4261 var f = function() {
4262 var local = 3;
4263 try {
4264 counter++;
4265 local += increaseAndReturn15();
4266 counter++;
4267 } catch (ex) {
4268 counter++;
4269 local += ex;
4270 counter++;
4271 }
4272 counter++;
4273 }
4274 assertOptResultEquals(undefined, f);
4275 assertEquals(4, counter);
4276
4277 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4278 // catchWithLocal, endReturnLocal]
4279
4280 counter = 0;
4281 var f = function() {
4282 var local = 3;
4283 try {
4284 counter++;
4285 local += increaseAndReturn15();
4286 counter++;
4287 } catch (ex) {
4288 counter++;
4289 local += ex;
4290 counter++;
4291 }
4292 counter++;
4293 return 5 + local;
4294 }
4295 assertOptResultEquals(23, f);
4296 assertEquals(4, counter);
4297
4298 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4299 // catchWithLocal, doFinally]
4300
4301 counter = 0;
4302 var f = function() {
4303 var local = 3;
4304 try {
4305 counter++;
4306 local += increaseAndReturn15();
4307 counter++;
4308 } catch (ex) {
4309 counter++;
4310 local += ex;
4311 counter++;
4312 } finally {
4313 counter++;
4314 local += 2;
4315 counter++;
4316 }
4317 counter++;
4318 }
4319 assertOptResultEquals(undefined, f);
4320 assertEquals(6, counter);
4321
4322 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4323 // catchWithLocal, doFinally, endReturnLocal]
4324
4325 counter = 0;
4326 var f = function() {
4327 var local = 3;
4328 try {
4329 counter++;
4330 local += increaseAndReturn15();
4331 counter++;
4332 } catch (ex) {
4333 counter++;
4334 local += ex;
4335 counter++;
4336 } finally {
4337 counter++;
4338 local += 2;
4339 counter++;
4340 }
4341 counter++;
4342 return 5 + local;
4343 }
4344 assertOptResultEquals(25, f);
4345 assertEquals(6, counter);
4346
4347 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4348 // catchWithLocal, doFinally, finallyThrows]
4349
4350 counter = 0;
4351 var f = function() {
4352 var local = 3;
4353 try {
4354 counter++;
4355 local += increaseAndReturn15();
4356 counter++;
4357 } catch (ex) {
4358 counter++;
4359 local += ex;
4360 counter++;
4361 } finally {
4362 counter++;
4363 throw 25;
4364 counter++;
4365 }
4366 counter++;
4367 }
4368 assertOptThrowsWith(25, f);
4369 assertEquals(4, counter);
4370
4371 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4372 // catchWithLocal, doFinally, finallyThrows, endReturnLocal]
4373
4374 counter = 0;
4375 var f = function() {
4376 var local = 3;
4377 try {
4378 counter++;
4379 local += increaseAndReturn15();
4380 counter++;
4381 } catch (ex) {
4382 counter++;
4383 local += ex;
4384 counter++;
4385 } finally {
4386 counter++;
4387 throw 25;
4388 counter++;
4389 }
4390 counter++;
4391 return 5 + local;
4392 }
4393 assertOptThrowsWith(25, f);
4394 assertEquals(4, counter);
4395
4396 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4397 // catchWithLocal, doFinally, finallyReturns]
4398
4399 counter = 0;
4400 var f = function() {
4401 var local = 3;
4402 try {
4403 counter++;
4404 local += increaseAndReturn15();
4405 counter++;
4406 } catch (ex) {
4407 counter++;
4408 local += ex;
4409 counter++;
4410 } finally {
4411 counter++;
4412 return 3 + local;
4413 counter++;
4414 }
4415 counter++;
4416 }
4417 assertOptResultEquals(21, f);
4418 assertEquals(4, counter);
4419
4420 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4421 // catchWithLocal, doFinally, finallyReturns, endReturnLocal]
4422
4423 counter = 0;
4424 var f = function() {
4425 var local = 3;
4426 try {
4427 counter++;
4428 local += increaseAndReturn15();
4429 counter++;
4430 } catch (ex) {
4431 counter++;
4432 local += ex;
4433 counter++;
4434 } finally {
4435 counter++;
4436 return 3 + local;
4437 counter++;
4438 }
4439 counter++;
4440 return 5 + local;
4441 }
4442 assertOptResultEquals(21, f);
4443 assertEquals(4, counter);
4444
4445 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4446 // catchWithLocal, catchThrows]
4447
4448 counter = 0;
4449 var f = function() {
4450 var local = 3;
4451 try {
4452 counter++;
4453 local += increaseAndReturn15();
4454 counter++;
4455 } catch (ex) {
4456 counter++;
4457 throw 2 + ex;
4458 counter++;
4459 }
4460 counter++;
4461 }
4462 assertOptResultEquals(undefined, f);
4463 assertEquals(4, counter);
4464
4465 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4466 // catchWithLocal, catchThrows, endReturnLocal]
4467
4468 counter = 0;
4469 var f = function() {
4470 var local = 3;
4471 try {
4472 counter++;
4473 local += increaseAndReturn15();
4474 counter++;
4475 } catch (ex) {
4476 counter++;
4477 throw 2 + ex;
4478 counter++;
4479 }
4480 counter++;
4481 return 5 + local;
4482 }
4483 assertOptResultEquals(23, f);
4484 assertEquals(4, counter);
4485
4486 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4487 // catchWithLocal, catchThrows, doFinally]
4488
4489 counter = 0;
4490 var f = function() {
4491 var local = 3;
4492 try {
4493 counter++;
4494 local += increaseAndReturn15();
4495 counter++;
4496 } catch (ex) {
4497 counter++;
4498 throw 2 + ex;
4499 counter++;
4500 } finally {
4501 counter++;
4502 local += 2;
4503 counter++;
4504 }
4505 counter++;
4506 }
4507 assertOptResultEquals(undefined, f);
4508 assertEquals(6, counter);
4509
4510 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4511 // catchWithLocal, catchThrows, doFinally, endReturnLocal]
4512
4513 counter = 0;
4514 var f = function() {
4515 var local = 3;
4516 try {
4517 counter++;
4518 local += increaseAndReturn15();
4519 counter++;
4520 } catch (ex) {
4521 counter++;
4522 throw 2 + ex;
4523 counter++;
4524 } finally {
4525 counter++;
4526 local += 2;
4527 counter++;
4528 }
4529 counter++;
4530 return 5 + local;
4531 }
4532 assertOptResultEquals(25, f);
4533 assertEquals(6, counter);
4534
4535 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4536 // catchWithLocal, catchThrows, doFinally, finallyThrows]
4537
4538 counter = 0;
4539 var f = function() {
4540 var local = 3;
4541 try {
4542 counter++;
4543 local += increaseAndReturn15();
4544 counter++;
4545 } catch (ex) {
4546 counter++;
4547 throw 2 + ex;
4548 counter++;
4549 } finally {
4550 counter++;
4551 throw 25;
4552 counter++;
4553 }
4554 counter++;
4555 }
4556 assertOptThrowsWith(25, f);
4557 assertEquals(4, counter);
4558
4559 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4560 // catchWithLocal, catchThrows, doFinally, finallyThrows,
4561 // endReturnLocal]
4562
4563 counter = 0;
4564 var f = function() {
4565 var local = 3;
4566 try {
4567 counter++;
4568 local += increaseAndReturn15();
4569 counter++;
4570 } catch (ex) {
4571 counter++;
4572 throw 2 + ex;
4573 counter++;
4574 } finally {
4575 counter++;
4576 throw 25;
4577 counter++;
4578 }
4579 counter++;
4580 return 5 + local;
4581 }
4582 assertOptThrowsWith(25, f);
4583 assertEquals(4, counter);
4584
4585 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4586 // catchWithLocal, catchThrows, doFinally, finallyReturns]
4587
4588 counter = 0;
4589 var f = function() {
4590 var local = 3;
4591 try {
4592 counter++;
4593 local += increaseAndReturn15();
4594 counter++;
4595 } catch (ex) {
4596 counter++;
4597 throw 2 + ex;
4598 counter++;
4599 } finally {
4600 counter++;
4601 return 3 + local;
4602 counter++;
4603 }
4604 counter++;
4605 }
4606 assertOptResultEquals(21, f);
4607 assertEquals(4, counter);
4608
4609 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4610 // catchWithLocal, catchThrows, doFinally, finallyReturns,
4611 // endReturnLocal]
4612
4613 counter = 0;
4614 var f = function() {
4615 var local = 3;
4616 try {
4617 counter++;
4618 local += increaseAndReturn15();
4619 counter++;
4620 } catch (ex) {
4621 counter++;
4622 throw 2 + ex;
4623 counter++;
4624 } finally {
4625 counter++;
4626 return 3 + local;
4627 counter++;
4628 }
4629 counter++;
4630 return 5 + local;
4631 }
4632 assertOptResultEquals(21, f);
4633 assertEquals(4, counter);
4634
4635 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4636 // catchReturns]
4637
4638 counter = 0;
4639 var f = function() {
4640 var local = 3;
4641 try {
4642 counter++;
4643 local += increaseAndReturn15();
4644 counter++;
4645 } catch (ex) {
4646 counter++;
4647 return 2 + ex;
4648 counter++;
4649 }
4650 counter++;
4651 }
4652 assertOptResultEquals(undefined, f);
4653 assertEquals(4, counter);
4654
4655 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4656 // catchReturns, endReturnLocal]
4657
4658 counter = 0;
4659 var f = function() {
4660 var local = 3;
4661 try {
4662 counter++;
4663 local += increaseAndReturn15();
4664 counter++;
4665 } catch (ex) {
4666 counter++;
4667 return 2 + ex;
4668 counter++;
4669 }
4670 counter++;
4671 return 5 + local;
4672 }
4673 assertOptResultEquals(23, f);
4674 assertEquals(4, counter);
4675
4676 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4677 // catchReturns, doFinally]
4678
4679 counter = 0;
4680 var f = function() {
4681 var local = 3;
4682 try {
4683 counter++;
4684 local += increaseAndReturn15();
4685 counter++;
4686 } catch (ex) {
4687 counter++;
4688 return 2 + ex;
4689 counter++;
4690 } finally {
4691 counter++;
4692 local += 2;
4693 counter++;
4694 }
4695 counter++;
4696 }
4697 assertOptResultEquals(undefined, f);
4698 assertEquals(6, counter);
4699
4700 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4701 // catchReturns, doFinally, endReturnLocal]
4702
4703 counter = 0;
4704 var f = function() {
4705 var local = 3;
4706 try {
4707 counter++;
4708 local += increaseAndReturn15();
4709 counter++;
4710 } catch (ex) {
4711 counter++;
4712 return 2 + ex;
4713 counter++;
4714 } finally {
4715 counter++;
4716 local += 2;
4717 counter++;
4718 }
4719 counter++;
4720 return 5 + local;
4721 }
4722 assertOptResultEquals(25, f);
4723 assertEquals(6, counter);
4724
4725 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4726 // catchReturns, doFinally, finallyThrows]
4727
4728 counter = 0;
4729 var f = function() {
4730 var local = 3;
4731 try {
4732 counter++;
4733 local += increaseAndReturn15();
4734 counter++;
4735 } catch (ex) {
4736 counter++;
4737 return 2 + ex;
4738 counter++;
4739 } finally {
4740 counter++;
4741 throw 25;
4742 counter++;
4743 }
4744 counter++;
4745 }
4746 assertOptThrowsWith(25, f);
4747 assertEquals(4, counter);
4748
4749 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4750 // catchReturns, doFinally, finallyThrows, endReturnLocal]
4751
4752 counter = 0;
4753 var f = function() {
4754 var local = 3;
4755 try {
4756 counter++;
4757 local += increaseAndReturn15();
4758 counter++;
4759 } catch (ex) {
4760 counter++;
4761 return 2 + ex;
4762 counter++;
4763 } finally {
4764 counter++;
4765 throw 25;
4766 counter++;
4767 }
4768 counter++;
4769 return 5 + local;
4770 }
4771 assertOptThrowsWith(25, f);
4772 assertEquals(4, counter);
4773
4774 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4775 // catchReturns, doFinally, finallyReturns]
4776
4777 counter = 0;
4778 var f = function() {
4779 var local = 3;
4780 try {
4781 counter++;
4782 local += increaseAndReturn15();
4783 counter++;
4784 } catch (ex) {
4785 counter++;
4786 return 2 + ex;
4787 counter++;
4788 } finally {
4789 counter++;
4790 return 3 + local;
4791 counter++;
4792 }
4793 counter++;
4794 }
4795 assertOptResultEquals(21, f);
4796 assertEquals(4, counter);
4797
4798 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4799 // catchReturns, doFinally, finallyReturns, endReturnLocal]
4800
4801 counter = 0;
4802 var f = function() {
4803 var local = 3;
4804 try {
4805 counter++;
4806 local += increaseAndReturn15();
4807 counter++;
4808 } catch (ex) {
4809 counter++;
4810 return 2 + ex;
4811 counter++;
4812 } finally {
4813 counter++;
4814 return 3 + local;
4815 counter++;
4816 }
4817 counter++;
4818 return 5 + local;
4819 }
4820 assertOptResultEquals(21, f);
4821 assertEquals(4, counter);
4822
4823 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4824 // catchReturns, catchWithLocal]
4825
4826 counter = 0;
4827 var f = function() {
4828 var local = 3;
4829 try {
4830 counter++;
4831 local += increaseAndReturn15();
4832 counter++;
4833 } catch (ex) {
4834 counter++;
4835 return 2 + local;
4836 counter++;
4837 }
4838 counter++;
4839 }
4840 assertOptResultEquals(undefined, f);
4841 assertEquals(4, counter);
4842
4843 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4844 // catchReturns, catchWithLocal, endReturnLocal]
4845
4846 counter = 0;
4847 var f = function() {
4848 var local = 3;
4849 try {
4850 counter++;
4851 local += increaseAndReturn15();
4852 counter++;
4853 } catch (ex) {
4854 counter++;
4855 return 2 + local;
4856 counter++;
4857 }
4858 counter++;
4859 return 5 + local;
4860 }
4861 assertOptResultEquals(23, f);
4862 assertEquals(4, counter);
4863
4864 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4865 // catchReturns, catchWithLocal, doFinally]
4866
4867 counter = 0;
4868 var f = function() {
4869 var local = 3;
4870 try {
4871 counter++;
4872 local += increaseAndReturn15();
4873 counter++;
4874 } catch (ex) {
4875 counter++;
4876 return 2 + local;
4877 counter++;
4878 } finally {
4879 counter++;
4880 local += 2;
4881 counter++;
4882 }
4883 counter++;
4884 }
4885 assertOptResultEquals(undefined, f);
4886 assertEquals(6, counter);
4887
4888 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4889 // catchReturns, catchWithLocal, doFinally, endReturnLocal]
4890
4891 counter = 0;
4892 var f = function() {
4893 var local = 3;
4894 try {
4895 counter++;
4896 local += increaseAndReturn15();
4897 counter++;
4898 } catch (ex) {
4899 counter++;
4900 return 2 + local;
4901 counter++;
4902 } finally {
4903 counter++;
4904 local += 2;
4905 counter++;
4906 }
4907 counter++;
4908 return 5 + local;
4909 }
4910 assertOptResultEquals(25, f);
4911 assertEquals(6, counter);
4912
4913 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4914 // catchReturns, catchWithLocal, doFinally, finallyThrows]
4915
4916 counter = 0;
4917 var f = function() {
4918 var local = 3;
4919 try {
4920 counter++;
4921 local += increaseAndReturn15();
4922 counter++;
4923 } catch (ex) {
4924 counter++;
4925 return 2 + local;
4926 counter++;
4927 } finally {
4928 counter++;
4929 throw 25;
4930 counter++;
4931 }
4932 counter++;
4933 }
4934 assertOptThrowsWith(25, f);
4935 assertEquals(4, counter);
4936
4937 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4938 // catchReturns, catchWithLocal, doFinally, finallyThrows,
4939 // endReturnLocal]
4940
4941 counter = 0;
4942 var f = function() {
4943 var local = 3;
4944 try {
4945 counter++;
4946 local += increaseAndReturn15();
4947 counter++;
4948 } catch (ex) {
4949 counter++;
4950 return 2 + local;
4951 counter++;
4952 } finally {
4953 counter++;
4954 throw 25;
4955 counter++;
4956 }
4957 counter++;
4958 return 5 + local;
4959 }
4960 assertOptThrowsWith(25, f);
4961 assertEquals(4, counter);
4962
4963 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4964 // catchReturns, catchWithLocal, doFinally, finallyReturns]
4965
4966 counter = 0;
4967 var f = function() {
4968 var local = 3;
4969 try {
4970 counter++;
4971 local += increaseAndReturn15();
4972 counter++;
4973 } catch (ex) {
4974 counter++;
4975 return 2 + local;
4976 counter++;
4977 } finally {
4978 counter++;
4979 return 3 + local;
4980 counter++;
4981 }
4982 counter++;
4983 }
4984 assertOptResultEquals(21, f);
4985 assertEquals(4, counter);
4986
4987 // Variant flags: [tryReturns, tryResultToLocal, doCatch,
4988 // catchReturns, catchWithLocal, doFinally, finallyReturns,
4989 // endReturnLocal]
4990
4991 counter = 0;
4992 var f = function() {
4993 var local = 3;
4994 try {
4995 counter++;
4996 local += increaseAndReturn15();
4997 counter++;
4998 } catch (ex) {
4999 counter++;
5000 return 2 + local;
5001 counter++;
5002 } finally {
5003 counter++;
5004 return 3 + local;
5005 counter++;
5006 }
5007 counter++;
5008 return 5 + local;
5009 }
5010 assertOptResultEquals(21, f);
5011 assertEquals(4, counter);
5012
5013 // Variant flags: [tryReturns, tryThrows, doFinally]
5014
5015 counter = 0;
5016 var f = function() {
5017 var local = 3;
5018 try {
5019 counter++;
5020 return increaseAndThrow42();
5021 return increaseAndReturn15();
5022 counter++;
5023 } finally {
5024 counter++;
5025 local += 2;
5026 counter++;
5027 }
5028 counter++;
5029 }
5030 assertOptThrowsWith(42, f);
5031 assertEquals(4, counter);
5032
5033 // Variant flags: [tryReturns, tryThrows, doFinally, endReturnLocal]
5034
5035 counter = 0;
5036 var f = function() {
5037 var local = 3;
5038 try {
5039 counter++;
5040 return increaseAndThrow42();
5041 return increaseAndReturn15();
5042 counter++;
5043 } finally {
5044 counter++;
5045 local += 2;
5046 counter++;
5047 }
5048 counter++;
5049 return 5 + local;
5050 }
5051 assertOptThrowsWith(42, f);
5052 assertEquals(4, counter);
5053
5054 // Variant flags: [tryReturns, tryThrows, doFinally, finallyThrows]
5055
5056 counter = 0;
5057 var f = function() {
5058 var local = 3;
5059 try {
5060 counter++;
5061 return increaseAndThrow42();
5062 return increaseAndReturn15();
5063 counter++;
5064 } finally {
5065 counter++;
5066 throw 25;
5067 counter++;
5068 }
5069 counter++;
5070 }
5071 assertOptThrowsWith(25, f);
5072 assertEquals(3, counter);
5073
5074 // Variant flags: [tryReturns, tryThrows, doFinally, finallyThrows,
5075 // endReturnLocal]
5076
5077 counter = 0;
5078 var f = function() {
5079 var local = 3;
5080 try {
5081 counter++;
5082 return increaseAndThrow42();
5083 return increaseAndReturn15();
5084 counter++;
5085 } finally {
5086 counter++;
5087 throw 25;
5088 counter++;
5089 }
5090 counter++;
5091 return 5 + local;
5092 }
5093 assertOptThrowsWith(25, f);
5094 assertEquals(3, counter);
5095
5096 // Variant flags: [tryReturns, tryThrows, doFinally, finallyReturns]
5097
5098 counter = 0;
5099 var f = function() {
5100 var local = 3;
5101 try {
5102 counter++;
5103 return increaseAndThrow42();
5104 return increaseAndReturn15();
5105 counter++;
5106 } finally {
5107 counter++;
5108 return 3 + local;
5109 counter++;
5110 }
5111 counter++;
5112 }
5113 assertOptResultEquals(6, f);
5114 assertEquals(3, counter);
5115
5116 // Variant flags: [tryReturns, tryThrows, doFinally, finallyReturns,
5117 // endReturnLocal]
5118
5119 counter = 0;
5120 var f = function() {
5121 var local = 3;
5122 try {
5123 counter++;
5124 return increaseAndThrow42();
5125 return increaseAndReturn15();
5126 counter++;
5127 } finally {
5128 counter++;
5129 return 3 + local;
5130 counter++;
5131 }
5132 counter++;
5133 return 5 + local;
5134 }
5135 assertOptResultEquals(6, f);
5136 assertEquals(3, counter);
5137
5138 // Variant flags: [tryReturns, tryThrows, doCatch]
5139
5140 counter = 0;
5141 var f = function() {
5142 var local = 3;
5143 try {
5144 counter++;
5145 return increaseAndThrow42();
5146 return increaseAndReturn15();
5147 counter++;
5148 } catch (ex) {
5149 counter++;
5150 counter++;
5151 }
5152 counter++;
5153 }
5154 assertOptResultEquals(undefined, f);
5155 assertEquals(5, counter);
5156
5157 // Variant flags: [tryReturns, tryThrows, doCatch, endReturnLocal]
5158
5159 counter = 0;
5160 var f = function() {
5161 var local = 3;
5162 try {
5163 counter++;
5164 return increaseAndThrow42();
5165 return increaseAndReturn15();
5166 counter++;
5167 } catch (ex) {
5168 counter++;
5169 counter++;
5170 }
5171 counter++;
5172 return 5 + local;
5173 }
5174 assertOptResultEquals(8, f);
5175 assertEquals(5, counter);
5176
5177 // Variant flags: [tryReturns, tryThrows, doCatch, doFinally]
5178
5179 counter = 0;
5180 var f = function() {
5181 var local = 3;
5182 try {
5183 counter++;
5184 return increaseAndThrow42();
5185 return increaseAndReturn15();
5186 counter++;
5187 } catch (ex) {
5188 counter++;
5189 counter++;
5190 } finally {
5191 counter++;
5192 local += 2;
5193 counter++;
5194 }
5195 counter++;
5196 }
5197 assertOptResultEquals(undefined, f);
5198 assertEquals(7, counter);
5199
5200 // Variant flags: [tryReturns, tryThrows, doCatch, doFinally,
5201 // endReturnLocal]
5202
5203 counter = 0;
5204 var f = function() {
5205 var local = 3;
5206 try {
5207 counter++;
5208 return increaseAndThrow42();
5209 return increaseAndReturn15();
5210 counter++;
5211 } catch (ex) {
5212 counter++;
5213 counter++;
5214 } finally {
5215 counter++;
5216 local += 2;
5217 counter++;
5218 }
5219 counter++;
5220 return 5 + local;
5221 }
5222 assertOptResultEquals(10, f);
5223 assertEquals(7, counter);
5224
5225 // Variant flags: [tryReturns, tryThrows, doCatch, doFinally,
5226 // finallyThrows]
5227
5228 counter = 0;
5229 var f = function() {
5230 var local = 3;
5231 try {
5232 counter++;
5233 return increaseAndThrow42();
5234 return increaseAndReturn15();
5235 counter++;
5236 } catch (ex) {
5237 counter++;
5238 counter++;
5239 } finally {
5240 counter++;
5241 throw 25;
5242 counter++;
5243 }
5244 counter++;
5245 }
5246 assertOptThrowsWith(25, f);
5247 assertEquals(5, counter);
5248
5249 // Variant flags: [tryReturns, tryThrows, doCatch, doFinally,
5250 // finallyThrows, endReturnLocal]
5251
5252 counter = 0;
5253 var f = function() {
5254 var local = 3;
5255 try {
5256 counter++;
5257 return increaseAndThrow42();
5258 return increaseAndReturn15();
5259 counter++;
5260 } catch (ex) {
5261 counter++;
5262 counter++;
5263 } finally {
5264 counter++;
5265 throw 25;
5266 counter++;
5267 }
5268 counter++;
5269 return 5 + local;
5270 }
5271 assertOptThrowsWith(25, f);
5272 assertEquals(5, counter);
5273
5274 // Variant flags: [tryReturns, tryThrows, doCatch, doFinally,
5275 // finallyReturns]
5276
5277 counter = 0;
5278 var f = function() {
5279 var local = 3;
5280 try {
5281 counter++;
5282 return increaseAndThrow42();
5283 return increaseAndReturn15();
5284 counter++;
5285 } catch (ex) {
5286 counter++;
5287 counter++;
5288 } finally {
5289 counter++;
5290 return 3 + local;
5291 counter++;
5292 }
5293 counter++;
5294 }
5295 assertOptResultEquals(6, f);
5296 assertEquals(5, counter);
5297
5298 // Variant flags: [tryReturns, tryThrows, doCatch, doFinally,
5299 // finallyReturns, endReturnLocal]
5300
5301 counter = 0;
5302 var f = function() {
5303 var local = 3;
5304 try {
5305 counter++;
5306 return increaseAndThrow42();
5307 return increaseAndReturn15();
5308 counter++;
5309 } catch (ex) {
5310 counter++;
5311 counter++;
5312 } finally {
5313 counter++;
5314 return 3 + local;
5315 counter++;
5316 }
5317 counter++;
5318 return 5 + local;
5319 }
5320 assertOptResultEquals(6, f);
5321 assertEquals(5, counter);
5322
5323 // Variant flags: [tryReturns, tryThrows, doCatch, catchThrows]
5324
5325 counter = 0;
5326 var f = function() {
5327 var local = 3;
5328 try {
5329 counter++;
5330 return increaseAndThrow42();
5331 return increaseAndReturn15();
5332 counter++;
5333 } catch (ex) {
5334 counter++;
5335 throw 2 + ex;
5336 counter++;
5337 }
5338 counter++;
5339 }
5340 assertOptThrowsWith(44, f);
5341 assertEquals(3, counter);
5342
5343 // Variant flags: [tryReturns, tryThrows, doCatch, catchThrows,
5344 // endReturnLocal]
5345
5346 counter = 0;
5347 var f = function() {
5348 var local = 3;
5349 try {
5350 counter++;
5351 return increaseAndThrow42();
5352 return increaseAndReturn15();
5353 counter++;
5354 } catch (ex) {
5355 counter++;
5356 throw 2 + ex;
5357 counter++;
5358 }
5359 counter++;
5360 return 5 + local;
5361 }
5362 assertOptThrowsWith(44, f);
5363 assertEquals(3, counter);
5364
5365 // Variant flags: [tryReturns, tryThrows, doCatch, catchThrows,
5366 // doFinally]
5367
5368 counter = 0;
5369 var f = function() {
5370 var local = 3;
5371 try {
5372 counter++;
5373 return increaseAndThrow42();
5374 return increaseAndReturn15();
5375 counter++;
5376 } catch (ex) {
5377 counter++;
5378 throw 2 + ex;
5379 counter++;
5380 } finally {
5381 counter++;
5382 local += 2;
5383 counter++;
5384 }
5385 counter++;
5386 }
5387 assertOptThrowsWith(44, f);
5388 assertEquals(5, counter);
5389
5390 // Variant flags: [tryReturns, tryThrows, doCatch, catchThrows,
5391 // doFinally, endReturnLocal]
5392
5393 counter = 0;
5394 var f = function() {
5395 var local = 3;
5396 try {
5397 counter++;
5398 return increaseAndThrow42();
5399 return increaseAndReturn15();
5400 counter++;
5401 } catch (ex) {
5402 counter++;
5403 throw 2 + ex;
5404 counter++;
5405 } finally {
5406 counter++;
5407 local += 2;
5408 counter++;
5409 }
5410 counter++;
5411 return 5 + local;
5412 }
5413 assertOptThrowsWith(44, f);
5414 assertEquals(5, counter);
5415
5416 // Variant flags: [tryReturns, tryThrows, doCatch, catchThrows,
5417 // doFinally, finallyThrows]
5418
5419 counter = 0;
5420 var f = function() {
5421 var local = 3;
5422 try {
5423 counter++;
5424 return increaseAndThrow42();
5425 return increaseAndReturn15();
5426 counter++;
5427 } catch (ex) {
5428 counter++;
5429 throw 2 + ex;
5430 counter++;
5431 } finally {
5432 counter++;
5433 throw 25;
5434 counter++;
5435 }
5436 counter++;
5437 }
5438 assertOptThrowsWith(25, f);
5439 assertEquals(4, counter);
5440
5441 // Variant flags: [tryReturns, tryThrows, doCatch, catchThrows,
5442 // doFinally, finallyThrows, endReturnLocal]
5443
5444 counter = 0;
5445 var f = function() {
5446 var local = 3;
5447 try {
5448 counter++;
5449 return increaseAndThrow42();
5450 return increaseAndReturn15();
5451 counter++;
5452 } catch (ex) {
5453 counter++;
5454 throw 2 + ex;
5455 counter++;
5456 } finally {
5457 counter++;
5458 throw 25;
5459 counter++;
5460 }
5461 counter++;
5462 return 5 + local;
5463 }
5464 assertOptThrowsWith(25, f);
5465 assertEquals(4, counter);
5466
5467 // Variant flags: [tryReturns, tryThrows, doCatch, catchThrows,
5468 // doFinally, finallyReturns]
5469
5470 counter = 0;
5471 var f = function() {
5472 var local = 3;
5473 try {
5474 counter++;
5475 return increaseAndThrow42();
5476 return increaseAndReturn15();
5477 counter++;
5478 } catch (ex) {
5479 counter++;
5480 throw 2 + ex;
5481 counter++;
5482 } finally {
5483 counter++;
5484 return 3 + local;
5485 counter++;
5486 }
5487 counter++;
5488 }
5489 assertOptResultEquals(6, f);
5490 assertEquals(4, counter);
5491
5492 // Variant flags: [tryReturns, tryThrows, doCatch, catchThrows,
5493 // doFinally, finallyReturns, endReturnLocal]
5494
5495 counter = 0;
5496 var f = function() {
5497 var local = 3;
5498 try {
5499 counter++;
5500 return increaseAndThrow42();
5501 return increaseAndReturn15();
5502 counter++;
5503 } catch (ex) {
5504 counter++;
5505 throw 2 + ex;
5506 counter++;
5507 } finally {
5508 counter++;
5509 return 3 + local;
5510 counter++;
5511 }
5512 counter++;
5513 return 5 + local;
5514 }
5515 assertOptResultEquals(6, f);
5516 assertEquals(4, counter);
5517
5518 // Variant flags: [tryReturns, tryThrows, doCatch, catchWithLocal]
5519
5520 counter = 0;
5521 var f = function() {
5522 var local = 3;
5523 try {
5524 counter++;
5525 return increaseAndThrow42();
5526 return increaseAndReturn15();
5527 counter++;
5528 } catch (ex) {
5529 counter++;
5530 local += ex;
5531 counter++;
5532 }
5533 counter++;
5534 }
5535 assertOptResultEquals(undefined, f);
5536 assertEquals(5, counter);
5537
5538 // Variant flags: [tryReturns, tryThrows, doCatch, catchWithLocal,
5539 // endReturnLocal]
5540
5541 counter = 0;
5542 var f = function() {
5543 var local = 3;
5544 try {
5545 counter++;
5546 return increaseAndThrow42();
5547 return increaseAndReturn15();
5548 counter++;
5549 } catch (ex) {
5550 counter++;
5551 local += ex;
5552 counter++;
5553 }
5554 counter++;
5555 return 5 + local;
5556 }
5557 assertOptResultEquals(50, f);
5558 assertEquals(5, counter);
5559
5560 // Variant flags: [tryReturns, tryThrows, doCatch, catchWithLocal,
5561 // doFinally]
5562
5563 counter = 0;
5564 var f = function() {
5565 var local = 3;
5566 try {
5567 counter++;
5568 return increaseAndThrow42();
5569 return increaseAndReturn15();
5570 counter++;
5571 } catch (ex) {
5572 counter++;
5573 local += ex;
5574 counter++;
5575 } finally {
5576 counter++;
5577 local += 2;
5578 counter++;
5579 }
5580 counter++;
5581 }
5582 assertOptResultEquals(undefined, f);
5583 assertEquals(7, counter);
5584
5585 // Variant flags: [tryReturns, tryThrows, doCatch, catchWithLocal,
5586 // doFinally, endReturnLocal]
5587
5588 counter = 0;
5589 var f = function() {
5590 var local = 3;
5591 try {
5592 counter++;
5593 return increaseAndThrow42();
5594 return increaseAndReturn15();
5595 counter++;
5596 } catch (ex) {
5597 counter++;
5598 local += ex;
5599 counter++;
5600 } finally {
5601 counter++;
5602 local += 2;
5603 counter++;
5604 }
5605 counter++;
5606 return 5 + local;
5607 }
5608 assertOptResultEquals(52, f);
5609 assertEquals(7, counter);
5610
5611 // Variant flags: [tryReturns, tryThrows, doCatch, catchWithLocal,
5612 // doFinally, finallyThrows]
5613
5614 counter = 0;
5615 var f = function() {
5616 var local = 3;
5617 try {
5618 counter++;
5619 return increaseAndThrow42();
5620 return increaseAndReturn15();
5621 counter++;
5622 } catch (ex) {
5623 counter++;
5624 local += ex;
5625 counter++;
5626 } finally {
5627 counter++;
5628 throw 25;
5629 counter++;
5630 }
5631 counter++;
5632 }
5633 assertOptThrowsWith(25, f);
5634 assertEquals(5, counter);
5635
5636 // Variant flags: [tryReturns, tryThrows, doCatch, catchWithLocal,
5637 // doFinally, finallyThrows, endReturnLocal]
5638
5639 counter = 0;
5640 var f = function() {
5641 var local = 3;
5642 try {
5643 counter++;
5644 return increaseAndThrow42();
5645 return increaseAndReturn15();
5646 counter++;
5647 } catch (ex) {
5648 counter++;
5649 local += ex;
5650 counter++;
5651 } finally {
5652 counter++;
5653 throw 25;
5654 counter++;
5655 }
5656 counter++;
5657 return 5 + local;
5658 }
5659 assertOptThrowsWith(25, f);
5660 assertEquals(5, counter);
5661
5662 // Variant flags: [tryReturns, tryThrows, doCatch, catchWithLocal,
5663 // doFinally, finallyReturns]
5664
5665 counter = 0;
5666 var f = function() {
5667 var local = 3;
5668 try {
5669 counter++;
5670 return increaseAndThrow42();
5671 return increaseAndReturn15();
5672 counter++;
5673 } catch (ex) {
5674 counter++;
5675 local += ex;
5676 counter++;
5677 } finally {
5678 counter++;
5679 return 3 + local;
5680 counter++;
5681 }
5682 counter++;
5683 }
5684 assertOptResultEquals(48, f);
5685 assertEquals(5, counter);
5686
5687 // Variant flags: [tryReturns, tryThrows, doCatch, catchWithLocal,
5688 // doFinally, finallyReturns, endReturnLocal]
5689
5690 counter = 0;
5691 var f = function() {
5692 var local = 3;
5693 try {
5694 counter++;
5695 return increaseAndThrow42();
5696 return increaseAndReturn15();
5697 counter++;
5698 } catch (ex) {
5699 counter++;
5700 local += ex;
5701 counter++;
5702 } finally {
5703 counter++;
5704 return 3 + local;
5705 counter++;
5706 }
5707 counter++;
5708 return 5 + local;
5709 }
5710 assertOptResultEquals(48, f);
5711 assertEquals(5, counter);
5712
5713 // Variant flags: [tryReturns, tryThrows, doCatch, catchWithLocal,
5714 // catchThrows]
5715
5716 counter = 0;
5717 var f = function() {
5718 var local = 3;
5719 try {
5720 counter++;
5721 return increaseAndThrow42();
5722 return increaseAndReturn15();
5723 counter++;
5724 } catch (ex) {
5725 counter++;
5726 throw 2 + ex;
5727 counter++;
5728 }
5729 counter++;
5730 }
5731 assertOptThrowsWith(44, f);
5732 assertEquals(3, counter);
5733
5734 // Variant flags: [tryReturns, tryThrows, doCatch, catchWithLocal,
5735 // catchThrows, endReturnLocal]
5736
5737 counter = 0;
5738 var f = function() {
5739 var local = 3;
5740 try {
5741 counter++;
5742 return increaseAndThrow42();
5743 return increaseAndReturn15();
5744 counter++;
5745 } catch (ex) {
5746 counter++;
5747 throw 2 + ex;
5748 counter++;
5749 }
5750 counter++;
5751 return 5 + local;
5752 }
5753 assertOptThrowsWith(44, f);
5754 assertEquals(3, counter);
5755
5756 // Variant flags: [tryReturns, tryThrows, doCatch, catchWithLocal,
5757 // catchThrows, doFinally]
5758
5759 counter = 0;
5760 var f = function() {
5761 var local = 3;
5762 try {
5763 counter++;
5764 return increaseAndThrow42();
5765 return increaseAndReturn15();
5766 counter++;
5767 } catch (ex) {
5768 counter++;
5769 throw 2 + ex;
5770 counter++;
5771 } finally {
5772 counter++;
5773 local += 2;
5774 counter++;
5775 }
5776 counter++;
5777 }
5778 assertOptThrowsWith(44, f);
5779 assertEquals(5, counter);
5780
5781 // Variant flags: [tryReturns, tryThrows, doCatch, catchWithLocal,
5782 // catchThrows, doFinally, endReturnLocal]
5783
5784 counter = 0;
5785 var f = function() {
5786 var local = 3;
5787 try {
5788 counter++;
5789 return increaseAndThrow42();
5790 return increaseAndReturn15();
5791 counter++;
5792 } catch (ex) {
5793 counter++;
5794 throw 2 + ex;
5795 counter++;
5796 } finally {
5797 counter++;
5798 local += 2;
5799 counter++;
5800 }
5801 counter++;
5802 return 5 + local;
5803 }
5804 assertOptThrowsWith(44, f);
5805 assertEquals(5, counter);
5806
5807 // Variant flags: [tryReturns, tryThrows, doCatch, catchWithLocal,
5808 // catchThrows, doFinally, finallyThrows]
5809
5810 counter = 0;
5811 var f = function() {
5812 var local = 3;
5813 try {
5814 counter++;
5815 return increaseAndThrow42();
5816 return increaseAndReturn15();
5817 counter++;
5818 } catch (ex) {
5819 counter++;
5820 throw 2 + ex;
5821 counter++;
5822 } finally {
5823 counter++;
5824 throw 25;
5825 counter++;
5826 }
5827 counter++;
5828 }
5829 assertOptThrowsWith(25, f);
5830 assertEquals(4, counter);
5831
5832 // Variant flags: [tryReturns, tryThrows, doCatch, catchWithLocal,
5833 // catchThrows, doFinally, finallyThrows, endReturnLocal]
5834
5835 counter = 0;
5836 var f = function() {
5837 var local = 3;
5838 try {
5839 counter++;
5840 return increaseAndThrow42();
5841 return increaseAndReturn15();
5842 counter++;
5843 } catch (ex) {
5844 counter++;
5845 throw 2 + ex;
5846 counter++;
5847 } finally {
5848 counter++;
5849 throw 25;
5850 counter++;
5851 }
5852 counter++;
5853 return 5 + local;
5854 }
5855 assertOptThrowsWith(25, f);
5856 assertEquals(4, counter);
5857
5858 // Variant flags: [tryReturns, tryThrows, doCatch, catchWithLocal,
5859 // catchThrows, doFinally, finallyReturns]
5860
5861 counter = 0;
5862 var f = function() {
5863 var local = 3;
5864 try {
5865 counter++;
5866 return increaseAndThrow42();
5867 return increaseAndReturn15();
5868 counter++;
5869 } catch (ex) {
5870 counter++;
5871 throw 2 + ex;
5872 counter++;
5873 } finally {
5874 counter++;
5875 return 3 + local;
5876 counter++;
5877 }
5878 counter++;
5879 }
5880 assertOptResultEquals(6, f);
5881 assertEquals(4, counter);
5882
5883 // Variant flags: [tryReturns, tryThrows, doCatch, catchWithLocal,
5884 // catchThrows, doFinally, finallyReturns, endReturnLocal]
5885
5886 counter = 0;
5887 var f = function() {
5888 var local = 3;
5889 try {
5890 counter++;
5891 return increaseAndThrow42();
5892 return increaseAndReturn15();
5893 counter++;
5894 } catch (ex) {
5895 counter++;
5896 throw 2 + ex;
5897 counter++;
5898 } finally {
5899 counter++;
5900 return 3 + local;
5901 counter++;
5902 }
5903 counter++;
5904 return 5 + local;
5905 }
5906 assertOptResultEquals(6, f);
5907 assertEquals(4, counter);
5908
5909 // Variant flags: [tryReturns, tryThrows, doCatch, catchReturns]
5910
5911 counter = 0;
5912 var f = function() {
5913 var local = 3;
5914 try {
5915 counter++;
5916 return increaseAndThrow42();
5917 return increaseAndReturn15();
5918 counter++;
5919 } catch (ex) {
5920 counter++;
5921 return 2 + ex;
5922 counter++;
5923 }
5924 counter++;
5925 }
5926 assertOptResultEquals(44, f);
5927 assertEquals(3, counter);
5928
5929 // Variant flags: [tryReturns, tryThrows, doCatch, catchReturns,
5930 // endReturnLocal]
5931
5932 counter = 0;
5933 var f = function() {
5934 var local = 3;
5935 try {
5936 counter++;
5937 return increaseAndThrow42();
5938 return increaseAndReturn15();
5939 counter++;
5940 } catch (ex) {
5941 counter++;
5942 return 2 + ex;
5943 counter++;
5944 }
5945 counter++;
5946 return 5 + local;
5947 }
5948 assertOptResultEquals(44, f);
5949 assertEquals(3, counter);
5950
5951 // Variant flags: [tryReturns, tryThrows, doCatch, catchReturns,
5952 // doFinally]
5953
5954 counter = 0;
5955 var f = function() {
5956 var local = 3;
5957 try {
5958 counter++;
5959 return increaseAndThrow42();
5960 return increaseAndReturn15();
5961 counter++;
5962 } catch (ex) {
5963 counter++;
5964 return 2 + ex;
5965 counter++;
5966 } finally {
5967 counter++;
5968 local += 2;
5969 counter++;
5970 }
5971 counter++;
5972 }
5973 assertOptResultEquals(44, f);
5974 assertEquals(5, counter);
5975
5976 // Variant flags: [tryReturns, tryThrows, doCatch, catchReturns,
5977 // doFinally, endReturnLocal]
5978
5979 counter = 0;
5980 var f = function() {
5981 var local = 3;
5982 try {
5983 counter++;
5984 return increaseAndThrow42();
5985 return increaseAndReturn15();
5986 counter++;
5987 } catch (ex) {
5988 counter++;
5989 return 2 + ex;
5990 counter++;
5991 } finally {
5992 counter++;
5993 local += 2;
5994 counter++;
5995 }
5996 counter++;
5997 return 5 + local;
5998 }
5999 assertOptResultEquals(44, f);
6000 assertEquals(5, counter);
6001
6002 // Variant flags: [tryReturns, tryThrows, doCatch, catchReturns,
6003 // doFinally, finallyThrows]
6004
6005 counter = 0;
6006 var f = function() {
6007 var local = 3;
6008 try {
6009 counter++;
6010 return increaseAndThrow42();
6011 return increaseAndReturn15();
6012 counter++;
6013 } catch (ex) {
6014 counter++;
6015 return 2 + ex;
6016 counter++;
6017 } finally {
6018 counter++;
6019 throw 25;
6020 counter++;
6021 }
6022 counter++;
6023 }
6024 assertOptThrowsWith(25, f);
6025 assertEquals(4, counter);
6026
6027 // Variant flags: [tryReturns, tryThrows, doCatch, catchReturns,
6028 // doFinally, finallyThrows, endReturnLocal]
6029
6030 counter = 0;
6031 var f = function() {
6032 var local = 3;
6033 try {
6034 counter++;
6035 return increaseAndThrow42();
6036 return increaseAndReturn15();
6037 counter++;
6038 } catch (ex) {
6039 counter++;
6040 return 2 + ex;
6041 counter++;
6042 } finally {
6043 counter++;
6044 throw 25;
6045 counter++;
6046 }
6047 counter++;
6048 return 5 + local;
6049 }
6050 assertOptThrowsWith(25, f);
6051 assertEquals(4, counter);
6052
6053 // Variant flags: [tryReturns, tryThrows, doCatch, catchReturns,
6054 // doFinally, finallyReturns]
6055
6056 counter = 0;
6057 var f = function() {
6058 var local = 3;
6059 try {
6060 counter++;
6061 return increaseAndThrow42();
6062 return increaseAndReturn15();
6063 counter++;
6064 } catch (ex) {
6065 counter++;
6066 return 2 + ex;
6067 counter++;
6068 } finally {
6069 counter++;
6070 return 3 + local;
6071 counter++;
6072 }
6073 counter++;
6074 }
6075 assertOptResultEquals(6, f);
6076 assertEquals(4, counter);
6077
6078 // Variant flags: [tryReturns, tryThrows, doCatch, catchReturns,
6079 // doFinally, finallyReturns, endReturnLocal]
6080
6081 counter = 0;
6082 var f = function() {
6083 var local = 3;
6084 try {
6085 counter++;
6086 return increaseAndThrow42();
6087 return increaseAndReturn15();
6088 counter++;
6089 } catch (ex) {
6090 counter++;
6091 return 2 + ex;
6092 counter++;
6093 } finally {
6094 counter++;
6095 return 3 + local;
6096 counter++;
6097 }
6098 counter++;
6099 return 5 + local;
6100 }
6101 assertOptResultEquals(6, f);
6102 assertEquals(4, counter);
6103
6104 // Variant flags: [tryReturns, tryThrows, doCatch, catchReturns,
6105 // catchWithLocal]
6106
6107 counter = 0;
6108 var f = function() {
6109 var local = 3;
6110 try {
6111 counter++;
6112 return increaseAndThrow42();
6113 return increaseAndReturn15();
6114 counter++;
6115 } catch (ex) {
6116 counter++;
6117 return 2 + local;
6118 counter++;
6119 }
6120 counter++;
6121 }
6122 assertOptResultEquals(5, f);
6123 assertEquals(3, counter);
6124
6125 // Variant flags: [tryReturns, tryThrows, doCatch, catchReturns,
6126 // catchWithLocal, endReturnLocal]
6127
6128 counter = 0;
6129 var f = function() {
6130 var local = 3;
6131 try {
6132 counter++;
6133 return increaseAndThrow42();
6134 return increaseAndReturn15();
6135 counter++;
6136 } catch (ex) {
6137 counter++;
6138 return 2 + local;
6139 counter++;
6140 }
6141 counter++;
6142 return 5 + local;
6143 }
6144 assertOptResultEquals(5, f);
6145 assertEquals(3, counter);
6146
6147 // Variant flags: [tryReturns, tryThrows, doCatch, catchReturns,
6148 // catchWithLocal, doFinally]
6149
6150 counter = 0;
6151 var f = function() {
6152 var local = 3;
6153 try {
6154 counter++;
6155 return increaseAndThrow42();
6156 return increaseAndReturn15();
6157 counter++;
6158 } catch (ex) {
6159 counter++;
6160 return 2 + local;
6161 counter++;
6162 } finally {
6163 counter++;
6164 local += 2;
6165 counter++;
6166 }
6167 counter++;
6168 }
6169 assertOptResultEquals(5, f);
6170 assertEquals(5, counter);
6171
6172 // Variant flags: [tryReturns, tryThrows, doCatch, catchReturns,
6173 // catchWithLocal, doFinally, endReturnLocal]
6174
6175 counter = 0;
6176 var f = function() {
6177 var local = 3;
6178 try {
6179 counter++;
6180 return increaseAndThrow42();
6181 return increaseAndReturn15();
6182 counter++;
6183 } catch (ex) {
6184 counter++;
6185 return 2 + local;
6186 counter++;
6187 } finally {
6188 counter++;
6189 local += 2;
6190 counter++;
6191 }
6192 counter++;
6193 return 5 + local;
6194 }
6195 assertOptResultEquals(5, f);
6196 assertEquals(5, counter);
6197
6198 // Variant flags: [tryReturns, tryThrows, doCatch, catchReturns,
6199 // catchWithLocal, doFinally, finallyThrows]
6200
6201 counter = 0;
6202 var f = function() {
6203 var local = 3;
6204 try {
6205 counter++;
6206 return increaseAndThrow42();
6207 return increaseAndReturn15();
6208 counter++;
6209 } catch (ex) {
6210 counter++;
6211 return 2 + local;
6212 counter++;
6213 } finally {
6214 counter++;
6215 throw 25;
6216 counter++;
6217 }
6218 counter++;
6219 }
6220 assertOptThrowsWith(25, f);
6221 assertEquals(4, counter);
6222
6223 // Variant flags: [tryReturns, tryThrows, doCatch, catchReturns,
6224 // catchWithLocal, doFinally, finallyThrows, endReturnLocal]
6225
6226 counter = 0;
6227 var f = function() {
6228 var local = 3;
6229 try {
6230 counter++;
6231 return increaseAndThrow42();
6232 return increaseAndReturn15();
6233 counter++;
6234 } catch (ex) {
6235 counter++;
6236 return 2 + local;
6237 counter++;
6238 } finally {
6239 counter++;
6240 throw 25;
6241 counter++;
6242 }
6243 counter++;
6244 return 5 + local;
6245 }
6246 assertOptThrowsWith(25, f);
6247 assertEquals(4, counter);
6248
6249 // Variant flags: [tryReturns, tryThrows, doCatch, catchReturns,
6250 // catchWithLocal, doFinally, finallyReturns]
6251
6252 counter = 0;
6253 var f = function() {
6254 var local = 3;
6255 try {
6256 counter++;
6257 return increaseAndThrow42();
6258 return increaseAndReturn15();
6259 counter++;
6260 } catch (ex) {
6261 counter++;
6262 return 2 + local;
6263 counter++;
6264 } finally {
6265 counter++;
6266 return 3 + local;
6267 counter++;
6268 }
6269 counter++;
6270 }
6271 assertOptResultEquals(6, f);
6272 assertEquals(4, counter);
6273
6274 // Variant flags: [tryReturns, tryThrows, doCatch, catchReturns,
6275 // catchWithLocal, doFinally, finallyReturns, endReturnLocal]
6276
6277 counter = 0;
6278 var f = function() {
6279 var local = 3;
6280 try {
6281 counter++;
6282 return increaseAndThrow42();
6283 return increaseAndReturn15();
6284 counter++;
6285 } catch (ex) {
6286 counter++;
6287 return 2 + local;
6288 counter++;
6289 } finally {
6290 counter++;
6291 return 3 + local;
6292 counter++;
6293 }
6294 counter++;
6295 return 5 + local;
6296 }
6297 assertOptResultEquals(6, f);
6298 assertEquals(4, counter);
6299
6300 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doFinally]
6301
6302 counter = 0;
6303 var f = function() {
6304 var local = 3;
6305 try {
6306 counter++;
6307 local += increaseAndThrow42();
6308 local += increaseAndReturn15();
6309 counter++;
6310 } finally {
6311 counter++;
6312 local += 2;
6313 counter++;
6314 }
6315 counter++;
6316 }
6317 assertOptThrowsWith(42, f);
6318 assertEquals(4, counter);
6319
6320 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doFinally,
6321 // endReturnLocal]
6322
6323 counter = 0;
6324 var f = function() {
6325 var local = 3;
6326 try {
6327 counter++;
6328 local += increaseAndThrow42();
6329 local += increaseAndReturn15();
6330 counter++;
6331 } finally {
6332 counter++;
6333 local += 2;
6334 counter++;
6335 }
6336 counter++;
6337 return 5 + local;
6338 }
6339 assertOptThrowsWith(42, f);
6340 assertEquals(4, counter);
6341
6342 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doFinally,
6343 // finallyThrows]
6344
6345 counter = 0;
6346 var f = function() {
6347 var local = 3;
6348 try {
6349 counter++;
6350 local += increaseAndThrow42();
6351 local += increaseAndReturn15();
6352 counter++;
6353 } finally {
6354 counter++;
6355 throw 25;
6356 counter++;
6357 }
6358 counter++;
6359 }
6360 assertOptThrowsWith(25, f);
6361 assertEquals(3, counter);
6362
6363 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doFinally,
6364 // finallyThrows, endReturnLocal]
6365
6366 counter = 0;
6367 var f = function() {
6368 var local = 3;
6369 try {
6370 counter++;
6371 local += increaseAndThrow42();
6372 local += increaseAndReturn15();
6373 counter++;
6374 } finally {
6375 counter++;
6376 throw 25;
6377 counter++;
6378 }
6379 counter++;
6380 return 5 + local;
6381 }
6382 assertOptThrowsWith(25, f);
6383 assertEquals(3, counter);
6384
6385 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doFinally,
6386 // finallyReturns]
6387
6388 counter = 0;
6389 var f = function() {
6390 var local = 3;
6391 try {
6392 counter++;
6393 local += increaseAndThrow42();
6394 local += increaseAndReturn15();
6395 counter++;
6396 } finally {
6397 counter++;
6398 return 3 + local;
6399 counter++;
6400 }
6401 counter++;
6402 }
6403 assertOptResultEquals(6, f);
6404 assertEquals(3, counter);
6405
6406 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doFinally,
6407 // finallyReturns, endReturnLocal]
6408
6409 counter = 0;
6410 var f = function() {
6411 var local = 3;
6412 try {
6413 counter++;
6414 local += increaseAndThrow42();
6415 local += increaseAndReturn15();
6416 counter++;
6417 } finally {
6418 counter++;
6419 return 3 + local;
6420 counter++;
6421 }
6422 counter++;
6423 return 5 + local;
6424 }
6425 assertOptResultEquals(6, f);
6426 assertEquals(3, counter);
6427
6428 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch]
6429
6430 counter = 0;
6431 var f = function() {
6432 var local = 3;
6433 try {
6434 counter++;
6435 local += increaseAndThrow42();
6436 local += increaseAndReturn15();
6437 counter++;
6438 } catch (ex) {
6439 counter++;
6440 counter++;
6441 }
6442 counter++;
6443 }
6444 assertOptResultEquals(undefined, f);
6445 assertEquals(5, counter);
6446
6447 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6448 // endReturnLocal]
6449
6450 counter = 0;
6451 var f = function() {
6452 var local = 3;
6453 try {
6454 counter++;
6455 local += increaseAndThrow42();
6456 local += increaseAndReturn15();
6457 counter++;
6458 } catch (ex) {
6459 counter++;
6460 counter++;
6461 }
6462 counter++;
6463 return 5 + local;
6464 }
6465 assertOptResultEquals(8, f);
6466 assertEquals(5, counter);
6467
6468 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6469 // doFinally]
6470
6471 counter = 0;
6472 var f = function() {
6473 var local = 3;
6474 try {
6475 counter++;
6476 local += increaseAndThrow42();
6477 local += increaseAndReturn15();
6478 counter++;
6479 } catch (ex) {
6480 counter++;
6481 counter++;
6482 } finally {
6483 counter++;
6484 local += 2;
6485 counter++;
6486 }
6487 counter++;
6488 }
6489 assertOptResultEquals(undefined, f);
6490 assertEquals(7, counter);
6491
6492 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6493 // doFinally, endReturnLocal]
6494
6495 counter = 0;
6496 var f = function() {
6497 var local = 3;
6498 try {
6499 counter++;
6500 local += increaseAndThrow42();
6501 local += increaseAndReturn15();
6502 counter++;
6503 } catch (ex) {
6504 counter++;
6505 counter++;
6506 } finally {
6507 counter++;
6508 local += 2;
6509 counter++;
6510 }
6511 counter++;
6512 return 5 + local;
6513 }
6514 assertOptResultEquals(10, f);
6515 assertEquals(7, counter);
6516
6517 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6518 // doFinally, finallyThrows]
6519
6520 counter = 0;
6521 var f = function() {
6522 var local = 3;
6523 try {
6524 counter++;
6525 local += increaseAndThrow42();
6526 local += increaseAndReturn15();
6527 counter++;
6528 } catch (ex) {
6529 counter++;
6530 counter++;
6531 } finally {
6532 counter++;
6533 throw 25;
6534 counter++;
6535 }
6536 counter++;
6537 }
6538 assertOptThrowsWith(25, f);
6539 assertEquals(5, counter);
6540
6541 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6542 // doFinally, finallyThrows, endReturnLocal]
6543
6544 counter = 0;
6545 var f = function() {
6546 var local = 3;
6547 try {
6548 counter++;
6549 local += increaseAndThrow42();
6550 local += increaseAndReturn15();
6551 counter++;
6552 } catch (ex) {
6553 counter++;
6554 counter++;
6555 } finally {
6556 counter++;
6557 throw 25;
6558 counter++;
6559 }
6560 counter++;
6561 return 5 + local;
6562 }
6563 assertOptThrowsWith(25, f);
6564 assertEquals(5, counter);
6565
6566 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6567 // doFinally, finallyReturns]
6568
6569 counter = 0;
6570 var f = function() {
6571 var local = 3;
6572 try {
6573 counter++;
6574 local += increaseAndThrow42();
6575 local += increaseAndReturn15();
6576 counter++;
6577 } catch (ex) {
6578 counter++;
6579 counter++;
6580 } finally {
6581 counter++;
6582 return 3 + local;
6583 counter++;
6584 }
6585 counter++;
6586 }
6587 assertOptResultEquals(6, f);
6588 assertEquals(5, counter);
6589
6590 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6591 // doFinally, finallyReturns, endReturnLocal]
6592
6593 counter = 0;
6594 var f = function() {
6595 var local = 3;
6596 try {
6597 counter++;
6598 local += increaseAndThrow42();
6599 local += increaseAndReturn15();
6600 counter++;
6601 } catch (ex) {
6602 counter++;
6603 counter++;
6604 } finally {
6605 counter++;
6606 return 3 + local;
6607 counter++;
6608 }
6609 counter++;
6610 return 5 + local;
6611 }
6612 assertOptResultEquals(6, f);
6613 assertEquals(5, counter);
6614
6615 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6616 // catchThrows]
6617
6618 counter = 0;
6619 var f = function() {
6620 var local = 3;
6621 try {
6622 counter++;
6623 local += increaseAndThrow42();
6624 local += increaseAndReturn15();
6625 counter++;
6626 } catch (ex) {
6627 counter++;
6628 throw 2 + ex;
6629 counter++;
6630 }
6631 counter++;
6632 }
6633 assertOptThrowsWith(44, f);
6634 assertEquals(3, counter);
6635
6636 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6637 // catchThrows, endReturnLocal]
6638
6639 counter = 0;
6640 var f = function() {
6641 var local = 3;
6642 try {
6643 counter++;
6644 local += increaseAndThrow42();
6645 local += increaseAndReturn15();
6646 counter++;
6647 } catch (ex) {
6648 counter++;
6649 throw 2 + ex;
6650 counter++;
6651 }
6652 counter++;
6653 return 5 + local;
6654 }
6655 assertOptThrowsWith(44, f);
6656 assertEquals(3, counter);
6657
6658 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6659 // catchThrows, doFinally]
6660
6661 counter = 0;
6662 var f = function() {
6663 var local = 3;
6664 try {
6665 counter++;
6666 local += increaseAndThrow42();
6667 local += increaseAndReturn15();
6668 counter++;
6669 } catch (ex) {
6670 counter++;
6671 throw 2 + ex;
6672 counter++;
6673 } finally {
6674 counter++;
6675 local += 2;
6676 counter++;
6677 }
6678 counter++;
6679 }
6680 assertOptThrowsWith(44, f);
6681 assertEquals(5, counter);
6682
6683 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6684 // catchThrows, doFinally, endReturnLocal]
6685
6686 counter = 0;
6687 var f = function() {
6688 var local = 3;
6689 try {
6690 counter++;
6691 local += increaseAndThrow42();
6692 local += increaseAndReturn15();
6693 counter++;
6694 } catch (ex) {
6695 counter++;
6696 throw 2 + ex;
6697 counter++;
6698 } finally {
6699 counter++;
6700 local += 2;
6701 counter++;
6702 }
6703 counter++;
6704 return 5 + local;
6705 }
6706 assertOptThrowsWith(44, f);
6707 assertEquals(5, counter);
6708
6709 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6710 // catchThrows, doFinally, finallyThrows]
6711
6712 counter = 0;
6713 var f = function() {
6714 var local = 3;
6715 try {
6716 counter++;
6717 local += increaseAndThrow42();
6718 local += increaseAndReturn15();
6719 counter++;
6720 } catch (ex) {
6721 counter++;
6722 throw 2 + ex;
6723 counter++;
6724 } finally {
6725 counter++;
6726 throw 25;
6727 counter++;
6728 }
6729 counter++;
6730 }
6731 assertOptThrowsWith(25, f);
6732 assertEquals(4, counter);
6733
6734 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6735 // catchThrows, doFinally, finallyThrows, endReturnLocal]
6736
6737 counter = 0;
6738 var f = function() {
6739 var local = 3;
6740 try {
6741 counter++;
6742 local += increaseAndThrow42();
6743 local += increaseAndReturn15();
6744 counter++;
6745 } catch (ex) {
6746 counter++;
6747 throw 2 + ex;
6748 counter++;
6749 } finally {
6750 counter++;
6751 throw 25;
6752 counter++;
6753 }
6754 counter++;
6755 return 5 + local;
6756 }
6757 assertOptThrowsWith(25, f);
6758 assertEquals(4, counter);
6759
6760 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6761 // catchThrows, doFinally, finallyReturns]
6762
6763 counter = 0;
6764 var f = function() {
6765 var local = 3;
6766 try {
6767 counter++;
6768 local += increaseAndThrow42();
6769 local += increaseAndReturn15();
6770 counter++;
6771 } catch (ex) {
6772 counter++;
6773 throw 2 + ex;
6774 counter++;
6775 } finally {
6776 counter++;
6777 return 3 + local;
6778 counter++;
6779 }
6780 counter++;
6781 }
6782 assertOptResultEquals(6, f);
6783 assertEquals(4, counter);
6784
6785 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6786 // catchThrows, doFinally, finallyReturns, endReturnLocal]
6787
6788 counter = 0;
6789 var f = function() {
6790 var local = 3;
6791 try {
6792 counter++;
6793 local += increaseAndThrow42();
6794 local += increaseAndReturn15();
6795 counter++;
6796 } catch (ex) {
6797 counter++;
6798 throw 2 + ex;
6799 counter++;
6800 } finally {
6801 counter++;
6802 return 3 + local;
6803 counter++;
6804 }
6805 counter++;
6806 return 5 + local;
6807 }
6808 assertOptResultEquals(6, f);
6809 assertEquals(4, counter);
6810
6811 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6812 // catchWithLocal]
6813
6814 counter = 0;
6815 var f = function() {
6816 var local = 3;
6817 try {
6818 counter++;
6819 local += increaseAndThrow42();
6820 local += increaseAndReturn15();
6821 counter++;
6822 } catch (ex) {
6823 counter++;
6824 local += ex;
6825 counter++;
6826 }
6827 counter++;
6828 }
6829 assertOptResultEquals(undefined, f);
6830 assertEquals(5, counter);
6831
6832 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6833 // catchWithLocal, endReturnLocal]
6834
6835 counter = 0;
6836 var f = function() {
6837 var local = 3;
6838 try {
6839 counter++;
6840 local += increaseAndThrow42();
6841 local += increaseAndReturn15();
6842 counter++;
6843 } catch (ex) {
6844 counter++;
6845 local += ex;
6846 counter++;
6847 }
6848 counter++;
6849 return 5 + local;
6850 }
6851 assertOptResultEquals(50, f);
6852 assertEquals(5, counter);
6853
6854 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6855 // catchWithLocal, doFinally]
6856
6857 counter = 0;
6858 var f = function() {
6859 var local = 3;
6860 try {
6861 counter++;
6862 local += increaseAndThrow42();
6863 local += increaseAndReturn15();
6864 counter++;
6865 } catch (ex) {
6866 counter++;
6867 local += ex;
6868 counter++;
6869 } finally {
6870 counter++;
6871 local += 2;
6872 counter++;
6873 }
6874 counter++;
6875 }
6876 assertOptResultEquals(undefined, f);
6877 assertEquals(7, counter);
6878
6879 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6880 // catchWithLocal, doFinally, endReturnLocal]
6881
6882 counter = 0;
6883 var f = function() {
6884 var local = 3;
6885 try {
6886 counter++;
6887 local += increaseAndThrow42();
6888 local += increaseAndReturn15();
6889 counter++;
6890 } catch (ex) {
6891 counter++;
6892 local += ex;
6893 counter++;
6894 } finally {
6895 counter++;
6896 local += 2;
6897 counter++;
6898 }
6899 counter++;
6900 return 5 + local;
6901 }
6902 assertOptResultEquals(52, f);
6903 assertEquals(7, counter);
6904
6905 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6906 // catchWithLocal, doFinally, finallyThrows]
6907
6908 counter = 0;
6909 var f = function() {
6910 var local = 3;
6911 try {
6912 counter++;
6913 local += increaseAndThrow42();
6914 local += increaseAndReturn15();
6915 counter++;
6916 } catch (ex) {
6917 counter++;
6918 local += ex;
6919 counter++;
6920 } finally {
6921 counter++;
6922 throw 25;
6923 counter++;
6924 }
6925 counter++;
6926 }
6927 assertOptThrowsWith(25, f);
6928 assertEquals(5, counter);
6929
6930 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6931 // catchWithLocal, doFinally, finallyThrows, endReturnLocal]
6932
6933 counter = 0;
6934 var f = function() {
6935 var local = 3;
6936 try {
6937 counter++;
6938 local += increaseAndThrow42();
6939 local += increaseAndReturn15();
6940 counter++;
6941 } catch (ex) {
6942 counter++;
6943 local += ex;
6944 counter++;
6945 } finally {
6946 counter++;
6947 throw 25;
6948 counter++;
6949 }
6950 counter++;
6951 return 5 + local;
6952 }
6953 assertOptThrowsWith(25, f);
6954 assertEquals(5, counter);
6955
6956 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6957 // catchWithLocal, doFinally, finallyReturns]
6958
6959 counter = 0;
6960 var f = function() {
6961 var local = 3;
6962 try {
6963 counter++;
6964 local += increaseAndThrow42();
6965 local += increaseAndReturn15();
6966 counter++;
6967 } catch (ex) {
6968 counter++;
6969 local += ex;
6970 counter++;
6971 } finally {
6972 counter++;
6973 return 3 + local;
6974 counter++;
6975 }
6976 counter++;
6977 }
6978 assertOptResultEquals(48, f);
6979 assertEquals(5, counter);
6980
6981 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
6982 // catchWithLocal, doFinally, finallyReturns, endReturnLocal]
6983
6984 counter = 0;
6985 var f = function() {
6986 var local = 3;
6987 try {
6988 counter++;
6989 local += increaseAndThrow42();
6990 local += increaseAndReturn15();
6991 counter++;
6992 } catch (ex) {
6993 counter++;
6994 local += ex;
6995 counter++;
6996 } finally {
6997 counter++;
6998 return 3 + local;
6999 counter++;
7000 }
7001 counter++;
7002 return 5 + local;
7003 }
7004 assertOptResultEquals(48, f);
7005 assertEquals(5, counter);
7006
7007 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7008 // catchWithLocal, catchThrows]
7009
7010 counter = 0;
7011 var f = function() {
7012 var local = 3;
7013 try {
7014 counter++;
7015 local += increaseAndThrow42();
7016 local += increaseAndReturn15();
7017 counter++;
7018 } catch (ex) {
7019 counter++;
7020 throw 2 + ex;
7021 counter++;
7022 }
7023 counter++;
7024 }
7025 assertOptThrowsWith(44, f);
7026 assertEquals(3, counter);
7027
7028 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7029 // catchWithLocal, catchThrows, endReturnLocal]
7030
7031 counter = 0;
7032 var f = function() {
7033 var local = 3;
7034 try {
7035 counter++;
7036 local += increaseAndThrow42();
7037 local += increaseAndReturn15();
7038 counter++;
7039 } catch (ex) {
7040 counter++;
7041 throw 2 + ex;
7042 counter++;
7043 }
7044 counter++;
7045 return 5 + local;
7046 }
7047 assertOptThrowsWith(44, f);
7048 assertEquals(3, counter);
7049
7050 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7051 // catchWithLocal, catchThrows, doFinally]
7052
7053 counter = 0;
7054 var f = function() {
7055 var local = 3;
7056 try {
7057 counter++;
7058 local += increaseAndThrow42();
7059 local += increaseAndReturn15();
7060 counter++;
7061 } catch (ex) {
7062 counter++;
7063 throw 2 + ex;
7064 counter++;
7065 } finally {
7066 counter++;
7067 local += 2;
7068 counter++;
7069 }
7070 counter++;
7071 }
7072 assertOptThrowsWith(44, f);
7073 assertEquals(5, counter);
7074
7075 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7076 // catchWithLocal, catchThrows, doFinally, endReturnLocal]
7077
7078 counter = 0;
7079 var f = function() {
7080 var local = 3;
7081 try {
7082 counter++;
7083 local += increaseAndThrow42();
7084 local += increaseAndReturn15();
7085 counter++;
7086 } catch (ex) {
7087 counter++;
7088 throw 2 + ex;
7089 counter++;
7090 } finally {
7091 counter++;
7092 local += 2;
7093 counter++;
7094 }
7095 counter++;
7096 return 5 + local;
7097 }
7098 assertOptThrowsWith(44, f);
7099 assertEquals(5, counter);
7100
7101 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7102 // catchWithLocal, catchThrows, doFinally, finallyThrows]
7103
7104 counter = 0;
7105 var f = function() {
7106 var local = 3;
7107 try {
7108 counter++;
7109 local += increaseAndThrow42();
7110 local += increaseAndReturn15();
7111 counter++;
7112 } catch (ex) {
7113 counter++;
7114 throw 2 + ex;
7115 counter++;
7116 } finally {
7117 counter++;
7118 throw 25;
7119 counter++;
7120 }
7121 counter++;
7122 }
7123 assertOptThrowsWith(25, f);
7124 assertEquals(4, counter);
7125
7126 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7127 // catchWithLocal, catchThrows, doFinally, finallyThrows,
7128 // endReturnLocal]
7129
7130 counter = 0;
7131 var f = function() {
7132 var local = 3;
7133 try {
7134 counter++;
7135 local += increaseAndThrow42();
7136 local += increaseAndReturn15();
7137 counter++;
7138 } catch (ex) {
7139 counter++;
7140 throw 2 + ex;
7141 counter++;
7142 } finally {
7143 counter++;
7144 throw 25;
7145 counter++;
7146 }
7147 counter++;
7148 return 5 + local;
7149 }
7150 assertOptThrowsWith(25, f);
7151 assertEquals(4, counter);
7152
7153 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7154 // catchWithLocal, catchThrows, doFinally, finallyReturns]
7155
7156 counter = 0;
7157 var f = function() {
7158 var local = 3;
7159 try {
7160 counter++;
7161 local += increaseAndThrow42();
7162 local += increaseAndReturn15();
7163 counter++;
7164 } catch (ex) {
7165 counter++;
7166 throw 2 + ex;
7167 counter++;
7168 } finally {
7169 counter++;
7170 return 3 + local;
7171 counter++;
7172 }
7173 counter++;
7174 }
7175 assertOptResultEquals(6, f);
7176 assertEquals(4, counter);
7177
7178 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7179 // catchWithLocal, catchThrows, doFinally, finallyReturns,
7180 // endReturnLocal]
7181
7182 counter = 0;
7183 var f = function() {
7184 var local = 3;
7185 try {
7186 counter++;
7187 local += increaseAndThrow42();
7188 local += increaseAndReturn15();
7189 counter++;
7190 } catch (ex) {
7191 counter++;
7192 throw 2 + ex;
7193 counter++;
7194 } finally {
7195 counter++;
7196 return 3 + local;
7197 counter++;
7198 }
7199 counter++;
7200 return 5 + local;
7201 }
7202 assertOptResultEquals(6, f);
7203 assertEquals(4, counter);
7204
7205 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7206 // catchReturns]
7207
7208 counter = 0;
7209 var f = function() {
7210 var local = 3;
7211 try {
7212 counter++;
7213 local += increaseAndThrow42();
7214 local += increaseAndReturn15();
7215 counter++;
7216 } catch (ex) {
7217 counter++;
7218 return 2 + ex;
7219 counter++;
7220 }
7221 counter++;
7222 }
7223 assertOptResultEquals(44, f);
7224 assertEquals(3, counter);
7225
7226 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7227 // catchReturns, endReturnLocal]
7228
7229 counter = 0;
7230 var f = function() {
7231 var local = 3;
7232 try {
7233 counter++;
7234 local += increaseAndThrow42();
7235 local += increaseAndReturn15();
7236 counter++;
7237 } catch (ex) {
7238 counter++;
7239 return 2 + ex;
7240 counter++;
7241 }
7242 counter++;
7243 return 5 + local;
7244 }
7245 assertOptResultEquals(44, f);
7246 assertEquals(3, counter);
7247
7248 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7249 // catchReturns, doFinally]
7250
7251 counter = 0;
7252 var f = function() {
7253 var local = 3;
7254 try {
7255 counter++;
7256 local += increaseAndThrow42();
7257 local += increaseAndReturn15();
7258 counter++;
7259 } catch (ex) {
7260 counter++;
7261 return 2 + ex;
7262 counter++;
7263 } finally {
7264 counter++;
7265 local += 2;
7266 counter++;
7267 }
7268 counter++;
7269 }
7270 assertOptResultEquals(44, f);
7271 assertEquals(5, counter);
7272
7273 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7274 // catchReturns, doFinally, endReturnLocal]
7275
7276 counter = 0;
7277 var f = function() {
7278 var local = 3;
7279 try {
7280 counter++;
7281 local += increaseAndThrow42();
7282 local += increaseAndReturn15();
7283 counter++;
7284 } catch (ex) {
7285 counter++;
7286 return 2 + ex;
7287 counter++;
7288 } finally {
7289 counter++;
7290 local += 2;
7291 counter++;
7292 }
7293 counter++;
7294 return 5 + local;
7295 }
7296 assertOptResultEquals(44, f);
7297 assertEquals(5, counter);
7298
7299 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7300 // catchReturns, doFinally, finallyThrows]
7301
7302 counter = 0;
7303 var f = function() {
7304 var local = 3;
7305 try {
7306 counter++;
7307 local += increaseAndThrow42();
7308 local += increaseAndReturn15();
7309 counter++;
7310 } catch (ex) {
7311 counter++;
7312 return 2 + ex;
7313 counter++;
7314 } finally {
7315 counter++;
7316 throw 25;
7317 counter++;
7318 }
7319 counter++;
7320 }
7321 assertOptThrowsWith(25, f);
7322 assertEquals(4, counter);
7323
7324 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7325 // catchReturns, doFinally, finallyThrows, endReturnLocal]
7326
7327 counter = 0;
7328 var f = function() {
7329 var local = 3;
7330 try {
7331 counter++;
7332 local += increaseAndThrow42();
7333 local += increaseAndReturn15();
7334 counter++;
7335 } catch (ex) {
7336 counter++;
7337 return 2 + ex;
7338 counter++;
7339 } finally {
7340 counter++;
7341 throw 25;
7342 counter++;
7343 }
7344 counter++;
7345 return 5 + local;
7346 }
7347 assertOptThrowsWith(25, f);
7348 assertEquals(4, counter);
7349
7350 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7351 // catchReturns, doFinally, finallyReturns]
7352
7353 counter = 0;
7354 var f = function() {
7355 var local = 3;
7356 try {
7357 counter++;
7358 local += increaseAndThrow42();
7359 local += increaseAndReturn15();
7360 counter++;
7361 } catch (ex) {
7362 counter++;
7363 return 2 + ex;
7364 counter++;
7365 } finally {
7366 counter++;
7367 return 3 + local;
7368 counter++;
7369 }
7370 counter++;
7371 }
7372 assertOptResultEquals(6, f);
7373 assertEquals(4, counter);
7374
7375 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7376 // catchReturns, doFinally, finallyReturns, endReturnLocal]
7377
7378 counter = 0;
7379 var f = function() {
7380 var local = 3;
7381 try {
7382 counter++;
7383 local += increaseAndThrow42();
7384 local += increaseAndReturn15();
7385 counter++;
7386 } catch (ex) {
7387 counter++;
7388 return 2 + ex;
7389 counter++;
7390 } finally {
7391 counter++;
7392 return 3 + local;
7393 counter++;
7394 }
7395 counter++;
7396 return 5 + local;
7397 }
7398 assertOptResultEquals(6, f);
7399 assertEquals(4, counter);
7400
7401 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7402 // catchReturns, catchWithLocal]
7403
7404 counter = 0;
7405 var f = function() {
7406 var local = 3;
7407 try {
7408 counter++;
7409 local += increaseAndThrow42();
7410 local += increaseAndReturn15();
7411 counter++;
7412 } catch (ex) {
7413 counter++;
7414 return 2 + local;
7415 counter++;
7416 }
7417 counter++;
7418 }
7419 assertOptResultEquals(5, f);
7420 assertEquals(3, counter);
7421
7422 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7423 // catchReturns, catchWithLocal, endReturnLocal]
7424
7425 counter = 0;
7426 var f = function() {
7427 var local = 3;
7428 try {
7429 counter++;
7430 local += increaseAndThrow42();
7431 local += increaseAndReturn15();
7432 counter++;
7433 } catch (ex) {
7434 counter++;
7435 return 2 + local;
7436 counter++;
7437 }
7438 counter++;
7439 return 5 + local;
7440 }
7441 assertOptResultEquals(5, f);
7442 assertEquals(3, counter);
7443
7444 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7445 // catchReturns, catchWithLocal, doFinally]
7446
7447 counter = 0;
7448 var f = function() {
7449 var local = 3;
7450 try {
7451 counter++;
7452 local += increaseAndThrow42();
7453 local += increaseAndReturn15();
7454 counter++;
7455 } catch (ex) {
7456 counter++;
7457 return 2 + local;
7458 counter++;
7459 } finally {
7460 counter++;
7461 local += 2;
7462 counter++;
7463 }
7464 counter++;
7465 }
7466 assertOptResultEquals(5, f);
7467 assertEquals(5, counter);
7468
7469 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7470 // catchReturns, catchWithLocal, doFinally, endReturnLocal]
7471
7472 counter = 0;
7473 var f = function() {
7474 var local = 3;
7475 try {
7476 counter++;
7477 local += increaseAndThrow42();
7478 local += increaseAndReturn15();
7479 counter++;
7480 } catch (ex) {
7481 counter++;
7482 return 2 + local;
7483 counter++;
7484 } finally {
7485 counter++;
7486 local += 2;
7487 counter++;
7488 }
7489 counter++;
7490 return 5 + local;
7491 }
7492 assertOptResultEquals(5, f);
7493 assertEquals(5, counter);
7494
7495 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7496 // catchReturns, catchWithLocal, doFinally, finallyThrows]
7497
7498 counter = 0;
7499 var f = function() {
7500 var local = 3;
7501 try {
7502 counter++;
7503 local += increaseAndThrow42();
7504 local += increaseAndReturn15();
7505 counter++;
7506 } catch (ex) {
7507 counter++;
7508 return 2 + local;
7509 counter++;
7510 } finally {
7511 counter++;
7512 throw 25;
7513 counter++;
7514 }
7515 counter++;
7516 }
7517 assertOptThrowsWith(25, f);
7518 assertEquals(4, counter);
7519
7520 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7521 // catchReturns, catchWithLocal, doFinally, finallyThrows,
7522 // endReturnLocal]
7523
7524 counter = 0;
7525 var f = function() {
7526 var local = 3;
7527 try {
7528 counter++;
7529 local += increaseAndThrow42();
7530 local += increaseAndReturn15();
7531 counter++;
7532 } catch (ex) {
7533 counter++;
7534 return 2 + local;
7535 counter++;
7536 } finally {
7537 counter++;
7538 throw 25;
7539 counter++;
7540 }
7541 counter++;
7542 return 5 + local;
7543 }
7544 assertOptThrowsWith(25, f);
7545 assertEquals(4, counter);
7546
7547 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7548 // catchReturns, catchWithLocal, doFinally, finallyReturns]
7549
7550 counter = 0;
7551 var f = function() {
7552 var local = 3;
7553 try {
7554 counter++;
7555 local += increaseAndThrow42();
7556 local += increaseAndReturn15();
7557 counter++;
7558 } catch (ex) {
7559 counter++;
7560 return 2 + local;
7561 counter++;
7562 } finally {
7563 counter++;
7564 return 3 + local;
7565 counter++;
7566 }
7567 counter++;
7568 }
7569 assertOptResultEquals(6, f);
7570 assertEquals(4, counter);
7571
7572 // Variant flags: [tryReturns, tryThrows, tryResultToLocal, doCatch,
7573 // catchReturns, catchWithLocal, doFinally, finallyReturns,
7574 // endReturnLocal]
7575
7576 counter = 0;
7577 var f = function() {
7578 var local = 3;
7579 try {
7580 counter++;
7581 local += increaseAndThrow42();
7582 local += increaseAndReturn15();
7583 counter++;
7584 } catch (ex) {
7585 counter++;
7586 return 2 + local;
7587 counter++;
7588 } finally {
7589 counter++;
7590 return 3 + local;
7591 counter++;
7592 }
7593 counter++;
7594 return 5 + local;
7595 }
7596 assertOptResultEquals(6, f);
7597 assertEquals(4, counter);
7598
7599 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doFinally]
7600
7601 counter = 0;
7602 var f = function() {
7603 var local = 3;
7604 try {
7605 counter++;
7606 return increaseAndReturn15();
7607 return increaseAndThrow42();
7608 counter++;
7609 } finally {
7610 counter++;
7611 local += 2;
7612 counter++;
7613 }
7614 counter++;
7615 }
7616 assertOptResultEquals(15, f);
7617 assertEquals(4, counter);
7618
7619 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doFinally,
7620 // endReturnLocal]
7621
7622 counter = 0;
7623 var f = function() {
7624 var local = 3;
7625 try {
7626 counter++;
7627 return increaseAndReturn15();
7628 return increaseAndThrow42();
7629 counter++;
7630 } finally {
7631 counter++;
7632 local += 2;
7633 counter++;
7634 }
7635 counter++;
7636 return 5 + local;
7637 }
7638 assertOptResultEquals(15, f);
7639 assertEquals(4, counter);
7640
7641 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doFinally,
7642 // finallyThrows]
7643
7644 counter = 0;
7645 var f = function() {
7646 var local = 3;
7647 try {
7648 counter++;
7649 return increaseAndReturn15();
7650 return increaseAndThrow42();
7651 counter++;
7652 } finally {
7653 counter++;
7654 throw 25;
7655 counter++;
7656 }
7657 counter++;
7658 }
7659 assertOptThrowsWith(25, f);
7660 assertEquals(3, counter);
7661
7662 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doFinally,
7663 // finallyThrows, endReturnLocal]
7664
7665 counter = 0;
7666 var f = function() {
7667 var local = 3;
7668 try {
7669 counter++;
7670 return increaseAndReturn15();
7671 return increaseAndThrow42();
7672 counter++;
7673 } finally {
7674 counter++;
7675 throw 25;
7676 counter++;
7677 }
7678 counter++;
7679 return 5 + local;
7680 }
7681 assertOptThrowsWith(25, f);
7682 assertEquals(3, counter);
7683
7684 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doFinally,
7685 // finallyReturns]
7686
7687 counter = 0;
7688 var f = function() {
7689 var local = 3;
7690 try {
7691 counter++;
7692 return increaseAndReturn15();
7693 return increaseAndThrow42();
7694 counter++;
7695 } finally {
7696 counter++;
7697 return 3 + local;
7698 counter++;
7699 }
7700 counter++;
7701 }
7702 assertOptResultEquals(6, f);
7703 assertEquals(3, counter);
7704
7705 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doFinally,
7706 // finallyReturns, endReturnLocal]
7707
7708 counter = 0;
7709 var f = function() {
7710 var local = 3;
7711 try {
7712 counter++;
7713 return increaseAndReturn15();
7714 return increaseAndThrow42();
7715 counter++;
7716 } finally {
7717 counter++;
7718 return 3 + local;
7719 counter++;
7720 }
7721 counter++;
7722 return 5 + local;
7723 }
7724 assertOptResultEquals(6, f);
7725 assertEquals(3, counter);
7726
7727 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch]
7728
7729 counter = 0;
7730 var f = function() {
7731 var local = 3;
7732 try {
7733 counter++;
7734 return increaseAndReturn15();
7735 return increaseAndThrow42();
7736 counter++;
7737 } catch (ex) {
7738 counter++;
7739 counter++;
7740 }
7741 counter++;
7742 }
7743 assertOptResultEquals(15, f);
7744 assertEquals(2, counter);
7745
7746 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
7747 // endReturnLocal]
7748
7749 counter = 0;
7750 var f = function() {
7751 var local = 3;
7752 try {
7753 counter++;
7754 return increaseAndReturn15();
7755 return increaseAndThrow42();
7756 counter++;
7757 } catch (ex) {
7758 counter++;
7759 counter++;
7760 }
7761 counter++;
7762 return 5 + local;
7763 }
7764 assertOptResultEquals(15, f);
7765 assertEquals(2, counter);
7766
7767 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
7768 // doFinally]
7769
7770 counter = 0;
7771 var f = function() {
7772 var local = 3;
7773 try {
7774 counter++;
7775 return increaseAndReturn15();
7776 return increaseAndThrow42();
7777 counter++;
7778 } catch (ex) {
7779 counter++;
7780 counter++;
7781 } finally {
7782 counter++;
7783 local += 2;
7784 counter++;
7785 }
7786 counter++;
7787 }
7788 assertOptResultEquals(15, f);
7789 assertEquals(4, counter);
7790
7791 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
7792 // doFinally, endReturnLocal]
7793
7794 counter = 0;
7795 var f = function() {
7796 var local = 3;
7797 try {
7798 counter++;
7799 return increaseAndReturn15();
7800 return increaseAndThrow42();
7801 counter++;
7802 } catch (ex) {
7803 counter++;
7804 counter++;
7805 } finally {
7806 counter++;
7807 local += 2;
7808 counter++;
7809 }
7810 counter++;
7811 return 5 + local;
7812 }
7813 assertOptResultEquals(15, f);
7814 assertEquals(4, counter);
7815
7816 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
7817 // doFinally, finallyThrows]
7818
7819 counter = 0;
7820 var f = function() {
7821 var local = 3;
7822 try {
7823 counter++;
7824 return increaseAndReturn15();
7825 return increaseAndThrow42();
7826 counter++;
7827 } catch (ex) {
7828 counter++;
7829 counter++;
7830 } finally {
7831 counter++;
7832 throw 25;
7833 counter++;
7834 }
7835 counter++;
7836 }
7837 assertOptThrowsWith(25, f);
7838 assertEquals(3, counter);
7839
7840 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
7841 // doFinally, finallyThrows, endReturnLocal]
7842
7843 counter = 0;
7844 var f = function() {
7845 var local = 3;
7846 try {
7847 counter++;
7848 return increaseAndReturn15();
7849 return increaseAndThrow42();
7850 counter++;
7851 } catch (ex) {
7852 counter++;
7853 counter++;
7854 } finally {
7855 counter++;
7856 throw 25;
7857 counter++;
7858 }
7859 counter++;
7860 return 5 + local;
7861 }
7862 assertOptThrowsWith(25, f);
7863 assertEquals(3, counter);
7864
7865 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
7866 // doFinally, finallyReturns]
7867
7868 counter = 0;
7869 var f = function() {
7870 var local = 3;
7871 try {
7872 counter++;
7873 return increaseAndReturn15();
7874 return increaseAndThrow42();
7875 counter++;
7876 } catch (ex) {
7877 counter++;
7878 counter++;
7879 } finally {
7880 counter++;
7881 return 3 + local;
7882 counter++;
7883 }
7884 counter++;
7885 }
7886 assertOptResultEquals(6, f);
7887 assertEquals(3, counter);
7888
7889 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
7890 // doFinally, finallyReturns, endReturnLocal]
7891
7892 counter = 0;
7893 var f = function() {
7894 var local = 3;
7895 try {
7896 counter++;
7897 return increaseAndReturn15();
7898 return increaseAndThrow42();
7899 counter++;
7900 } catch (ex) {
7901 counter++;
7902 counter++;
7903 } finally {
7904 counter++;
7905 return 3 + local;
7906 counter++;
7907 }
7908 counter++;
7909 return 5 + local;
7910 }
7911 assertOptResultEquals(6, f);
7912 assertEquals(3, counter);
7913
7914 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
7915 // catchThrows]
7916
7917 counter = 0;
7918 var f = function() {
7919 var local = 3;
7920 try {
7921 counter++;
7922 return increaseAndReturn15();
7923 return increaseAndThrow42();
7924 counter++;
7925 } catch (ex) {
7926 counter++;
7927 throw 2 + ex;
7928 counter++;
7929 }
7930 counter++;
7931 }
7932 assertOptResultEquals(15, f);
7933 assertEquals(2, counter);
7934
7935 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
7936 // catchThrows, endReturnLocal]
7937
7938 counter = 0;
7939 var f = function() {
7940 var local = 3;
7941 try {
7942 counter++;
7943 return increaseAndReturn15();
7944 return increaseAndThrow42();
7945 counter++;
7946 } catch (ex) {
7947 counter++;
7948 throw 2 + ex;
7949 counter++;
7950 }
7951 counter++;
7952 return 5 + local;
7953 }
7954 assertOptResultEquals(15, f);
7955 assertEquals(2, counter);
7956
7957 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
7958 // catchThrows, doFinally]
7959
7960 counter = 0;
7961 var f = function() {
7962 var local = 3;
7963 try {
7964 counter++;
7965 return increaseAndReturn15();
7966 return increaseAndThrow42();
7967 counter++;
7968 } catch (ex) {
7969 counter++;
7970 throw 2 + ex;
7971 counter++;
7972 } finally {
7973 counter++;
7974 local += 2;
7975 counter++;
7976 }
7977 counter++;
7978 }
7979 assertOptResultEquals(15, f);
7980 assertEquals(4, counter);
7981
7982 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
7983 // catchThrows, doFinally, endReturnLocal]
7984
7985 counter = 0;
7986 var f = function() {
7987 var local = 3;
7988 try {
7989 counter++;
7990 return increaseAndReturn15();
7991 return increaseAndThrow42();
7992 counter++;
7993 } catch (ex) {
7994 counter++;
7995 throw 2 + ex;
7996 counter++;
7997 } finally {
7998 counter++;
7999 local += 2;
8000 counter++;
8001 }
8002 counter++;
8003 return 5 + local;
8004 }
8005 assertOptResultEquals(15, f);
8006 assertEquals(4, counter);
8007
8008 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8009 // catchThrows, doFinally, finallyThrows]
8010
8011 counter = 0;
8012 var f = function() {
8013 var local = 3;
8014 try {
8015 counter++;
8016 return increaseAndReturn15();
8017 return increaseAndThrow42();
8018 counter++;
8019 } catch (ex) {
8020 counter++;
8021 throw 2 + ex;
8022 counter++;
8023 } finally {
8024 counter++;
8025 throw 25;
8026 counter++;
8027 }
8028 counter++;
8029 }
8030 assertOptThrowsWith(25, f);
8031 assertEquals(3, counter);
8032
8033 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8034 // catchThrows, doFinally, finallyThrows, endReturnLocal]
8035
8036 counter = 0;
8037 var f = function() {
8038 var local = 3;
8039 try {
8040 counter++;
8041 return increaseAndReturn15();
8042 return increaseAndThrow42();
8043 counter++;
8044 } catch (ex) {
8045 counter++;
8046 throw 2 + ex;
8047 counter++;
8048 } finally {
8049 counter++;
8050 throw 25;
8051 counter++;
8052 }
8053 counter++;
8054 return 5 + local;
8055 }
8056 assertOptThrowsWith(25, f);
8057 assertEquals(3, counter);
8058
8059 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8060 // catchThrows, doFinally, finallyReturns]
8061
8062 counter = 0;
8063 var f = function() {
8064 var local = 3;
8065 try {
8066 counter++;
8067 return increaseAndReturn15();
8068 return increaseAndThrow42();
8069 counter++;
8070 } catch (ex) {
8071 counter++;
8072 throw 2 + ex;
8073 counter++;
8074 } finally {
8075 counter++;
8076 return 3 + local;
8077 counter++;
8078 }
8079 counter++;
8080 }
8081 assertOptResultEquals(6, f);
8082 assertEquals(3, counter);
8083
8084 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8085 // catchThrows, doFinally, finallyReturns, endReturnLocal]
8086
8087 counter = 0;
8088 var f = function() {
8089 var local = 3;
8090 try {
8091 counter++;
8092 return increaseAndReturn15();
8093 return increaseAndThrow42();
8094 counter++;
8095 } catch (ex) {
8096 counter++;
8097 throw 2 + ex;
8098 counter++;
8099 } finally {
8100 counter++;
8101 return 3 + local;
8102 counter++;
8103 }
8104 counter++;
8105 return 5 + local;
8106 }
8107 assertOptResultEquals(6, f);
8108 assertEquals(3, counter);
8109
8110 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8111 // catchWithLocal]
8112
8113 counter = 0;
8114 var f = function() {
8115 var local = 3;
8116 try {
8117 counter++;
8118 return increaseAndReturn15();
8119 return increaseAndThrow42();
8120 counter++;
8121 } catch (ex) {
8122 counter++;
8123 local += ex;
8124 counter++;
8125 }
8126 counter++;
8127 }
8128 assertOptResultEquals(15, f);
8129 assertEquals(2, counter);
8130
8131 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8132 // catchWithLocal, endReturnLocal]
8133
8134 counter = 0;
8135 var f = function() {
8136 var local = 3;
8137 try {
8138 counter++;
8139 return increaseAndReturn15();
8140 return increaseAndThrow42();
8141 counter++;
8142 } catch (ex) {
8143 counter++;
8144 local += ex;
8145 counter++;
8146 }
8147 counter++;
8148 return 5 + local;
8149 }
8150 assertOptResultEquals(15, f);
8151 assertEquals(2, counter);
8152
8153 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8154 // catchWithLocal, doFinally]
8155
8156 counter = 0;
8157 var f = function() {
8158 var local = 3;
8159 try {
8160 counter++;
8161 return increaseAndReturn15();
8162 return increaseAndThrow42();
8163 counter++;
8164 } catch (ex) {
8165 counter++;
8166 local += ex;
8167 counter++;
8168 } finally {
8169 counter++;
8170 local += 2;
8171 counter++;
8172 }
8173 counter++;
8174 }
8175 assertOptResultEquals(15, f);
8176 assertEquals(4, counter);
8177
8178 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8179 // catchWithLocal, doFinally, endReturnLocal]
8180
8181 counter = 0;
8182 var f = function() {
8183 var local = 3;
8184 try {
8185 counter++;
8186 return increaseAndReturn15();
8187 return increaseAndThrow42();
8188 counter++;
8189 } catch (ex) {
8190 counter++;
8191 local += ex;
8192 counter++;
8193 } finally {
8194 counter++;
8195 local += 2;
8196 counter++;
8197 }
8198 counter++;
8199 return 5 + local;
8200 }
8201 assertOptResultEquals(15, f);
8202 assertEquals(4, counter);
8203
8204 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8205 // catchWithLocal, doFinally, finallyThrows]
8206
8207 counter = 0;
8208 var f = function() {
8209 var local = 3;
8210 try {
8211 counter++;
8212 return increaseAndReturn15();
8213 return increaseAndThrow42();
8214 counter++;
8215 } catch (ex) {
8216 counter++;
8217 local += ex;
8218 counter++;
8219 } finally {
8220 counter++;
8221 throw 25;
8222 counter++;
8223 }
8224 counter++;
8225 }
8226 assertOptThrowsWith(25, f);
8227 assertEquals(3, counter);
8228
8229 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8230 // catchWithLocal, doFinally, finallyThrows, endReturnLocal]
8231
8232 counter = 0;
8233 var f = function() {
8234 var local = 3;
8235 try {
8236 counter++;
8237 return increaseAndReturn15();
8238 return increaseAndThrow42();
8239 counter++;
8240 } catch (ex) {
8241 counter++;
8242 local += ex;
8243 counter++;
8244 } finally {
8245 counter++;
8246 throw 25;
8247 counter++;
8248 }
8249 counter++;
8250 return 5 + local;
8251 }
8252 assertOptThrowsWith(25, f);
8253 assertEquals(3, counter);
8254
8255 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8256 // catchWithLocal, doFinally, finallyReturns]
8257
8258 counter = 0;
8259 var f = function() {
8260 var local = 3;
8261 try {
8262 counter++;
8263 return increaseAndReturn15();
8264 return increaseAndThrow42();
8265 counter++;
8266 } catch (ex) {
8267 counter++;
8268 local += ex;
8269 counter++;
8270 } finally {
8271 counter++;
8272 return 3 + local;
8273 counter++;
8274 }
8275 counter++;
8276 }
8277 assertOptResultEquals(6, f);
8278 assertEquals(3, counter);
8279
8280 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8281 // catchWithLocal, doFinally, finallyReturns, endReturnLocal]
8282
8283 counter = 0;
8284 var f = function() {
8285 var local = 3;
8286 try {
8287 counter++;
8288 return increaseAndReturn15();
8289 return increaseAndThrow42();
8290 counter++;
8291 } catch (ex) {
8292 counter++;
8293 local += ex;
8294 counter++;
8295 } finally {
8296 counter++;
8297 return 3 + local;
8298 counter++;
8299 }
8300 counter++;
8301 return 5 + local;
8302 }
8303 assertOptResultEquals(6, f);
8304 assertEquals(3, counter);
8305
8306 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8307 // catchWithLocal, catchThrows]
8308
8309 counter = 0;
8310 var f = function() {
8311 var local = 3;
8312 try {
8313 counter++;
8314 return increaseAndReturn15();
8315 return increaseAndThrow42();
8316 counter++;
8317 } catch (ex) {
8318 counter++;
8319 throw 2 + ex;
8320 counter++;
8321 }
8322 counter++;
8323 }
8324 assertOptResultEquals(15, f);
8325 assertEquals(2, counter);
8326
8327 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8328 // catchWithLocal, catchThrows, endReturnLocal]
8329
8330 counter = 0;
8331 var f = function() {
8332 var local = 3;
8333 try {
8334 counter++;
8335 return increaseAndReturn15();
8336 return increaseAndThrow42();
8337 counter++;
8338 } catch (ex) {
8339 counter++;
8340 throw 2 + ex;
8341 counter++;
8342 }
8343 counter++;
8344 return 5 + local;
8345 }
8346 assertOptResultEquals(15, f);
8347 assertEquals(2, counter);
8348
8349 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8350 // catchWithLocal, catchThrows, doFinally]
8351
8352 counter = 0;
8353 var f = function() {
8354 var local = 3;
8355 try {
8356 counter++;
8357 return increaseAndReturn15();
8358 return increaseAndThrow42();
8359 counter++;
8360 } catch (ex) {
8361 counter++;
8362 throw 2 + ex;
8363 counter++;
8364 } finally {
8365 counter++;
8366 local += 2;
8367 counter++;
8368 }
8369 counter++;
8370 }
8371 assertOptResultEquals(15, f);
8372 assertEquals(4, counter);
8373
8374 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8375 // catchWithLocal, catchThrows, doFinally, endReturnLocal]
8376
8377 counter = 0;
8378 var f = function() {
8379 var local = 3;
8380 try {
8381 counter++;
8382 return increaseAndReturn15();
8383 return increaseAndThrow42();
8384 counter++;
8385 } catch (ex) {
8386 counter++;
8387 throw 2 + ex;
8388 counter++;
8389 } finally {
8390 counter++;
8391 local += 2;
8392 counter++;
8393 }
8394 counter++;
8395 return 5 + local;
8396 }
8397 assertOptResultEquals(15, f);
8398 assertEquals(4, counter);
8399
8400 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8401 // catchWithLocal, catchThrows, doFinally, finallyThrows]
8402
8403 counter = 0;
8404 var f = function() {
8405 var local = 3;
8406 try {
8407 counter++;
8408 return increaseAndReturn15();
8409 return increaseAndThrow42();
8410 counter++;
8411 } catch (ex) {
8412 counter++;
8413 throw 2 + ex;
8414 counter++;
8415 } finally {
8416 counter++;
8417 throw 25;
8418 counter++;
8419 }
8420 counter++;
8421 }
8422 assertOptThrowsWith(25, f);
8423 assertEquals(3, counter);
8424
8425 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8426 // catchWithLocal, catchThrows, doFinally, finallyThrows,
8427 // endReturnLocal]
8428
8429 counter = 0;
8430 var f = function() {
8431 var local = 3;
8432 try {
8433 counter++;
8434 return increaseAndReturn15();
8435 return increaseAndThrow42();
8436 counter++;
8437 } catch (ex) {
8438 counter++;
8439 throw 2 + ex;
8440 counter++;
8441 } finally {
8442 counter++;
8443 throw 25;
8444 counter++;
8445 }
8446 counter++;
8447 return 5 + local;
8448 }
8449 assertOptThrowsWith(25, f);
8450 assertEquals(3, counter);
8451
8452 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8453 // catchWithLocal, catchThrows, doFinally, finallyReturns]
8454
8455 counter = 0;
8456 var f = function() {
8457 var local = 3;
8458 try {
8459 counter++;
8460 return increaseAndReturn15();
8461 return increaseAndThrow42();
8462 counter++;
8463 } catch (ex) {
8464 counter++;
8465 throw 2 + ex;
8466 counter++;
8467 } finally {
8468 counter++;
8469 return 3 + local;
8470 counter++;
8471 }
8472 counter++;
8473 }
8474 assertOptResultEquals(6, f);
8475 assertEquals(3, counter);
8476
8477 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8478 // catchWithLocal, catchThrows, doFinally, finallyReturns,
8479 // endReturnLocal]
8480
8481 counter = 0;
8482 var f = function() {
8483 var local = 3;
8484 try {
8485 counter++;
8486 return increaseAndReturn15();
8487 return increaseAndThrow42();
8488 counter++;
8489 } catch (ex) {
8490 counter++;
8491 throw 2 + ex;
8492 counter++;
8493 } finally {
8494 counter++;
8495 return 3 + local;
8496 counter++;
8497 }
8498 counter++;
8499 return 5 + local;
8500 }
8501 assertOptResultEquals(6, f);
8502 assertEquals(3, counter);
8503
8504 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8505 // catchReturns]
8506
8507 counter = 0;
8508 var f = function() {
8509 var local = 3;
8510 try {
8511 counter++;
8512 return increaseAndReturn15();
8513 return increaseAndThrow42();
8514 counter++;
8515 } catch (ex) {
8516 counter++;
8517 return 2 + ex;
8518 counter++;
8519 }
8520 counter++;
8521 }
8522 assertOptResultEquals(15, f);
8523 assertEquals(2, counter);
8524
8525 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8526 // catchReturns, endReturnLocal]
8527
8528 counter = 0;
8529 var f = function() {
8530 var local = 3;
8531 try {
8532 counter++;
8533 return increaseAndReturn15();
8534 return increaseAndThrow42();
8535 counter++;
8536 } catch (ex) {
8537 counter++;
8538 return 2 + ex;
8539 counter++;
8540 }
8541 counter++;
8542 return 5 + local;
8543 }
8544 assertOptResultEquals(15, f);
8545 assertEquals(2, counter);
8546
8547 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8548 // catchReturns, doFinally]
8549
8550 counter = 0;
8551 var f = function() {
8552 var local = 3;
8553 try {
8554 counter++;
8555 return increaseAndReturn15();
8556 return increaseAndThrow42();
8557 counter++;
8558 } catch (ex) {
8559 counter++;
8560 return 2 + ex;
8561 counter++;
8562 } finally {
8563 counter++;
8564 local += 2;
8565 counter++;
8566 }
8567 counter++;
8568 }
8569 assertOptResultEquals(15, f);
8570 assertEquals(4, counter);
8571
8572 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8573 // catchReturns, doFinally, endReturnLocal]
8574
8575 counter = 0;
8576 var f = function() {
8577 var local = 3;
8578 try {
8579 counter++;
8580 return increaseAndReturn15();
8581 return increaseAndThrow42();
8582 counter++;
8583 } catch (ex) {
8584 counter++;
8585 return 2 + ex;
8586 counter++;
8587 } finally {
8588 counter++;
8589 local += 2;
8590 counter++;
8591 }
8592 counter++;
8593 return 5 + local;
8594 }
8595 assertOptResultEquals(15, f);
8596 assertEquals(4, counter);
8597
8598 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8599 // catchReturns, doFinally, finallyThrows]
8600
8601 counter = 0;
8602 var f = function() {
8603 var local = 3;
8604 try {
8605 counter++;
8606 return increaseAndReturn15();
8607 return increaseAndThrow42();
8608 counter++;
8609 } catch (ex) {
8610 counter++;
8611 return 2 + ex;
8612 counter++;
8613 } finally {
8614 counter++;
8615 throw 25;
8616 counter++;
8617 }
8618 counter++;
8619 }
8620 assertOptThrowsWith(25, f);
8621 assertEquals(3, counter);
8622
8623 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8624 // catchReturns, doFinally, finallyThrows, endReturnLocal]
8625
8626 counter = 0;
8627 var f = function() {
8628 var local = 3;
8629 try {
8630 counter++;
8631 return increaseAndReturn15();
8632 return increaseAndThrow42();
8633 counter++;
8634 } catch (ex) {
8635 counter++;
8636 return 2 + ex;
8637 counter++;
8638 } finally {
8639 counter++;
8640 throw 25;
8641 counter++;
8642 }
8643 counter++;
8644 return 5 + local;
8645 }
8646 assertOptThrowsWith(25, f);
8647 assertEquals(3, counter);
8648
8649 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8650 // catchReturns, doFinally, finallyReturns]
8651
8652 counter = 0;
8653 var f = function() {
8654 var local = 3;
8655 try {
8656 counter++;
8657 return increaseAndReturn15();
8658 return increaseAndThrow42();
8659 counter++;
8660 } catch (ex) {
8661 counter++;
8662 return 2 + ex;
8663 counter++;
8664 } finally {
8665 counter++;
8666 return 3 + local;
8667 counter++;
8668 }
8669 counter++;
8670 }
8671 assertOptResultEquals(6, f);
8672 assertEquals(3, counter);
8673
8674 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8675 // catchReturns, doFinally, finallyReturns, endReturnLocal]
8676
8677 counter = 0;
8678 var f = function() {
8679 var local = 3;
8680 try {
8681 counter++;
8682 return increaseAndReturn15();
8683 return increaseAndThrow42();
8684 counter++;
8685 } catch (ex) {
8686 counter++;
8687 return 2 + ex;
8688 counter++;
8689 } finally {
8690 counter++;
8691 return 3 + local;
8692 counter++;
8693 }
8694 counter++;
8695 return 5 + local;
8696 }
8697 assertOptResultEquals(6, f);
8698 assertEquals(3, counter);
8699
8700 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8701 // catchReturns, catchWithLocal]
8702
8703 counter = 0;
8704 var f = function() {
8705 var local = 3;
8706 try {
8707 counter++;
8708 return increaseAndReturn15();
8709 return increaseAndThrow42();
8710 counter++;
8711 } catch (ex) {
8712 counter++;
8713 return 2 + local;
8714 counter++;
8715 }
8716 counter++;
8717 }
8718 assertOptResultEquals(15, f);
8719 assertEquals(2, counter);
8720
8721 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8722 // catchReturns, catchWithLocal, endReturnLocal]
8723
8724 counter = 0;
8725 var f = function() {
8726 var local = 3;
8727 try {
8728 counter++;
8729 return increaseAndReturn15();
8730 return increaseAndThrow42();
8731 counter++;
8732 } catch (ex) {
8733 counter++;
8734 return 2 + local;
8735 counter++;
8736 }
8737 counter++;
8738 return 5 + local;
8739 }
8740 assertOptResultEquals(15, f);
8741 assertEquals(2, counter);
8742
8743 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8744 // catchReturns, catchWithLocal, doFinally]
8745
8746 counter = 0;
8747 var f = function() {
8748 var local = 3;
8749 try {
8750 counter++;
8751 return increaseAndReturn15();
8752 return increaseAndThrow42();
8753 counter++;
8754 } catch (ex) {
8755 counter++;
8756 return 2 + local;
8757 counter++;
8758 } finally {
8759 counter++;
8760 local += 2;
8761 counter++;
8762 }
8763 counter++;
8764 }
8765 assertOptResultEquals(15, f);
8766 assertEquals(4, counter);
8767
8768 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8769 // catchReturns, catchWithLocal, doFinally, endReturnLocal]
8770
8771 counter = 0;
8772 var f = function() {
8773 var local = 3;
8774 try {
8775 counter++;
8776 return increaseAndReturn15();
8777 return increaseAndThrow42();
8778 counter++;
8779 } catch (ex) {
8780 counter++;
8781 return 2 + local;
8782 counter++;
8783 } finally {
8784 counter++;
8785 local += 2;
8786 counter++;
8787 }
8788 counter++;
8789 return 5 + local;
8790 }
8791 assertOptResultEquals(15, f);
8792 assertEquals(4, counter);
8793
8794 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8795 // catchReturns, catchWithLocal, doFinally, finallyThrows]
8796
8797 counter = 0;
8798 var f = function() {
8799 var local = 3;
8800 try {
8801 counter++;
8802 return increaseAndReturn15();
8803 return increaseAndThrow42();
8804 counter++;
8805 } catch (ex) {
8806 counter++;
8807 return 2 + local;
8808 counter++;
8809 } finally {
8810 counter++;
8811 throw 25;
8812 counter++;
8813 }
8814 counter++;
8815 }
8816 assertOptThrowsWith(25, f);
8817 assertEquals(3, counter);
8818
8819 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8820 // catchReturns, catchWithLocal, doFinally, finallyThrows,
8821 // endReturnLocal]
8822
8823 counter = 0;
8824 var f = function() {
8825 var local = 3;
8826 try {
8827 counter++;
8828 return increaseAndReturn15();
8829 return increaseAndThrow42();
8830 counter++;
8831 } catch (ex) {
8832 counter++;
8833 return 2 + local;
8834 counter++;
8835 } finally {
8836 counter++;
8837 throw 25;
8838 counter++;
8839 }
8840 counter++;
8841 return 5 + local;
8842 }
8843 assertOptThrowsWith(25, f);
8844 assertEquals(3, counter);
8845
8846 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8847 // catchReturns, catchWithLocal, doFinally, finallyReturns]
8848
8849 counter = 0;
8850 var f = function() {
8851 var local = 3;
8852 try {
8853 counter++;
8854 return increaseAndReturn15();
8855 return increaseAndThrow42();
8856 counter++;
8857 } catch (ex) {
8858 counter++;
8859 return 2 + local;
8860 counter++;
8861 } finally {
8862 counter++;
8863 return 3 + local;
8864 counter++;
8865 }
8866 counter++;
8867 }
8868 assertOptResultEquals(6, f);
8869 assertEquals(3, counter);
8870
8871 // Variant flags: [tryReturns, tryThrows, tryFirstReturns, doCatch,
8872 // catchReturns, catchWithLocal, doFinally, finallyReturns,
8873 // endReturnLocal]
8874
8875 counter = 0;
8876 var f = function() {
8877 var local = 3;
8878 try {
8879 counter++;
8880 return increaseAndReturn15();
8881 return increaseAndThrow42();
8882 counter++;
8883 } catch (ex) {
8884 counter++;
8885 return 2 + local;
8886 counter++;
8887 } finally {
8888 counter++;
8889 return 3 + local;
8890 counter++;
8891 }
8892 counter++;
8893 return 5 + local;
8894 }
8895 assertOptResultEquals(6, f);
8896 assertEquals(3, counter);
8897
8898 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
8899 // tryResultToLocal, doFinally]
8900
8901 counter = 0;
8902 var f = function() {
8903 var local = 3;
8904 try {
8905 counter++;
8906 local += increaseAndReturn15();
8907 local += increaseAndThrow42();
8908 counter++;
8909 } finally {
8910 counter++;
8911 local += 2;
8912 counter++;
8913 }
8914 counter++;
8915 }
8916 assertOptThrowsWith(42, f);
8917 assertEquals(5, counter);
8918
8919 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
8920 // tryResultToLocal, doFinally, endReturnLocal]
8921
8922 counter = 0;
8923 var f = function() {
8924 var local = 3;
8925 try {
8926 counter++;
8927 local += increaseAndReturn15();
8928 local += increaseAndThrow42();
8929 counter++;
8930 } finally {
8931 counter++;
8932 local += 2;
8933 counter++;
8934 }
8935 counter++;
8936 return 5 + local;
8937 }
8938 assertOptThrowsWith(42, f);
8939 assertEquals(5, counter);
8940
8941 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
8942 // tryResultToLocal, doFinally, finallyThrows]
8943
8944 counter = 0;
8945 var f = function() {
8946 var local = 3;
8947 try {
8948 counter++;
8949 local += increaseAndReturn15();
8950 local += increaseAndThrow42();
8951 counter++;
8952 } finally {
8953 counter++;
8954 throw 25;
8955 counter++;
8956 }
8957 counter++;
8958 }
8959 assertOptThrowsWith(25, f);
8960 assertEquals(4, counter);
8961
8962 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
8963 // tryResultToLocal, doFinally, finallyThrows, endReturnLocal]
8964
8965 counter = 0;
8966 var f = function() {
8967 var local = 3;
8968 try {
8969 counter++;
8970 local += increaseAndReturn15();
8971 local += increaseAndThrow42();
8972 counter++;
8973 } finally {
8974 counter++;
8975 throw 25;
8976 counter++;
8977 }
8978 counter++;
8979 return 5 + local;
8980 }
8981 assertOptThrowsWith(25, f);
8982 assertEquals(4, counter);
8983
8984 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
8985 // tryResultToLocal, doFinally, finallyReturns]
8986
8987 counter = 0;
8988 var f = function() {
8989 var local = 3;
8990 try {
8991 counter++;
8992 local += increaseAndReturn15();
8993 local += increaseAndThrow42();
8994 counter++;
8995 } finally {
8996 counter++;
8997 return 3 + local;
8998 counter++;
8999 }
9000 counter++;
9001 }
9002 assertOptResultEquals(21, f);
9003 assertEquals(4, counter);
9004
9005 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9006 // tryResultToLocal, doFinally, finallyReturns, endReturnLocal]
9007
9008 counter = 0;
9009 var f = function() {
9010 var local = 3;
9011 try {
9012 counter++;
9013 local += increaseAndReturn15();
9014 local += increaseAndThrow42();
9015 counter++;
9016 } finally {
9017 counter++;
9018 return 3 + local;
9019 counter++;
9020 }
9021 counter++;
9022 return 5 + local;
9023 }
9024 assertOptResultEquals(21, f);
9025 assertEquals(4, counter);
9026
9027 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9028 // tryResultToLocal, doCatch]
9029
9030 counter = 0;
9031 var f = function() {
9032 var local = 3;
9033 try {
9034 counter++;
9035 local += increaseAndReturn15();
9036 local += increaseAndThrow42();
9037 counter++;
9038 } catch (ex) {
9039 counter++;
9040 counter++;
9041 }
9042 counter++;
9043 }
9044 assertOptResultEquals(undefined, f);
9045 assertEquals(6, counter);
9046
9047 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9048 // tryResultToLocal, doCatch, endReturnLocal]
9049
9050 counter = 0;
9051 var f = function() {
9052 var local = 3;
9053 try {
9054 counter++;
9055 local += increaseAndReturn15();
9056 local += increaseAndThrow42();
9057 counter++;
9058 } catch (ex) {
9059 counter++;
9060 counter++;
9061 }
9062 counter++;
9063 return 5 + local;
9064 }
9065 assertOptResultEquals(23, f);
9066 assertEquals(6, counter);
9067
9068 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9069 // tryResultToLocal, doCatch, doFinally]
9070
9071 counter = 0;
9072 var f = function() {
9073 var local = 3;
9074 try {
9075 counter++;
9076 local += increaseAndReturn15();
9077 local += increaseAndThrow42();
9078 counter++;
9079 } catch (ex) {
9080 counter++;
9081 counter++;
9082 } finally {
9083 counter++;
9084 local += 2;
9085 counter++;
9086 }
9087 counter++;
9088 }
9089 assertOptResultEquals(undefined, f);
9090 assertEquals(8, counter);
9091
9092 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9093 // tryResultToLocal, doCatch, doFinally, endReturnLocal]
9094
9095 counter = 0;
9096 var f = function() {
9097 var local = 3;
9098 try {
9099 counter++;
9100 local += increaseAndReturn15();
9101 local += increaseAndThrow42();
9102 counter++;
9103 } catch (ex) {
9104 counter++;
9105 counter++;
9106 } finally {
9107 counter++;
9108 local += 2;
9109 counter++;
9110 }
9111 counter++;
9112 return 5 + local;
9113 }
9114 assertOptResultEquals(25, f);
9115 assertEquals(8, counter);
9116
9117 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9118 // tryResultToLocal, doCatch, doFinally, finallyThrows]
9119
9120 counter = 0;
9121 var f = function() {
9122 var local = 3;
9123 try {
9124 counter++;
9125 local += increaseAndReturn15();
9126 local += increaseAndThrow42();
9127 counter++;
9128 } catch (ex) {
9129 counter++;
9130 counter++;
9131 } finally {
9132 counter++;
9133 throw 25;
9134 counter++;
9135 }
9136 counter++;
9137 }
9138 assertOptThrowsWith(25, f);
9139 assertEquals(6, counter);
9140
9141 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9142 // tryResultToLocal, doCatch, doFinally, finallyThrows,
9143 // endReturnLocal]
9144
9145 counter = 0;
9146 var f = function() {
9147 var local = 3;
9148 try {
9149 counter++;
9150 local += increaseAndReturn15();
9151 local += increaseAndThrow42();
9152 counter++;
9153 } catch (ex) {
9154 counter++;
9155 counter++;
9156 } finally {
9157 counter++;
9158 throw 25;
9159 counter++;
9160 }
9161 counter++;
9162 return 5 + local;
9163 }
9164 assertOptThrowsWith(25, f);
9165 assertEquals(6, counter);
9166
9167 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9168 // tryResultToLocal, doCatch, doFinally, finallyReturns]
9169
9170 counter = 0;
9171 var f = function() {
9172 var local = 3;
9173 try {
9174 counter++;
9175 local += increaseAndReturn15();
9176 local += increaseAndThrow42();
9177 counter++;
9178 } catch (ex) {
9179 counter++;
9180 counter++;
9181 } finally {
9182 counter++;
9183 return 3 + local;
9184 counter++;
9185 }
9186 counter++;
9187 }
9188 assertOptResultEquals(21, f);
9189 assertEquals(6, counter);
9190
9191 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9192 // tryResultToLocal, doCatch, doFinally, finallyReturns,
9193 // endReturnLocal]
9194
9195 counter = 0;
9196 var f = function() {
9197 var local = 3;
9198 try {
9199 counter++;
9200 local += increaseAndReturn15();
9201 local += increaseAndThrow42();
9202 counter++;
9203 } catch (ex) {
9204 counter++;
9205 counter++;
9206 } finally {
9207 counter++;
9208 return 3 + local;
9209 counter++;
9210 }
9211 counter++;
9212 return 5 + local;
9213 }
9214 assertOptResultEquals(21, f);
9215 assertEquals(6, counter);
9216
9217 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9218 // tryResultToLocal, doCatch, catchThrows]
9219
9220 counter = 0;
9221 var f = function() {
9222 var local = 3;
9223 try {
9224 counter++;
9225 local += increaseAndReturn15();
9226 local += increaseAndThrow42();
9227 counter++;
9228 } catch (ex) {
9229 counter++;
9230 throw 2 + ex;
9231 counter++;
9232 }
9233 counter++;
9234 }
9235 assertOptThrowsWith(44, f);
9236 assertEquals(4, counter);
9237
9238 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9239 // tryResultToLocal, doCatch, catchThrows, endReturnLocal]
9240
9241 counter = 0;
9242 var f = function() {
9243 var local = 3;
9244 try {
9245 counter++;
9246 local += increaseAndReturn15();
9247 local += increaseAndThrow42();
9248 counter++;
9249 } catch (ex) {
9250 counter++;
9251 throw 2 + ex;
9252 counter++;
9253 }
9254 counter++;
9255 return 5 + local;
9256 }
9257 assertOptThrowsWith(44, f);
9258 assertEquals(4, counter);
9259
9260 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9261 // tryResultToLocal, doCatch, catchThrows, doFinally]
9262
9263 counter = 0;
9264 var f = function() {
9265 var local = 3;
9266 try {
9267 counter++;
9268 local += increaseAndReturn15();
9269 local += increaseAndThrow42();
9270 counter++;
9271 } catch (ex) {
9272 counter++;
9273 throw 2 + ex;
9274 counter++;
9275 } finally {
9276 counter++;
9277 local += 2;
9278 counter++;
9279 }
9280 counter++;
9281 }
9282 assertOptThrowsWith(44, f);
9283 assertEquals(6, counter);
9284
9285 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9286 // tryResultToLocal, doCatch, catchThrows, doFinally,
9287 // endReturnLocal]
9288
9289 counter = 0;
9290 var f = function() {
9291 var local = 3;
9292 try {
9293 counter++;
9294 local += increaseAndReturn15();
9295 local += increaseAndThrow42();
9296 counter++;
9297 } catch (ex) {
9298 counter++;
9299 throw 2 + ex;
9300 counter++;
9301 } finally {
9302 counter++;
9303 local += 2;
9304 counter++;
9305 }
9306 counter++;
9307 return 5 + local;
9308 }
9309 assertOptThrowsWith(44, f);
9310 assertEquals(6, counter);
9311
9312 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9313 // tryResultToLocal, doCatch, catchThrows, doFinally, finallyThrows]
9314
9315 counter = 0;
9316 var f = function() {
9317 var local = 3;
9318 try {
9319 counter++;
9320 local += increaseAndReturn15();
9321 local += increaseAndThrow42();
9322 counter++;
9323 } catch (ex) {
9324 counter++;
9325 throw 2 + ex;
9326 counter++;
9327 } finally {
9328 counter++;
9329 throw 25;
9330 counter++;
9331 }
9332 counter++;
9333 }
9334 assertOptThrowsWith(25, f);
9335 assertEquals(5, counter);
9336
9337 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9338 // tryResultToLocal, doCatch, catchThrows, doFinally, finallyThrows,
9339 // endReturnLocal]
9340
9341 counter = 0;
9342 var f = function() {
9343 var local = 3;
9344 try {
9345 counter++;
9346 local += increaseAndReturn15();
9347 local += increaseAndThrow42();
9348 counter++;
9349 } catch (ex) {
9350 counter++;
9351 throw 2 + ex;
9352 counter++;
9353 } finally {
9354 counter++;
9355 throw 25;
9356 counter++;
9357 }
9358 counter++;
9359 return 5 + local;
9360 }
9361 assertOptThrowsWith(25, f);
9362 assertEquals(5, counter);
9363
9364 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9365 // tryResultToLocal, doCatch, catchThrows, doFinally,
9366 // finallyReturns]
9367
9368 counter = 0;
9369 var f = function() {
9370 var local = 3;
9371 try {
9372 counter++;
9373 local += increaseAndReturn15();
9374 local += increaseAndThrow42();
9375 counter++;
9376 } catch (ex) {
9377 counter++;
9378 throw 2 + ex;
9379 counter++;
9380 } finally {
9381 counter++;
9382 return 3 + local;
9383 counter++;
9384 }
9385 counter++;
9386 }
9387 assertOptResultEquals(21, f);
9388 assertEquals(5, counter);
9389
9390 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9391 // tryResultToLocal, doCatch, catchThrows, doFinally,
9392 // finallyReturns, endReturnLocal]
9393
9394 counter = 0;
9395 var f = function() {
9396 var local = 3;
9397 try {
9398 counter++;
9399 local += increaseAndReturn15();
9400 local += increaseAndThrow42();
9401 counter++;
9402 } catch (ex) {
9403 counter++;
9404 throw 2 + ex;
9405 counter++;
9406 } finally {
9407 counter++;
9408 return 3 + local;
9409 counter++;
9410 }
9411 counter++;
9412 return 5 + local;
9413 }
9414 assertOptResultEquals(21, f);
9415 assertEquals(5, counter);
9416
9417 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9418 // tryResultToLocal, doCatch, catchWithLocal]
9419
9420 counter = 0;
9421 var f = function() {
9422 var local = 3;
9423 try {
9424 counter++;
9425 local += increaseAndReturn15();
9426 local += increaseAndThrow42();
9427 counter++;
9428 } catch (ex) {
9429 counter++;
9430 local += ex;
9431 counter++;
9432 }
9433 counter++;
9434 }
9435 assertOptResultEquals(undefined, f);
9436 assertEquals(6, counter);
9437
9438 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9439 // tryResultToLocal, doCatch, catchWithLocal, endReturnLocal]
9440
9441 counter = 0;
9442 var f = function() {
9443 var local = 3;
9444 try {
9445 counter++;
9446 local += increaseAndReturn15();
9447 local += increaseAndThrow42();
9448 counter++;
9449 } catch (ex) {
9450 counter++;
9451 local += ex;
9452 counter++;
9453 }
9454 counter++;
9455 return 5 + local;
9456 }
9457 assertOptResultEquals(65, f);
9458 assertEquals(6, counter);
9459
9460 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9461 // tryResultToLocal, doCatch, catchWithLocal, doFinally]
9462
9463 counter = 0;
9464 var f = function() {
9465 var local = 3;
9466 try {
9467 counter++;
9468 local += increaseAndReturn15();
9469 local += increaseAndThrow42();
9470 counter++;
9471 } catch (ex) {
9472 counter++;
9473 local += ex;
9474 counter++;
9475 } finally {
9476 counter++;
9477 local += 2;
9478 counter++;
9479 }
9480 counter++;
9481 }
9482 assertOptResultEquals(undefined, f);
9483 assertEquals(8, counter);
9484
9485 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9486 // tryResultToLocal, doCatch, catchWithLocal, doFinally,
9487 // endReturnLocal]
9488
9489 counter = 0;
9490 var f = function() {
9491 var local = 3;
9492 try {
9493 counter++;
9494 local += increaseAndReturn15();
9495 local += increaseAndThrow42();
9496 counter++;
9497 } catch (ex) {
9498 counter++;
9499 local += ex;
9500 counter++;
9501 } finally {
9502 counter++;
9503 local += 2;
9504 counter++;
9505 }
9506 counter++;
9507 return 5 + local;
9508 }
9509 assertOptResultEquals(67, f);
9510 assertEquals(8, counter);
9511
9512 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9513 // tryResultToLocal, doCatch, catchWithLocal, doFinally,
9514 // finallyThrows]
9515
9516 counter = 0;
9517 var f = function() {
9518 var local = 3;
9519 try {
9520 counter++;
9521 local += increaseAndReturn15();
9522 local += increaseAndThrow42();
9523 counter++;
9524 } catch (ex) {
9525 counter++;
9526 local += ex;
9527 counter++;
9528 } finally {
9529 counter++;
9530 throw 25;
9531 counter++;
9532 }
9533 counter++;
9534 }
9535 assertOptThrowsWith(25, f);
9536 assertEquals(6, counter);
9537
9538 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9539 // tryResultToLocal, doCatch, catchWithLocal, doFinally,
9540 // finallyThrows, endReturnLocal]
9541
9542 counter = 0;
9543 var f = function() {
9544 var local = 3;
9545 try {
9546 counter++;
9547 local += increaseAndReturn15();
9548 local += increaseAndThrow42();
9549 counter++;
9550 } catch (ex) {
9551 counter++;
9552 local += ex;
9553 counter++;
9554 } finally {
9555 counter++;
9556 throw 25;
9557 counter++;
9558 }
9559 counter++;
9560 return 5 + local;
9561 }
9562 assertOptThrowsWith(25, f);
9563 assertEquals(6, counter);
9564
9565 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9566 // tryResultToLocal, doCatch, catchWithLocal, doFinally,
9567 // finallyReturns]
9568
9569 counter = 0;
9570 var f = function() {
9571 var local = 3;
9572 try {
9573 counter++;
9574 local += increaseAndReturn15();
9575 local += increaseAndThrow42();
9576 counter++;
9577 } catch (ex) {
9578 counter++;
9579 local += ex;
9580 counter++;
9581 } finally {
9582 counter++;
9583 return 3 + local;
9584 counter++;
9585 }
9586 counter++;
9587 }
9588 assertOptResultEquals(63, f);
9589 assertEquals(6, counter);
9590
9591 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9592 // tryResultToLocal, doCatch, catchWithLocal, doFinally,
9593 // finallyReturns, endReturnLocal]
9594
9595 counter = 0;
9596 var f = function() {
9597 var local = 3;
9598 try {
9599 counter++;
9600 local += increaseAndReturn15();
9601 local += increaseAndThrow42();
9602 counter++;
9603 } catch (ex) {
9604 counter++;
9605 local += ex;
9606 counter++;
9607 } finally {
9608 counter++;
9609 return 3 + local;
9610 counter++;
9611 }
9612 counter++;
9613 return 5 + local;
9614 }
9615 assertOptResultEquals(63, f);
9616 assertEquals(6, counter);
9617
9618 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9619 // tryResultToLocal, doCatch, catchWithLocal, catchThrows]
9620
9621 counter = 0;
9622 var f = function() {
9623 var local = 3;
9624 try {
9625 counter++;
9626 local += increaseAndReturn15();
9627 local += increaseAndThrow42();
9628 counter++;
9629 } catch (ex) {
9630 counter++;
9631 throw 2 + ex;
9632 counter++;
9633 }
9634 counter++;
9635 }
9636 assertOptThrowsWith(44, f);
9637 assertEquals(4, counter);
9638
9639 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9640 // tryResultToLocal, doCatch, catchWithLocal, catchThrows,
9641 // endReturnLocal]
9642
9643 counter = 0;
9644 var f = function() {
9645 var local = 3;
9646 try {
9647 counter++;
9648 local += increaseAndReturn15();
9649 local += increaseAndThrow42();
9650 counter++;
9651 } catch (ex) {
9652 counter++;
9653 throw 2 + ex;
9654 counter++;
9655 }
9656 counter++;
9657 return 5 + local;
9658 }
9659 assertOptThrowsWith(44, f);
9660 assertEquals(4, counter);
9661
9662 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9663 // tryResultToLocal, doCatch, catchWithLocal, catchThrows,
9664 // doFinally]
9665
9666 counter = 0;
9667 var f = function() {
9668 var local = 3;
9669 try {
9670 counter++;
9671 local += increaseAndReturn15();
9672 local += increaseAndThrow42();
9673 counter++;
9674 } catch (ex) {
9675 counter++;
9676 throw 2 + ex;
9677 counter++;
9678 } finally {
9679 counter++;
9680 local += 2;
9681 counter++;
9682 }
9683 counter++;
9684 }
9685 assertOptThrowsWith(44, f);
9686 assertEquals(6, counter);
9687
9688 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9689 // tryResultToLocal, doCatch, catchWithLocal, catchThrows,
9690 // doFinally, endReturnLocal]
9691
9692 counter = 0;
9693 var f = function() {
9694 var local = 3;
9695 try {
9696 counter++;
9697 local += increaseAndReturn15();
9698 local += increaseAndThrow42();
9699 counter++;
9700 } catch (ex) {
9701 counter++;
9702 throw 2 + ex;
9703 counter++;
9704 } finally {
9705 counter++;
9706 local += 2;
9707 counter++;
9708 }
9709 counter++;
9710 return 5 + local;
9711 }
9712 assertOptThrowsWith(44, f);
9713 assertEquals(6, counter);
9714
9715 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9716 // tryResultToLocal, doCatch, catchWithLocal, catchThrows,
9717 // doFinally, finallyThrows]
9718
9719 counter = 0;
9720 var f = function() {
9721 var local = 3;
9722 try {
9723 counter++;
9724 local += increaseAndReturn15();
9725 local += increaseAndThrow42();
9726 counter++;
9727 } catch (ex) {
9728 counter++;
9729 throw 2 + ex;
9730 counter++;
9731 } finally {
9732 counter++;
9733 throw 25;
9734 counter++;
9735 }
9736 counter++;
9737 }
9738 assertOptThrowsWith(25, f);
9739 assertEquals(5, counter);
9740
9741 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9742 // tryResultToLocal, doCatch, catchWithLocal, catchThrows,
9743 // doFinally, finallyThrows, endReturnLocal]
9744
9745 counter = 0;
9746 var f = function() {
9747 var local = 3;
9748 try {
9749 counter++;
9750 local += increaseAndReturn15();
9751 local += increaseAndThrow42();
9752 counter++;
9753 } catch (ex) {
9754 counter++;
9755 throw 2 + ex;
9756 counter++;
9757 } finally {
9758 counter++;
9759 throw 25;
9760 counter++;
9761 }
9762 counter++;
9763 return 5 + local;
9764 }
9765 assertOptThrowsWith(25, f);
9766 assertEquals(5, counter);
9767
9768 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9769 // tryResultToLocal, doCatch, catchWithLocal, catchThrows,
9770 // doFinally, finallyReturns]
9771
9772 counter = 0;
9773 var f = function() {
9774 var local = 3;
9775 try {
9776 counter++;
9777 local += increaseAndReturn15();
9778 local += increaseAndThrow42();
9779 counter++;
9780 } catch (ex) {
9781 counter++;
9782 throw 2 + ex;
9783 counter++;
9784 } finally {
9785 counter++;
9786 return 3 + local;
9787 counter++;
9788 }
9789 counter++;
9790 }
9791 assertOptResultEquals(21, f);
9792 assertEquals(5, counter);
9793
9794 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9795 // tryResultToLocal, doCatch, catchWithLocal, catchThrows,
9796 // doFinally, finallyReturns, endReturnLocal]
9797
9798 counter = 0;
9799 var f = function() {
9800 var local = 3;
9801 try {
9802 counter++;
9803 local += increaseAndReturn15();
9804 local += increaseAndThrow42();
9805 counter++;
9806 } catch (ex) {
9807 counter++;
9808 throw 2 + ex;
9809 counter++;
9810 } finally {
9811 counter++;
9812 return 3 + local;
9813 counter++;
9814 }
9815 counter++;
9816 return 5 + local;
9817 }
9818 assertOptResultEquals(21, f);
9819 assertEquals(5, counter);
9820
9821 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9822 // tryResultToLocal, doCatch, catchReturns]
9823
9824 counter = 0;
9825 var f = function() {
9826 var local = 3;
9827 try {
9828 counter++;
9829 local += increaseAndReturn15();
9830 local += increaseAndThrow42();
9831 counter++;
9832 } catch (ex) {
9833 counter++;
9834 return 2 + ex;
9835 counter++;
9836 }
9837 counter++;
9838 }
9839 assertOptResultEquals(44, f);
9840 assertEquals(4, counter);
9841
9842 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9843 // tryResultToLocal, doCatch, catchReturns, endReturnLocal]
9844
9845 counter = 0;
9846 var f = function() {
9847 var local = 3;
9848 try {
9849 counter++;
9850 local += increaseAndReturn15();
9851 local += increaseAndThrow42();
9852 counter++;
9853 } catch (ex) {
9854 counter++;
9855 return 2 + ex;
9856 counter++;
9857 }
9858 counter++;
9859 return 5 + local;
9860 }
9861 assertOptResultEquals(44, f);
9862 assertEquals(4, counter);
9863
9864 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9865 // tryResultToLocal, doCatch, catchReturns, doFinally]
9866
9867 counter = 0;
9868 var f = function() {
9869 var local = 3;
9870 try {
9871 counter++;
9872 local += increaseAndReturn15();
9873 local += increaseAndThrow42();
9874 counter++;
9875 } catch (ex) {
9876 counter++;
9877 return 2 + ex;
9878 counter++;
9879 } finally {
9880 counter++;
9881 local += 2;
9882 counter++;
9883 }
9884 counter++;
9885 }
9886 assertOptResultEquals(44, f);
9887 assertEquals(6, counter);
9888
9889 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9890 // tryResultToLocal, doCatch, catchReturns, doFinally,
9891 // endReturnLocal]
9892
9893 counter = 0;
9894 var f = function() {
9895 var local = 3;
9896 try {
9897 counter++;
9898 local += increaseAndReturn15();
9899 local += increaseAndThrow42();
9900 counter++;
9901 } catch (ex) {
9902 counter++;
9903 return 2 + ex;
9904 counter++;
9905 } finally {
9906 counter++;
9907 local += 2;
9908 counter++;
9909 }
9910 counter++;
9911 return 5 + local;
9912 }
9913 assertOptResultEquals(44, f);
9914 assertEquals(6, counter);
9915
9916 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9917 // tryResultToLocal, doCatch, catchReturns, doFinally,
9918 // finallyThrows]
9919
9920 counter = 0;
9921 var f = function() {
9922 var local = 3;
9923 try {
9924 counter++;
9925 local += increaseAndReturn15();
9926 local += increaseAndThrow42();
9927 counter++;
9928 } catch (ex) {
9929 counter++;
9930 return 2 + ex;
9931 counter++;
9932 } finally {
9933 counter++;
9934 throw 25;
9935 counter++;
9936 }
9937 counter++;
9938 }
9939 assertOptThrowsWith(25, f);
9940 assertEquals(5, counter);
9941
9942 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9943 // tryResultToLocal, doCatch, catchReturns, doFinally,
9944 // finallyThrows, endReturnLocal]
9945
9946 counter = 0;
9947 var f = function() {
9948 var local = 3;
9949 try {
9950 counter++;
9951 local += increaseAndReturn15();
9952 local += increaseAndThrow42();
9953 counter++;
9954 } catch (ex) {
9955 counter++;
9956 return 2 + ex;
9957 counter++;
9958 } finally {
9959 counter++;
9960 throw 25;
9961 counter++;
9962 }
9963 counter++;
9964 return 5 + local;
9965 }
9966 assertOptThrowsWith(25, f);
9967 assertEquals(5, counter);
9968
9969 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9970 // tryResultToLocal, doCatch, catchReturns, doFinally,
9971 // finallyReturns]
9972
9973 counter = 0;
9974 var f = function() {
9975 var local = 3;
9976 try {
9977 counter++;
9978 local += increaseAndReturn15();
9979 local += increaseAndThrow42();
9980 counter++;
9981 } catch (ex) {
9982 counter++;
9983 return 2 + ex;
9984 counter++;
9985 } finally {
9986 counter++;
9987 return 3 + local;
9988 counter++;
9989 }
9990 counter++;
9991 }
9992 assertOptResultEquals(21, f);
9993 assertEquals(5, counter);
9994
9995 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
9996 // tryResultToLocal, doCatch, catchReturns, doFinally,
9997 // finallyReturns, endReturnLocal]
9998
9999 counter = 0;
10000 var f = function() {
10001 var local = 3;
10002 try {
10003 counter++;
10004 local += increaseAndReturn15();
10005 local += increaseAndThrow42();
10006 counter++;
10007 } catch (ex) {
10008 counter++;
10009 return 2 + ex;
10010 counter++;
10011 } finally {
10012 counter++;
10013 return 3 + local;
10014 counter++;
10015 }
10016 counter++;
10017 return 5 + local;
10018 }
10019 assertOptResultEquals(21, f);
10020 assertEquals(5, counter);
10021
10022 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
10023 // tryResultToLocal, doCatch, catchReturns, catchWithLocal]
10024
10025 counter = 0;
10026 var f = function() {
10027 var local = 3;
10028 try {
10029 counter++;
10030 local += increaseAndReturn15();
10031 local += increaseAndThrow42();
10032 counter++;
10033 } catch (ex) {
10034 counter++;
10035 return 2 + local;
10036 counter++;
10037 }
10038 counter++;
10039 }
10040 assertOptResultEquals(20, f);
10041 assertEquals(4, counter);
10042
10043 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
10044 // tryResultToLocal, doCatch, catchReturns, catchWithLocal,
10045 // endReturnLocal]
10046
10047 counter = 0;
10048 var f = function() {
10049 var local = 3;
10050 try {
10051 counter++;
10052 local += increaseAndReturn15();
10053 local += increaseAndThrow42();
10054 counter++;
10055 } catch (ex) {
10056 counter++;
10057 return 2 + local;
10058 counter++;
10059 }
10060 counter++;
10061 return 5 + local;
10062 }
10063 assertOptResultEquals(20, f);
10064 assertEquals(4, counter);
10065
10066 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
10067 // tryResultToLocal, doCatch, catchReturns, catchWithLocal,
10068 // doFinally]
10069
10070 counter = 0;
10071 var f = function() {
10072 var local = 3;
10073 try {
10074 counter++;
10075 local += increaseAndReturn15();
10076 local += increaseAndThrow42();
10077 counter++;
10078 } catch (ex) {
10079 counter++;
10080 return 2 + local;
10081 counter++;
10082 } finally {
10083 counter++;
10084 local += 2;
10085 counter++;
10086 }
10087 counter++;
10088 }
10089 assertOptResultEquals(20, f);
10090 assertEquals(6, counter);
10091
10092 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
10093 // tryResultToLocal, doCatch, catchReturns, catchWithLocal,
10094 // doFinally, endReturnLocal]
10095
10096 counter = 0;
10097 var f = function() {
10098 var local = 3;
10099 try {
10100 counter++;
10101 local += increaseAndReturn15();
10102 local += increaseAndThrow42();
10103 counter++;
10104 } catch (ex) {
10105 counter++;
10106 return 2 + local;
10107 counter++;
10108 } finally {
10109 counter++;
10110 local += 2;
10111 counter++;
10112 }
10113 counter++;
10114 return 5 + local;
10115 }
10116 assertOptResultEquals(20, f);
10117 assertEquals(6, counter);
10118
10119 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
10120 // tryResultToLocal, doCatch, catchReturns, catchWithLocal,
10121 // doFinally, finallyThrows]
10122
10123 counter = 0;
10124 var f = function() {
10125 var local = 3;
10126 try {
10127 counter++;
10128 local += increaseAndReturn15();
10129 local += increaseAndThrow42();
10130 counter++;
10131 } catch (ex) {
10132 counter++;
10133 return 2 + local;
10134 counter++;
10135 } finally {
10136 counter++;
10137 throw 25;
10138 counter++;
10139 }
10140 counter++;
10141 }
10142 assertOptThrowsWith(25, f);
10143 assertEquals(5, counter);
10144
10145 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
10146 // tryResultToLocal, doCatch, catchReturns, catchWithLocal,
10147 // doFinally, finallyThrows, endReturnLocal]
10148
10149 counter = 0;
10150 var f = function() {
10151 var local = 3;
10152 try {
10153 counter++;
10154 local += increaseAndReturn15();
10155 local += increaseAndThrow42();
10156 counter++;
10157 } catch (ex) {
10158 counter++;
10159 return 2 + local;
10160 counter++;
10161 } finally {
10162 counter++;
10163 throw 25;
10164 counter++;
10165 }
10166 counter++;
10167 return 5 + local;
10168 }
10169 assertOptThrowsWith(25, f);
10170 assertEquals(5, counter);
10171
10172 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
10173 // tryResultToLocal, doCatch, catchReturns, catchWithLocal,
10174 // doFinally, finallyReturns]
10175
10176 counter = 0;
10177 var f = function() {
10178 var local = 3;
10179 try {
10180 counter++;
10181 local += increaseAndReturn15();
10182 local += increaseAndThrow42();
10183 counter++;
10184 } catch (ex) {
10185 counter++;
10186 return 2 + local;
10187 counter++;
10188 } finally {
10189 counter++;
10190 return 3 + local;
10191 counter++;
10192 }
10193 counter++;
10194 }
10195 assertOptResultEquals(21, f);
10196 assertEquals(5, counter);
10197
10198 // Variant flags: [tryReturns, tryThrows, tryFirstReturns,
10199 // tryResultToLocal, doCatch, catchReturns, catchWithLocal,
10200 // doFinally, finallyReturns, endReturnLocal]
10201
10202 counter = 0;
10203 var f = function() {
10204 var local = 3;
10205 try {
10206 counter++;
10207 local += increaseAndReturn15();
10208 local += increaseAndThrow42();
10209 counter++;
10210 } catch (ex) {
10211 counter++;
10212 return 2 + local;
10213 counter++;
10214 } finally {
10215 counter++;
10216 return 3 + local;
10217 counter++;
10218 }
10219 counter++;
10220 return 5 + local;
10221 }
10222 assertOptResultEquals(21, f);
10223 assertEquals(5, counter);
10224
10225 // Variant flags: [alternativeFn1, tryThrows, doFinally]
10226
10227 counter = 0;
10228 var f = function() {
10229 var local = 3;
10230 try {
10231 counter++;
10232 return returnOrThrow(false);
10233 counter++;
10234 } finally {
10235 counter++;
10236 local += 2;
10237 counter++;
10238 }
10239 counter++;
10240 }
10241 assertOptThrowsWith(42, f);
10242 assertEquals(4, counter);
10243
10244 // Variant flags: [alternativeFn1, tryThrows, doFinally,
10245 // endReturnLocal]
10246
10247 counter = 0;
10248 var f = function() {
10249 var local = 3;
10250 try {
10251 counter++;
10252 return returnOrThrow(false);
10253 counter++;
10254 } finally {
10255 counter++;
10256 local += 2;
10257 counter++;
10258 }
10259 counter++;
10260 return 5 + local;
10261 }
10262 assertOptThrowsWith(42, f);
10263 assertEquals(4, counter);
10264
10265 // Variant flags: [alternativeFn1, tryThrows, doFinally,
10266 // finallyThrows]
10267
10268 counter = 0;
10269 var f = function() {
10270 var local = 3;
10271 try {
10272 counter++;
10273 return returnOrThrow(false);
10274 counter++;
10275 } finally {
10276 counter++;
10277 throw 25;
10278 counter++;
10279 }
10280 counter++;
10281 }
10282 assertOptThrowsWith(25, f);
10283 assertEquals(3, counter);
10284
10285 // Variant flags: [alternativeFn1, tryThrows, doFinally,
10286 // finallyThrows, endReturnLocal]
10287
10288 counter = 0;
10289 var f = function() {
10290 var local = 3;
10291 try {
10292 counter++;
10293 return returnOrThrow(false);
10294 counter++;
10295 } finally {
10296 counter++;
10297 throw 25;
10298 counter++;
10299 }
10300 counter++;
10301 return 5 + local;
10302 }
10303 assertOptThrowsWith(25, f);
10304 assertEquals(3, counter);
10305
10306 // Variant flags: [alternativeFn1, tryThrows, doFinally,
10307 // finallyReturns]
10308
10309 counter = 0;
10310 var f = function() {
10311 var local = 3;
10312 try {
10313 counter++;
10314 return returnOrThrow(false);
10315 counter++;
10316 } finally {
10317 counter++;
10318 return 3 + local;
10319 counter++;
10320 }
10321 counter++;
10322 }
10323 assertOptResultEquals(6, f);
10324 assertEquals(3, counter);
10325
10326 // Variant flags: [alternativeFn1, tryThrows, doFinally,
10327 // finallyReturns, endReturnLocal]
10328
10329 counter = 0;
10330 var f = function() {
10331 var local = 3;
10332 try {
10333 counter++;
10334 return returnOrThrow(false);
10335 counter++;
10336 } finally {
10337 counter++;
10338 return 3 + local;
10339 counter++;
10340 }
10341 counter++;
10342 return 5 + local;
10343 }
10344 assertOptResultEquals(6, f);
10345 assertEquals(3, counter);
10346
10347 // Variant flags: [alternativeFn1, tryThrows, doCatch]
10348
10349 counter = 0;
10350 var f = function() {
10351 var local = 3;
10352 try {
10353 counter++;
10354 return returnOrThrow(false);
10355 counter++;
10356 } catch (ex) {
10357 counter++;
10358 counter++;
10359 }
10360 counter++;
10361 }
10362 assertOptResultEquals(undefined, f);
10363 assertEquals(5, counter);
10364
10365 // Variant flags: [alternativeFn1, tryThrows, doCatch, endReturnLocal]
10366
10367 counter = 0;
10368 var f = function() {
10369 var local = 3;
10370 try {
10371 counter++;
10372 return returnOrThrow(false);
10373 counter++;
10374 } catch (ex) {
10375 counter++;
10376 counter++;
10377 }
10378 counter++;
10379 return 5 + local;
10380 }
10381 assertOptResultEquals(8, f);
10382 assertEquals(5, counter);
10383
10384 // Variant flags: [alternativeFn1, tryThrows, doCatch, doFinally]
10385
10386 counter = 0;
10387 var f = function() {
10388 var local = 3;
10389 try {
10390 counter++;
10391 return returnOrThrow(false);
10392 counter++;
10393 } catch (ex) {
10394 counter++;
10395 counter++;
10396 } finally {
10397 counter++;
10398 local += 2;
10399 counter++;
10400 }
10401 counter++;
10402 }
10403 assertOptResultEquals(undefined, f);
10404 assertEquals(7, counter);
10405
10406 // Variant flags: [alternativeFn1, tryThrows, doCatch, doFinally,
10407 // endReturnLocal]
10408
10409 counter = 0;
10410 var f = function() {
10411 var local = 3;
10412 try {
10413 counter++;
10414 return returnOrThrow(false);
10415 counter++;
10416 } catch (ex) {
10417 counter++;
10418 counter++;
10419 } finally {
10420 counter++;
10421 local += 2;
10422 counter++;
10423 }
10424 counter++;
10425 return 5 + local;
10426 }
10427 assertOptResultEquals(10, f);
10428 assertEquals(7, counter);
10429
10430 // Variant flags: [alternativeFn1, tryThrows, doCatch, doFinally,
10431 // finallyThrows]
10432
10433 counter = 0;
10434 var f = function() {
10435 var local = 3;
10436 try {
10437 counter++;
10438 return returnOrThrow(false);
10439 counter++;
10440 } catch (ex) {
10441 counter++;
10442 counter++;
10443 } finally {
10444 counter++;
10445 throw 25;
10446 counter++;
10447 }
10448 counter++;
10449 }
10450 assertOptThrowsWith(25, f);
10451 assertEquals(5, counter);
10452
10453 // Variant flags: [alternativeFn1, tryThrows, doCatch, doFinally,
10454 // finallyThrows, endReturnLocal]
10455
10456 counter = 0;
10457 var f = function() {
10458 var local = 3;
10459 try {
10460 counter++;
10461 return returnOrThrow(false);
10462 counter++;
10463 } catch (ex) {
10464 counter++;
10465 counter++;
10466 } finally {
10467 counter++;
10468 throw 25;
10469 counter++;
10470 }
10471 counter++;
10472 return 5 + local;
10473 }
10474 assertOptThrowsWith(25, f);
10475 assertEquals(5, counter);
10476
10477 // Variant flags: [alternativeFn1, tryThrows, doCatch, doFinally,
10478 // finallyReturns]
10479
10480 counter = 0;
10481 var f = function() {
10482 var local = 3;
10483 try {
10484 counter++;
10485 return returnOrThrow(false);
10486 counter++;
10487 } catch (ex) {
10488 counter++;
10489 counter++;
10490 } finally {
10491 counter++;
10492 return 3 + local;
10493 counter++;
10494 }
10495 counter++;
10496 }
10497 assertOptResultEquals(6, f);
10498 assertEquals(5, counter);
10499
10500 // Variant flags: [alternativeFn1, tryThrows, doCatch, doFinally,
10501 // finallyReturns, endReturnLocal]
10502
10503 counter = 0;
10504 var f = function() {
10505 var local = 3;
10506 try {
10507 counter++;
10508 return returnOrThrow(false);
10509 counter++;
10510 } catch (ex) {
10511 counter++;
10512 counter++;
10513 } finally {
10514 counter++;
10515 return 3 + local;
10516 counter++;
10517 }
10518 counter++;
10519 return 5 + local;
10520 }
10521 assertOptResultEquals(6, f);
10522 assertEquals(5, counter);
10523
10524 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchThrows]
10525
10526 counter = 0;
10527 var f = function() {
10528 var local = 3;
10529 try {
10530 counter++;
10531 return returnOrThrow(false);
10532 counter++;
10533 } catch (ex) {
10534 counter++;
10535 throw 2 + ex;
10536 counter++;
10537 }
10538 counter++;
10539 }
10540 assertOptThrowsWith(44, f);
10541 assertEquals(3, counter);
10542
10543 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchThrows,
10544 // endReturnLocal]
10545
10546 counter = 0;
10547 var f = function() {
10548 var local = 3;
10549 try {
10550 counter++;
10551 return returnOrThrow(false);
10552 counter++;
10553 } catch (ex) {
10554 counter++;
10555 throw 2 + ex;
10556 counter++;
10557 }
10558 counter++;
10559 return 5 + local;
10560 }
10561 assertOptThrowsWith(44, f);
10562 assertEquals(3, counter);
10563
10564 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchThrows,
10565 // doFinally]
10566
10567 counter = 0;
10568 var f = function() {
10569 var local = 3;
10570 try {
10571 counter++;
10572 return returnOrThrow(false);
10573 counter++;
10574 } catch (ex) {
10575 counter++;
10576 throw 2 + ex;
10577 counter++;
10578 } finally {
10579 counter++;
10580 local += 2;
10581 counter++;
10582 }
10583 counter++;
10584 }
10585 assertOptThrowsWith(44, f);
10586 assertEquals(5, counter);
10587
10588 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchThrows,
10589 // doFinally, endReturnLocal]
10590
10591 counter = 0;
10592 var f = function() {
10593 var local = 3;
10594 try {
10595 counter++;
10596 return returnOrThrow(false);
10597 counter++;
10598 } catch (ex) {
10599 counter++;
10600 throw 2 + ex;
10601 counter++;
10602 } finally {
10603 counter++;
10604 local += 2;
10605 counter++;
10606 }
10607 counter++;
10608 return 5 + local;
10609 }
10610 assertOptThrowsWith(44, f);
10611 assertEquals(5, counter);
10612
10613 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchThrows,
10614 // doFinally, finallyThrows]
10615
10616 counter = 0;
10617 var f = function() {
10618 var local = 3;
10619 try {
10620 counter++;
10621 return returnOrThrow(false);
10622 counter++;
10623 } catch (ex) {
10624 counter++;
10625 throw 2 + ex;
10626 counter++;
10627 } finally {
10628 counter++;
10629 throw 25;
10630 counter++;
10631 }
10632 counter++;
10633 }
10634 assertOptThrowsWith(25, f);
10635 assertEquals(4, counter);
10636
10637 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchThrows,
10638 // doFinally, finallyThrows, endReturnLocal]
10639
10640 counter = 0;
10641 var f = function() {
10642 var local = 3;
10643 try {
10644 counter++;
10645 return returnOrThrow(false);
10646 counter++;
10647 } catch (ex) {
10648 counter++;
10649 throw 2 + ex;
10650 counter++;
10651 } finally {
10652 counter++;
10653 throw 25;
10654 counter++;
10655 }
10656 counter++;
10657 return 5 + local;
10658 }
10659 assertOptThrowsWith(25, f);
10660 assertEquals(4, counter);
10661
10662 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchThrows,
10663 // doFinally, finallyReturns]
10664
10665 counter = 0;
10666 var f = function() {
10667 var local = 3;
10668 try {
10669 counter++;
10670 return returnOrThrow(false);
10671 counter++;
10672 } catch (ex) {
10673 counter++;
10674 throw 2 + ex;
10675 counter++;
10676 } finally {
10677 counter++;
10678 return 3 + local;
10679 counter++;
10680 }
10681 counter++;
10682 }
10683 assertOptResultEquals(6, f);
10684 assertEquals(4, counter);
10685
10686 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchThrows,
10687 // doFinally, finallyReturns, endReturnLocal]
10688
10689 counter = 0;
10690 var f = function() {
10691 var local = 3;
10692 try {
10693 counter++;
10694 return returnOrThrow(false);
10695 counter++;
10696 } catch (ex) {
10697 counter++;
10698 throw 2 + ex;
10699 counter++;
10700 } finally {
10701 counter++;
10702 return 3 + local;
10703 counter++;
10704 }
10705 counter++;
10706 return 5 + local;
10707 }
10708 assertOptResultEquals(6, f);
10709 assertEquals(4, counter);
10710
10711 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchWithLocal]
10712
10713 counter = 0;
10714 var f = function() {
10715 var local = 3;
10716 try {
10717 counter++;
10718 return returnOrThrow(false);
10719 counter++;
10720 } catch (ex) {
10721 counter++;
10722 local += ex;
10723 counter++;
10724 }
10725 counter++;
10726 }
10727 assertOptResultEquals(undefined, f);
10728 assertEquals(5, counter);
10729
10730 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchWithLocal,
10731 // endReturnLocal]
10732
10733 counter = 0;
10734 var f = function() {
10735 var local = 3;
10736 try {
10737 counter++;
10738 return returnOrThrow(false);
10739 counter++;
10740 } catch (ex) {
10741 counter++;
10742 local += ex;
10743 counter++;
10744 }
10745 counter++;
10746 return 5 + local;
10747 }
10748 assertOptResultEquals(50, f);
10749 assertEquals(5, counter);
10750
10751 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchWithLocal,
10752 // doFinally]
10753
10754 counter = 0;
10755 var f = function() {
10756 var local = 3;
10757 try {
10758 counter++;
10759 return returnOrThrow(false);
10760 counter++;
10761 } catch (ex) {
10762 counter++;
10763 local += ex;
10764 counter++;
10765 } finally {
10766 counter++;
10767 local += 2;
10768 counter++;
10769 }
10770 counter++;
10771 }
10772 assertOptResultEquals(undefined, f);
10773 assertEquals(7, counter);
10774
10775 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchWithLocal,
10776 // doFinally, endReturnLocal]
10777
10778 counter = 0;
10779 var f = function() {
10780 var local = 3;
10781 try {
10782 counter++;
10783 return returnOrThrow(false);
10784 counter++;
10785 } catch (ex) {
10786 counter++;
10787 local += ex;
10788 counter++;
10789 } finally {
10790 counter++;
10791 local += 2;
10792 counter++;
10793 }
10794 counter++;
10795 return 5 + local;
10796 }
10797 assertOptResultEquals(52, f);
10798 assertEquals(7, counter);
10799
10800 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchWithLocal,
10801 // doFinally, finallyThrows]
10802
10803 counter = 0;
10804 var f = function() {
10805 var local = 3;
10806 try {
10807 counter++;
10808 return returnOrThrow(false);
10809 counter++;
10810 } catch (ex) {
10811 counter++;
10812 local += ex;
10813 counter++;
10814 } finally {
10815 counter++;
10816 throw 25;
10817 counter++;
10818 }
10819 counter++;
10820 }
10821 assertOptThrowsWith(25, f);
10822 assertEquals(5, counter);
10823
10824 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchWithLocal,
10825 // doFinally, finallyThrows, endReturnLocal]
10826
10827 counter = 0;
10828 var f = function() {
10829 var local = 3;
10830 try {
10831 counter++;
10832 return returnOrThrow(false);
10833 counter++;
10834 } catch (ex) {
10835 counter++;
10836 local += ex;
10837 counter++;
10838 } finally {
10839 counter++;
10840 throw 25;
10841 counter++;
10842 }
10843 counter++;
10844 return 5 + local;
10845 }
10846 assertOptThrowsWith(25, f);
10847 assertEquals(5, counter);
10848
10849 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchWithLocal,
10850 // doFinally, finallyReturns]
10851
10852 counter = 0;
10853 var f = function() {
10854 var local = 3;
10855 try {
10856 counter++;
10857 return returnOrThrow(false);
10858 counter++;
10859 } catch (ex) {
10860 counter++;
10861 local += ex;
10862 counter++;
10863 } finally {
10864 counter++;
10865 return 3 + local;
10866 counter++;
10867 }
10868 counter++;
10869 }
10870 assertOptResultEquals(48, f);
10871 assertEquals(5, counter);
10872
10873 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchWithLocal,
10874 // doFinally, finallyReturns, endReturnLocal]
10875
10876 counter = 0;
10877 var f = function() {
10878 var local = 3;
10879 try {
10880 counter++;
10881 return returnOrThrow(false);
10882 counter++;
10883 } catch (ex) {
10884 counter++;
10885 local += ex;
10886 counter++;
10887 } finally {
10888 counter++;
10889 return 3 + local;
10890 counter++;
10891 }
10892 counter++;
10893 return 5 + local;
10894 }
10895 assertOptResultEquals(48, f);
10896 assertEquals(5, counter);
10897
10898 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchWithLocal,
10899 // catchThrows]
10900
10901 counter = 0;
10902 var f = function() {
10903 var local = 3;
10904 try {
10905 counter++;
10906 return returnOrThrow(false);
10907 counter++;
10908 } catch (ex) {
10909 counter++;
10910 throw 2 + ex;
10911 counter++;
10912 }
10913 counter++;
10914 }
10915 assertOptThrowsWith(44, f);
10916 assertEquals(3, counter);
10917
10918 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchWithLocal,
10919 // catchThrows, endReturnLocal]
10920
10921 counter = 0;
10922 var f = function() {
10923 var local = 3;
10924 try {
10925 counter++;
10926 return returnOrThrow(false);
10927 counter++;
10928 } catch (ex) {
10929 counter++;
10930 throw 2 + ex;
10931 counter++;
10932 }
10933 counter++;
10934 return 5 + local;
10935 }
10936 assertOptThrowsWith(44, f);
10937 assertEquals(3, counter);
10938
10939 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchWithLocal,
10940 // catchThrows, doFinally]
10941
10942 counter = 0;
10943 var f = function() {
10944 var local = 3;
10945 try {
10946 counter++;
10947 return returnOrThrow(false);
10948 counter++;
10949 } catch (ex) {
10950 counter++;
10951 throw 2 + ex;
10952 counter++;
10953 } finally {
10954 counter++;
10955 local += 2;
10956 counter++;
10957 }
10958 counter++;
10959 }
10960 assertOptThrowsWith(44, f);
10961 assertEquals(5, counter);
10962
10963 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchWithLocal,
10964 // catchThrows, doFinally, endReturnLocal]
10965
10966 counter = 0;
10967 var f = function() {
10968 var local = 3;
10969 try {
10970 counter++;
10971 return returnOrThrow(false);
10972 counter++;
10973 } catch (ex) {
10974 counter++;
10975 throw 2 + ex;
10976 counter++;
10977 } finally {
10978 counter++;
10979 local += 2;
10980 counter++;
10981 }
10982 counter++;
10983 return 5 + local;
10984 }
10985 assertOptThrowsWith(44, f);
10986 assertEquals(5, counter);
10987
10988 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchWithLocal,
10989 // catchThrows, doFinally, finallyThrows]
10990
10991 counter = 0;
10992 var f = function() {
10993 var local = 3;
10994 try {
10995 counter++;
10996 return returnOrThrow(false);
10997 counter++;
10998 } catch (ex) {
10999 counter++;
11000 throw 2 + ex;
11001 counter++;
11002 } finally {
11003 counter++;
11004 throw 25;
11005 counter++;
11006 }
11007 counter++;
11008 }
11009 assertOptThrowsWith(25, f);
11010 assertEquals(4, counter);
11011
11012 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchWithLocal,
11013 // catchThrows, doFinally, finallyThrows, endReturnLocal]
11014
11015 counter = 0;
11016 var f = function() {
11017 var local = 3;
11018 try {
11019 counter++;
11020 return returnOrThrow(false);
11021 counter++;
11022 } catch (ex) {
11023 counter++;
11024 throw 2 + ex;
11025 counter++;
11026 } finally {
11027 counter++;
11028 throw 25;
11029 counter++;
11030 }
11031 counter++;
11032 return 5 + local;
11033 }
11034 assertOptThrowsWith(25, f);
11035 assertEquals(4, counter);
11036
11037 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchWithLocal,
11038 // catchThrows, doFinally, finallyReturns]
11039
11040 counter = 0;
11041 var f = function() {
11042 var local = 3;
11043 try {
11044 counter++;
11045 return returnOrThrow(false);
11046 counter++;
11047 } catch (ex) {
11048 counter++;
11049 throw 2 + ex;
11050 counter++;
11051 } finally {
11052 counter++;
11053 return 3 + local;
11054 counter++;
11055 }
11056 counter++;
11057 }
11058 assertOptResultEquals(6, f);
11059 assertEquals(4, counter);
11060
11061 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchWithLocal,
11062 // catchThrows, doFinally, finallyReturns, endReturnLocal]
11063
11064 counter = 0;
11065 var f = function() {
11066 var local = 3;
11067 try {
11068 counter++;
11069 return returnOrThrow(false);
11070 counter++;
11071 } catch (ex) {
11072 counter++;
11073 throw 2 + ex;
11074 counter++;
11075 } finally {
11076 counter++;
11077 return 3 + local;
11078 counter++;
11079 }
11080 counter++;
11081 return 5 + local;
11082 }
11083 assertOptResultEquals(6, f);
11084 assertEquals(4, counter);
11085
11086 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns]
11087
11088 counter = 0;
11089 var f = function() {
11090 var local = 3;
11091 try {
11092 counter++;
11093 return returnOrThrow(false);
11094 counter++;
11095 } catch (ex) {
11096 counter++;
11097 return 2 + ex;
11098 counter++;
11099 }
11100 counter++;
11101 }
11102 assertOptResultEquals(44, f);
11103 assertEquals(3, counter);
11104
11105 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns,
11106 // endReturnLocal]
11107
11108 counter = 0;
11109 var f = function() {
11110 var local = 3;
11111 try {
11112 counter++;
11113 return returnOrThrow(false);
11114 counter++;
11115 } catch (ex) {
11116 counter++;
11117 return 2 + ex;
11118 counter++;
11119 }
11120 counter++;
11121 return 5 + local;
11122 }
11123 assertOptResultEquals(44, f);
11124 assertEquals(3, counter);
11125
11126 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns,
11127 // doFinally]
11128
11129 counter = 0;
11130 var f = function() {
11131 var local = 3;
11132 try {
11133 counter++;
11134 return returnOrThrow(false);
11135 counter++;
11136 } catch (ex) {
11137 counter++;
11138 return 2 + ex;
11139 counter++;
11140 } finally {
11141 counter++;
11142 local += 2;
11143 counter++;
11144 }
11145 counter++;
11146 }
11147 assertOptResultEquals(44, f);
11148 assertEquals(5, counter);
11149
11150 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns,
11151 // doFinally, endReturnLocal]
11152
11153 counter = 0;
11154 var f = function() {
11155 var local = 3;
11156 try {
11157 counter++;
11158 return returnOrThrow(false);
11159 counter++;
11160 } catch (ex) {
11161 counter++;
11162 return 2 + ex;
11163 counter++;
11164 } finally {
11165 counter++;
11166 local += 2;
11167 counter++;
11168 }
11169 counter++;
11170 return 5 + local;
11171 }
11172 assertOptResultEquals(44, f);
11173 assertEquals(5, counter);
11174
11175 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns,
11176 // doFinally, finallyThrows]
11177
11178 counter = 0;
11179 var f = function() {
11180 var local = 3;
11181 try {
11182 counter++;
11183 return returnOrThrow(false);
11184 counter++;
11185 } catch (ex) {
11186 counter++;
11187 return 2 + ex;
11188 counter++;
11189 } finally {
11190 counter++;
11191 throw 25;
11192 counter++;
11193 }
11194 counter++;
11195 }
11196 assertOptThrowsWith(25, f);
11197 assertEquals(4, counter);
11198
11199 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns,
11200 // doFinally, finallyThrows, endReturnLocal]
11201
11202 counter = 0;
11203 var f = function() {
11204 var local = 3;
11205 try {
11206 counter++;
11207 return returnOrThrow(false);
11208 counter++;
11209 } catch (ex) {
11210 counter++;
11211 return 2 + ex;
11212 counter++;
11213 } finally {
11214 counter++;
11215 throw 25;
11216 counter++;
11217 }
11218 counter++;
11219 return 5 + local;
11220 }
11221 assertOptThrowsWith(25, f);
11222 assertEquals(4, counter);
11223
11224 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns,
11225 // doFinally, finallyReturns]
11226
11227 counter = 0;
11228 var f = function() {
11229 var local = 3;
11230 try {
11231 counter++;
11232 return returnOrThrow(false);
11233 counter++;
11234 } catch (ex) {
11235 counter++;
11236 return 2 + ex;
11237 counter++;
11238 } finally {
11239 counter++;
11240 return 3 + local;
11241 counter++;
11242 }
11243 counter++;
11244 }
11245 assertOptResultEquals(6, f);
11246 assertEquals(4, counter);
11247
11248 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns,
11249 // doFinally, finallyReturns, endReturnLocal]
11250
11251 counter = 0;
11252 var f = function() {
11253 var local = 3;
11254 try {
11255 counter++;
11256 return returnOrThrow(false);
11257 counter++;
11258 } catch (ex) {
11259 counter++;
11260 return 2 + ex;
11261 counter++;
11262 } finally {
11263 counter++;
11264 return 3 + local;
11265 counter++;
11266 }
11267 counter++;
11268 return 5 + local;
11269 }
11270 assertOptResultEquals(6, f);
11271 assertEquals(4, counter);
11272
11273 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns,
11274 // catchWithLocal]
11275
11276 counter = 0;
11277 var f = function() {
11278 var local = 3;
11279 try {
11280 counter++;
11281 return returnOrThrow(false);
11282 counter++;
11283 } catch (ex) {
11284 counter++;
11285 return 2 + local;
11286 counter++;
11287 }
11288 counter++;
11289 }
11290 assertOptResultEquals(5, f);
11291 assertEquals(3, counter);
11292
11293 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns,
11294 // catchWithLocal, endReturnLocal]
11295
11296 counter = 0;
11297 var f = function() {
11298 var local = 3;
11299 try {
11300 counter++;
11301 return returnOrThrow(false);
11302 counter++;
11303 } catch (ex) {
11304 counter++;
11305 return 2 + local;
11306 counter++;
11307 }
11308 counter++;
11309 return 5 + local;
11310 }
11311 assertOptResultEquals(5, f);
11312 assertEquals(3, counter);
11313
11314 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns,
11315 // catchWithLocal, doFinally]
11316
11317 counter = 0;
11318 var f = function() {
11319 var local = 3;
11320 try {
11321 counter++;
11322 return returnOrThrow(false);
11323 counter++;
11324 } catch (ex) {
11325 counter++;
11326 return 2 + local;
11327 counter++;
11328 } finally {
11329 counter++;
11330 local += 2;
11331 counter++;
11332 }
11333 counter++;
11334 }
11335 assertOptResultEquals(5, f);
11336 assertEquals(5, counter);
11337
11338 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns,
11339 // catchWithLocal, doFinally, endReturnLocal]
11340
11341 counter = 0;
11342 var f = function() {
11343 var local = 3;
11344 try {
11345 counter++;
11346 return returnOrThrow(false);
11347 counter++;
11348 } catch (ex) {
11349 counter++;
11350 return 2 + local;
11351 counter++;
11352 } finally {
11353 counter++;
11354 local += 2;
11355 counter++;
11356 }
11357 counter++;
11358 return 5 + local;
11359 }
11360 assertOptResultEquals(5, f);
11361 assertEquals(5, counter);
11362
11363 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns,
11364 // catchWithLocal, doFinally, finallyThrows]
11365
11366 counter = 0;
11367 var f = function() {
11368 var local = 3;
11369 try {
11370 counter++;
11371 return returnOrThrow(false);
11372 counter++;
11373 } catch (ex) {
11374 counter++;
11375 return 2 + local;
11376 counter++;
11377 } finally {
11378 counter++;
11379 throw 25;
11380 counter++;
11381 }
11382 counter++;
11383 }
11384 assertOptThrowsWith(25, f);
11385 assertEquals(4, counter);
11386
11387 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns,
11388 // catchWithLocal, doFinally, finallyThrows, endReturnLocal]
11389
11390 counter = 0;
11391 var f = function() {
11392 var local = 3;
11393 try {
11394 counter++;
11395 return returnOrThrow(false);
11396 counter++;
11397 } catch (ex) {
11398 counter++;
11399 return 2 + local;
11400 counter++;
11401 } finally {
11402 counter++;
11403 throw 25;
11404 counter++;
11405 }
11406 counter++;
11407 return 5 + local;
11408 }
11409 assertOptThrowsWith(25, f);
11410 assertEquals(4, counter);
11411
11412 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns,
11413 // catchWithLocal, doFinally, finallyReturns]
11414
11415 counter = 0;
11416 var f = function() {
11417 var local = 3;
11418 try {
11419 counter++;
11420 return returnOrThrow(false);
11421 counter++;
11422 } catch (ex) {
11423 counter++;
11424 return 2 + local;
11425 counter++;
11426 } finally {
11427 counter++;
11428 return 3 + local;
11429 counter++;
11430 }
11431 counter++;
11432 }
11433 assertOptResultEquals(6, f);
11434 assertEquals(4, counter);
11435
11436 // Variant flags: [alternativeFn1, tryThrows, doCatch, catchReturns,
11437 // catchWithLocal, doFinally, finallyReturns, endReturnLocal]
11438
11439 counter = 0;
11440 var f = function() {
11441 var local = 3;
11442 try {
11443 counter++;
11444 return returnOrThrow(false);
11445 counter++;
11446 } catch (ex) {
11447 counter++;
11448 return 2 + local;
11449 counter++;
11450 } finally {
11451 counter++;
11452 return 3 + local;
11453 counter++;
11454 }
11455 counter++;
11456 return 5 + local;
11457 }
11458 assertOptResultEquals(6, f);
11459 assertEquals(4, counter);
11460
11461 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11462 // doFinally]
11463
11464 counter = 0;
11465 var f = function() {
11466 var local = 3;
11467 try {
11468 counter++;
11469 local += returnOrThrow(false);
11470 counter++;
11471 } finally {
11472 counter++;
11473 local += 2;
11474 counter++;
11475 }
11476 counter++;
11477 }
11478 assertOptThrowsWith(42, f);
11479 assertEquals(4, counter);
11480
11481 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11482 // doFinally, endReturnLocal]
11483
11484 counter = 0;
11485 var f = function() {
11486 var local = 3;
11487 try {
11488 counter++;
11489 local += returnOrThrow(false);
11490 counter++;
11491 } finally {
11492 counter++;
11493 local += 2;
11494 counter++;
11495 }
11496 counter++;
11497 return 5 + local;
11498 }
11499 assertOptThrowsWith(42, f);
11500 assertEquals(4, counter);
11501
11502 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11503 // doFinally, finallyThrows]
11504
11505 counter = 0;
11506 var f = function() {
11507 var local = 3;
11508 try {
11509 counter++;
11510 local += returnOrThrow(false);
11511 counter++;
11512 } finally {
11513 counter++;
11514 throw 25;
11515 counter++;
11516 }
11517 counter++;
11518 }
11519 assertOptThrowsWith(25, f);
11520 assertEquals(3, counter);
11521
11522 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11523 // doFinally, finallyThrows, endReturnLocal]
11524
11525 counter = 0;
11526 var f = function() {
11527 var local = 3;
11528 try {
11529 counter++;
11530 local += returnOrThrow(false);
11531 counter++;
11532 } finally {
11533 counter++;
11534 throw 25;
11535 counter++;
11536 }
11537 counter++;
11538 return 5 + local;
11539 }
11540 assertOptThrowsWith(25, f);
11541 assertEquals(3, counter);
11542
11543 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11544 // doFinally, finallyReturns]
11545
11546 counter = 0;
11547 var f = function() {
11548 var local = 3;
11549 try {
11550 counter++;
11551 local += returnOrThrow(false);
11552 counter++;
11553 } finally {
11554 counter++;
11555 return 3 + local;
11556 counter++;
11557 }
11558 counter++;
11559 }
11560 assertOptResultEquals(6, f);
11561 assertEquals(3, counter);
11562
11563 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11564 // doFinally, finallyReturns, endReturnLocal]
11565
11566 counter = 0;
11567 var f = function() {
11568 var local = 3;
11569 try {
11570 counter++;
11571 local += returnOrThrow(false);
11572 counter++;
11573 } finally {
11574 counter++;
11575 return 3 + local;
11576 counter++;
11577 }
11578 counter++;
11579 return 5 + local;
11580 }
11581 assertOptResultEquals(6, f);
11582 assertEquals(3, counter);
11583
11584 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11585 // doCatch]
11586
11587 counter = 0;
11588 var f = function() {
11589 var local = 3;
11590 try {
11591 counter++;
11592 local += returnOrThrow(false);
11593 counter++;
11594 } catch (ex) {
11595 counter++;
11596 counter++;
11597 }
11598 counter++;
11599 }
11600 assertOptResultEquals(undefined, f);
11601 assertEquals(5, counter);
11602
11603 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11604 // doCatch, endReturnLocal]
11605
11606 counter = 0;
11607 var f = function() {
11608 var local = 3;
11609 try {
11610 counter++;
11611 local += returnOrThrow(false);
11612 counter++;
11613 } catch (ex) {
11614 counter++;
11615 counter++;
11616 }
11617 counter++;
11618 return 5 + local;
11619 }
11620 assertOptResultEquals(8, f);
11621 assertEquals(5, counter);
11622
11623 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11624 // doCatch, doFinally]
11625
11626 counter = 0;
11627 var f = function() {
11628 var local = 3;
11629 try {
11630 counter++;
11631 local += returnOrThrow(false);
11632 counter++;
11633 } catch (ex) {
11634 counter++;
11635 counter++;
11636 } finally {
11637 counter++;
11638 local += 2;
11639 counter++;
11640 }
11641 counter++;
11642 }
11643 assertOptResultEquals(undefined, f);
11644 assertEquals(7, counter);
11645
11646 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11647 // doCatch, doFinally, endReturnLocal]
11648
11649 counter = 0;
11650 var f = function() {
11651 var local = 3;
11652 try {
11653 counter++;
11654 local += returnOrThrow(false);
11655 counter++;
11656 } catch (ex) {
11657 counter++;
11658 counter++;
11659 } finally {
11660 counter++;
11661 local += 2;
11662 counter++;
11663 }
11664 counter++;
11665 return 5 + local;
11666 }
11667 assertOptResultEquals(10, f);
11668 assertEquals(7, counter);
11669
11670 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11671 // doCatch, doFinally, finallyThrows]
11672
11673 counter = 0;
11674 var f = function() {
11675 var local = 3;
11676 try {
11677 counter++;
11678 local += returnOrThrow(false);
11679 counter++;
11680 } catch (ex) {
11681 counter++;
11682 counter++;
11683 } finally {
11684 counter++;
11685 throw 25;
11686 counter++;
11687 }
11688 counter++;
11689 }
11690 assertOptThrowsWith(25, f);
11691 assertEquals(5, counter);
11692
11693 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11694 // doCatch, doFinally, finallyThrows, endReturnLocal]
11695
11696 counter = 0;
11697 var f = function() {
11698 var local = 3;
11699 try {
11700 counter++;
11701 local += returnOrThrow(false);
11702 counter++;
11703 } catch (ex) {
11704 counter++;
11705 counter++;
11706 } finally {
11707 counter++;
11708 throw 25;
11709 counter++;
11710 }
11711 counter++;
11712 return 5 + local;
11713 }
11714 assertOptThrowsWith(25, f);
11715 assertEquals(5, counter);
11716
11717 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11718 // doCatch, doFinally, finallyReturns]
11719
11720 counter = 0;
11721 var f = function() {
11722 var local = 3;
11723 try {
11724 counter++;
11725 local += returnOrThrow(false);
11726 counter++;
11727 } catch (ex) {
11728 counter++;
11729 counter++;
11730 } finally {
11731 counter++;
11732 return 3 + local;
11733 counter++;
11734 }
11735 counter++;
11736 }
11737 assertOptResultEquals(6, f);
11738 assertEquals(5, counter);
11739
11740 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11741 // doCatch, doFinally, finallyReturns, endReturnLocal]
11742
11743 counter = 0;
11744 var f = function() {
11745 var local = 3;
11746 try {
11747 counter++;
11748 local += returnOrThrow(false);
11749 counter++;
11750 } catch (ex) {
11751 counter++;
11752 counter++;
11753 } finally {
11754 counter++;
11755 return 3 + local;
11756 counter++;
11757 }
11758 counter++;
11759 return 5 + local;
11760 }
11761 assertOptResultEquals(6, f);
11762 assertEquals(5, counter);
11763
11764 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11765 // doCatch, catchThrows]
11766
11767 counter = 0;
11768 var f = function() {
11769 var local = 3;
11770 try {
11771 counter++;
11772 local += returnOrThrow(false);
11773 counter++;
11774 } catch (ex) {
11775 counter++;
11776 throw 2 + ex;
11777 counter++;
11778 }
11779 counter++;
11780 }
11781 assertOptThrowsWith(44, f);
11782 assertEquals(3, counter);
11783
11784 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11785 // doCatch, catchThrows, endReturnLocal]
11786
11787 counter = 0;
11788 var f = function() {
11789 var local = 3;
11790 try {
11791 counter++;
11792 local += returnOrThrow(false);
11793 counter++;
11794 } catch (ex) {
11795 counter++;
11796 throw 2 + ex;
11797 counter++;
11798 }
11799 counter++;
11800 return 5 + local;
11801 }
11802 assertOptThrowsWith(44, f);
11803 assertEquals(3, counter);
11804
11805 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11806 // doCatch, catchThrows, doFinally]
11807
11808 counter = 0;
11809 var f = function() {
11810 var local = 3;
11811 try {
11812 counter++;
11813 local += returnOrThrow(false);
11814 counter++;
11815 } catch (ex) {
11816 counter++;
11817 throw 2 + ex;
11818 counter++;
11819 } finally {
11820 counter++;
11821 local += 2;
11822 counter++;
11823 }
11824 counter++;
11825 }
11826 assertOptThrowsWith(44, f);
11827 assertEquals(5, counter);
11828
11829 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11830 // doCatch, catchThrows, doFinally, endReturnLocal]
11831
11832 counter = 0;
11833 var f = function() {
11834 var local = 3;
11835 try {
11836 counter++;
11837 local += returnOrThrow(false);
11838 counter++;
11839 } catch (ex) {
11840 counter++;
11841 throw 2 + ex;
11842 counter++;
11843 } finally {
11844 counter++;
11845 local += 2;
11846 counter++;
11847 }
11848 counter++;
11849 return 5 + local;
11850 }
11851 assertOptThrowsWith(44, f);
11852 assertEquals(5, counter);
11853
11854 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11855 // doCatch, catchThrows, doFinally, finallyThrows]
11856
11857 counter = 0;
11858 var f = function() {
11859 var local = 3;
11860 try {
11861 counter++;
11862 local += returnOrThrow(false);
11863 counter++;
11864 } catch (ex) {
11865 counter++;
11866 throw 2 + ex;
11867 counter++;
11868 } finally {
11869 counter++;
11870 throw 25;
11871 counter++;
11872 }
11873 counter++;
11874 }
11875 assertOptThrowsWith(25, f);
11876 assertEquals(4, counter);
11877
11878 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11879 // doCatch, catchThrows, doFinally, finallyThrows, endReturnLocal]
11880
11881 counter = 0;
11882 var f = function() {
11883 var local = 3;
11884 try {
11885 counter++;
11886 local += returnOrThrow(false);
11887 counter++;
11888 } catch (ex) {
11889 counter++;
11890 throw 2 + ex;
11891 counter++;
11892 } finally {
11893 counter++;
11894 throw 25;
11895 counter++;
11896 }
11897 counter++;
11898 return 5 + local;
11899 }
11900 assertOptThrowsWith(25, f);
11901 assertEquals(4, counter);
11902
11903 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11904 // doCatch, catchThrows, doFinally, finallyReturns]
11905
11906 counter = 0;
11907 var f = function() {
11908 var local = 3;
11909 try {
11910 counter++;
11911 local += returnOrThrow(false);
11912 counter++;
11913 } catch (ex) {
11914 counter++;
11915 throw 2 + ex;
11916 counter++;
11917 } finally {
11918 counter++;
11919 return 3 + local;
11920 counter++;
11921 }
11922 counter++;
11923 }
11924 assertOptResultEquals(6, f);
11925 assertEquals(4, counter);
11926
11927 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11928 // doCatch, catchThrows, doFinally, finallyReturns, endReturnLocal]
11929
11930 counter = 0;
11931 var f = function() {
11932 var local = 3;
11933 try {
11934 counter++;
11935 local += returnOrThrow(false);
11936 counter++;
11937 } catch (ex) {
11938 counter++;
11939 throw 2 + ex;
11940 counter++;
11941 } finally {
11942 counter++;
11943 return 3 + local;
11944 counter++;
11945 }
11946 counter++;
11947 return 5 + local;
11948 }
11949 assertOptResultEquals(6, f);
11950 assertEquals(4, counter);
11951
11952 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11953 // doCatch, catchWithLocal]
11954
11955 counter = 0;
11956 var f = function() {
11957 var local = 3;
11958 try {
11959 counter++;
11960 local += returnOrThrow(false);
11961 counter++;
11962 } catch (ex) {
11963 counter++;
11964 local += ex;
11965 counter++;
11966 }
11967 counter++;
11968 }
11969 assertOptResultEquals(undefined, f);
11970 assertEquals(5, counter);
11971
11972 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11973 // doCatch, catchWithLocal, endReturnLocal]
11974
11975 counter = 0;
11976 var f = function() {
11977 var local = 3;
11978 try {
11979 counter++;
11980 local += returnOrThrow(false);
11981 counter++;
11982 } catch (ex) {
11983 counter++;
11984 local += ex;
11985 counter++;
11986 }
11987 counter++;
11988 return 5 + local;
11989 }
11990 assertOptResultEquals(50, f);
11991 assertEquals(5, counter);
11992
11993 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
11994 // doCatch, catchWithLocal, doFinally]
11995
11996 counter = 0;
11997 var f = function() {
11998 var local = 3;
11999 try {
12000 counter++;
12001 local += returnOrThrow(false);
12002 counter++;
12003 } catch (ex) {
12004 counter++;
12005 local += ex;
12006 counter++;
12007 } finally {
12008 counter++;
12009 local += 2;
12010 counter++;
12011 }
12012 counter++;
12013 }
12014 assertOptResultEquals(undefined, f);
12015 assertEquals(7, counter);
12016
12017 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12018 // doCatch, catchWithLocal, doFinally, endReturnLocal]
12019
12020 counter = 0;
12021 var f = function() {
12022 var local = 3;
12023 try {
12024 counter++;
12025 local += returnOrThrow(false);
12026 counter++;
12027 } catch (ex) {
12028 counter++;
12029 local += ex;
12030 counter++;
12031 } finally {
12032 counter++;
12033 local += 2;
12034 counter++;
12035 }
12036 counter++;
12037 return 5 + local;
12038 }
12039 assertOptResultEquals(52, f);
12040 assertEquals(7, counter);
12041
12042 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12043 // doCatch, catchWithLocal, doFinally, finallyThrows]
12044
12045 counter = 0;
12046 var f = function() {
12047 var local = 3;
12048 try {
12049 counter++;
12050 local += returnOrThrow(false);
12051 counter++;
12052 } catch (ex) {
12053 counter++;
12054 local += ex;
12055 counter++;
12056 } finally {
12057 counter++;
12058 throw 25;
12059 counter++;
12060 }
12061 counter++;
12062 }
12063 assertOptThrowsWith(25, f);
12064 assertEquals(5, counter);
12065
12066 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12067 // doCatch, catchWithLocal, doFinally, finallyThrows,
12068 // endReturnLocal]
12069
12070 counter = 0;
12071 var f = function() {
12072 var local = 3;
12073 try {
12074 counter++;
12075 local += returnOrThrow(false);
12076 counter++;
12077 } catch (ex) {
12078 counter++;
12079 local += ex;
12080 counter++;
12081 } finally {
12082 counter++;
12083 throw 25;
12084 counter++;
12085 }
12086 counter++;
12087 return 5 + local;
12088 }
12089 assertOptThrowsWith(25, f);
12090 assertEquals(5, counter);
12091
12092 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12093 // doCatch, catchWithLocal, doFinally, finallyReturns]
12094
12095 counter = 0;
12096 var f = function() {
12097 var local = 3;
12098 try {
12099 counter++;
12100 local += returnOrThrow(false);
12101 counter++;
12102 } catch (ex) {
12103 counter++;
12104 local += ex;
12105 counter++;
12106 } finally {
12107 counter++;
12108 return 3 + local;
12109 counter++;
12110 }
12111 counter++;
12112 }
12113 assertOptResultEquals(48, f);
12114 assertEquals(5, counter);
12115
12116 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12117 // doCatch, catchWithLocal, doFinally, finallyReturns,
12118 // endReturnLocal]
12119
12120 counter = 0;
12121 var f = function() {
12122 var local = 3;
12123 try {
12124 counter++;
12125 local += returnOrThrow(false);
12126 counter++;
12127 } catch (ex) {
12128 counter++;
12129 local += ex;
12130 counter++;
12131 } finally {
12132 counter++;
12133 return 3 + local;
12134 counter++;
12135 }
12136 counter++;
12137 return 5 + local;
12138 }
12139 assertOptResultEquals(48, f);
12140 assertEquals(5, counter);
12141
12142 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12143 // doCatch, catchWithLocal, catchThrows]
12144
12145 counter = 0;
12146 var f = function() {
12147 var local = 3;
12148 try {
12149 counter++;
12150 local += returnOrThrow(false);
12151 counter++;
12152 } catch (ex) {
12153 counter++;
12154 throw 2 + ex;
12155 counter++;
12156 }
12157 counter++;
12158 }
12159 assertOptThrowsWith(44, f);
12160 assertEquals(3, counter);
12161
12162 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12163 // doCatch, catchWithLocal, catchThrows, endReturnLocal]
12164
12165 counter = 0;
12166 var f = function() {
12167 var local = 3;
12168 try {
12169 counter++;
12170 local += returnOrThrow(false);
12171 counter++;
12172 } catch (ex) {
12173 counter++;
12174 throw 2 + ex;
12175 counter++;
12176 }
12177 counter++;
12178 return 5 + local;
12179 }
12180 assertOptThrowsWith(44, f);
12181 assertEquals(3, counter);
12182
12183 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12184 // doCatch, catchWithLocal, catchThrows, doFinally]
12185
12186 counter = 0;
12187 var f = function() {
12188 var local = 3;
12189 try {
12190 counter++;
12191 local += returnOrThrow(false);
12192 counter++;
12193 } catch (ex) {
12194 counter++;
12195 throw 2 + ex;
12196 counter++;
12197 } finally {
12198 counter++;
12199 local += 2;
12200 counter++;
12201 }
12202 counter++;
12203 }
12204 assertOptThrowsWith(44, f);
12205 assertEquals(5, counter);
12206
12207 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12208 // doCatch, catchWithLocal, catchThrows, doFinally, endReturnLocal]
12209
12210 counter = 0;
12211 var f = function() {
12212 var local = 3;
12213 try {
12214 counter++;
12215 local += returnOrThrow(false);
12216 counter++;
12217 } catch (ex) {
12218 counter++;
12219 throw 2 + ex;
12220 counter++;
12221 } finally {
12222 counter++;
12223 local += 2;
12224 counter++;
12225 }
12226 counter++;
12227 return 5 + local;
12228 }
12229 assertOptThrowsWith(44, f);
12230 assertEquals(5, counter);
12231
12232 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12233 // doCatch, catchWithLocal, catchThrows, doFinally, finallyThrows]
12234
12235 counter = 0;
12236 var f = function() {
12237 var local = 3;
12238 try {
12239 counter++;
12240 local += returnOrThrow(false);
12241 counter++;
12242 } catch (ex) {
12243 counter++;
12244 throw 2 + ex;
12245 counter++;
12246 } finally {
12247 counter++;
12248 throw 25;
12249 counter++;
12250 }
12251 counter++;
12252 }
12253 assertOptThrowsWith(25, f);
12254 assertEquals(4, counter);
12255
12256 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12257 // doCatch, catchWithLocal, catchThrows, doFinally, finallyThrows,
12258 // endReturnLocal]
12259
12260 counter = 0;
12261 var f = function() {
12262 var local = 3;
12263 try {
12264 counter++;
12265 local += returnOrThrow(false);
12266 counter++;
12267 } catch (ex) {
12268 counter++;
12269 throw 2 + ex;
12270 counter++;
12271 } finally {
12272 counter++;
12273 throw 25;
12274 counter++;
12275 }
12276 counter++;
12277 return 5 + local;
12278 }
12279 assertOptThrowsWith(25, f);
12280 assertEquals(4, counter);
12281
12282 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12283 // doCatch, catchWithLocal, catchThrows, doFinally, finallyReturns]
12284
12285 counter = 0;
12286 var f = function() {
12287 var local = 3;
12288 try {
12289 counter++;
12290 local += returnOrThrow(false);
12291 counter++;
12292 } catch (ex) {
12293 counter++;
12294 throw 2 + ex;
12295 counter++;
12296 } finally {
12297 counter++;
12298 return 3 + local;
12299 counter++;
12300 }
12301 counter++;
12302 }
12303 assertOptResultEquals(6, f);
12304 assertEquals(4, counter);
12305
12306 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12307 // doCatch, catchWithLocal, catchThrows, doFinally, finallyReturns,
12308 // endReturnLocal]
12309
12310 counter = 0;
12311 var f = function() {
12312 var local = 3;
12313 try {
12314 counter++;
12315 local += returnOrThrow(false);
12316 counter++;
12317 } catch (ex) {
12318 counter++;
12319 throw 2 + ex;
12320 counter++;
12321 } finally {
12322 counter++;
12323 return 3 + local;
12324 counter++;
12325 }
12326 counter++;
12327 return 5 + local;
12328 }
12329 assertOptResultEquals(6, f);
12330 assertEquals(4, counter);
12331
12332 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12333 // doCatch, catchReturns]
12334
12335 counter = 0;
12336 var f = function() {
12337 var local = 3;
12338 try {
12339 counter++;
12340 local += returnOrThrow(false);
12341 counter++;
12342 } catch (ex) {
12343 counter++;
12344 return 2 + ex;
12345 counter++;
12346 }
12347 counter++;
12348 }
12349 assertOptResultEquals(44, f);
12350 assertEquals(3, counter);
12351
12352 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12353 // doCatch, catchReturns, endReturnLocal]
12354
12355 counter = 0;
12356 var f = function() {
12357 var local = 3;
12358 try {
12359 counter++;
12360 local += returnOrThrow(false);
12361 counter++;
12362 } catch (ex) {
12363 counter++;
12364 return 2 + ex;
12365 counter++;
12366 }
12367 counter++;
12368 return 5 + local;
12369 }
12370 assertOptResultEquals(44, f);
12371 assertEquals(3, counter);
12372
12373 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12374 // doCatch, catchReturns, doFinally]
12375
12376 counter = 0;
12377 var f = function() {
12378 var local = 3;
12379 try {
12380 counter++;
12381 local += returnOrThrow(false);
12382 counter++;
12383 } catch (ex) {
12384 counter++;
12385 return 2 + ex;
12386 counter++;
12387 } finally {
12388 counter++;
12389 local += 2;
12390 counter++;
12391 }
12392 counter++;
12393 }
12394 assertOptResultEquals(44, f);
12395 assertEquals(5, counter);
12396
12397 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12398 // doCatch, catchReturns, doFinally, endReturnLocal]
12399
12400 counter = 0;
12401 var f = function() {
12402 var local = 3;
12403 try {
12404 counter++;
12405 local += returnOrThrow(false);
12406 counter++;
12407 } catch (ex) {
12408 counter++;
12409 return 2 + ex;
12410 counter++;
12411 } finally {
12412 counter++;
12413 local += 2;
12414 counter++;
12415 }
12416 counter++;
12417 return 5 + local;
12418 }
12419 assertOptResultEquals(44, f);
12420 assertEquals(5, counter);
12421
12422 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12423 // doCatch, catchReturns, doFinally, finallyThrows]
12424
12425 counter = 0;
12426 var f = function() {
12427 var local = 3;
12428 try {
12429 counter++;
12430 local += returnOrThrow(false);
12431 counter++;
12432 } catch (ex) {
12433 counter++;
12434 return 2 + ex;
12435 counter++;
12436 } finally {
12437 counter++;
12438 throw 25;
12439 counter++;
12440 }
12441 counter++;
12442 }
12443 assertOptThrowsWith(25, f);
12444 assertEquals(4, counter);
12445
12446 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12447 // doCatch, catchReturns, doFinally, finallyThrows, endReturnLocal]
12448
12449 counter = 0;
12450 var f = function() {
12451 var local = 3;
12452 try {
12453 counter++;
12454 local += returnOrThrow(false);
12455 counter++;
12456 } catch (ex) {
12457 counter++;
12458 return 2 + ex;
12459 counter++;
12460 } finally {
12461 counter++;
12462 throw 25;
12463 counter++;
12464 }
12465 counter++;
12466 return 5 + local;
12467 }
12468 assertOptThrowsWith(25, f);
12469 assertEquals(4, counter);
12470
12471 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12472 // doCatch, catchReturns, doFinally, finallyReturns]
12473
12474 counter = 0;
12475 var f = function() {
12476 var local = 3;
12477 try {
12478 counter++;
12479 local += returnOrThrow(false);
12480 counter++;
12481 } catch (ex) {
12482 counter++;
12483 return 2 + ex;
12484 counter++;
12485 } finally {
12486 counter++;
12487 return 3 + local;
12488 counter++;
12489 }
12490 counter++;
12491 }
12492 assertOptResultEquals(6, f);
12493 assertEquals(4, counter);
12494
12495 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12496 // doCatch, catchReturns, doFinally, finallyReturns, endReturnLocal]
12497
12498 counter = 0;
12499 var f = function() {
12500 var local = 3;
12501 try {
12502 counter++;
12503 local += returnOrThrow(false);
12504 counter++;
12505 } catch (ex) {
12506 counter++;
12507 return 2 + ex;
12508 counter++;
12509 } finally {
12510 counter++;
12511 return 3 + local;
12512 counter++;
12513 }
12514 counter++;
12515 return 5 + local;
12516 }
12517 assertOptResultEquals(6, f);
12518 assertEquals(4, counter);
12519
12520 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12521 // doCatch, catchReturns, catchWithLocal]
12522
12523 counter = 0;
12524 var f = function() {
12525 var local = 3;
12526 try {
12527 counter++;
12528 local += returnOrThrow(false);
12529 counter++;
12530 } catch (ex) {
12531 counter++;
12532 return 2 + local;
12533 counter++;
12534 }
12535 counter++;
12536 }
12537 assertOptResultEquals(5, f);
12538 assertEquals(3, counter);
12539
12540 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12541 // doCatch, catchReturns, catchWithLocal, endReturnLocal]
12542
12543 counter = 0;
12544 var f = function() {
12545 var local = 3;
12546 try {
12547 counter++;
12548 local += returnOrThrow(false);
12549 counter++;
12550 } catch (ex) {
12551 counter++;
12552 return 2 + local;
12553 counter++;
12554 }
12555 counter++;
12556 return 5 + local;
12557 }
12558 assertOptResultEquals(5, f);
12559 assertEquals(3, counter);
12560
12561 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12562 // doCatch, catchReturns, catchWithLocal, doFinally]
12563
12564 counter = 0;
12565 var f = function() {
12566 var local = 3;
12567 try {
12568 counter++;
12569 local += returnOrThrow(false);
12570 counter++;
12571 } catch (ex) {
12572 counter++;
12573 return 2 + local;
12574 counter++;
12575 } finally {
12576 counter++;
12577 local += 2;
12578 counter++;
12579 }
12580 counter++;
12581 }
12582 assertOptResultEquals(5, f);
12583 assertEquals(5, counter);
12584
12585 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12586 // doCatch, catchReturns, catchWithLocal, doFinally, endReturnLocal]
12587
12588 counter = 0;
12589 var f = function() {
12590 var local = 3;
12591 try {
12592 counter++;
12593 local += returnOrThrow(false);
12594 counter++;
12595 } catch (ex) {
12596 counter++;
12597 return 2 + local;
12598 counter++;
12599 } finally {
12600 counter++;
12601 local += 2;
12602 counter++;
12603 }
12604 counter++;
12605 return 5 + local;
12606 }
12607 assertOptResultEquals(5, f);
12608 assertEquals(5, counter);
12609
12610 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12611 // doCatch, catchReturns, catchWithLocal, doFinally, finallyThrows]
12612
12613 counter = 0;
12614 var f = function() {
12615 var local = 3;
12616 try {
12617 counter++;
12618 local += returnOrThrow(false);
12619 counter++;
12620 } catch (ex) {
12621 counter++;
12622 return 2 + local;
12623 counter++;
12624 } finally {
12625 counter++;
12626 throw 25;
12627 counter++;
12628 }
12629 counter++;
12630 }
12631 assertOptThrowsWith(25, f);
12632 assertEquals(4, counter);
12633
12634 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12635 // doCatch, catchReturns, catchWithLocal, doFinally, finallyThrows,
12636 // endReturnLocal]
12637
12638 counter = 0;
12639 var f = function() {
12640 var local = 3;
12641 try {
12642 counter++;
12643 local += returnOrThrow(false);
12644 counter++;
12645 } catch (ex) {
12646 counter++;
12647 return 2 + local;
12648 counter++;
12649 } finally {
12650 counter++;
12651 throw 25;
12652 counter++;
12653 }
12654 counter++;
12655 return 5 + local;
12656 }
12657 assertOptThrowsWith(25, f);
12658 assertEquals(4, counter);
12659
12660 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12661 // doCatch, catchReturns, catchWithLocal, doFinally, finallyReturns]
12662
12663 counter = 0;
12664 var f = function() {
12665 var local = 3;
12666 try {
12667 counter++;
12668 local += returnOrThrow(false);
12669 counter++;
12670 } catch (ex) {
12671 counter++;
12672 return 2 + local;
12673 counter++;
12674 } finally {
12675 counter++;
12676 return 3 + local;
12677 counter++;
12678 }
12679 counter++;
12680 }
12681 assertOptResultEquals(6, f);
12682 assertEquals(4, counter);
12683
12684 // Variant flags: [alternativeFn1, tryThrows, tryResultToLocal,
12685 // doCatch, catchReturns, catchWithLocal, doFinally, finallyReturns,
12686 // endReturnLocal]
12687
12688 counter = 0;
12689 var f = function() {
12690 var local = 3;
12691 try {
12692 counter++;
12693 local += returnOrThrow(false);
12694 counter++;
12695 } catch (ex) {
12696 counter++;
12697 return 2 + local;
12698 counter++;
12699 } finally {
12700 counter++;
12701 return 3 + local;
12702 counter++;
12703 }
12704 counter++;
12705 return 5 + local;
12706 }
12707 assertOptResultEquals(6, f);
12708 assertEquals(4, counter);
12709
12710 // Variant flags: [alternativeFn1, tryReturns, doFinally]
12711
12712 counter = 0;
12713 var f = function() {
12714 var local = 3;
12715 try {
12716 counter++;
12717 return returnOrThrow(true);
12718 counter++;
12719 } finally {
12720 counter++;
12721 local += 2;
12722 counter++;
12723 }
12724 counter++;
12725 }
12726 assertOptResultEquals(15, f);
12727 assertEquals(4, counter);
12728
12729 // Variant flags: [alternativeFn1, tryReturns, doFinally,
12730 // endReturnLocal]
12731
12732 counter = 0;
12733 var f = function() {
12734 var local = 3;
12735 try {
12736 counter++;
12737 return returnOrThrow(true);
12738 counter++;
12739 } finally {
12740 counter++;
12741 local += 2;
12742 counter++;
12743 }
12744 counter++;
12745 return 5 + local;
12746 }
12747 assertOptResultEquals(15, f);
12748 assertEquals(4, counter);
12749
12750 // Variant flags: [alternativeFn1, tryReturns, doFinally,
12751 // finallyThrows]
12752
12753 counter = 0;
12754 var f = function() {
12755 var local = 3;
12756 try {
12757 counter++;
12758 return returnOrThrow(true);
12759 counter++;
12760 } finally {
12761 counter++;
12762 throw 25;
12763 counter++;
12764 }
12765 counter++;
12766 }
12767 assertOptThrowsWith(25, f);
12768 assertEquals(3, counter);
12769
12770 // Variant flags: [alternativeFn1, tryReturns, doFinally,
12771 // finallyThrows, endReturnLocal]
12772
12773 counter = 0;
12774 var f = function() {
12775 var local = 3;
12776 try {
12777 counter++;
12778 return returnOrThrow(true);
12779 counter++;
12780 } finally {
12781 counter++;
12782 throw 25;
12783 counter++;
12784 }
12785 counter++;
12786 return 5 + local;
12787 }
12788 assertOptThrowsWith(25, f);
12789 assertEquals(3, counter);
12790
12791 // Variant flags: [alternativeFn1, tryReturns, doFinally,
12792 // finallyReturns]
12793
12794 counter = 0;
12795 var f = function() {
12796 var local = 3;
12797 try {
12798 counter++;
12799 return returnOrThrow(true);
12800 counter++;
12801 } finally {
12802 counter++;
12803 return 3 + local;
12804 counter++;
12805 }
12806 counter++;
12807 }
12808 assertOptResultEquals(6, f);
12809 assertEquals(3, counter);
12810
12811 // Variant flags: [alternativeFn1, tryReturns, doFinally,
12812 // finallyReturns, endReturnLocal]
12813
12814 counter = 0;
12815 var f = function() {
12816 var local = 3;
12817 try {
12818 counter++;
12819 return returnOrThrow(true);
12820 counter++;
12821 } finally {
12822 counter++;
12823 return 3 + local;
12824 counter++;
12825 }
12826 counter++;
12827 return 5 + local;
12828 }
12829 assertOptResultEquals(6, f);
12830 assertEquals(3, counter);
12831
12832 // Variant flags: [alternativeFn1, tryReturns, doCatch]
12833
12834 counter = 0;
12835 var f = function() {
12836 var local = 3;
12837 try {
12838 counter++;
12839 return returnOrThrow(true);
12840 counter++;
12841 } catch (ex) {
12842 counter++;
12843 counter++;
12844 }
12845 counter++;
12846 }
12847 assertOptResultEquals(15, f);
12848 assertEquals(2, counter);
12849
12850 // Variant flags: [alternativeFn1, tryReturns, doCatch,
12851 // endReturnLocal]
12852
12853 counter = 0;
12854 var f = function() {
12855 var local = 3;
12856 try {
12857 counter++;
12858 return returnOrThrow(true);
12859 counter++;
12860 } catch (ex) {
12861 counter++;
12862 counter++;
12863 }
12864 counter++;
12865 return 5 + local;
12866 }
12867 assertOptResultEquals(15, f);
12868 assertEquals(2, counter);
12869
12870 // Variant flags: [alternativeFn1, tryReturns, doCatch, doFinally]
12871
12872 counter = 0;
12873 var f = function() {
12874 var local = 3;
12875 try {
12876 counter++;
12877 return returnOrThrow(true);
12878 counter++;
12879 } catch (ex) {
12880 counter++;
12881 counter++;
12882 } finally {
12883 counter++;
12884 local += 2;
12885 counter++;
12886 }
12887 counter++;
12888 }
12889 assertOptResultEquals(15, f);
12890 assertEquals(4, counter);
12891
12892 // Variant flags: [alternativeFn1, tryReturns, doCatch, doFinally,
12893 // endReturnLocal]
12894
12895 counter = 0;
12896 var f = function() {
12897 var local = 3;
12898 try {
12899 counter++;
12900 return returnOrThrow(true);
12901 counter++;
12902 } catch (ex) {
12903 counter++;
12904 counter++;
12905 } finally {
12906 counter++;
12907 local += 2;
12908 counter++;
12909 }
12910 counter++;
12911 return 5 + local;
12912 }
12913 assertOptResultEquals(15, f);
12914 assertEquals(4, counter);
12915
12916 // Variant flags: [alternativeFn1, tryReturns, doCatch, doFinally,
12917 // finallyThrows]
12918
12919 counter = 0;
12920 var f = function() {
12921 var local = 3;
12922 try {
12923 counter++;
12924 return returnOrThrow(true);
12925 counter++;
12926 } catch (ex) {
12927 counter++;
12928 counter++;
12929 } finally {
12930 counter++;
12931 throw 25;
12932 counter++;
12933 }
12934 counter++;
12935 }
12936 assertOptThrowsWith(25, f);
12937 assertEquals(3, counter);
12938
12939 // Variant flags: [alternativeFn1, tryReturns, doCatch, doFinally,
12940 // finallyThrows, endReturnLocal]
12941
12942 counter = 0;
12943 var f = function() {
12944 var local = 3;
12945 try {
12946 counter++;
12947 return returnOrThrow(true);
12948 counter++;
12949 } catch (ex) {
12950 counter++;
12951 counter++;
12952 } finally {
12953 counter++;
12954 throw 25;
12955 counter++;
12956 }
12957 counter++;
12958 return 5 + local;
12959 }
12960 assertOptThrowsWith(25, f);
12961 assertEquals(3, counter);
12962
12963 // Variant flags: [alternativeFn1, tryReturns, doCatch, doFinally,
12964 // finallyReturns]
12965
12966 counter = 0;
12967 var f = function() {
12968 var local = 3;
12969 try {
12970 counter++;
12971 return returnOrThrow(true);
12972 counter++;
12973 } catch (ex) {
12974 counter++;
12975 counter++;
12976 } finally {
12977 counter++;
12978 return 3 + local;
12979 counter++;
12980 }
12981 counter++;
12982 }
12983 assertOptResultEquals(6, f);
12984 assertEquals(3, counter);
12985
12986 // Variant flags: [alternativeFn1, tryReturns, doCatch, doFinally,
12987 // finallyReturns, endReturnLocal]
12988
12989 counter = 0;
12990 var f = function() {
12991 var local = 3;
12992 try {
12993 counter++;
12994 return returnOrThrow(true);
12995 counter++;
12996 } catch (ex) {
12997 counter++;
12998 counter++;
12999 } finally {
13000 counter++;
13001 return 3 + local;
13002 counter++;
13003 }
13004 counter++;
13005 return 5 + local;
13006 }
13007 assertOptResultEquals(6, f);
13008 assertEquals(3, counter);
13009
13010 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchThrows]
13011
13012 counter = 0;
13013 var f = function() {
13014 var local = 3;
13015 try {
13016 counter++;
13017 return returnOrThrow(true);
13018 counter++;
13019 } catch (ex) {
13020 counter++;
13021 throw 2 + ex;
13022 counter++;
13023 }
13024 counter++;
13025 }
13026 assertOptResultEquals(15, f);
13027 assertEquals(2, counter);
13028
13029 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchThrows,
13030 // endReturnLocal]
13031
13032 counter = 0;
13033 var f = function() {
13034 var local = 3;
13035 try {
13036 counter++;
13037 return returnOrThrow(true);
13038 counter++;
13039 } catch (ex) {
13040 counter++;
13041 throw 2 + ex;
13042 counter++;
13043 }
13044 counter++;
13045 return 5 + local;
13046 }
13047 assertOptResultEquals(15, f);
13048 assertEquals(2, counter);
13049
13050 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchThrows,
13051 // doFinally]
13052
13053 counter = 0;
13054 var f = function() {
13055 var local = 3;
13056 try {
13057 counter++;
13058 return returnOrThrow(true);
13059 counter++;
13060 } catch (ex) {
13061 counter++;
13062 throw 2 + ex;
13063 counter++;
13064 } finally {
13065 counter++;
13066 local += 2;
13067 counter++;
13068 }
13069 counter++;
13070 }
13071 assertOptResultEquals(15, f);
13072 assertEquals(4, counter);
13073
13074 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchThrows,
13075 // doFinally, endReturnLocal]
13076
13077 counter = 0;
13078 var f = function() {
13079 var local = 3;
13080 try {
13081 counter++;
13082 return returnOrThrow(true);
13083 counter++;
13084 } catch (ex) {
13085 counter++;
13086 throw 2 + ex;
13087 counter++;
13088 } finally {
13089 counter++;
13090 local += 2;
13091 counter++;
13092 }
13093 counter++;
13094 return 5 + local;
13095 }
13096 assertOptResultEquals(15, f);
13097 assertEquals(4, counter);
13098
13099 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchThrows,
13100 // doFinally, finallyThrows]
13101
13102 counter = 0;
13103 var f = function() {
13104 var local = 3;
13105 try {
13106 counter++;
13107 return returnOrThrow(true);
13108 counter++;
13109 } catch (ex) {
13110 counter++;
13111 throw 2 + ex;
13112 counter++;
13113 } finally {
13114 counter++;
13115 throw 25;
13116 counter++;
13117 }
13118 counter++;
13119 }
13120 assertOptThrowsWith(25, f);
13121 assertEquals(3, counter);
13122
13123 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchThrows,
13124 // doFinally, finallyThrows, endReturnLocal]
13125
13126 counter = 0;
13127 var f = function() {
13128 var local = 3;
13129 try {
13130 counter++;
13131 return returnOrThrow(true);
13132 counter++;
13133 } catch (ex) {
13134 counter++;
13135 throw 2 + ex;
13136 counter++;
13137 } finally {
13138 counter++;
13139 throw 25;
13140 counter++;
13141 }
13142 counter++;
13143 return 5 + local;
13144 }
13145 assertOptThrowsWith(25, f);
13146 assertEquals(3, counter);
13147
13148 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchThrows,
13149 // doFinally, finallyReturns]
13150
13151 counter = 0;
13152 var f = function() {
13153 var local = 3;
13154 try {
13155 counter++;
13156 return returnOrThrow(true);
13157 counter++;
13158 } catch (ex) {
13159 counter++;
13160 throw 2 + ex;
13161 counter++;
13162 } finally {
13163 counter++;
13164 return 3 + local;
13165 counter++;
13166 }
13167 counter++;
13168 }
13169 assertOptResultEquals(6, f);
13170 assertEquals(3, counter);
13171
13172 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchThrows,
13173 // doFinally, finallyReturns, endReturnLocal]
13174
13175 counter = 0;
13176 var f = function() {
13177 var local = 3;
13178 try {
13179 counter++;
13180 return returnOrThrow(true);
13181 counter++;
13182 } catch (ex) {
13183 counter++;
13184 throw 2 + ex;
13185 counter++;
13186 } finally {
13187 counter++;
13188 return 3 + local;
13189 counter++;
13190 }
13191 counter++;
13192 return 5 + local;
13193 }
13194 assertOptResultEquals(6, f);
13195 assertEquals(3, counter);
13196
13197 // Variant flags: [alternativeFn1, tryReturns, doCatch,
13198 // catchWithLocal]
13199
13200 counter = 0;
13201 var f = function() {
13202 var local = 3;
13203 try {
13204 counter++;
13205 return returnOrThrow(true);
13206 counter++;
13207 } catch (ex) {
13208 counter++;
13209 local += ex;
13210 counter++;
13211 }
13212 counter++;
13213 }
13214 assertOptResultEquals(15, f);
13215 assertEquals(2, counter);
13216
13217 // Variant flags: [alternativeFn1, tryReturns, doCatch,
13218 // catchWithLocal, endReturnLocal]
13219
13220 counter = 0;
13221 var f = function() {
13222 var local = 3;
13223 try {
13224 counter++;
13225 return returnOrThrow(true);
13226 counter++;
13227 } catch (ex) {
13228 counter++;
13229 local += ex;
13230 counter++;
13231 }
13232 counter++;
13233 return 5 + local;
13234 }
13235 assertOptResultEquals(15, f);
13236 assertEquals(2, counter);
13237
13238 // Variant flags: [alternativeFn1, tryReturns, doCatch,
13239 // catchWithLocal, doFinally]
13240
13241 counter = 0;
13242 var f = function() {
13243 var local = 3;
13244 try {
13245 counter++;
13246 return returnOrThrow(true);
13247 counter++;
13248 } catch (ex) {
13249 counter++;
13250 local += ex;
13251 counter++;
13252 } finally {
13253 counter++;
13254 local += 2;
13255 counter++;
13256 }
13257 counter++;
13258 }
13259 assertOptResultEquals(15, f);
13260 assertEquals(4, counter);
13261
13262 // Variant flags: [alternativeFn1, tryReturns, doCatch,
13263 // catchWithLocal, doFinally, endReturnLocal]
13264
13265 counter = 0;
13266 var f = function() {
13267 var local = 3;
13268 try {
13269 counter++;
13270 return returnOrThrow(true);
13271 counter++;
13272 } catch (ex) {
13273 counter++;
13274 local += ex;
13275 counter++;
13276 } finally {
13277 counter++;
13278 local += 2;
13279 counter++;
13280 }
13281 counter++;
13282 return 5 + local;
13283 }
13284 assertOptResultEquals(15, f);
13285 assertEquals(4, counter);
13286
13287 // Variant flags: [alternativeFn1, tryReturns, doCatch,
13288 // catchWithLocal, doFinally, finallyThrows]
13289
13290 counter = 0;
13291 var f = function() {
13292 var local = 3;
13293 try {
13294 counter++;
13295 return returnOrThrow(true);
13296 counter++;
13297 } catch (ex) {
13298 counter++;
13299 local += ex;
13300 counter++;
13301 } finally {
13302 counter++;
13303 throw 25;
13304 counter++;
13305 }
13306 counter++;
13307 }
13308 assertOptThrowsWith(25, f);
13309 assertEquals(3, counter);
13310
13311 // Variant flags: [alternativeFn1, tryReturns, doCatch,
13312 // catchWithLocal, doFinally, finallyThrows, endReturnLocal]
13313
13314 counter = 0;
13315 var f = function() {
13316 var local = 3;
13317 try {
13318 counter++;
13319 return returnOrThrow(true);
13320 counter++;
13321 } catch (ex) {
13322 counter++;
13323 local += ex;
13324 counter++;
13325 } finally {
13326 counter++;
13327 throw 25;
13328 counter++;
13329 }
13330 counter++;
13331 return 5 + local;
13332 }
13333 assertOptThrowsWith(25, f);
13334 assertEquals(3, counter);
13335
13336 // Variant flags: [alternativeFn1, tryReturns, doCatch,
13337 // catchWithLocal, doFinally, finallyReturns]
13338
13339 counter = 0;
13340 var f = function() {
13341 var local = 3;
13342 try {
13343 counter++;
13344 return returnOrThrow(true);
13345 counter++;
13346 } catch (ex) {
13347 counter++;
13348 local += ex;
13349 counter++;
13350 } finally {
13351 counter++;
13352 return 3 + local;
13353 counter++;
13354 }
13355 counter++;
13356 }
13357 assertOptResultEquals(6, f);
13358 assertEquals(3, counter);
13359
13360 // Variant flags: [alternativeFn1, tryReturns, doCatch,
13361 // catchWithLocal, doFinally, finallyReturns, endReturnLocal]
13362
13363 counter = 0;
13364 var f = function() {
13365 var local = 3;
13366 try {
13367 counter++;
13368 return returnOrThrow(true);
13369 counter++;
13370 } catch (ex) {
13371 counter++;
13372 local += ex;
13373 counter++;
13374 } finally {
13375 counter++;
13376 return 3 + local;
13377 counter++;
13378 }
13379 counter++;
13380 return 5 + local;
13381 }
13382 assertOptResultEquals(6, f);
13383 assertEquals(3, counter);
13384
13385 // Variant flags: [alternativeFn1, tryReturns, doCatch,
13386 // catchWithLocal, catchThrows]
13387
13388 counter = 0;
13389 var f = function() {
13390 var local = 3;
13391 try {
13392 counter++;
13393 return returnOrThrow(true);
13394 counter++;
13395 } catch (ex) {
13396 counter++;
13397 throw 2 + ex;
13398 counter++;
13399 }
13400 counter++;
13401 }
13402 assertOptResultEquals(15, f);
13403 assertEquals(2, counter);
13404
13405 // Variant flags: [alternativeFn1, tryReturns, doCatch,
13406 // catchWithLocal, catchThrows, endReturnLocal]
13407
13408 counter = 0;
13409 var f = function() {
13410 var local = 3;
13411 try {
13412 counter++;
13413 return returnOrThrow(true);
13414 counter++;
13415 } catch (ex) {
13416 counter++;
13417 throw 2 + ex;
13418 counter++;
13419 }
13420 counter++;
13421 return 5 + local;
13422 }
13423 assertOptResultEquals(15, f);
13424 assertEquals(2, counter);
13425
13426 // Variant flags: [alternativeFn1, tryReturns, doCatch,
13427 // catchWithLocal, catchThrows, doFinally]
13428
13429 counter = 0;
13430 var f = function() {
13431 var local = 3;
13432 try {
13433 counter++;
13434 return returnOrThrow(true);
13435 counter++;
13436 } catch (ex) {
13437 counter++;
13438 throw 2 + ex;
13439 counter++;
13440 } finally {
13441 counter++;
13442 local += 2;
13443 counter++;
13444 }
13445 counter++;
13446 }
13447 assertOptResultEquals(15, f);
13448 assertEquals(4, counter);
13449
13450 // Variant flags: [alternativeFn1, tryReturns, doCatch,
13451 // catchWithLocal, catchThrows, doFinally, endReturnLocal]
13452
13453 counter = 0;
13454 var f = function() {
13455 var local = 3;
13456 try {
13457 counter++;
13458 return returnOrThrow(true);
13459 counter++;
13460 } catch (ex) {
13461 counter++;
13462 throw 2 + ex;
13463 counter++;
13464 } finally {
13465 counter++;
13466 local += 2;
13467 counter++;
13468 }
13469 counter++;
13470 return 5 + local;
13471 }
13472 assertOptResultEquals(15, f);
13473 assertEquals(4, counter);
13474
13475 // Variant flags: [alternativeFn1, tryReturns, doCatch,
13476 // catchWithLocal, catchThrows, doFinally, finallyThrows]
13477
13478 counter = 0;
13479 var f = function() {
13480 var local = 3;
13481 try {
13482 counter++;
13483 return returnOrThrow(true);
13484 counter++;
13485 } catch (ex) {
13486 counter++;
13487 throw 2 + ex;
13488 counter++;
13489 } finally {
13490 counter++;
13491 throw 25;
13492 counter++;
13493 }
13494 counter++;
13495 }
13496 assertOptThrowsWith(25, f);
13497 assertEquals(3, counter);
13498
13499 // Variant flags: [alternativeFn1, tryReturns, doCatch,
13500 // catchWithLocal, catchThrows, doFinally, finallyThrows,
13501 // endReturnLocal]
13502
13503 counter = 0;
13504 var f = function() {
13505 var local = 3;
13506 try {
13507 counter++;
13508 return returnOrThrow(true);
13509 counter++;
13510 } catch (ex) {
13511 counter++;
13512 throw 2 + ex;
13513 counter++;
13514 } finally {
13515 counter++;
13516 throw 25;
13517 counter++;
13518 }
13519 counter++;
13520 return 5 + local;
13521 }
13522 assertOptThrowsWith(25, f);
13523 assertEquals(3, counter);
13524
13525 // Variant flags: [alternativeFn1, tryReturns, doCatch,
13526 // catchWithLocal, catchThrows, doFinally, finallyReturns]
13527
13528 counter = 0;
13529 var f = function() {
13530 var local = 3;
13531 try {
13532 counter++;
13533 return returnOrThrow(true);
13534 counter++;
13535 } catch (ex) {
13536 counter++;
13537 throw 2 + ex;
13538 counter++;
13539 } finally {
13540 counter++;
13541 return 3 + local;
13542 counter++;
13543 }
13544 counter++;
13545 }
13546 assertOptResultEquals(6, f);
13547 assertEquals(3, counter);
13548
13549 // Variant flags: [alternativeFn1, tryReturns, doCatch,
13550 // catchWithLocal, catchThrows, doFinally, finallyReturns,
13551 // endReturnLocal]
13552
13553 counter = 0;
13554 var f = function() {
13555 var local = 3;
13556 try {
13557 counter++;
13558 return returnOrThrow(true);
13559 counter++;
13560 } catch (ex) {
13561 counter++;
13562 throw 2 + ex;
13563 counter++;
13564 } finally {
13565 counter++;
13566 return 3 + local;
13567 counter++;
13568 }
13569 counter++;
13570 return 5 + local;
13571 }
13572 assertOptResultEquals(6, f);
13573 assertEquals(3, counter);
13574
13575 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchReturns]
13576
13577 counter = 0;
13578 var f = function() {
13579 var local = 3;
13580 try {
13581 counter++;
13582 return returnOrThrow(true);
13583 counter++;
13584 } catch (ex) {
13585 counter++;
13586 return 2 + ex;
13587 counter++;
13588 }
13589 counter++;
13590 }
13591 assertOptResultEquals(15, f);
13592 assertEquals(2, counter);
13593
13594 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchReturns,
13595 // endReturnLocal]
13596
13597 counter = 0;
13598 var f = function() {
13599 var local = 3;
13600 try {
13601 counter++;
13602 return returnOrThrow(true);
13603 counter++;
13604 } catch (ex) {
13605 counter++;
13606 return 2 + ex;
13607 counter++;
13608 }
13609 counter++;
13610 return 5 + local;
13611 }
13612 assertOptResultEquals(15, f);
13613 assertEquals(2, counter);
13614
13615 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchReturns,
13616 // doFinally]
13617
13618 counter = 0;
13619 var f = function() {
13620 var local = 3;
13621 try {
13622 counter++;
13623 return returnOrThrow(true);
13624 counter++;
13625 } catch (ex) {
13626 counter++;
13627 return 2 + ex;
13628 counter++;
13629 } finally {
13630 counter++;
13631 local += 2;
13632 counter++;
13633 }
13634 counter++;
13635 }
13636 assertOptResultEquals(15, f);
13637 assertEquals(4, counter);
13638
13639 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchReturns,
13640 // doFinally, endReturnLocal]
13641
13642 counter = 0;
13643 var f = function() {
13644 var local = 3;
13645 try {
13646 counter++;
13647 return returnOrThrow(true);
13648 counter++;
13649 } catch (ex) {
13650 counter++;
13651 return 2 + ex;
13652 counter++;
13653 } finally {
13654 counter++;
13655 local += 2;
13656 counter++;
13657 }
13658 counter++;
13659 return 5 + local;
13660 }
13661 assertOptResultEquals(15, f);
13662 assertEquals(4, counter);
13663
13664 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchReturns,
13665 // doFinally, finallyThrows]
13666
13667 counter = 0;
13668 var f = function() {
13669 var local = 3;
13670 try {
13671 counter++;
13672 return returnOrThrow(true);
13673 counter++;
13674 } catch (ex) {
13675 counter++;
13676 return 2 + ex;
13677 counter++;
13678 } finally {
13679 counter++;
13680 throw 25;
13681 counter++;
13682 }
13683 counter++;
13684 }
13685 assertOptThrowsWith(25, f);
13686 assertEquals(3, counter);
13687
13688 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchReturns,
13689 // doFinally, finallyThrows, endReturnLocal]
13690
13691 counter = 0;
13692 var f = function() {
13693 var local = 3;
13694 try {
13695 counter++;
13696 return returnOrThrow(true);
13697 counter++;
13698 } catch (ex) {
13699 counter++;
13700 return 2 + ex;
13701 counter++;
13702 } finally {
13703 counter++;
13704 throw 25;
13705 counter++;
13706 }
13707 counter++;
13708 return 5 + local;
13709 }
13710 assertOptThrowsWith(25, f);
13711 assertEquals(3, counter);
13712
13713 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchReturns,
13714 // doFinally, finallyReturns]
13715
13716 counter = 0;
13717 var f = function() {
13718 var local = 3;
13719 try {
13720 counter++;
13721 return returnOrThrow(true);
13722 counter++;
13723 } catch (ex) {
13724 counter++;
13725 return 2 + ex;
13726 counter++;
13727 } finally {
13728 counter++;
13729 return 3 + local;
13730 counter++;
13731 }
13732 counter++;
13733 }
13734 assertOptResultEquals(6, f);
13735 assertEquals(3, counter);
13736
13737 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchReturns,
13738 // doFinally, finallyReturns, endReturnLocal]
13739
13740 counter = 0;
13741 var f = function() {
13742 var local = 3;
13743 try {
13744 counter++;
13745 return returnOrThrow(true);
13746 counter++;
13747 } catch (ex) {
13748 counter++;
13749 return 2 + ex;
13750 counter++;
13751 } finally {
13752 counter++;
13753 return 3 + local;
13754 counter++;
13755 }
13756 counter++;
13757 return 5 + local;
13758 }
13759 assertOptResultEquals(6, f);
13760 assertEquals(3, counter);
13761
13762 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchReturns,
13763 // catchWithLocal]
13764
13765 counter = 0;
13766 var f = function() {
13767 var local = 3;
13768 try {
13769 counter++;
13770 return returnOrThrow(true);
13771 counter++;
13772 } catch (ex) {
13773 counter++;
13774 return 2 + local;
13775 counter++;
13776 }
13777 counter++;
13778 }
13779 assertOptResultEquals(15, f);
13780 assertEquals(2, counter);
13781
13782 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchReturns,
13783 // catchWithLocal, endReturnLocal]
13784
13785 counter = 0;
13786 var f = function() {
13787 var local = 3;
13788 try {
13789 counter++;
13790 return returnOrThrow(true);
13791 counter++;
13792 } catch (ex) {
13793 counter++;
13794 return 2 + local;
13795 counter++;
13796 }
13797 counter++;
13798 return 5 + local;
13799 }
13800 assertOptResultEquals(15, f);
13801 assertEquals(2, counter);
13802
13803 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchReturns,
13804 // catchWithLocal, doFinally]
13805
13806 counter = 0;
13807 var f = function() {
13808 var local = 3;
13809 try {
13810 counter++;
13811 return returnOrThrow(true);
13812 counter++;
13813 } catch (ex) {
13814 counter++;
13815 return 2 + local;
13816 counter++;
13817 } finally {
13818 counter++;
13819 local += 2;
13820 counter++;
13821 }
13822 counter++;
13823 }
13824 assertOptResultEquals(15, f);
13825 assertEquals(4, counter);
13826
13827 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchReturns,
13828 // catchWithLocal, doFinally, endReturnLocal]
13829
13830 counter = 0;
13831 var f = function() {
13832 var local = 3;
13833 try {
13834 counter++;
13835 return returnOrThrow(true);
13836 counter++;
13837 } catch (ex) {
13838 counter++;
13839 return 2 + local;
13840 counter++;
13841 } finally {
13842 counter++;
13843 local += 2;
13844 counter++;
13845 }
13846 counter++;
13847 return 5 + local;
13848 }
13849 assertOptResultEquals(15, f);
13850 assertEquals(4, counter);
13851
13852 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchReturns,
13853 // catchWithLocal, doFinally, finallyThrows]
13854
13855 counter = 0;
13856 var f = function() {
13857 var local = 3;
13858 try {
13859 counter++;
13860 return returnOrThrow(true);
13861 counter++;
13862 } catch (ex) {
13863 counter++;
13864 return 2 + local;
13865 counter++;
13866 } finally {
13867 counter++;
13868 throw 25;
13869 counter++;
13870 }
13871 counter++;
13872 }
13873 assertOptThrowsWith(25, f);
13874 assertEquals(3, counter);
13875
13876 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchReturns,
13877 // catchWithLocal, doFinally, finallyThrows, endReturnLocal]
13878
13879 counter = 0;
13880 var f = function() {
13881 var local = 3;
13882 try {
13883 counter++;
13884 return returnOrThrow(true);
13885 counter++;
13886 } catch (ex) {
13887 counter++;
13888 return 2 + local;
13889 counter++;
13890 } finally {
13891 counter++;
13892 throw 25;
13893 counter++;
13894 }
13895 counter++;
13896 return 5 + local;
13897 }
13898 assertOptThrowsWith(25, f);
13899 assertEquals(3, counter);
13900
13901 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchReturns,
13902 // catchWithLocal, doFinally, finallyReturns]
13903
13904 counter = 0;
13905 var f = function() {
13906 var local = 3;
13907 try {
13908 counter++;
13909 return returnOrThrow(true);
13910 counter++;
13911 } catch (ex) {
13912 counter++;
13913 return 2 + local;
13914 counter++;
13915 } finally {
13916 counter++;
13917 return 3 + local;
13918 counter++;
13919 }
13920 counter++;
13921 }
13922 assertOptResultEquals(6, f);
13923 assertEquals(3, counter);
13924
13925 // Variant flags: [alternativeFn1, tryReturns, doCatch, catchReturns,
13926 // catchWithLocal, doFinally, finallyReturns, endReturnLocal]
13927
13928 counter = 0;
13929 var f = function() {
13930 var local = 3;
13931 try {
13932 counter++;
13933 return returnOrThrow(true);
13934 counter++;
13935 } catch (ex) {
13936 counter++;
13937 return 2 + local;
13938 counter++;
13939 } finally {
13940 counter++;
13941 return 3 + local;
13942 counter++;
13943 }
13944 counter++;
13945 return 5 + local;
13946 }
13947 assertOptResultEquals(6, f);
13948 assertEquals(3, counter);
13949
13950 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
13951 // doFinally]
13952
13953 counter = 0;
13954 var f = function() {
13955 var local = 3;
13956 try {
13957 counter++;
13958 local += returnOrThrow(true);
13959 counter++;
13960 } finally {
13961 counter++;
13962 local += 2;
13963 counter++;
13964 }
13965 counter++;
13966 }
13967 assertOptResultEquals(undefined, f);
13968 assertEquals(6, counter);
13969
13970 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
13971 // doFinally, endReturnLocal]
13972
13973 counter = 0;
13974 var f = function() {
13975 var local = 3;
13976 try {
13977 counter++;
13978 local += returnOrThrow(true);
13979 counter++;
13980 } finally {
13981 counter++;
13982 local += 2;
13983 counter++;
13984 }
13985 counter++;
13986 return 5 + local;
13987 }
13988 assertOptResultEquals(25, f);
13989 assertEquals(6, counter);
13990
13991 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
13992 // doFinally, finallyThrows]
13993
13994 counter = 0;
13995 var f = function() {
13996 var local = 3;
13997 try {
13998 counter++;
13999 local += returnOrThrow(true);
14000 counter++;
14001 } finally {
14002 counter++;
14003 throw 25;
14004 counter++;
14005 }
14006 counter++;
14007 }
14008 assertOptThrowsWith(25, f);
14009 assertEquals(4, counter);
14010
14011 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14012 // doFinally, finallyThrows, endReturnLocal]
14013
14014 counter = 0;
14015 var f = function() {
14016 var local = 3;
14017 try {
14018 counter++;
14019 local += returnOrThrow(true);
14020 counter++;
14021 } finally {
14022 counter++;
14023 throw 25;
14024 counter++;
14025 }
14026 counter++;
14027 return 5 + local;
14028 }
14029 assertOptThrowsWith(25, f);
14030 assertEquals(4, counter);
14031
14032 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14033 // doFinally, finallyReturns]
14034
14035 counter = 0;
14036 var f = function() {
14037 var local = 3;
14038 try {
14039 counter++;
14040 local += returnOrThrow(true);
14041 counter++;
14042 } finally {
14043 counter++;
14044 return 3 + local;
14045 counter++;
14046 }
14047 counter++;
14048 }
14049 assertOptResultEquals(21, f);
14050 assertEquals(4, counter);
14051
14052 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14053 // doFinally, finallyReturns, endReturnLocal]
14054
14055 counter = 0;
14056 var f = function() {
14057 var local = 3;
14058 try {
14059 counter++;
14060 local += returnOrThrow(true);
14061 counter++;
14062 } finally {
14063 counter++;
14064 return 3 + local;
14065 counter++;
14066 }
14067 counter++;
14068 return 5 + local;
14069 }
14070 assertOptResultEquals(21, f);
14071 assertEquals(4, counter);
14072
14073 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14074 // doCatch]
14075
14076 counter = 0;
14077 var f = function() {
14078 var local = 3;
14079 try {
14080 counter++;
14081 local += returnOrThrow(true);
14082 counter++;
14083 } catch (ex) {
14084 counter++;
14085 counter++;
14086 }
14087 counter++;
14088 }
14089 assertOptResultEquals(undefined, f);
14090 assertEquals(4, counter);
14091
14092 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14093 // doCatch, endReturnLocal]
14094
14095 counter = 0;
14096 var f = function() {
14097 var local = 3;
14098 try {
14099 counter++;
14100 local += returnOrThrow(true);
14101 counter++;
14102 } catch (ex) {
14103 counter++;
14104 counter++;
14105 }
14106 counter++;
14107 return 5 + local;
14108 }
14109 assertOptResultEquals(23, f);
14110 assertEquals(4, counter);
14111
14112 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14113 // doCatch, doFinally]
14114
14115 counter = 0;
14116 var f = function() {
14117 var local = 3;
14118 try {
14119 counter++;
14120 local += returnOrThrow(true);
14121 counter++;
14122 } catch (ex) {
14123 counter++;
14124 counter++;
14125 } finally {
14126 counter++;
14127 local += 2;
14128 counter++;
14129 }
14130 counter++;
14131 }
14132 assertOptResultEquals(undefined, f);
14133 assertEquals(6, counter);
14134
14135 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14136 // doCatch, doFinally, endReturnLocal]
14137
14138 counter = 0;
14139 var f = function() {
14140 var local = 3;
14141 try {
14142 counter++;
14143 local += returnOrThrow(true);
14144 counter++;
14145 } catch (ex) {
14146 counter++;
14147 counter++;
14148 } finally {
14149 counter++;
14150 local += 2;
14151 counter++;
14152 }
14153 counter++;
14154 return 5 + local;
14155 }
14156 assertOptResultEquals(25, f);
14157 assertEquals(6, counter);
14158
14159 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14160 // doCatch, doFinally, finallyThrows]
14161
14162 counter = 0;
14163 var f = function() {
14164 var local = 3;
14165 try {
14166 counter++;
14167 local += returnOrThrow(true);
14168 counter++;
14169 } catch (ex) {
14170 counter++;
14171 counter++;
14172 } finally {
14173 counter++;
14174 throw 25;
14175 counter++;
14176 }
14177 counter++;
14178 }
14179 assertOptThrowsWith(25, f);
14180 assertEquals(4, counter);
14181
14182 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14183 // doCatch, doFinally, finallyThrows, endReturnLocal]
14184
14185 counter = 0;
14186 var f = function() {
14187 var local = 3;
14188 try {
14189 counter++;
14190 local += returnOrThrow(true);
14191 counter++;
14192 } catch (ex) {
14193 counter++;
14194 counter++;
14195 } finally {
14196 counter++;
14197 throw 25;
14198 counter++;
14199 }
14200 counter++;
14201 return 5 + local;
14202 }
14203 assertOptThrowsWith(25, f);
14204 assertEquals(4, counter);
14205
14206 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14207 // doCatch, doFinally, finallyReturns]
14208
14209 counter = 0;
14210 var f = function() {
14211 var local = 3;
14212 try {
14213 counter++;
14214 local += returnOrThrow(true);
14215 counter++;
14216 } catch (ex) {
14217 counter++;
14218 counter++;
14219 } finally {
14220 counter++;
14221 return 3 + local;
14222 counter++;
14223 }
14224 counter++;
14225 }
14226 assertOptResultEquals(21, f);
14227 assertEquals(4, counter);
14228
14229 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14230 // doCatch, doFinally, finallyReturns, endReturnLocal]
14231
14232 counter = 0;
14233 var f = function() {
14234 var local = 3;
14235 try {
14236 counter++;
14237 local += returnOrThrow(true);
14238 counter++;
14239 } catch (ex) {
14240 counter++;
14241 counter++;
14242 } finally {
14243 counter++;
14244 return 3 + local;
14245 counter++;
14246 }
14247 counter++;
14248 return 5 + local;
14249 }
14250 assertOptResultEquals(21, f);
14251 assertEquals(4, counter);
14252
14253 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14254 // doCatch, catchThrows]
14255
14256 counter = 0;
14257 var f = function() {
14258 var local = 3;
14259 try {
14260 counter++;
14261 local += returnOrThrow(true);
14262 counter++;
14263 } catch (ex) {
14264 counter++;
14265 throw 2 + ex;
14266 counter++;
14267 }
14268 counter++;
14269 }
14270 assertOptResultEquals(undefined, f);
14271 assertEquals(4, counter);
14272
14273 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14274 // doCatch, catchThrows, endReturnLocal]
14275
14276 counter = 0;
14277 var f = function() {
14278 var local = 3;
14279 try {
14280 counter++;
14281 local += returnOrThrow(true);
14282 counter++;
14283 } catch (ex) {
14284 counter++;
14285 throw 2 + ex;
14286 counter++;
14287 }
14288 counter++;
14289 return 5 + local;
14290 }
14291 assertOptResultEquals(23, f);
14292 assertEquals(4, counter);
14293
14294 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14295 // doCatch, catchThrows, doFinally]
14296
14297 counter = 0;
14298 var f = function() {
14299 var local = 3;
14300 try {
14301 counter++;
14302 local += returnOrThrow(true);
14303 counter++;
14304 } catch (ex) {
14305 counter++;
14306 throw 2 + ex;
14307 counter++;
14308 } finally {
14309 counter++;
14310 local += 2;
14311 counter++;
14312 }
14313 counter++;
14314 }
14315 assertOptResultEquals(undefined, f);
14316 assertEquals(6, counter);
14317
14318 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14319 // doCatch, catchThrows, doFinally, endReturnLocal]
14320
14321 counter = 0;
14322 var f = function() {
14323 var local = 3;
14324 try {
14325 counter++;
14326 local += returnOrThrow(true);
14327 counter++;
14328 } catch (ex) {
14329 counter++;
14330 throw 2 + ex;
14331 counter++;
14332 } finally {
14333 counter++;
14334 local += 2;
14335 counter++;
14336 }
14337 counter++;
14338 return 5 + local;
14339 }
14340 assertOptResultEquals(25, f);
14341 assertEquals(6, counter);
14342
14343 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14344 // doCatch, catchThrows, doFinally, finallyThrows]
14345
14346 counter = 0;
14347 var f = function() {
14348 var local = 3;
14349 try {
14350 counter++;
14351 local += returnOrThrow(true);
14352 counter++;
14353 } catch (ex) {
14354 counter++;
14355 throw 2 + ex;
14356 counter++;
14357 } finally {
14358 counter++;
14359 throw 25;
14360 counter++;
14361 }
14362 counter++;
14363 }
14364 assertOptThrowsWith(25, f);
14365 assertEquals(4, counter);
14366
14367 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14368 // doCatch, catchThrows, doFinally, finallyThrows, endReturnLocal]
14369
14370 counter = 0;
14371 var f = function() {
14372 var local = 3;
14373 try {
14374 counter++;
14375 local += returnOrThrow(true);
14376 counter++;
14377 } catch (ex) {
14378 counter++;
14379 throw 2 + ex;
14380 counter++;
14381 } finally {
14382 counter++;
14383 throw 25;
14384 counter++;
14385 }
14386 counter++;
14387 return 5 + local;
14388 }
14389 assertOptThrowsWith(25, f);
14390 assertEquals(4, counter);
14391
14392 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14393 // doCatch, catchThrows, doFinally, finallyReturns]
14394
14395 counter = 0;
14396 var f = function() {
14397 var local = 3;
14398 try {
14399 counter++;
14400 local += returnOrThrow(true);
14401 counter++;
14402 } catch (ex) {
14403 counter++;
14404 throw 2 + ex;
14405 counter++;
14406 } finally {
14407 counter++;
14408 return 3 + local;
14409 counter++;
14410 }
14411 counter++;
14412 }
14413 assertOptResultEquals(21, f);
14414 assertEquals(4, counter);
14415
14416 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14417 // doCatch, catchThrows, doFinally, finallyReturns, endReturnLocal]
14418
14419 counter = 0;
14420 var f = function() {
14421 var local = 3;
14422 try {
14423 counter++;
14424 local += returnOrThrow(true);
14425 counter++;
14426 } catch (ex) {
14427 counter++;
14428 throw 2 + ex;
14429 counter++;
14430 } finally {
14431 counter++;
14432 return 3 + local;
14433 counter++;
14434 }
14435 counter++;
14436 return 5 + local;
14437 }
14438 assertOptResultEquals(21, f);
14439 assertEquals(4, counter);
14440
14441 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14442 // doCatch, catchWithLocal]
14443
14444 counter = 0;
14445 var f = function() {
14446 var local = 3;
14447 try {
14448 counter++;
14449 local += returnOrThrow(true);
14450 counter++;
14451 } catch (ex) {
14452 counter++;
14453 local += ex;
14454 counter++;
14455 }
14456 counter++;
14457 }
14458 assertOptResultEquals(undefined, f);
14459 assertEquals(4, counter);
14460
14461 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14462 // doCatch, catchWithLocal, endReturnLocal]
14463
14464 counter = 0;
14465 var f = function() {
14466 var local = 3;
14467 try {
14468 counter++;
14469 local += returnOrThrow(true);
14470 counter++;
14471 } catch (ex) {
14472 counter++;
14473 local += ex;
14474 counter++;
14475 }
14476 counter++;
14477 return 5 + local;
14478 }
14479 assertOptResultEquals(23, f);
14480 assertEquals(4, counter);
14481
14482 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14483 // doCatch, catchWithLocal, doFinally]
14484
14485 counter = 0;
14486 var f = function() {
14487 var local = 3;
14488 try {
14489 counter++;
14490 local += returnOrThrow(true);
14491 counter++;
14492 } catch (ex) {
14493 counter++;
14494 local += ex;
14495 counter++;
14496 } finally {
14497 counter++;
14498 local += 2;
14499 counter++;
14500 }
14501 counter++;
14502 }
14503 assertOptResultEquals(undefined, f);
14504 assertEquals(6, counter);
14505
14506 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14507 // doCatch, catchWithLocal, doFinally, endReturnLocal]
14508
14509 counter = 0;
14510 var f = function() {
14511 var local = 3;
14512 try {
14513 counter++;
14514 local += returnOrThrow(true);
14515 counter++;
14516 } catch (ex) {
14517 counter++;
14518 local += ex;
14519 counter++;
14520 } finally {
14521 counter++;
14522 local += 2;
14523 counter++;
14524 }
14525 counter++;
14526 return 5 + local;
14527 }
14528 assertOptResultEquals(25, f);
14529 assertEquals(6, counter);
14530
14531 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14532 // doCatch, catchWithLocal, doFinally, finallyThrows]
14533
14534 counter = 0;
14535 var f = function() {
14536 var local = 3;
14537 try {
14538 counter++;
14539 local += returnOrThrow(true);
14540 counter++;
14541 } catch (ex) {
14542 counter++;
14543 local += ex;
14544 counter++;
14545 } finally {
14546 counter++;
14547 throw 25;
14548 counter++;
14549 }
14550 counter++;
14551 }
14552 assertOptThrowsWith(25, f);
14553 assertEquals(4, counter);
14554
14555 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14556 // doCatch, catchWithLocal, doFinally, finallyThrows,
14557 // endReturnLocal]
14558
14559 counter = 0;
14560 var f = function() {
14561 var local = 3;
14562 try {
14563 counter++;
14564 local += returnOrThrow(true);
14565 counter++;
14566 } catch (ex) {
14567 counter++;
14568 local += ex;
14569 counter++;
14570 } finally {
14571 counter++;
14572 throw 25;
14573 counter++;
14574 }
14575 counter++;
14576 return 5 + local;
14577 }
14578 assertOptThrowsWith(25, f);
14579 assertEquals(4, counter);
14580
14581 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14582 // doCatch, catchWithLocal, doFinally, finallyReturns]
14583
14584 counter = 0;
14585 var f = function() {
14586 var local = 3;
14587 try {
14588 counter++;
14589 local += returnOrThrow(true);
14590 counter++;
14591 } catch (ex) {
14592 counter++;
14593 local += ex;
14594 counter++;
14595 } finally {
14596 counter++;
14597 return 3 + local;
14598 counter++;
14599 }
14600 counter++;
14601 }
14602 assertOptResultEquals(21, f);
14603 assertEquals(4, counter);
14604
14605 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14606 // doCatch, catchWithLocal, doFinally, finallyReturns,
14607 // endReturnLocal]
14608
14609 counter = 0;
14610 var f = function() {
14611 var local = 3;
14612 try {
14613 counter++;
14614 local += returnOrThrow(true);
14615 counter++;
14616 } catch (ex) {
14617 counter++;
14618 local += ex;
14619 counter++;
14620 } finally {
14621 counter++;
14622 return 3 + local;
14623 counter++;
14624 }
14625 counter++;
14626 return 5 + local;
14627 }
14628 assertOptResultEquals(21, f);
14629 assertEquals(4, counter);
14630
14631 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14632 // doCatch, catchWithLocal, catchThrows]
14633
14634 counter = 0;
14635 var f = function() {
14636 var local = 3;
14637 try {
14638 counter++;
14639 local += returnOrThrow(true);
14640 counter++;
14641 } catch (ex) {
14642 counter++;
14643 throw 2 + ex;
14644 counter++;
14645 }
14646 counter++;
14647 }
14648 assertOptResultEquals(undefined, f);
14649 assertEquals(4, counter);
14650
14651 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14652 // doCatch, catchWithLocal, catchThrows, endReturnLocal]
14653
14654 counter = 0;
14655 var f = function() {
14656 var local = 3;
14657 try {
14658 counter++;
14659 local += returnOrThrow(true);
14660 counter++;
14661 } catch (ex) {
14662 counter++;
14663 throw 2 + ex;
14664 counter++;
14665 }
14666 counter++;
14667 return 5 + local;
14668 }
14669 assertOptResultEquals(23, f);
14670 assertEquals(4, counter);
14671
14672 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14673 // doCatch, catchWithLocal, catchThrows, doFinally]
14674
14675 counter = 0;
14676 var f = function() {
14677 var local = 3;
14678 try {
14679 counter++;
14680 local += returnOrThrow(true);
14681 counter++;
14682 } catch (ex) {
14683 counter++;
14684 throw 2 + ex;
14685 counter++;
14686 } finally {
14687 counter++;
14688 local += 2;
14689 counter++;
14690 }
14691 counter++;
14692 }
14693 assertOptResultEquals(undefined, f);
14694 assertEquals(6, counter);
14695
14696 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14697 // doCatch, catchWithLocal, catchThrows, doFinally, endReturnLocal]
14698
14699 counter = 0;
14700 var f = function() {
14701 var local = 3;
14702 try {
14703 counter++;
14704 local += returnOrThrow(true);
14705 counter++;
14706 } catch (ex) {
14707 counter++;
14708 throw 2 + ex;
14709 counter++;
14710 } finally {
14711 counter++;
14712 local += 2;
14713 counter++;
14714 }
14715 counter++;
14716 return 5 + local;
14717 }
14718 assertOptResultEquals(25, f);
14719 assertEquals(6, counter);
14720
14721 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14722 // doCatch, catchWithLocal, catchThrows, doFinally, finallyThrows]
14723
14724 counter = 0;
14725 var f = function() {
14726 var local = 3;
14727 try {
14728 counter++;
14729 local += returnOrThrow(true);
14730 counter++;
14731 } catch (ex) {
14732 counter++;
14733 throw 2 + ex;
14734 counter++;
14735 } finally {
14736 counter++;
14737 throw 25;
14738 counter++;
14739 }
14740 counter++;
14741 }
14742 assertOptThrowsWith(25, f);
14743 assertEquals(4, counter);
14744
14745 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14746 // doCatch, catchWithLocal, catchThrows, doFinally, finallyThrows,
14747 // endReturnLocal]
14748
14749 counter = 0;
14750 var f = function() {
14751 var local = 3;
14752 try {
14753 counter++;
14754 local += returnOrThrow(true);
14755 counter++;
14756 } catch (ex) {
14757 counter++;
14758 throw 2 + ex;
14759 counter++;
14760 } finally {
14761 counter++;
14762 throw 25;
14763 counter++;
14764 }
14765 counter++;
14766 return 5 + local;
14767 }
14768 assertOptThrowsWith(25, f);
14769 assertEquals(4, counter);
14770
14771 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14772 // doCatch, catchWithLocal, catchThrows, doFinally, finallyReturns]
14773
14774 counter = 0;
14775 var f = function() {
14776 var local = 3;
14777 try {
14778 counter++;
14779 local += returnOrThrow(true);
14780 counter++;
14781 } catch (ex) {
14782 counter++;
14783 throw 2 + ex;
14784 counter++;
14785 } finally {
14786 counter++;
14787 return 3 + local;
14788 counter++;
14789 }
14790 counter++;
14791 }
14792 assertOptResultEquals(21, f);
14793 assertEquals(4, counter);
14794
14795 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14796 // doCatch, catchWithLocal, catchThrows, doFinally, finallyReturns,
14797 // endReturnLocal]
14798
14799 counter = 0;
14800 var f = function() {
14801 var local = 3;
14802 try {
14803 counter++;
14804 local += returnOrThrow(true);
14805 counter++;
14806 } catch (ex) {
14807 counter++;
14808 throw 2 + ex;
14809 counter++;
14810 } finally {
14811 counter++;
14812 return 3 + local;
14813 counter++;
14814 }
14815 counter++;
14816 return 5 + local;
14817 }
14818 assertOptResultEquals(21, f);
14819 assertEquals(4, counter);
14820
14821 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14822 // doCatch, catchReturns]
14823
14824 counter = 0;
14825 var f = function() {
14826 var local = 3;
14827 try {
14828 counter++;
14829 local += returnOrThrow(true);
14830 counter++;
14831 } catch (ex) {
14832 counter++;
14833 return 2 + ex;
14834 counter++;
14835 }
14836 counter++;
14837 }
14838 assertOptResultEquals(undefined, f);
14839 assertEquals(4, counter);
14840
14841 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14842 // doCatch, catchReturns, endReturnLocal]
14843
14844 counter = 0;
14845 var f = function() {
14846 var local = 3;
14847 try {
14848 counter++;
14849 local += returnOrThrow(true);
14850 counter++;
14851 } catch (ex) {
14852 counter++;
14853 return 2 + ex;
14854 counter++;
14855 }
14856 counter++;
14857 return 5 + local;
14858 }
14859 assertOptResultEquals(23, f);
14860 assertEquals(4, counter);
14861
14862 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14863 // doCatch, catchReturns, doFinally]
14864
14865 counter = 0;
14866 var f = function() {
14867 var local = 3;
14868 try {
14869 counter++;
14870 local += returnOrThrow(true);
14871 counter++;
14872 } catch (ex) {
14873 counter++;
14874 return 2 + ex;
14875 counter++;
14876 } finally {
14877 counter++;
14878 local += 2;
14879 counter++;
14880 }
14881 counter++;
14882 }
14883 assertOptResultEquals(undefined, f);
14884 assertEquals(6, counter);
14885
14886 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14887 // doCatch, catchReturns, doFinally, endReturnLocal]
14888
14889 counter = 0;
14890 var f = function() {
14891 var local = 3;
14892 try {
14893 counter++;
14894 local += returnOrThrow(true);
14895 counter++;
14896 } catch (ex) {
14897 counter++;
14898 return 2 + ex;
14899 counter++;
14900 } finally {
14901 counter++;
14902 local += 2;
14903 counter++;
14904 }
14905 counter++;
14906 return 5 + local;
14907 }
14908 assertOptResultEquals(25, f);
14909 assertEquals(6, counter);
14910
14911 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14912 // doCatch, catchReturns, doFinally, finallyThrows]
14913
14914 counter = 0;
14915 var f = function() {
14916 var local = 3;
14917 try {
14918 counter++;
14919 local += returnOrThrow(true);
14920 counter++;
14921 } catch (ex) {
14922 counter++;
14923 return 2 + ex;
14924 counter++;
14925 } finally {
14926 counter++;
14927 throw 25;
14928 counter++;
14929 }
14930 counter++;
14931 }
14932 assertOptThrowsWith(25, f);
14933 assertEquals(4, counter);
14934
14935 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14936 // doCatch, catchReturns, doFinally, finallyThrows, endReturnLocal]
14937
14938 counter = 0;
14939 var f = function() {
14940 var local = 3;
14941 try {
14942 counter++;
14943 local += returnOrThrow(true);
14944 counter++;
14945 } catch (ex) {
14946 counter++;
14947 return 2 + ex;
14948 counter++;
14949 } finally {
14950 counter++;
14951 throw 25;
14952 counter++;
14953 }
14954 counter++;
14955 return 5 + local;
14956 }
14957 assertOptThrowsWith(25, f);
14958 assertEquals(4, counter);
14959
14960 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14961 // doCatch, catchReturns, doFinally, finallyReturns]
14962
14963 counter = 0;
14964 var f = function() {
14965 var local = 3;
14966 try {
14967 counter++;
14968 local += returnOrThrow(true);
14969 counter++;
14970 } catch (ex) {
14971 counter++;
14972 return 2 + ex;
14973 counter++;
14974 } finally {
14975 counter++;
14976 return 3 + local;
14977 counter++;
14978 }
14979 counter++;
14980 }
14981 assertOptResultEquals(21, f);
14982 assertEquals(4, counter);
14983
14984 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
14985 // doCatch, catchReturns, doFinally, finallyReturns, endReturnLocal]
14986
14987 counter = 0;
14988 var f = function() {
14989 var local = 3;
14990 try {
14991 counter++;
14992 local += returnOrThrow(true);
14993 counter++;
14994 } catch (ex) {
14995 counter++;
14996 return 2 + ex;
14997 counter++;
14998 } finally {
14999 counter++;
15000 return 3 + local;
15001 counter++;
15002 }
15003 counter++;
15004 return 5 + local;
15005 }
15006 assertOptResultEquals(21, f);
15007 assertEquals(4, counter);
15008
15009 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
15010 // doCatch, catchReturns, catchWithLocal]
15011
15012 counter = 0;
15013 var f = function() {
15014 var local = 3;
15015 try {
15016 counter++;
15017 local += returnOrThrow(true);
15018 counter++;
15019 } catch (ex) {
15020 counter++;
15021 return 2 + local;
15022 counter++;
15023 }
15024 counter++;
15025 }
15026 assertOptResultEquals(undefined, f);
15027 assertEquals(4, counter);
15028
15029 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
15030 // doCatch, catchReturns, catchWithLocal, endReturnLocal]
15031
15032 counter = 0;
15033 var f = function() {
15034 var local = 3;
15035 try {
15036 counter++;
15037 local += returnOrThrow(true);
15038 counter++;
15039 } catch (ex) {
15040 counter++;
15041 return 2 + local;
15042 counter++;
15043 }
15044 counter++;
15045 return 5 + local;
15046 }
15047 assertOptResultEquals(23, f);
15048 assertEquals(4, counter);
15049
15050 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
15051 // doCatch, catchReturns, catchWithLocal, doFinally]
15052
15053 counter = 0;
15054 var f = function() {
15055 var local = 3;
15056 try {
15057 counter++;
15058 local += returnOrThrow(true);
15059 counter++;
15060 } catch (ex) {
15061 counter++;
15062 return 2 + local;
15063 counter++;
15064 } finally {
15065 counter++;
15066 local += 2;
15067 counter++;
15068 }
15069 counter++;
15070 }
15071 assertOptResultEquals(undefined, f);
15072 assertEquals(6, counter);
15073
15074 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
15075 // doCatch, catchReturns, catchWithLocal, doFinally, endReturnLocal]
15076
15077 counter = 0;
15078 var f = function() {
15079 var local = 3;
15080 try {
15081 counter++;
15082 local += returnOrThrow(true);
15083 counter++;
15084 } catch (ex) {
15085 counter++;
15086 return 2 + local;
15087 counter++;
15088 } finally {
15089 counter++;
15090 local += 2;
15091 counter++;
15092 }
15093 counter++;
15094 return 5 + local;
15095 }
15096 assertOptResultEquals(25, f);
15097 assertEquals(6, counter);
15098
15099 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
15100 // doCatch, catchReturns, catchWithLocal, doFinally, finallyThrows]
15101
15102 counter = 0;
15103 var f = function() {
15104 var local = 3;
15105 try {
15106 counter++;
15107 local += returnOrThrow(true);
15108 counter++;
15109 } catch (ex) {
15110 counter++;
15111 return 2 + local;
15112 counter++;
15113 } finally {
15114 counter++;
15115 throw 25;
15116 counter++;
15117 }
15118 counter++;
15119 }
15120 assertOptThrowsWith(25, f);
15121 assertEquals(4, counter);
15122
15123 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
15124 // doCatch, catchReturns, catchWithLocal, doFinally, finallyThrows,
15125 // endReturnLocal]
15126
15127 counter = 0;
15128 var f = function() {
15129 var local = 3;
15130 try {
15131 counter++;
15132 local += returnOrThrow(true);
15133 counter++;
15134 } catch (ex) {
15135 counter++;
15136 return 2 + local;
15137 counter++;
15138 } finally {
15139 counter++;
15140 throw 25;
15141 counter++;
15142 }
15143 counter++;
15144 return 5 + local;
15145 }
15146 assertOptThrowsWith(25, f);
15147 assertEquals(4, counter);
15148
15149 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
15150 // doCatch, catchReturns, catchWithLocal, doFinally, finallyReturns]
15151
15152 counter = 0;
15153 var f = function() {
15154 var local = 3;
15155 try {
15156 counter++;
15157 local += returnOrThrow(true);
15158 counter++;
15159 } catch (ex) {
15160 counter++;
15161 return 2 + local;
15162 counter++;
15163 } finally {
15164 counter++;
15165 return 3 + local;
15166 counter++;
15167 }
15168 counter++;
15169 }
15170 assertOptResultEquals(21, f);
15171 assertEquals(4, counter);
15172
15173 // Variant flags: [alternativeFn1, tryReturns, tryResultToLocal,
15174 // doCatch, catchReturns, catchWithLocal, doFinally, finallyReturns,
15175 // endReturnLocal]
15176
15177 counter = 0;
15178 var f = function() {
15179 var local = 3;
15180 try {
15181 counter++;
15182 local += returnOrThrow(true);
15183 counter++;
15184 } catch (ex) {
15185 counter++;
15186 return 2 + local;
15187 counter++;
15188 } finally {
15189 counter++;
15190 return 3 + local;
15191 counter++;
15192 }
15193 counter++;
15194 return 5 + local;
15195 }
15196 assertOptResultEquals(21, f);
15197 assertEquals(4, counter);
15198
15199 // Variant flags: [alternativeFn2, tryThrows, doFinally]
15200
15201 counter = 0;
15202 var f = function() {
15203 var local = 3;
15204 try {
15205 counter++;
15206 return invertFunctionCall(increaseAndReturn15);
15207 counter++;
15208 } finally {
15209 counter++;
15210 local += 2;
15211 counter++;
15212 }
15213 counter++;
15214 }
15215 assertOptThrowsWith(42, f);
15216 assertEquals(4, counter);
15217
15218 // Variant flags: [alternativeFn2, tryThrows, doFinally,
15219 // endReturnLocal]
15220
15221 counter = 0;
15222 var f = function() {
15223 var local = 3;
15224 try {
15225 counter++;
15226 return invertFunctionCall(increaseAndReturn15);
15227 counter++;
15228 } finally {
15229 counter++;
15230 local += 2;
15231 counter++;
15232 }
15233 counter++;
15234 return 5 + local;
15235 }
15236 assertOptThrowsWith(42, f);
15237 assertEquals(4, counter);
15238
15239 // Variant flags: [alternativeFn2, tryThrows, doFinally,
15240 // finallyThrows]
15241
15242 counter = 0;
15243 var f = function() {
15244 var local = 3;
15245 try {
15246 counter++;
15247 return invertFunctionCall(increaseAndReturn15);
15248 counter++;
15249 } finally {
15250 counter++;
15251 throw 25;
15252 counter++;
15253 }
15254 counter++;
15255 }
15256 assertOptThrowsWith(25, f);
15257 assertEquals(3, counter);
15258
15259 // Variant flags: [alternativeFn2, tryThrows, doFinally,
15260 // finallyThrows, endReturnLocal]
15261
15262 counter = 0;
15263 var f = function() {
15264 var local = 3;
15265 try {
15266 counter++;
15267 return invertFunctionCall(increaseAndReturn15);
15268 counter++;
15269 } finally {
15270 counter++;
15271 throw 25;
15272 counter++;
15273 }
15274 counter++;
15275 return 5 + local;
15276 }
15277 assertOptThrowsWith(25, f);
15278 assertEquals(3, counter);
15279
15280 // Variant flags: [alternativeFn2, tryThrows, doFinally,
15281 // finallyReturns]
15282
15283 counter = 0;
15284 var f = function() {
15285 var local = 3;
15286 try {
15287 counter++;
15288 return invertFunctionCall(increaseAndReturn15);
15289 counter++;
15290 } finally {
15291 counter++;
15292 return 3 + local;
15293 counter++;
15294 }
15295 counter++;
15296 }
15297 assertOptResultEquals(6, f);
15298 assertEquals(3, counter);
15299
15300 // Variant flags: [alternativeFn2, tryThrows, doFinally,
15301 // finallyReturns, endReturnLocal]
15302
15303 counter = 0;
15304 var f = function() {
15305 var local = 3;
15306 try {
15307 counter++;
15308 return invertFunctionCall(increaseAndReturn15);
15309 counter++;
15310 } finally {
15311 counter++;
15312 return 3 + local;
15313 counter++;
15314 }
15315 counter++;
15316 return 5 + local;
15317 }
15318 assertOptResultEquals(6, f);
15319 assertEquals(3, counter);
15320
15321 // Variant flags: [alternativeFn2, tryThrows, doCatch]
15322
15323 counter = 0;
15324 var f = function() {
15325 var local = 3;
15326 try {
15327 counter++;
15328 return invertFunctionCall(increaseAndReturn15);
15329 counter++;
15330 } catch (ex) {
15331 counter++;
15332 counter++;
15333 }
15334 counter++;
15335 }
15336 assertOptResultEquals(undefined, f);
15337 assertEquals(5, counter);
15338
15339 // Variant flags: [alternativeFn2, tryThrows, doCatch, endReturnLocal]
15340
15341 counter = 0;
15342 var f = function() {
15343 var local = 3;
15344 try {
15345 counter++;
15346 return invertFunctionCall(increaseAndReturn15);
15347 counter++;
15348 } catch (ex) {
15349 counter++;
15350 counter++;
15351 }
15352 counter++;
15353 return 5 + local;
15354 }
15355 assertOptResultEquals(8, f);
15356 assertEquals(5, counter);
15357
15358 // Variant flags: [alternativeFn2, tryThrows, doCatch, doFinally]
15359
15360 counter = 0;
15361 var f = function() {
15362 var local = 3;
15363 try {
15364 counter++;
15365 return invertFunctionCall(increaseAndReturn15);
15366 counter++;
15367 } catch (ex) {
15368 counter++;
15369 counter++;
15370 } finally {
15371 counter++;
15372 local += 2;
15373 counter++;
15374 }
15375 counter++;
15376 }
15377 assertOptResultEquals(undefined, f);
15378 assertEquals(7, counter);
15379
15380 // Variant flags: [alternativeFn2, tryThrows, doCatch, doFinally,
15381 // endReturnLocal]
15382
15383 counter = 0;
15384 var f = function() {
15385 var local = 3;
15386 try {
15387 counter++;
15388 return invertFunctionCall(increaseAndReturn15);
15389 counter++;
15390 } catch (ex) {
15391 counter++;
15392 counter++;
15393 } finally {
15394 counter++;
15395 local += 2;
15396 counter++;
15397 }
15398 counter++;
15399 return 5 + local;
15400 }
15401 assertOptResultEquals(10, f);
15402 assertEquals(7, counter);
15403
15404 // Variant flags: [alternativeFn2, tryThrows, doCatch, doFinally,
15405 // finallyThrows]
15406
15407 counter = 0;
15408 var f = function() {
15409 var local = 3;
15410 try {
15411 counter++;
15412 return invertFunctionCall(increaseAndReturn15);
15413 counter++;
15414 } catch (ex) {
15415 counter++;
15416 counter++;
15417 } finally {
15418 counter++;
15419 throw 25;
15420 counter++;
15421 }
15422 counter++;
15423 }
15424 assertOptThrowsWith(25, f);
15425 assertEquals(5, counter);
15426
15427 // Variant flags: [alternativeFn2, tryThrows, doCatch, doFinally,
15428 // finallyThrows, endReturnLocal]
15429
15430 counter = 0;
15431 var f = function() {
15432 var local = 3;
15433 try {
15434 counter++;
15435 return invertFunctionCall(increaseAndReturn15);
15436 counter++;
15437 } catch (ex) {
15438 counter++;
15439 counter++;
15440 } finally {
15441 counter++;
15442 throw 25;
15443 counter++;
15444 }
15445 counter++;
15446 return 5 + local;
15447 }
15448 assertOptThrowsWith(25, f);
15449 assertEquals(5, counter);
15450
15451 // Variant flags: [alternativeFn2, tryThrows, doCatch, doFinally,
15452 // finallyReturns]
15453
15454 counter = 0;
15455 var f = function() {
15456 var local = 3;
15457 try {
15458 counter++;
15459 return invertFunctionCall(increaseAndReturn15);
15460 counter++;
15461 } catch (ex) {
15462 counter++;
15463 counter++;
15464 } finally {
15465 counter++;
15466 return 3 + local;
15467 counter++;
15468 }
15469 counter++;
15470 }
15471 assertOptResultEquals(6, f);
15472 assertEquals(5, counter);
15473
15474 // Variant flags: [alternativeFn2, tryThrows, doCatch, doFinally,
15475 // finallyReturns, endReturnLocal]
15476
15477 counter = 0;
15478 var f = function() {
15479 var local = 3;
15480 try {
15481 counter++;
15482 return invertFunctionCall(increaseAndReturn15);
15483 counter++;
15484 } catch (ex) {
15485 counter++;
15486 counter++;
15487 } finally {
15488 counter++;
15489 return 3 + local;
15490 counter++;
15491 }
15492 counter++;
15493 return 5 + local;
15494 }
15495 assertOptResultEquals(6, f);
15496 assertEquals(5, counter);
15497
15498 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchThrows]
15499
15500 counter = 0;
15501 var f = function() {
15502 var local = 3;
15503 try {
15504 counter++;
15505 return invertFunctionCall(increaseAndReturn15);
15506 counter++;
15507 } catch (ex) {
15508 counter++;
15509 throw 2 + ex;
15510 counter++;
15511 }
15512 counter++;
15513 }
15514 assertOptThrowsWith(44, f);
15515 assertEquals(3, counter);
15516
15517 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchThrows,
15518 // endReturnLocal]
15519
15520 counter = 0;
15521 var f = function() {
15522 var local = 3;
15523 try {
15524 counter++;
15525 return invertFunctionCall(increaseAndReturn15);
15526 counter++;
15527 } catch (ex) {
15528 counter++;
15529 throw 2 + ex;
15530 counter++;
15531 }
15532 counter++;
15533 return 5 + local;
15534 }
15535 assertOptThrowsWith(44, f);
15536 assertEquals(3, counter);
15537
15538 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchThrows,
15539 // doFinally]
15540
15541 counter = 0;
15542 var f = function() {
15543 var local = 3;
15544 try {
15545 counter++;
15546 return invertFunctionCall(increaseAndReturn15);
15547 counter++;
15548 } catch (ex) {
15549 counter++;
15550 throw 2 + ex;
15551 counter++;
15552 } finally {
15553 counter++;
15554 local += 2;
15555 counter++;
15556 }
15557 counter++;
15558 }
15559 assertOptThrowsWith(44, f);
15560 assertEquals(5, counter);
15561
15562 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchThrows,
15563 // doFinally, endReturnLocal]
15564
15565 counter = 0;
15566 var f = function() {
15567 var local = 3;
15568 try {
15569 counter++;
15570 return invertFunctionCall(increaseAndReturn15);
15571 counter++;
15572 } catch (ex) {
15573 counter++;
15574 throw 2 + ex;
15575 counter++;
15576 } finally {
15577 counter++;
15578 local += 2;
15579 counter++;
15580 }
15581 counter++;
15582 return 5 + local;
15583 }
15584 assertOptThrowsWith(44, f);
15585 assertEquals(5, counter);
15586
15587 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchThrows,
15588 // doFinally, finallyThrows]
15589
15590 counter = 0;
15591 var f = function() {
15592 var local = 3;
15593 try {
15594 counter++;
15595 return invertFunctionCall(increaseAndReturn15);
15596 counter++;
15597 } catch (ex) {
15598 counter++;
15599 throw 2 + ex;
15600 counter++;
15601 } finally {
15602 counter++;
15603 throw 25;
15604 counter++;
15605 }
15606 counter++;
15607 }
15608 assertOptThrowsWith(25, f);
15609 assertEquals(4, counter);
15610
15611 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchThrows,
15612 // doFinally, finallyThrows, endReturnLocal]
15613
15614 counter = 0;
15615 var f = function() {
15616 var local = 3;
15617 try {
15618 counter++;
15619 return invertFunctionCall(increaseAndReturn15);
15620 counter++;
15621 } catch (ex) {
15622 counter++;
15623 throw 2 + ex;
15624 counter++;
15625 } finally {
15626 counter++;
15627 throw 25;
15628 counter++;
15629 }
15630 counter++;
15631 return 5 + local;
15632 }
15633 assertOptThrowsWith(25, f);
15634 assertEquals(4, counter);
15635
15636 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchThrows,
15637 // doFinally, finallyReturns]
15638
15639 counter = 0;
15640 var f = function() {
15641 var local = 3;
15642 try {
15643 counter++;
15644 return invertFunctionCall(increaseAndReturn15);
15645 counter++;
15646 } catch (ex) {
15647 counter++;
15648 throw 2 + ex;
15649 counter++;
15650 } finally {
15651 counter++;
15652 return 3 + local;
15653 counter++;
15654 }
15655 counter++;
15656 }
15657 assertOptResultEquals(6, f);
15658 assertEquals(4, counter);
15659
15660 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchThrows,
15661 // doFinally, finallyReturns, endReturnLocal]
15662
15663 counter = 0;
15664 var f = function() {
15665 var local = 3;
15666 try {
15667 counter++;
15668 return invertFunctionCall(increaseAndReturn15);
15669 counter++;
15670 } catch (ex) {
15671 counter++;
15672 throw 2 + ex;
15673 counter++;
15674 } finally {
15675 counter++;
15676 return 3 + local;
15677 counter++;
15678 }
15679 counter++;
15680 return 5 + local;
15681 }
15682 assertOptResultEquals(6, f);
15683 assertEquals(4, counter);
15684
15685 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchWithLocal]
15686
15687 counter = 0;
15688 var f = function() {
15689 var local = 3;
15690 try {
15691 counter++;
15692 return invertFunctionCall(increaseAndReturn15);
15693 counter++;
15694 } catch (ex) {
15695 counter++;
15696 local += ex;
15697 counter++;
15698 }
15699 counter++;
15700 }
15701 assertOptResultEquals(undefined, f);
15702 assertEquals(5, counter);
15703
15704 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchWithLocal,
15705 // endReturnLocal]
15706
15707 counter = 0;
15708 var f = function() {
15709 var local = 3;
15710 try {
15711 counter++;
15712 return invertFunctionCall(increaseAndReturn15);
15713 counter++;
15714 } catch (ex) {
15715 counter++;
15716 local += ex;
15717 counter++;
15718 }
15719 counter++;
15720 return 5 + local;
15721 }
15722 assertOptResultEquals(50, f);
15723 assertEquals(5, counter);
15724
15725 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchWithLocal,
15726 // doFinally]
15727
15728 counter = 0;
15729 var f = function() {
15730 var local = 3;
15731 try {
15732 counter++;
15733 return invertFunctionCall(increaseAndReturn15);
15734 counter++;
15735 } catch (ex) {
15736 counter++;
15737 local += ex;
15738 counter++;
15739 } finally {
15740 counter++;
15741 local += 2;
15742 counter++;
15743 }
15744 counter++;
15745 }
15746 assertOptResultEquals(undefined, f);
15747 assertEquals(7, counter);
15748
15749 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchWithLocal,
15750 // doFinally, endReturnLocal]
15751
15752 counter = 0;
15753 var f = function() {
15754 var local = 3;
15755 try {
15756 counter++;
15757 return invertFunctionCall(increaseAndReturn15);
15758 counter++;
15759 } catch (ex) {
15760 counter++;
15761 local += ex;
15762 counter++;
15763 } finally {
15764 counter++;
15765 local += 2;
15766 counter++;
15767 }
15768 counter++;
15769 return 5 + local;
15770 }
15771 assertOptResultEquals(52, f);
15772 assertEquals(7, counter);
15773
15774 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchWithLocal,
15775 // doFinally, finallyThrows]
15776
15777 counter = 0;
15778 var f = function() {
15779 var local = 3;
15780 try {
15781 counter++;
15782 return invertFunctionCall(increaseAndReturn15);
15783 counter++;
15784 } catch (ex) {
15785 counter++;
15786 local += ex;
15787 counter++;
15788 } finally {
15789 counter++;
15790 throw 25;
15791 counter++;
15792 }
15793 counter++;
15794 }
15795 assertOptThrowsWith(25, f);
15796 assertEquals(5, counter);
15797
15798 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchWithLocal,
15799 // doFinally, finallyThrows, endReturnLocal]
15800
15801 counter = 0;
15802 var f = function() {
15803 var local = 3;
15804 try {
15805 counter++;
15806 return invertFunctionCall(increaseAndReturn15);
15807 counter++;
15808 } catch (ex) {
15809 counter++;
15810 local += ex;
15811 counter++;
15812 } finally {
15813 counter++;
15814 throw 25;
15815 counter++;
15816 }
15817 counter++;
15818 return 5 + local;
15819 }
15820 assertOptThrowsWith(25, f);
15821 assertEquals(5, counter);
15822
15823 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchWithLocal,
15824 // doFinally, finallyReturns]
15825
15826 counter = 0;
15827 var f = function() {
15828 var local = 3;
15829 try {
15830 counter++;
15831 return invertFunctionCall(increaseAndReturn15);
15832 counter++;
15833 } catch (ex) {
15834 counter++;
15835 local += ex;
15836 counter++;
15837 } finally {
15838 counter++;
15839 return 3 + local;
15840 counter++;
15841 }
15842 counter++;
15843 }
15844 assertOptResultEquals(48, f);
15845 assertEquals(5, counter);
15846
15847 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchWithLocal,
15848 // doFinally, finallyReturns, endReturnLocal]
15849
15850 counter = 0;
15851 var f = function() {
15852 var local = 3;
15853 try {
15854 counter++;
15855 return invertFunctionCall(increaseAndReturn15);
15856 counter++;
15857 } catch (ex) {
15858 counter++;
15859 local += ex;
15860 counter++;
15861 } finally {
15862 counter++;
15863 return 3 + local;
15864 counter++;
15865 }
15866 counter++;
15867 return 5 + local;
15868 }
15869 assertOptResultEquals(48, f);
15870 assertEquals(5, counter);
15871
15872 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchWithLocal,
15873 // catchThrows]
15874
15875 counter = 0;
15876 var f = function() {
15877 var local = 3;
15878 try {
15879 counter++;
15880 return invertFunctionCall(increaseAndReturn15);
15881 counter++;
15882 } catch (ex) {
15883 counter++;
15884 throw 2 + ex;
15885 counter++;
15886 }
15887 counter++;
15888 }
15889 assertOptThrowsWith(44, f);
15890 assertEquals(3, counter);
15891
15892 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchWithLocal,
15893 // catchThrows, endReturnLocal]
15894
15895 counter = 0;
15896 var f = function() {
15897 var local = 3;
15898 try {
15899 counter++;
15900 return invertFunctionCall(increaseAndReturn15);
15901 counter++;
15902 } catch (ex) {
15903 counter++;
15904 throw 2 + ex;
15905 counter++;
15906 }
15907 counter++;
15908 return 5 + local;
15909 }
15910 assertOptThrowsWith(44, f);
15911 assertEquals(3, counter);
15912
15913 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchWithLocal,
15914 // catchThrows, doFinally]
15915
15916 counter = 0;
15917 var f = function() {
15918 var local = 3;
15919 try {
15920 counter++;
15921 return invertFunctionCall(increaseAndReturn15);
15922 counter++;
15923 } catch (ex) {
15924 counter++;
15925 throw 2 + ex;
15926 counter++;
15927 } finally {
15928 counter++;
15929 local += 2;
15930 counter++;
15931 }
15932 counter++;
15933 }
15934 assertOptThrowsWith(44, f);
15935 assertEquals(5, counter);
15936
15937 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchWithLocal,
15938 // catchThrows, doFinally, endReturnLocal]
15939
15940 counter = 0;
15941 var f = function() {
15942 var local = 3;
15943 try {
15944 counter++;
15945 return invertFunctionCall(increaseAndReturn15);
15946 counter++;
15947 } catch (ex) {
15948 counter++;
15949 throw 2 + ex;
15950 counter++;
15951 } finally {
15952 counter++;
15953 local += 2;
15954 counter++;
15955 }
15956 counter++;
15957 return 5 + local;
15958 }
15959 assertOptThrowsWith(44, f);
15960 assertEquals(5, counter);
15961
15962 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchWithLocal,
15963 // catchThrows, doFinally, finallyThrows]
15964
15965 counter = 0;
15966 var f = function() {
15967 var local = 3;
15968 try {
15969 counter++;
15970 return invertFunctionCall(increaseAndReturn15);
15971 counter++;
15972 } catch (ex) {
15973 counter++;
15974 throw 2 + ex;
15975 counter++;
15976 } finally {
15977 counter++;
15978 throw 25;
15979 counter++;
15980 }
15981 counter++;
15982 }
15983 assertOptThrowsWith(25, f);
15984 assertEquals(4, counter);
15985
15986 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchWithLocal,
15987 // catchThrows, doFinally, finallyThrows, endReturnLocal]
15988
15989 counter = 0;
15990 var f = function() {
15991 var local = 3;
15992 try {
15993 counter++;
15994 return invertFunctionCall(increaseAndReturn15);
15995 counter++;
15996 } catch (ex) {
15997 counter++;
15998 throw 2 + ex;
15999 counter++;
16000 } finally {
16001 counter++;
16002 throw 25;
16003 counter++;
16004 }
16005 counter++;
16006 return 5 + local;
16007 }
16008 assertOptThrowsWith(25, f);
16009 assertEquals(4, counter);
16010
16011 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchWithLocal,
16012 // catchThrows, doFinally, finallyReturns]
16013
16014 counter = 0;
16015 var f = function() {
16016 var local = 3;
16017 try {
16018 counter++;
16019 return invertFunctionCall(increaseAndReturn15);
16020 counter++;
16021 } catch (ex) {
16022 counter++;
16023 throw 2 + ex;
16024 counter++;
16025 } finally {
16026 counter++;
16027 return 3 + local;
16028 counter++;
16029 }
16030 counter++;
16031 }
16032 assertOptResultEquals(6, f);
16033 assertEquals(4, counter);
16034
16035 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchWithLocal,
16036 // catchThrows, doFinally, finallyReturns, endReturnLocal]
16037
16038 counter = 0;
16039 var f = function() {
16040 var local = 3;
16041 try {
16042 counter++;
16043 return invertFunctionCall(increaseAndReturn15);
16044 counter++;
16045 } catch (ex) {
16046 counter++;
16047 throw 2 + ex;
16048 counter++;
16049 } finally {
16050 counter++;
16051 return 3 + local;
16052 counter++;
16053 }
16054 counter++;
16055 return 5 + local;
16056 }
16057 assertOptResultEquals(6, f);
16058 assertEquals(4, counter);
16059
16060 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchReturns]
16061
16062 counter = 0;
16063 var f = function() {
16064 var local = 3;
16065 try {
16066 counter++;
16067 return invertFunctionCall(increaseAndReturn15);
16068 counter++;
16069 } catch (ex) {
16070 counter++;
16071 return 2 + ex;
16072 counter++;
16073 }
16074 counter++;
16075 }
16076 assertOptResultEquals(44, f);
16077 assertEquals(3, counter);
16078
16079 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchReturns,
16080 // endReturnLocal]
16081
16082 counter = 0;
16083 var f = function() {
16084 var local = 3;
16085 try {
16086 counter++;
16087 return invertFunctionCall(increaseAndReturn15);
16088 counter++;
16089 } catch (ex) {
16090 counter++;
16091 return 2 + ex;
16092 counter++;
16093 }
16094 counter++;
16095 return 5 + local;
16096 }
16097 assertOptResultEquals(44, f);
16098 assertEquals(3, counter);
16099
16100 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchReturns,
16101 // doFinally]
16102
16103 counter = 0;
16104 var f = function() {
16105 var local = 3;
16106 try {
16107 counter++;
16108 return invertFunctionCall(increaseAndReturn15);
16109 counter++;
16110 } catch (ex) {
16111 counter++;
16112 return 2 + ex;
16113 counter++;
16114 } finally {
16115 counter++;
16116 local += 2;
16117 counter++;
16118 }
16119 counter++;
16120 }
16121 assertOptResultEquals(44, f);
16122 assertEquals(5, counter);
16123
16124 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchReturns,
16125 // doFinally, endReturnLocal]
16126
16127 counter = 0;
16128 var f = function() {
16129 var local = 3;
16130 try {
16131 counter++;
16132 return invertFunctionCall(increaseAndReturn15);
16133 counter++;
16134 } catch (ex) {
16135 counter++;
16136 return 2 + ex;
16137 counter++;
16138 } finally {
16139 counter++;
16140 local += 2;
16141 counter++;
16142 }
16143 counter++;
16144 return 5 + local;
16145 }
16146 assertOptResultEquals(44, f);
16147 assertEquals(5, counter);
16148
16149 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchReturns,
16150 // doFinally, finallyThrows]
16151
16152 counter = 0;
16153 var f = function() {
16154 var local = 3;
16155 try {
16156 counter++;
16157 return invertFunctionCall(increaseAndReturn15);
16158 counter++;
16159 } catch (ex) {
16160 counter++;
16161 return 2 + ex;
16162 counter++;
16163 } finally {
16164 counter++;
16165 throw 25;
16166 counter++;
16167 }
16168 counter++;
16169 }
16170 assertOptThrowsWith(25, f);
16171 assertEquals(4, counter);
16172
16173 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchReturns,
16174 // doFinally, finallyThrows, endReturnLocal]
16175
16176 counter = 0;
16177 var f = function() {
16178 var local = 3;
16179 try {
16180 counter++;
16181 return invertFunctionCall(increaseAndReturn15);
16182 counter++;
16183 } catch (ex) {
16184 counter++;
16185 return 2 + ex;
16186 counter++;
16187 } finally {
16188 counter++;
16189 throw 25;
16190 counter++;
16191 }
16192 counter++;
16193 return 5 + local;
16194 }
16195 assertOptThrowsWith(25, f);
16196 assertEquals(4, counter);
16197
16198 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchReturns,
16199 // doFinally, finallyReturns]
16200
16201 counter = 0;
16202 var f = function() {
16203 var local = 3;
16204 try {
16205 counter++;
16206 return invertFunctionCall(increaseAndReturn15);
16207 counter++;
16208 } catch (ex) {
16209 counter++;
16210 return 2 + ex;
16211 counter++;
16212 } finally {
16213 counter++;
16214 return 3 + local;
16215 counter++;
16216 }
16217 counter++;
16218 }
16219 assertOptResultEquals(6, f);
16220 assertEquals(4, counter);
16221
16222 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchReturns,
16223 // doFinally, finallyReturns, endReturnLocal]
16224
16225 counter = 0;
16226 var f = function() {
16227 var local = 3;
16228 try {
16229 counter++;
16230 return invertFunctionCall(increaseAndReturn15);
16231 counter++;
16232 } catch (ex) {
16233 counter++;
16234 return 2 + ex;
16235 counter++;
16236 } finally {
16237 counter++;
16238 return 3 + local;
16239 counter++;
16240 }
16241 counter++;
16242 return 5 + local;
16243 }
16244 assertOptResultEquals(6, f);
16245 assertEquals(4, counter);
16246
16247 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchReturns,
16248 // catchWithLocal]
16249
16250 counter = 0;
16251 var f = function() {
16252 var local = 3;
16253 try {
16254 counter++;
16255 return invertFunctionCall(increaseAndReturn15);
16256 counter++;
16257 } catch (ex) {
16258 counter++;
16259 return 2 + local;
16260 counter++;
16261 }
16262 counter++;
16263 }
16264 assertOptResultEquals(5, f);
16265 assertEquals(3, counter);
16266
16267 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchReturns,
16268 // catchWithLocal, endReturnLocal]
16269
16270 counter = 0;
16271 var f = function() {
16272 var local = 3;
16273 try {
16274 counter++;
16275 return invertFunctionCall(increaseAndReturn15);
16276 counter++;
16277 } catch (ex) {
16278 counter++;
16279 return 2 + local;
16280 counter++;
16281 }
16282 counter++;
16283 return 5 + local;
16284 }
16285 assertOptResultEquals(5, f);
16286 assertEquals(3, counter);
16287
16288 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchReturns,
16289 // catchWithLocal, doFinally]
16290
16291 counter = 0;
16292 var f = function() {
16293 var local = 3;
16294 try {
16295 counter++;
16296 return invertFunctionCall(increaseAndReturn15);
16297 counter++;
16298 } catch (ex) {
16299 counter++;
16300 return 2 + local;
16301 counter++;
16302 } finally {
16303 counter++;
16304 local += 2;
16305 counter++;
16306 }
16307 counter++;
16308 }
16309 assertOptResultEquals(5, f);
16310 assertEquals(5, counter);
16311
16312 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchReturns,
16313 // catchWithLocal, doFinally, endReturnLocal]
16314
16315 counter = 0;
16316 var f = function() {
16317 var local = 3;
16318 try {
16319 counter++;
16320 return invertFunctionCall(increaseAndReturn15);
16321 counter++;
16322 } catch (ex) {
16323 counter++;
16324 return 2 + local;
16325 counter++;
16326 } finally {
16327 counter++;
16328 local += 2;
16329 counter++;
16330 }
16331 counter++;
16332 return 5 + local;
16333 }
16334 assertOptResultEquals(5, f);
16335 assertEquals(5, counter);
16336
16337 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchReturns,
16338 // catchWithLocal, doFinally, finallyThrows]
16339
16340 counter = 0;
16341 var f = function() {
16342 var local = 3;
16343 try {
16344 counter++;
16345 return invertFunctionCall(increaseAndReturn15);
16346 counter++;
16347 } catch (ex) {
16348 counter++;
16349 return 2 + local;
16350 counter++;
16351 } finally {
16352 counter++;
16353 throw 25;
16354 counter++;
16355 }
16356 counter++;
16357 }
16358 assertOptThrowsWith(25, f);
16359 assertEquals(4, counter);
16360
16361 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchReturns,
16362 // catchWithLocal, doFinally, finallyThrows, endReturnLocal]
16363
16364 counter = 0;
16365 var f = function() {
16366 var local = 3;
16367 try {
16368 counter++;
16369 return invertFunctionCall(increaseAndReturn15);
16370 counter++;
16371 } catch (ex) {
16372 counter++;
16373 return 2 + local;
16374 counter++;
16375 } finally {
16376 counter++;
16377 throw 25;
16378 counter++;
16379 }
16380 counter++;
16381 return 5 + local;
16382 }
16383 assertOptThrowsWith(25, f);
16384 assertEquals(4, counter);
16385
16386 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchReturns,
16387 // catchWithLocal, doFinally, finallyReturns]
16388
16389 counter = 0;
16390 var f = function() {
16391 var local = 3;
16392 try {
16393 counter++;
16394 return invertFunctionCall(increaseAndReturn15);
16395 counter++;
16396 } catch (ex) {
16397 counter++;
16398 return 2 + local;
16399 counter++;
16400 } finally {
16401 counter++;
16402 return 3 + local;
16403 counter++;
16404 }
16405 counter++;
16406 }
16407 assertOptResultEquals(6, f);
16408 assertEquals(4, counter);
16409
16410 // Variant flags: [alternativeFn2, tryThrows, doCatch, catchReturns,
16411 // catchWithLocal, doFinally, finallyReturns, endReturnLocal]
16412
16413 counter = 0;
16414 var f = function() {
16415 var local = 3;
16416 try {
16417 counter++;
16418 return invertFunctionCall(increaseAndReturn15);
16419 counter++;
16420 } catch (ex) {
16421 counter++;
16422 return 2 + local;
16423 counter++;
16424 } finally {
16425 counter++;
16426 return 3 + local;
16427 counter++;
16428 }
16429 counter++;
16430 return 5 + local;
16431 }
16432 assertOptResultEquals(6, f);
16433 assertEquals(4, counter);
16434
16435 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16436 // doFinally]
16437
16438 counter = 0;
16439 var f = function() {
16440 var local = 3;
16441 try {
16442 counter++;
16443 local += invertFunctionCall(increaseAndReturn15);
16444 counter++;
16445 } finally {
16446 counter++;
16447 local += 2;
16448 counter++;
16449 }
16450 counter++;
16451 }
16452 assertOptThrowsWith(42, f);
16453 assertEquals(4, counter);
16454
16455 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16456 // doFinally, endReturnLocal]
16457
16458 counter = 0;
16459 var f = function() {
16460 var local = 3;
16461 try {
16462 counter++;
16463 local += invertFunctionCall(increaseAndReturn15);
16464 counter++;
16465 } finally {
16466 counter++;
16467 local += 2;
16468 counter++;
16469 }
16470 counter++;
16471 return 5 + local;
16472 }
16473 assertOptThrowsWith(42, f);
16474 assertEquals(4, counter);
16475
16476 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16477 // doFinally, finallyThrows]
16478
16479 counter = 0;
16480 var f = function() {
16481 var local = 3;
16482 try {
16483 counter++;
16484 local += invertFunctionCall(increaseAndReturn15);
16485 counter++;
16486 } finally {
16487 counter++;
16488 throw 25;
16489 counter++;
16490 }
16491 counter++;
16492 }
16493 assertOptThrowsWith(25, f);
16494 assertEquals(3, counter);
16495
16496 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16497 // doFinally, finallyThrows, endReturnLocal]
16498
16499 counter = 0;
16500 var f = function() {
16501 var local = 3;
16502 try {
16503 counter++;
16504 local += invertFunctionCall(increaseAndReturn15);
16505 counter++;
16506 } finally {
16507 counter++;
16508 throw 25;
16509 counter++;
16510 }
16511 counter++;
16512 return 5 + local;
16513 }
16514 assertOptThrowsWith(25, f);
16515 assertEquals(3, counter);
16516
16517 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16518 // doFinally, finallyReturns]
16519
16520 counter = 0;
16521 var f = function() {
16522 var local = 3;
16523 try {
16524 counter++;
16525 local += invertFunctionCall(increaseAndReturn15);
16526 counter++;
16527 } finally {
16528 counter++;
16529 return 3 + local;
16530 counter++;
16531 }
16532 counter++;
16533 }
16534 assertOptResultEquals(6, f);
16535 assertEquals(3, counter);
16536
16537 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16538 // doFinally, finallyReturns, endReturnLocal]
16539
16540 counter = 0;
16541 var f = function() {
16542 var local = 3;
16543 try {
16544 counter++;
16545 local += invertFunctionCall(increaseAndReturn15);
16546 counter++;
16547 } finally {
16548 counter++;
16549 return 3 + local;
16550 counter++;
16551 }
16552 counter++;
16553 return 5 + local;
16554 }
16555 assertOptResultEquals(6, f);
16556 assertEquals(3, counter);
16557
16558 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16559 // doCatch]
16560
16561 counter = 0;
16562 var f = function() {
16563 var local = 3;
16564 try {
16565 counter++;
16566 local += invertFunctionCall(increaseAndReturn15);
16567 counter++;
16568 } catch (ex) {
16569 counter++;
16570 counter++;
16571 }
16572 counter++;
16573 }
16574 assertOptResultEquals(undefined, f);
16575 assertEquals(5, counter);
16576
16577 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16578 // doCatch, endReturnLocal]
16579
16580 counter = 0;
16581 var f = function() {
16582 var local = 3;
16583 try {
16584 counter++;
16585 local += invertFunctionCall(increaseAndReturn15);
16586 counter++;
16587 } catch (ex) {
16588 counter++;
16589 counter++;
16590 }
16591 counter++;
16592 return 5 + local;
16593 }
16594 assertOptResultEquals(8, f);
16595 assertEquals(5, counter);
16596
16597 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16598 // doCatch, doFinally]
16599
16600 counter = 0;
16601 var f = function() {
16602 var local = 3;
16603 try {
16604 counter++;
16605 local += invertFunctionCall(increaseAndReturn15);
16606 counter++;
16607 } catch (ex) {
16608 counter++;
16609 counter++;
16610 } finally {
16611 counter++;
16612 local += 2;
16613 counter++;
16614 }
16615 counter++;
16616 }
16617 assertOptResultEquals(undefined, f);
16618 assertEquals(7, counter);
16619
16620 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16621 // doCatch, doFinally, endReturnLocal]
16622
16623 counter = 0;
16624 var f = function() {
16625 var local = 3;
16626 try {
16627 counter++;
16628 local += invertFunctionCall(increaseAndReturn15);
16629 counter++;
16630 } catch (ex) {
16631 counter++;
16632 counter++;
16633 } finally {
16634 counter++;
16635 local += 2;
16636 counter++;
16637 }
16638 counter++;
16639 return 5 + local;
16640 }
16641 assertOptResultEquals(10, f);
16642 assertEquals(7, counter);
16643
16644 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16645 // doCatch, doFinally, finallyThrows]
16646
16647 counter = 0;
16648 var f = function() {
16649 var local = 3;
16650 try {
16651 counter++;
16652 local += invertFunctionCall(increaseAndReturn15);
16653 counter++;
16654 } catch (ex) {
16655 counter++;
16656 counter++;
16657 } finally {
16658 counter++;
16659 throw 25;
16660 counter++;
16661 }
16662 counter++;
16663 }
16664 assertOptThrowsWith(25, f);
16665 assertEquals(5, counter);
16666
16667 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16668 // doCatch, doFinally, finallyThrows, endReturnLocal]
16669
16670 counter = 0;
16671 var f = function() {
16672 var local = 3;
16673 try {
16674 counter++;
16675 local += invertFunctionCall(increaseAndReturn15);
16676 counter++;
16677 } catch (ex) {
16678 counter++;
16679 counter++;
16680 } finally {
16681 counter++;
16682 throw 25;
16683 counter++;
16684 }
16685 counter++;
16686 return 5 + local;
16687 }
16688 assertOptThrowsWith(25, f);
16689 assertEquals(5, counter);
16690
16691 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16692 // doCatch, doFinally, finallyReturns]
16693
16694 counter = 0;
16695 var f = function() {
16696 var local = 3;
16697 try {
16698 counter++;
16699 local += invertFunctionCall(increaseAndReturn15);
16700 counter++;
16701 } catch (ex) {
16702 counter++;
16703 counter++;
16704 } finally {
16705 counter++;
16706 return 3 + local;
16707 counter++;
16708 }
16709 counter++;
16710 }
16711 assertOptResultEquals(6, f);
16712 assertEquals(5, counter);
16713
16714 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16715 // doCatch, doFinally, finallyReturns, endReturnLocal]
16716
16717 counter = 0;
16718 var f = function() {
16719 var local = 3;
16720 try {
16721 counter++;
16722 local += invertFunctionCall(increaseAndReturn15);
16723 counter++;
16724 } catch (ex) {
16725 counter++;
16726 counter++;
16727 } finally {
16728 counter++;
16729 return 3 + local;
16730 counter++;
16731 }
16732 counter++;
16733 return 5 + local;
16734 }
16735 assertOptResultEquals(6, f);
16736 assertEquals(5, counter);
16737
16738 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16739 // doCatch, catchThrows]
16740
16741 counter = 0;
16742 var f = function() {
16743 var local = 3;
16744 try {
16745 counter++;
16746 local += invertFunctionCall(increaseAndReturn15);
16747 counter++;
16748 } catch (ex) {
16749 counter++;
16750 throw 2 + ex;
16751 counter++;
16752 }
16753 counter++;
16754 }
16755 assertOptThrowsWith(44, f);
16756 assertEquals(3, counter);
16757
16758 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16759 // doCatch, catchThrows, endReturnLocal]
16760
16761 counter = 0;
16762 var f = function() {
16763 var local = 3;
16764 try {
16765 counter++;
16766 local += invertFunctionCall(increaseAndReturn15);
16767 counter++;
16768 } catch (ex) {
16769 counter++;
16770 throw 2 + ex;
16771 counter++;
16772 }
16773 counter++;
16774 return 5 + local;
16775 }
16776 assertOptThrowsWith(44, f);
16777 assertEquals(3, counter);
16778
16779 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16780 // doCatch, catchThrows, doFinally]
16781
16782 counter = 0;
16783 var f = function() {
16784 var local = 3;
16785 try {
16786 counter++;
16787 local += invertFunctionCall(increaseAndReturn15);
16788 counter++;
16789 } catch (ex) {
16790 counter++;
16791 throw 2 + ex;
16792 counter++;
16793 } finally {
16794 counter++;
16795 local += 2;
16796 counter++;
16797 }
16798 counter++;
16799 }
16800 assertOptThrowsWith(44, f);
16801 assertEquals(5, counter);
16802
16803 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16804 // doCatch, catchThrows, doFinally, endReturnLocal]
16805
16806 counter = 0;
16807 var f = function() {
16808 var local = 3;
16809 try {
16810 counter++;
16811 local += invertFunctionCall(increaseAndReturn15);
16812 counter++;
16813 } catch (ex) {
16814 counter++;
16815 throw 2 + ex;
16816 counter++;
16817 } finally {
16818 counter++;
16819 local += 2;
16820 counter++;
16821 }
16822 counter++;
16823 return 5 + local;
16824 }
16825 assertOptThrowsWith(44, f);
16826 assertEquals(5, counter);
16827
16828 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16829 // doCatch, catchThrows, doFinally, finallyThrows]
16830
16831 counter = 0;
16832 var f = function() {
16833 var local = 3;
16834 try {
16835 counter++;
16836 local += invertFunctionCall(increaseAndReturn15);
16837 counter++;
16838 } catch (ex) {
16839 counter++;
16840 throw 2 + ex;
16841 counter++;
16842 } finally {
16843 counter++;
16844 throw 25;
16845 counter++;
16846 }
16847 counter++;
16848 }
16849 assertOptThrowsWith(25, f);
16850 assertEquals(4, counter);
16851
16852 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16853 // doCatch, catchThrows, doFinally, finallyThrows, endReturnLocal]
16854
16855 counter = 0;
16856 var f = function() {
16857 var local = 3;
16858 try {
16859 counter++;
16860 local += invertFunctionCall(increaseAndReturn15);
16861 counter++;
16862 } catch (ex) {
16863 counter++;
16864 throw 2 + ex;
16865 counter++;
16866 } finally {
16867 counter++;
16868 throw 25;
16869 counter++;
16870 }
16871 counter++;
16872 return 5 + local;
16873 }
16874 assertOptThrowsWith(25, f);
16875 assertEquals(4, counter);
16876
16877 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16878 // doCatch, catchThrows, doFinally, finallyReturns]
16879
16880 counter = 0;
16881 var f = function() {
16882 var local = 3;
16883 try {
16884 counter++;
16885 local += invertFunctionCall(increaseAndReturn15);
16886 counter++;
16887 } catch (ex) {
16888 counter++;
16889 throw 2 + ex;
16890 counter++;
16891 } finally {
16892 counter++;
16893 return 3 + local;
16894 counter++;
16895 }
16896 counter++;
16897 }
16898 assertOptResultEquals(6, f);
16899 assertEquals(4, counter);
16900
16901 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16902 // doCatch, catchThrows, doFinally, finallyReturns, endReturnLocal]
16903
16904 counter = 0;
16905 var f = function() {
16906 var local = 3;
16907 try {
16908 counter++;
16909 local += invertFunctionCall(increaseAndReturn15);
16910 counter++;
16911 } catch (ex) {
16912 counter++;
16913 throw 2 + ex;
16914 counter++;
16915 } finally {
16916 counter++;
16917 return 3 + local;
16918 counter++;
16919 }
16920 counter++;
16921 return 5 + local;
16922 }
16923 assertOptResultEquals(6, f);
16924 assertEquals(4, counter);
16925
16926 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16927 // doCatch, catchWithLocal]
16928
16929 counter = 0;
16930 var f = function() {
16931 var local = 3;
16932 try {
16933 counter++;
16934 local += invertFunctionCall(increaseAndReturn15);
16935 counter++;
16936 } catch (ex) {
16937 counter++;
16938 local += ex;
16939 counter++;
16940 }
16941 counter++;
16942 }
16943 assertOptResultEquals(undefined, f);
16944 assertEquals(5, counter);
16945
16946 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16947 // doCatch, catchWithLocal, endReturnLocal]
16948
16949 counter = 0;
16950 var f = function() {
16951 var local = 3;
16952 try {
16953 counter++;
16954 local += invertFunctionCall(increaseAndReturn15);
16955 counter++;
16956 } catch (ex) {
16957 counter++;
16958 local += ex;
16959 counter++;
16960 }
16961 counter++;
16962 return 5 + local;
16963 }
16964 assertOptResultEquals(50, f);
16965 assertEquals(5, counter);
16966
16967 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16968 // doCatch, catchWithLocal, doFinally]
16969
16970 counter = 0;
16971 var f = function() {
16972 var local = 3;
16973 try {
16974 counter++;
16975 local += invertFunctionCall(increaseAndReturn15);
16976 counter++;
16977 } catch (ex) {
16978 counter++;
16979 local += ex;
16980 counter++;
16981 } finally {
16982 counter++;
16983 local += 2;
16984 counter++;
16985 }
16986 counter++;
16987 }
16988 assertOptResultEquals(undefined, f);
16989 assertEquals(7, counter);
16990
16991 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
16992 // doCatch, catchWithLocal, doFinally, endReturnLocal]
16993
16994 counter = 0;
16995 var f = function() {
16996 var local = 3;
16997 try {
16998 counter++;
16999 local += invertFunctionCall(increaseAndReturn15);
17000 counter++;
17001 } catch (ex) {
17002 counter++;
17003 local += ex;
17004 counter++;
17005 } finally {
17006 counter++;
17007 local += 2;
17008 counter++;
17009 }
17010 counter++;
17011 return 5 + local;
17012 }
17013 assertOptResultEquals(52, f);
17014 assertEquals(7, counter);
17015
17016 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17017 // doCatch, catchWithLocal, doFinally, finallyThrows]
17018
17019 counter = 0;
17020 var f = function() {
17021 var local = 3;
17022 try {
17023 counter++;
17024 local += invertFunctionCall(increaseAndReturn15);
17025 counter++;
17026 } catch (ex) {
17027 counter++;
17028 local += ex;
17029 counter++;
17030 } finally {
17031 counter++;
17032 throw 25;
17033 counter++;
17034 }
17035 counter++;
17036 }
17037 assertOptThrowsWith(25, f);
17038 assertEquals(5, counter);
17039
17040 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17041 // doCatch, catchWithLocal, doFinally, finallyThrows,
17042 // endReturnLocal]
17043
17044 counter = 0;
17045 var f = function() {
17046 var local = 3;
17047 try {
17048 counter++;
17049 local += invertFunctionCall(increaseAndReturn15);
17050 counter++;
17051 } catch (ex) {
17052 counter++;
17053 local += ex;
17054 counter++;
17055 } finally {
17056 counter++;
17057 throw 25;
17058 counter++;
17059 }
17060 counter++;
17061 return 5 + local;
17062 }
17063 assertOptThrowsWith(25, f);
17064 assertEquals(5, counter);
17065
17066 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17067 // doCatch, catchWithLocal, doFinally, finallyReturns]
17068
17069 counter = 0;
17070 var f = function() {
17071 var local = 3;
17072 try {
17073 counter++;
17074 local += invertFunctionCall(increaseAndReturn15);
17075 counter++;
17076 } catch (ex) {
17077 counter++;
17078 local += ex;
17079 counter++;
17080 } finally {
17081 counter++;
17082 return 3 + local;
17083 counter++;
17084 }
17085 counter++;
17086 }
17087 assertOptResultEquals(48, f);
17088 assertEquals(5, counter);
17089
17090 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17091 // doCatch, catchWithLocal, doFinally, finallyReturns,
17092 // endReturnLocal]
17093
17094 counter = 0;
17095 var f = function() {
17096 var local = 3;
17097 try {
17098 counter++;
17099 local += invertFunctionCall(increaseAndReturn15);
17100 counter++;
17101 } catch (ex) {
17102 counter++;
17103 local += ex;
17104 counter++;
17105 } finally {
17106 counter++;
17107 return 3 + local;
17108 counter++;
17109 }
17110 counter++;
17111 return 5 + local;
17112 }
17113 assertOptResultEquals(48, f);
17114 assertEquals(5, counter);
17115
17116 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17117 // doCatch, catchWithLocal, catchThrows]
17118
17119 counter = 0;
17120 var f = function() {
17121 var local = 3;
17122 try {
17123 counter++;
17124 local += invertFunctionCall(increaseAndReturn15);
17125 counter++;
17126 } catch (ex) {
17127 counter++;
17128 throw 2 + ex;
17129 counter++;
17130 }
17131 counter++;
17132 }
17133 assertOptThrowsWith(44, f);
17134 assertEquals(3, counter);
17135
17136 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17137 // doCatch, catchWithLocal, catchThrows, endReturnLocal]
17138
17139 counter = 0;
17140 var f = function() {
17141 var local = 3;
17142 try {
17143 counter++;
17144 local += invertFunctionCall(increaseAndReturn15);
17145 counter++;
17146 } catch (ex) {
17147 counter++;
17148 throw 2 + ex;
17149 counter++;
17150 }
17151 counter++;
17152 return 5 + local;
17153 }
17154 assertOptThrowsWith(44, f);
17155 assertEquals(3, counter);
17156
17157 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17158 // doCatch, catchWithLocal, catchThrows, doFinally]
17159
17160 counter = 0;
17161 var f = function() {
17162 var local = 3;
17163 try {
17164 counter++;
17165 local += invertFunctionCall(increaseAndReturn15);
17166 counter++;
17167 } catch (ex) {
17168 counter++;
17169 throw 2 + ex;
17170 counter++;
17171 } finally {
17172 counter++;
17173 local += 2;
17174 counter++;
17175 }
17176 counter++;
17177 }
17178 assertOptThrowsWith(44, f);
17179 assertEquals(5, counter);
17180
17181 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17182 // doCatch, catchWithLocal, catchThrows, doFinally, endReturnLocal]
17183
17184 counter = 0;
17185 var f = function() {
17186 var local = 3;
17187 try {
17188 counter++;
17189 local += invertFunctionCall(increaseAndReturn15);
17190 counter++;
17191 } catch (ex) {
17192 counter++;
17193 throw 2 + ex;
17194 counter++;
17195 } finally {
17196 counter++;
17197 local += 2;
17198 counter++;
17199 }
17200 counter++;
17201 return 5 + local;
17202 }
17203 assertOptThrowsWith(44, f);
17204 assertEquals(5, counter);
17205
17206 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17207 // doCatch, catchWithLocal, catchThrows, doFinally, finallyThrows]
17208
17209 counter = 0;
17210 var f = function() {
17211 var local = 3;
17212 try {
17213 counter++;
17214 local += invertFunctionCall(increaseAndReturn15);
17215 counter++;
17216 } catch (ex) {
17217 counter++;
17218 throw 2 + ex;
17219 counter++;
17220 } finally {
17221 counter++;
17222 throw 25;
17223 counter++;
17224 }
17225 counter++;
17226 }
17227 assertOptThrowsWith(25, f);
17228 assertEquals(4, counter);
17229
17230 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17231 // doCatch, catchWithLocal, catchThrows, doFinally, finallyThrows,
17232 // endReturnLocal]
17233
17234 counter = 0;
17235 var f = function() {
17236 var local = 3;
17237 try {
17238 counter++;
17239 local += invertFunctionCall(increaseAndReturn15);
17240 counter++;
17241 } catch (ex) {
17242 counter++;
17243 throw 2 + ex;
17244 counter++;
17245 } finally {
17246 counter++;
17247 throw 25;
17248 counter++;
17249 }
17250 counter++;
17251 return 5 + local;
17252 }
17253 assertOptThrowsWith(25, f);
17254 assertEquals(4, counter);
17255
17256 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17257 // doCatch, catchWithLocal, catchThrows, doFinally, finallyReturns]
17258
17259 counter = 0;
17260 var f = function() {
17261 var local = 3;
17262 try {
17263 counter++;
17264 local += invertFunctionCall(increaseAndReturn15);
17265 counter++;
17266 } catch (ex) {
17267 counter++;
17268 throw 2 + ex;
17269 counter++;
17270 } finally {
17271 counter++;
17272 return 3 + local;
17273 counter++;
17274 }
17275 counter++;
17276 }
17277 assertOptResultEquals(6, f);
17278 assertEquals(4, counter);
17279
17280 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17281 // doCatch, catchWithLocal, catchThrows, doFinally, finallyReturns,
17282 // endReturnLocal]
17283
17284 counter = 0;
17285 var f = function() {
17286 var local = 3;
17287 try {
17288 counter++;
17289 local += invertFunctionCall(increaseAndReturn15);
17290 counter++;
17291 } catch (ex) {
17292 counter++;
17293 throw 2 + ex;
17294 counter++;
17295 } finally {
17296 counter++;
17297 return 3 + local;
17298 counter++;
17299 }
17300 counter++;
17301 return 5 + local;
17302 }
17303 assertOptResultEquals(6, f);
17304 assertEquals(4, counter);
17305
17306 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17307 // doCatch, catchReturns]
17308
17309 counter = 0;
17310 var f = function() {
17311 var local = 3;
17312 try {
17313 counter++;
17314 local += invertFunctionCall(increaseAndReturn15);
17315 counter++;
17316 } catch (ex) {
17317 counter++;
17318 return 2 + ex;
17319 counter++;
17320 }
17321 counter++;
17322 }
17323 assertOptResultEquals(44, f);
17324 assertEquals(3, counter);
17325
17326 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17327 // doCatch, catchReturns, endReturnLocal]
17328
17329 counter = 0;
17330 var f = function() {
17331 var local = 3;
17332 try {
17333 counter++;
17334 local += invertFunctionCall(increaseAndReturn15);
17335 counter++;
17336 } catch (ex) {
17337 counter++;
17338 return 2 + ex;
17339 counter++;
17340 }
17341 counter++;
17342 return 5 + local;
17343 }
17344 assertOptResultEquals(44, f);
17345 assertEquals(3, counter);
17346
17347 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17348 // doCatch, catchReturns, doFinally]
17349
17350 counter = 0;
17351 var f = function() {
17352 var local = 3;
17353 try {
17354 counter++;
17355 local += invertFunctionCall(increaseAndReturn15);
17356 counter++;
17357 } catch (ex) {
17358 counter++;
17359 return 2 + ex;
17360 counter++;
17361 } finally {
17362 counter++;
17363 local += 2;
17364 counter++;
17365 }
17366 counter++;
17367 }
17368 assertOptResultEquals(44, f);
17369 assertEquals(5, counter);
17370
17371 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17372 // doCatch, catchReturns, doFinally, endReturnLocal]
17373
17374 counter = 0;
17375 var f = function() {
17376 var local = 3;
17377 try {
17378 counter++;
17379 local += invertFunctionCall(increaseAndReturn15);
17380 counter++;
17381 } catch (ex) {
17382 counter++;
17383 return 2 + ex;
17384 counter++;
17385 } finally {
17386 counter++;
17387 local += 2;
17388 counter++;
17389 }
17390 counter++;
17391 return 5 + local;
17392 }
17393 assertOptResultEquals(44, f);
17394 assertEquals(5, counter);
17395
17396 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17397 // doCatch, catchReturns, doFinally, finallyThrows]
17398
17399 counter = 0;
17400 var f = function() {
17401 var local = 3;
17402 try {
17403 counter++;
17404 local += invertFunctionCall(increaseAndReturn15);
17405 counter++;
17406 } catch (ex) {
17407 counter++;
17408 return 2 + ex;
17409 counter++;
17410 } finally {
17411 counter++;
17412 throw 25;
17413 counter++;
17414 }
17415 counter++;
17416 }
17417 assertOptThrowsWith(25, f);
17418 assertEquals(4, counter);
17419
17420 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17421 // doCatch, catchReturns, doFinally, finallyThrows, endReturnLocal]
17422
17423 counter = 0;
17424 var f = function() {
17425 var local = 3;
17426 try {
17427 counter++;
17428 local += invertFunctionCall(increaseAndReturn15);
17429 counter++;
17430 } catch (ex) {
17431 counter++;
17432 return 2 + ex;
17433 counter++;
17434 } finally {
17435 counter++;
17436 throw 25;
17437 counter++;
17438 }
17439 counter++;
17440 return 5 + local;
17441 }
17442 assertOptThrowsWith(25, f);
17443 assertEquals(4, counter);
17444
17445 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17446 // doCatch, catchReturns, doFinally, finallyReturns]
17447
17448 counter = 0;
17449 var f = function() {
17450 var local = 3;
17451 try {
17452 counter++;
17453 local += invertFunctionCall(increaseAndReturn15);
17454 counter++;
17455 } catch (ex) {
17456 counter++;
17457 return 2 + ex;
17458 counter++;
17459 } finally {
17460 counter++;
17461 return 3 + local;
17462 counter++;
17463 }
17464 counter++;
17465 }
17466 assertOptResultEquals(6, f);
17467 assertEquals(4, counter);
17468
17469 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17470 // doCatch, catchReturns, doFinally, finallyReturns, endReturnLocal]
17471
17472 counter = 0;
17473 var f = function() {
17474 var local = 3;
17475 try {
17476 counter++;
17477 local += invertFunctionCall(increaseAndReturn15);
17478 counter++;
17479 } catch (ex) {
17480 counter++;
17481 return 2 + ex;
17482 counter++;
17483 } finally {
17484 counter++;
17485 return 3 + local;
17486 counter++;
17487 }
17488 counter++;
17489 return 5 + local;
17490 }
17491 assertOptResultEquals(6, f);
17492 assertEquals(4, counter);
17493
17494 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17495 // doCatch, catchReturns, catchWithLocal]
17496
17497 counter = 0;
17498 var f = function() {
17499 var local = 3;
17500 try {
17501 counter++;
17502 local += invertFunctionCall(increaseAndReturn15);
17503 counter++;
17504 } catch (ex) {
17505 counter++;
17506 return 2 + local;
17507 counter++;
17508 }
17509 counter++;
17510 }
17511 assertOptResultEquals(5, f);
17512 assertEquals(3, counter);
17513
17514 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17515 // doCatch, catchReturns, catchWithLocal, endReturnLocal]
17516
17517 counter = 0;
17518 var f = function() {
17519 var local = 3;
17520 try {
17521 counter++;
17522 local += invertFunctionCall(increaseAndReturn15);
17523 counter++;
17524 } catch (ex) {
17525 counter++;
17526 return 2 + local;
17527 counter++;
17528 }
17529 counter++;
17530 return 5 + local;
17531 }
17532 assertOptResultEquals(5, f);
17533 assertEquals(3, counter);
17534
17535 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17536 // doCatch, catchReturns, catchWithLocal, doFinally]
17537
17538 counter = 0;
17539 var f = function() {
17540 var local = 3;
17541 try {
17542 counter++;
17543 local += invertFunctionCall(increaseAndReturn15);
17544 counter++;
17545 } catch (ex) {
17546 counter++;
17547 return 2 + local;
17548 counter++;
17549 } finally {
17550 counter++;
17551 local += 2;
17552 counter++;
17553 }
17554 counter++;
17555 }
17556 assertOptResultEquals(5, f);
17557 assertEquals(5, counter);
17558
17559 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17560 // doCatch, catchReturns, catchWithLocal, doFinally, endReturnLocal]
17561
17562 counter = 0;
17563 var f = function() {
17564 var local = 3;
17565 try {
17566 counter++;
17567 local += invertFunctionCall(increaseAndReturn15);
17568 counter++;
17569 } catch (ex) {
17570 counter++;
17571 return 2 + local;
17572 counter++;
17573 } finally {
17574 counter++;
17575 local += 2;
17576 counter++;
17577 }
17578 counter++;
17579 return 5 + local;
17580 }
17581 assertOptResultEquals(5, f);
17582 assertEquals(5, counter);
17583
17584 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17585 // doCatch, catchReturns, catchWithLocal, doFinally, finallyThrows]
17586
17587 counter = 0;
17588 var f = function() {
17589 var local = 3;
17590 try {
17591 counter++;
17592 local += invertFunctionCall(increaseAndReturn15);
17593 counter++;
17594 } catch (ex) {
17595 counter++;
17596 return 2 + local;
17597 counter++;
17598 } finally {
17599 counter++;
17600 throw 25;
17601 counter++;
17602 }
17603 counter++;
17604 }
17605 assertOptThrowsWith(25, f);
17606 assertEquals(4, counter);
17607
17608 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17609 // doCatch, catchReturns, catchWithLocal, doFinally, finallyThrows,
17610 // endReturnLocal]
17611
17612 counter = 0;
17613 var f = function() {
17614 var local = 3;
17615 try {
17616 counter++;
17617 local += invertFunctionCall(increaseAndReturn15);
17618 counter++;
17619 } catch (ex) {
17620 counter++;
17621 return 2 + local;
17622 counter++;
17623 } finally {
17624 counter++;
17625 throw 25;
17626 counter++;
17627 }
17628 counter++;
17629 return 5 + local;
17630 }
17631 assertOptThrowsWith(25, f);
17632 assertEquals(4, counter);
17633
17634 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17635 // doCatch, catchReturns, catchWithLocal, doFinally, finallyReturns]
17636
17637 counter = 0;
17638 var f = function() {
17639 var local = 3;
17640 try {
17641 counter++;
17642 local += invertFunctionCall(increaseAndReturn15);
17643 counter++;
17644 } catch (ex) {
17645 counter++;
17646 return 2 + local;
17647 counter++;
17648 } finally {
17649 counter++;
17650 return 3 + local;
17651 counter++;
17652 }
17653 counter++;
17654 }
17655 assertOptResultEquals(6, f);
17656 assertEquals(4, counter);
17657
17658 // Variant flags: [alternativeFn2, tryThrows, tryResultToLocal,
17659 // doCatch, catchReturns, catchWithLocal, doFinally, finallyReturns,
17660 // endReturnLocal]
17661
17662 counter = 0;
17663 var f = function() {
17664 var local = 3;
17665 try {
17666 counter++;
17667 local += invertFunctionCall(increaseAndReturn15);
17668 counter++;
17669 } catch (ex) {
17670 counter++;
17671 return 2 + local;
17672 counter++;
17673 } finally {
17674 counter++;
17675 return 3 + local;
17676 counter++;
17677 }
17678 counter++;
17679 return 5 + local;
17680 }
17681 assertOptResultEquals(6, f);
17682 assertEquals(4, counter);
17683
17684 // Variant flags: [alternativeFn2, tryReturns, doFinally]
17685
17686 counter = 0;
17687 var f = function() {
17688 var local = 3;
17689 try {
17690 counter++;
17691 return invertFunctionCall(increaseAndThrow42);
17692 counter++;
17693 } finally {
17694 counter++;
17695 local += 2;
17696 counter++;
17697 }
17698 counter++;
17699 }
17700 assertOptResultEquals(15, f);
17701 assertEquals(4, counter);
17702
17703 // Variant flags: [alternativeFn2, tryReturns, doFinally,
17704 // endReturnLocal]
17705
17706 counter = 0;
17707 var f = function() {
17708 var local = 3;
17709 try {
17710 counter++;
17711 return invertFunctionCall(increaseAndThrow42);
17712 counter++;
17713 } finally {
17714 counter++;
17715 local += 2;
17716 counter++;
17717 }
17718 counter++;
17719 return 5 + local;
17720 }
17721 assertOptResultEquals(15, f);
17722 assertEquals(4, counter);
17723
17724 // Variant flags: [alternativeFn2, tryReturns, doFinally,
17725 // finallyThrows]
17726
17727 counter = 0;
17728 var f = function() {
17729 var local = 3;
17730 try {
17731 counter++;
17732 return invertFunctionCall(increaseAndThrow42);
17733 counter++;
17734 } finally {
17735 counter++;
17736 throw 25;
17737 counter++;
17738 }
17739 counter++;
17740 }
17741 assertOptThrowsWith(25, f);
17742 assertEquals(3, counter);
17743
17744 // Variant flags: [alternativeFn2, tryReturns, doFinally,
17745 // finallyThrows, endReturnLocal]
17746
17747 counter = 0;
17748 var f = function() {
17749 var local = 3;
17750 try {
17751 counter++;
17752 return invertFunctionCall(increaseAndThrow42);
17753 counter++;
17754 } finally {
17755 counter++;
17756 throw 25;
17757 counter++;
17758 }
17759 counter++;
17760 return 5 + local;
17761 }
17762 assertOptThrowsWith(25, f);
17763 assertEquals(3, counter);
17764
17765 // Variant flags: [alternativeFn2, tryReturns, doFinally,
17766 // finallyReturns]
17767
17768 counter = 0;
17769 var f = function() {
17770 var local = 3;
17771 try {
17772 counter++;
17773 return invertFunctionCall(increaseAndThrow42);
17774 counter++;
17775 } finally {
17776 counter++;
17777 return 3 + local;
17778 counter++;
17779 }
17780 counter++;
17781 }
17782 assertOptResultEquals(6, f);
17783 assertEquals(3, counter);
17784
17785 // Variant flags: [alternativeFn2, tryReturns, doFinally,
17786 // finallyReturns, endReturnLocal]
17787
17788 counter = 0;
17789 var f = function() {
17790 var local = 3;
17791 try {
17792 counter++;
17793 return invertFunctionCall(increaseAndThrow42);
17794 counter++;
17795 } finally {
17796 counter++;
17797 return 3 + local;
17798 counter++;
17799 }
17800 counter++;
17801 return 5 + local;
17802 }
17803 assertOptResultEquals(6, f);
17804 assertEquals(3, counter);
17805
17806 // Variant flags: [alternativeFn2, tryReturns, doCatch]
17807
17808 counter = 0;
17809 var f = function() {
17810 var local = 3;
17811 try {
17812 counter++;
17813 return invertFunctionCall(increaseAndThrow42);
17814 counter++;
17815 } catch (ex) {
17816 counter++;
17817 counter++;
17818 }
17819 counter++;
17820 }
17821 assertOptResultEquals(15, f);
17822 assertEquals(2, counter);
17823
17824 // Variant flags: [alternativeFn2, tryReturns, doCatch,
17825 // endReturnLocal]
17826
17827 counter = 0;
17828 var f = function() {
17829 var local = 3;
17830 try {
17831 counter++;
17832 return invertFunctionCall(increaseAndThrow42);
17833 counter++;
17834 } catch (ex) {
17835 counter++;
17836 counter++;
17837 }
17838 counter++;
17839 return 5 + local;
17840 }
17841 assertOptResultEquals(15, f);
17842 assertEquals(2, counter);
17843
17844 // Variant flags: [alternativeFn2, tryReturns, doCatch, doFinally]
17845
17846 counter = 0;
17847 var f = function() {
17848 var local = 3;
17849 try {
17850 counter++;
17851 return invertFunctionCall(increaseAndThrow42);
17852 counter++;
17853 } catch (ex) {
17854 counter++;
17855 counter++;
17856 } finally {
17857 counter++;
17858 local += 2;
17859 counter++;
17860 }
17861 counter++;
17862 }
17863 assertOptResultEquals(15, f);
17864 assertEquals(4, counter);
17865
17866 // Variant flags: [alternativeFn2, tryReturns, doCatch, doFinally,
17867 // endReturnLocal]
17868
17869 counter = 0;
17870 var f = function() {
17871 var local = 3;
17872 try {
17873 counter++;
17874 return invertFunctionCall(increaseAndThrow42);
17875 counter++;
17876 } catch (ex) {
17877 counter++;
17878 counter++;
17879 } finally {
17880 counter++;
17881 local += 2;
17882 counter++;
17883 }
17884 counter++;
17885 return 5 + local;
17886 }
17887 assertOptResultEquals(15, f);
17888 assertEquals(4, counter);
17889
17890 // Variant flags: [alternativeFn2, tryReturns, doCatch, doFinally,
17891 // finallyThrows]
17892
17893 counter = 0;
17894 var f = function() {
17895 var local = 3;
17896 try {
17897 counter++;
17898 return invertFunctionCall(increaseAndThrow42);
17899 counter++;
17900 } catch (ex) {
17901 counter++;
17902 counter++;
17903 } finally {
17904 counter++;
17905 throw 25;
17906 counter++;
17907 }
17908 counter++;
17909 }
17910 assertOptThrowsWith(25, f);
17911 assertEquals(3, counter);
17912
17913 // Variant flags: [alternativeFn2, tryReturns, doCatch, doFinally,
17914 // finallyThrows, endReturnLocal]
17915
17916 counter = 0;
17917 var f = function() {
17918 var local = 3;
17919 try {
17920 counter++;
17921 return invertFunctionCall(increaseAndThrow42);
17922 counter++;
17923 } catch (ex) {
17924 counter++;
17925 counter++;
17926 } finally {
17927 counter++;
17928 throw 25;
17929 counter++;
17930 }
17931 counter++;
17932 return 5 + local;
17933 }
17934 assertOptThrowsWith(25, f);
17935 assertEquals(3, counter);
17936
17937 // Variant flags: [alternativeFn2, tryReturns, doCatch, doFinally,
17938 // finallyReturns]
17939
17940 counter = 0;
17941 var f = function() {
17942 var local = 3;
17943 try {
17944 counter++;
17945 return invertFunctionCall(increaseAndThrow42);
17946 counter++;
17947 } catch (ex) {
17948 counter++;
17949 counter++;
17950 } finally {
17951 counter++;
17952 return 3 + local;
17953 counter++;
17954 }
17955 counter++;
17956 }
17957 assertOptResultEquals(6, f);
17958 assertEquals(3, counter);
17959
17960 // Variant flags: [alternativeFn2, tryReturns, doCatch, doFinally,
17961 // finallyReturns, endReturnLocal]
17962
17963 counter = 0;
17964 var f = function() {
17965 var local = 3;
17966 try {
17967 counter++;
17968 return invertFunctionCall(increaseAndThrow42);
17969 counter++;
17970 } catch (ex) {
17971 counter++;
17972 counter++;
17973 } finally {
17974 counter++;
17975 return 3 + local;
17976 counter++;
17977 }
17978 counter++;
17979 return 5 + local;
17980 }
17981 assertOptResultEquals(6, f);
17982 assertEquals(3, counter);
17983
17984 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchThrows]
17985
17986 counter = 0;
17987 var f = function() {
17988 var local = 3;
17989 try {
17990 counter++;
17991 return invertFunctionCall(increaseAndThrow42);
17992 counter++;
17993 } catch (ex) {
17994 counter++;
17995 throw 2 + ex;
17996 counter++;
17997 }
17998 counter++;
17999 }
18000 assertOptResultEquals(15, f);
18001 assertEquals(2, counter);
18002
18003 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchThrows,
18004 // endReturnLocal]
18005
18006 counter = 0;
18007 var f = function() {
18008 var local = 3;
18009 try {
18010 counter++;
18011 return invertFunctionCall(increaseAndThrow42);
18012 counter++;
18013 } catch (ex) {
18014 counter++;
18015 throw 2 + ex;
18016 counter++;
18017 }
18018 counter++;
18019 return 5 + local;
18020 }
18021 assertOptResultEquals(15, f);
18022 assertEquals(2, counter);
18023
18024 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchThrows,
18025 // doFinally]
18026
18027 counter = 0;
18028 var f = function() {
18029 var local = 3;
18030 try {
18031 counter++;
18032 return invertFunctionCall(increaseAndThrow42);
18033 counter++;
18034 } catch (ex) {
18035 counter++;
18036 throw 2 + ex;
18037 counter++;
18038 } finally {
18039 counter++;
18040 local += 2;
18041 counter++;
18042 }
18043 counter++;
18044 }
18045 assertOptResultEquals(15, f);
18046 assertEquals(4, counter);
18047
18048 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchThrows,
18049 // doFinally, endReturnLocal]
18050
18051 counter = 0;
18052 var f = function() {
18053 var local = 3;
18054 try {
18055 counter++;
18056 return invertFunctionCall(increaseAndThrow42);
18057 counter++;
18058 } catch (ex) {
18059 counter++;
18060 throw 2 + ex;
18061 counter++;
18062 } finally {
18063 counter++;
18064 local += 2;
18065 counter++;
18066 }
18067 counter++;
18068 return 5 + local;
18069 }
18070 assertOptResultEquals(15, f);
18071 assertEquals(4, counter);
18072
18073 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchThrows,
18074 // doFinally, finallyThrows]
18075
18076 counter = 0;
18077 var f = function() {
18078 var local = 3;
18079 try {
18080 counter++;
18081 return invertFunctionCall(increaseAndThrow42);
18082 counter++;
18083 } catch (ex) {
18084 counter++;
18085 throw 2 + ex;
18086 counter++;
18087 } finally {
18088 counter++;
18089 throw 25;
18090 counter++;
18091 }
18092 counter++;
18093 }
18094 assertOptThrowsWith(25, f);
18095 assertEquals(3, counter);
18096
18097 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchThrows,
18098 // doFinally, finallyThrows, endReturnLocal]
18099
18100 counter = 0;
18101 var f = function() {
18102 var local = 3;
18103 try {
18104 counter++;
18105 return invertFunctionCall(increaseAndThrow42);
18106 counter++;
18107 } catch (ex) {
18108 counter++;
18109 throw 2 + ex;
18110 counter++;
18111 } finally {
18112 counter++;
18113 throw 25;
18114 counter++;
18115 }
18116 counter++;
18117 return 5 + local;
18118 }
18119 assertOptThrowsWith(25, f);
18120 assertEquals(3, counter);
18121
18122 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchThrows,
18123 // doFinally, finallyReturns]
18124
18125 counter = 0;
18126 var f = function() {
18127 var local = 3;
18128 try {
18129 counter++;
18130 return invertFunctionCall(increaseAndThrow42);
18131 counter++;
18132 } catch (ex) {
18133 counter++;
18134 throw 2 + ex;
18135 counter++;
18136 } finally {
18137 counter++;
18138 return 3 + local;
18139 counter++;
18140 }
18141 counter++;
18142 }
18143 assertOptResultEquals(6, f);
18144 assertEquals(3, counter);
18145
18146 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchThrows,
18147 // doFinally, finallyReturns, endReturnLocal]
18148
18149 counter = 0;
18150 var f = function() {
18151 var local = 3;
18152 try {
18153 counter++;
18154 return invertFunctionCall(increaseAndThrow42);
18155 counter++;
18156 } catch (ex) {
18157 counter++;
18158 throw 2 + ex;
18159 counter++;
18160 } finally {
18161 counter++;
18162 return 3 + local;
18163 counter++;
18164 }
18165 counter++;
18166 return 5 + local;
18167 }
18168 assertOptResultEquals(6, f);
18169 assertEquals(3, counter);
18170
18171 // Variant flags: [alternativeFn2, tryReturns, doCatch,
18172 // catchWithLocal]
18173
18174 counter = 0;
18175 var f = function() {
18176 var local = 3;
18177 try {
18178 counter++;
18179 return invertFunctionCall(increaseAndThrow42);
18180 counter++;
18181 } catch (ex) {
18182 counter++;
18183 local += ex;
18184 counter++;
18185 }
18186 counter++;
18187 }
18188 assertOptResultEquals(15, f);
18189 assertEquals(2, counter);
18190
18191 // Variant flags: [alternativeFn2, tryReturns, doCatch,
18192 // catchWithLocal, endReturnLocal]
18193
18194 counter = 0;
18195 var f = function() {
18196 var local = 3;
18197 try {
18198 counter++;
18199 return invertFunctionCall(increaseAndThrow42);
18200 counter++;
18201 } catch (ex) {
18202 counter++;
18203 local += ex;
18204 counter++;
18205 }
18206 counter++;
18207 return 5 + local;
18208 }
18209 assertOptResultEquals(15, f);
18210 assertEquals(2, counter);
18211
18212 // Variant flags: [alternativeFn2, tryReturns, doCatch,
18213 // catchWithLocal, doFinally]
18214
18215 counter = 0;
18216 var f = function() {
18217 var local = 3;
18218 try {
18219 counter++;
18220 return invertFunctionCall(increaseAndThrow42);
18221 counter++;
18222 } catch (ex) {
18223 counter++;
18224 local += ex;
18225 counter++;
18226 } finally {
18227 counter++;
18228 local += 2;
18229 counter++;
18230 }
18231 counter++;
18232 }
18233 assertOptResultEquals(15, f);
18234 assertEquals(4, counter);
18235
18236 // Variant flags: [alternativeFn2, tryReturns, doCatch,
18237 // catchWithLocal, doFinally, endReturnLocal]
18238
18239 counter = 0;
18240 var f = function() {
18241 var local = 3;
18242 try {
18243 counter++;
18244 return invertFunctionCall(increaseAndThrow42);
18245 counter++;
18246 } catch (ex) {
18247 counter++;
18248 local += ex;
18249 counter++;
18250 } finally {
18251 counter++;
18252 local += 2;
18253 counter++;
18254 }
18255 counter++;
18256 return 5 + local;
18257 }
18258 assertOptResultEquals(15, f);
18259 assertEquals(4, counter);
18260
18261 // Variant flags: [alternativeFn2, tryReturns, doCatch,
18262 // catchWithLocal, doFinally, finallyThrows]
18263
18264 counter = 0;
18265 var f = function() {
18266 var local = 3;
18267 try {
18268 counter++;
18269 return invertFunctionCall(increaseAndThrow42);
18270 counter++;
18271 } catch (ex) {
18272 counter++;
18273 local += ex;
18274 counter++;
18275 } finally {
18276 counter++;
18277 throw 25;
18278 counter++;
18279 }
18280 counter++;
18281 }
18282 assertOptThrowsWith(25, f);
18283 assertEquals(3, counter);
18284
18285 // Variant flags: [alternativeFn2, tryReturns, doCatch,
18286 // catchWithLocal, doFinally, finallyThrows, endReturnLocal]
18287
18288 counter = 0;
18289 var f = function() {
18290 var local = 3;
18291 try {
18292 counter++;
18293 return invertFunctionCall(increaseAndThrow42);
18294 counter++;
18295 } catch (ex) {
18296 counter++;
18297 local += ex;
18298 counter++;
18299 } finally {
18300 counter++;
18301 throw 25;
18302 counter++;
18303 }
18304 counter++;
18305 return 5 + local;
18306 }
18307 assertOptThrowsWith(25, f);
18308 assertEquals(3, counter);
18309
18310 // Variant flags: [alternativeFn2, tryReturns, doCatch,
18311 // catchWithLocal, doFinally, finallyReturns]
18312
18313 counter = 0;
18314 var f = function() {
18315 var local = 3;
18316 try {
18317 counter++;
18318 return invertFunctionCall(increaseAndThrow42);
18319 counter++;
18320 } catch (ex) {
18321 counter++;
18322 local += ex;
18323 counter++;
18324 } finally {
18325 counter++;
18326 return 3 + local;
18327 counter++;
18328 }
18329 counter++;
18330 }
18331 assertOptResultEquals(6, f);
18332 assertEquals(3, counter);
18333
18334 // Variant flags: [alternativeFn2, tryReturns, doCatch,
18335 // catchWithLocal, doFinally, finallyReturns, endReturnLocal]
18336
18337 counter = 0;
18338 var f = function() {
18339 var local = 3;
18340 try {
18341 counter++;
18342 return invertFunctionCall(increaseAndThrow42);
18343 counter++;
18344 } catch (ex) {
18345 counter++;
18346 local += ex;
18347 counter++;
18348 } finally {
18349 counter++;
18350 return 3 + local;
18351 counter++;
18352 }
18353 counter++;
18354 return 5 + local;
18355 }
18356 assertOptResultEquals(6, f);
18357 assertEquals(3, counter);
18358
18359 // Variant flags: [alternativeFn2, tryReturns, doCatch,
18360 // catchWithLocal, catchThrows]
18361
18362 counter = 0;
18363 var f = function() {
18364 var local = 3;
18365 try {
18366 counter++;
18367 return invertFunctionCall(increaseAndThrow42);
18368 counter++;
18369 } catch (ex) {
18370 counter++;
18371 throw 2 + ex;
18372 counter++;
18373 }
18374 counter++;
18375 }
18376 assertOptResultEquals(15, f);
18377 assertEquals(2, counter);
18378
18379 // Variant flags: [alternativeFn2, tryReturns, doCatch,
18380 // catchWithLocal, catchThrows, endReturnLocal]
18381
18382 counter = 0;
18383 var f = function() {
18384 var local = 3;
18385 try {
18386 counter++;
18387 return invertFunctionCall(increaseAndThrow42);
18388 counter++;
18389 } catch (ex) {
18390 counter++;
18391 throw 2 + ex;
18392 counter++;
18393 }
18394 counter++;
18395 return 5 + local;
18396 }
18397 assertOptResultEquals(15, f);
18398 assertEquals(2, counter);
18399
18400 // Variant flags: [alternativeFn2, tryReturns, doCatch,
18401 // catchWithLocal, catchThrows, doFinally]
18402
18403 counter = 0;
18404 var f = function() {
18405 var local = 3;
18406 try {
18407 counter++;
18408 return invertFunctionCall(increaseAndThrow42);
18409 counter++;
18410 } catch (ex) {
18411 counter++;
18412 throw 2 + ex;
18413 counter++;
18414 } finally {
18415 counter++;
18416 local += 2;
18417 counter++;
18418 }
18419 counter++;
18420 }
18421 assertOptResultEquals(15, f);
18422 assertEquals(4, counter);
18423
18424 // Variant flags: [alternativeFn2, tryReturns, doCatch,
18425 // catchWithLocal, catchThrows, doFinally, endReturnLocal]
18426
18427 counter = 0;
18428 var f = function() {
18429 var local = 3;
18430 try {
18431 counter++;
18432 return invertFunctionCall(increaseAndThrow42);
18433 counter++;
18434 } catch (ex) {
18435 counter++;
18436 throw 2 + ex;
18437 counter++;
18438 } finally {
18439 counter++;
18440 local += 2;
18441 counter++;
18442 }
18443 counter++;
18444 return 5 + local;
18445 }
18446 assertOptResultEquals(15, f);
18447 assertEquals(4, counter);
18448
18449 // Variant flags: [alternativeFn2, tryReturns, doCatch,
18450 // catchWithLocal, catchThrows, doFinally, finallyThrows]
18451
18452 counter = 0;
18453 var f = function() {
18454 var local = 3;
18455 try {
18456 counter++;
18457 return invertFunctionCall(increaseAndThrow42);
18458 counter++;
18459 } catch (ex) {
18460 counter++;
18461 throw 2 + ex;
18462 counter++;
18463 } finally {
18464 counter++;
18465 throw 25;
18466 counter++;
18467 }
18468 counter++;
18469 }
18470 assertOptThrowsWith(25, f);
18471 assertEquals(3, counter);
18472
18473 // Variant flags: [alternativeFn2, tryReturns, doCatch,
18474 // catchWithLocal, catchThrows, doFinally, finallyThrows,
18475 // endReturnLocal]
18476
18477 counter = 0;
18478 var f = function() {
18479 var local = 3;
18480 try {
18481 counter++;
18482 return invertFunctionCall(increaseAndThrow42);
18483 counter++;
18484 } catch (ex) {
18485 counter++;
18486 throw 2 + ex;
18487 counter++;
18488 } finally {
18489 counter++;
18490 throw 25;
18491 counter++;
18492 }
18493 counter++;
18494 return 5 + local;
18495 }
18496 assertOptThrowsWith(25, f);
18497 assertEquals(3, counter);
18498
18499 // Variant flags: [alternativeFn2, tryReturns, doCatch,
18500 // catchWithLocal, catchThrows, doFinally, finallyReturns]
18501
18502 counter = 0;
18503 var f = function() {
18504 var local = 3;
18505 try {
18506 counter++;
18507 return invertFunctionCall(increaseAndThrow42);
18508 counter++;
18509 } catch (ex) {
18510 counter++;
18511 throw 2 + ex;
18512 counter++;
18513 } finally {
18514 counter++;
18515 return 3 + local;
18516 counter++;
18517 }
18518 counter++;
18519 }
18520 assertOptResultEquals(6, f);
18521 assertEquals(3, counter);
18522
18523 // Variant flags: [alternativeFn2, tryReturns, doCatch,
18524 // catchWithLocal, catchThrows, doFinally, finallyReturns,
18525 // endReturnLocal]
18526
18527 counter = 0;
18528 var f = function() {
18529 var local = 3;
18530 try {
18531 counter++;
18532 return invertFunctionCall(increaseAndThrow42);
18533 counter++;
18534 } catch (ex) {
18535 counter++;
18536 throw 2 + ex;
18537 counter++;
18538 } finally {
18539 counter++;
18540 return 3 + local;
18541 counter++;
18542 }
18543 counter++;
18544 return 5 + local;
18545 }
18546 assertOptResultEquals(6, f);
18547 assertEquals(3, counter);
18548
18549 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchReturns]
18550
18551 counter = 0;
18552 var f = function() {
18553 var local = 3;
18554 try {
18555 counter++;
18556 return invertFunctionCall(increaseAndThrow42);
18557 counter++;
18558 } catch (ex) {
18559 counter++;
18560 return 2 + ex;
18561 counter++;
18562 }
18563 counter++;
18564 }
18565 assertOptResultEquals(15, f);
18566 assertEquals(2, counter);
18567
18568 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchReturns,
18569 // endReturnLocal]
18570
18571 counter = 0;
18572 var f = function() {
18573 var local = 3;
18574 try {
18575 counter++;
18576 return invertFunctionCall(increaseAndThrow42);
18577 counter++;
18578 } catch (ex) {
18579 counter++;
18580 return 2 + ex;
18581 counter++;
18582 }
18583 counter++;
18584 return 5 + local;
18585 }
18586 assertOptResultEquals(15, f);
18587 assertEquals(2, counter);
18588
18589 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchReturns,
18590 // doFinally]
18591
18592 counter = 0;
18593 var f = function() {
18594 var local = 3;
18595 try {
18596 counter++;
18597 return invertFunctionCall(increaseAndThrow42);
18598 counter++;
18599 } catch (ex) {
18600 counter++;
18601 return 2 + ex;
18602 counter++;
18603 } finally {
18604 counter++;
18605 local += 2;
18606 counter++;
18607 }
18608 counter++;
18609 }
18610 assertOptResultEquals(15, f);
18611 assertEquals(4, counter);
18612
18613 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchReturns,
18614 // doFinally, endReturnLocal]
18615
18616 counter = 0;
18617 var f = function() {
18618 var local = 3;
18619 try {
18620 counter++;
18621 return invertFunctionCall(increaseAndThrow42);
18622 counter++;
18623 } catch (ex) {
18624 counter++;
18625 return 2 + ex;
18626 counter++;
18627 } finally {
18628 counter++;
18629 local += 2;
18630 counter++;
18631 }
18632 counter++;
18633 return 5 + local;
18634 }
18635 assertOptResultEquals(15, f);
18636 assertEquals(4, counter);
18637
18638 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchReturns,
18639 // doFinally, finallyThrows]
18640
18641 counter = 0;
18642 var f = function() {
18643 var local = 3;
18644 try {
18645 counter++;
18646 return invertFunctionCall(increaseAndThrow42);
18647 counter++;
18648 } catch (ex) {
18649 counter++;
18650 return 2 + ex;
18651 counter++;
18652 } finally {
18653 counter++;
18654 throw 25;
18655 counter++;
18656 }
18657 counter++;
18658 }
18659 assertOptThrowsWith(25, f);
18660 assertEquals(3, counter);
18661
18662 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchReturns,
18663 // doFinally, finallyThrows, endReturnLocal]
18664
18665 counter = 0;
18666 var f = function() {
18667 var local = 3;
18668 try {
18669 counter++;
18670 return invertFunctionCall(increaseAndThrow42);
18671 counter++;
18672 } catch (ex) {
18673 counter++;
18674 return 2 + ex;
18675 counter++;
18676 } finally {
18677 counter++;
18678 throw 25;
18679 counter++;
18680 }
18681 counter++;
18682 return 5 + local;
18683 }
18684 assertOptThrowsWith(25, f);
18685 assertEquals(3, counter);
18686
18687 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchReturns,
18688 // doFinally, finallyReturns]
18689
18690 counter = 0;
18691 var f = function() {
18692 var local = 3;
18693 try {
18694 counter++;
18695 return invertFunctionCall(increaseAndThrow42);
18696 counter++;
18697 } catch (ex) {
18698 counter++;
18699 return 2 + ex;
18700 counter++;
18701 } finally {
18702 counter++;
18703 return 3 + local;
18704 counter++;
18705 }
18706 counter++;
18707 }
18708 assertOptResultEquals(6, f);
18709 assertEquals(3, counter);
18710
18711 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchReturns,
18712 // doFinally, finallyReturns, endReturnLocal]
18713
18714 counter = 0;
18715 var f = function() {
18716 var local = 3;
18717 try {
18718 counter++;
18719 return invertFunctionCall(increaseAndThrow42);
18720 counter++;
18721 } catch (ex) {
18722 counter++;
18723 return 2 + ex;
18724 counter++;
18725 } finally {
18726 counter++;
18727 return 3 + local;
18728 counter++;
18729 }
18730 counter++;
18731 return 5 + local;
18732 }
18733 assertOptResultEquals(6, f);
18734 assertEquals(3, counter);
18735
18736 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchReturns,
18737 // catchWithLocal]
18738
18739 counter = 0;
18740 var f = function() {
18741 var local = 3;
18742 try {
18743 counter++;
18744 return invertFunctionCall(increaseAndThrow42);
18745 counter++;
18746 } catch (ex) {
18747 counter++;
18748 return 2 + local;
18749 counter++;
18750 }
18751 counter++;
18752 }
18753 assertOptResultEquals(15, f);
18754 assertEquals(2, counter);
18755
18756 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchReturns,
18757 // catchWithLocal, endReturnLocal]
18758
18759 counter = 0;
18760 var f = function() {
18761 var local = 3;
18762 try {
18763 counter++;
18764 return invertFunctionCall(increaseAndThrow42);
18765 counter++;
18766 } catch (ex) {
18767 counter++;
18768 return 2 + local;
18769 counter++;
18770 }
18771 counter++;
18772 return 5 + local;
18773 }
18774 assertOptResultEquals(15, f);
18775 assertEquals(2, counter);
18776
18777 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchReturns,
18778 // catchWithLocal, doFinally]
18779
18780 counter = 0;
18781 var f = function() {
18782 var local = 3;
18783 try {
18784 counter++;
18785 return invertFunctionCall(increaseAndThrow42);
18786 counter++;
18787 } catch (ex) {
18788 counter++;
18789 return 2 + local;
18790 counter++;
18791 } finally {
18792 counter++;
18793 local += 2;
18794 counter++;
18795 }
18796 counter++;
18797 }
18798 assertOptResultEquals(15, f);
18799 assertEquals(4, counter);
18800
18801 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchReturns,
18802 // catchWithLocal, doFinally, endReturnLocal]
18803
18804 counter = 0;
18805 var f = function() {
18806 var local = 3;
18807 try {
18808 counter++;
18809 return invertFunctionCall(increaseAndThrow42);
18810 counter++;
18811 } catch (ex) {
18812 counter++;
18813 return 2 + local;
18814 counter++;
18815 } finally {
18816 counter++;
18817 local += 2;
18818 counter++;
18819 }
18820 counter++;
18821 return 5 + local;
18822 }
18823 assertOptResultEquals(15, f);
18824 assertEquals(4, counter);
18825
18826 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchReturns,
18827 // catchWithLocal, doFinally, finallyThrows]
18828
18829 counter = 0;
18830 var f = function() {
18831 var local = 3;
18832 try {
18833 counter++;
18834 return invertFunctionCall(increaseAndThrow42);
18835 counter++;
18836 } catch (ex) {
18837 counter++;
18838 return 2 + local;
18839 counter++;
18840 } finally {
18841 counter++;
18842 throw 25;
18843 counter++;
18844 }
18845 counter++;
18846 }
18847 assertOptThrowsWith(25, f);
18848 assertEquals(3, counter);
18849
18850 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchReturns,
18851 // catchWithLocal, doFinally, finallyThrows, endReturnLocal]
18852
18853 counter = 0;
18854 var f = function() {
18855 var local = 3;
18856 try {
18857 counter++;
18858 return invertFunctionCall(increaseAndThrow42);
18859 counter++;
18860 } catch (ex) {
18861 counter++;
18862 return 2 + local;
18863 counter++;
18864 } finally {
18865 counter++;
18866 throw 25;
18867 counter++;
18868 }
18869 counter++;
18870 return 5 + local;
18871 }
18872 assertOptThrowsWith(25, f);
18873 assertEquals(3, counter);
18874
18875 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchReturns,
18876 // catchWithLocal, doFinally, finallyReturns]
18877
18878 counter = 0;
18879 var f = function() {
18880 var local = 3;
18881 try {
18882 counter++;
18883 return invertFunctionCall(increaseAndThrow42);
18884 counter++;
18885 } catch (ex) {
18886 counter++;
18887 return 2 + local;
18888 counter++;
18889 } finally {
18890 counter++;
18891 return 3 + local;
18892 counter++;
18893 }
18894 counter++;
18895 }
18896 assertOptResultEquals(6, f);
18897 assertEquals(3, counter);
18898
18899 // Variant flags: [alternativeFn2, tryReturns, doCatch, catchReturns,
18900 // catchWithLocal, doFinally, finallyReturns, endReturnLocal]
18901
18902 counter = 0;
18903 var f = function() {
18904 var local = 3;
18905 try {
18906 counter++;
18907 return invertFunctionCall(increaseAndThrow42);
18908 counter++;
18909 } catch (ex) {
18910 counter++;
18911 return 2 + local;
18912 counter++;
18913 } finally {
18914 counter++;
18915 return 3 + local;
18916 counter++;
18917 }
18918 counter++;
18919 return 5 + local;
18920 }
18921 assertOptResultEquals(6, f);
18922 assertEquals(3, counter);
18923
18924 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
18925 // doFinally]
18926
18927 counter = 0;
18928 var f = function() {
18929 var local = 3;
18930 try {
18931 counter++;
18932 local += invertFunctionCall(increaseAndThrow42);
18933 counter++;
18934 } finally {
18935 counter++;
18936 local += 2;
18937 counter++;
18938 }
18939 counter++;
18940 }
18941 assertOptResultEquals(undefined, f);
18942 assertEquals(6, counter);
18943
18944 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
18945 // doFinally, endReturnLocal]
18946
18947 counter = 0;
18948 var f = function() {
18949 var local = 3;
18950 try {
18951 counter++;
18952 local += invertFunctionCall(increaseAndThrow42);
18953 counter++;
18954 } finally {
18955 counter++;
18956 local += 2;
18957 counter++;
18958 }
18959 counter++;
18960 return 5 + local;
18961 }
18962 assertOptResultEquals(25, f);
18963 assertEquals(6, counter);
18964
18965 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
18966 // doFinally, finallyThrows]
18967
18968 counter = 0;
18969 var f = function() {
18970 var local = 3;
18971 try {
18972 counter++;
18973 local += invertFunctionCall(increaseAndThrow42);
18974 counter++;
18975 } finally {
18976 counter++;
18977 throw 25;
18978 counter++;
18979 }
18980 counter++;
18981 }
18982 assertOptThrowsWith(25, f);
18983 assertEquals(4, counter);
18984
18985 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
18986 // doFinally, finallyThrows, endReturnLocal]
18987
18988 counter = 0;
18989 var f = function() {
18990 var local = 3;
18991 try {
18992 counter++;
18993 local += invertFunctionCall(increaseAndThrow42);
18994 counter++;
18995 } finally {
18996 counter++;
18997 throw 25;
18998 counter++;
18999 }
19000 counter++;
19001 return 5 + local;
19002 }
19003 assertOptThrowsWith(25, f);
19004 assertEquals(4, counter);
19005
19006 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19007 // doFinally, finallyReturns]
19008
19009 counter = 0;
19010 var f = function() {
19011 var local = 3;
19012 try {
19013 counter++;
19014 local += invertFunctionCall(increaseAndThrow42);
19015 counter++;
19016 } finally {
19017 counter++;
19018 return 3 + local;
19019 counter++;
19020 }
19021 counter++;
19022 }
19023 assertOptResultEquals(21, f);
19024 assertEquals(4, counter);
19025
19026 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19027 // doFinally, finallyReturns, endReturnLocal]
19028
19029 counter = 0;
19030 var f = function() {
19031 var local = 3;
19032 try {
19033 counter++;
19034 local += invertFunctionCall(increaseAndThrow42);
19035 counter++;
19036 } finally {
19037 counter++;
19038 return 3 + local;
19039 counter++;
19040 }
19041 counter++;
19042 return 5 + local;
19043 }
19044 assertOptResultEquals(21, f);
19045 assertEquals(4, counter);
19046
19047 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19048 // doCatch]
19049
19050 counter = 0;
19051 var f = function() {
19052 var local = 3;
19053 try {
19054 counter++;
19055 local += invertFunctionCall(increaseAndThrow42);
19056 counter++;
19057 } catch (ex) {
19058 counter++;
19059 counter++;
19060 }
19061 counter++;
19062 }
19063 assertOptResultEquals(undefined, f);
19064 assertEquals(4, counter);
19065
19066 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19067 // doCatch, endReturnLocal]
19068
19069 counter = 0;
19070 var f = function() {
19071 var local = 3;
19072 try {
19073 counter++;
19074 local += invertFunctionCall(increaseAndThrow42);
19075 counter++;
19076 } catch (ex) {
19077 counter++;
19078 counter++;
19079 }
19080 counter++;
19081 return 5 + local;
19082 }
19083 assertOptResultEquals(23, f);
19084 assertEquals(4, counter);
19085
19086 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19087 // doCatch, doFinally]
19088
19089 counter = 0;
19090 var f = function() {
19091 var local = 3;
19092 try {
19093 counter++;
19094 local += invertFunctionCall(increaseAndThrow42);
19095 counter++;
19096 } catch (ex) {
19097 counter++;
19098 counter++;
19099 } finally {
19100 counter++;
19101 local += 2;
19102 counter++;
19103 }
19104 counter++;
19105 }
19106 assertOptResultEquals(undefined, f);
19107 assertEquals(6, counter);
19108
19109 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19110 // doCatch, doFinally, endReturnLocal]
19111
19112 counter = 0;
19113 var f = function() {
19114 var local = 3;
19115 try {
19116 counter++;
19117 local += invertFunctionCall(increaseAndThrow42);
19118 counter++;
19119 } catch (ex) {
19120 counter++;
19121 counter++;
19122 } finally {
19123 counter++;
19124 local += 2;
19125 counter++;
19126 }
19127 counter++;
19128 return 5 + local;
19129 }
19130 assertOptResultEquals(25, f);
19131 assertEquals(6, counter);
19132
19133 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19134 // doCatch, doFinally, finallyThrows]
19135
19136 counter = 0;
19137 var f = function() {
19138 var local = 3;
19139 try {
19140 counter++;
19141 local += invertFunctionCall(increaseAndThrow42);
19142 counter++;
19143 } catch (ex) {
19144 counter++;
19145 counter++;
19146 } finally {
19147 counter++;
19148 throw 25;
19149 counter++;
19150 }
19151 counter++;
19152 }
19153 assertOptThrowsWith(25, f);
19154 assertEquals(4, counter);
19155
19156 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19157 // doCatch, doFinally, finallyThrows, endReturnLocal]
19158
19159 counter = 0;
19160 var f = function() {
19161 var local = 3;
19162 try {
19163 counter++;
19164 local += invertFunctionCall(increaseAndThrow42);
19165 counter++;
19166 } catch (ex) {
19167 counter++;
19168 counter++;
19169 } finally {
19170 counter++;
19171 throw 25;
19172 counter++;
19173 }
19174 counter++;
19175 return 5 + local;
19176 }
19177 assertOptThrowsWith(25, f);
19178 assertEquals(4, counter);
19179
19180 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19181 // doCatch, doFinally, finallyReturns]
19182
19183 counter = 0;
19184 var f = function() {
19185 var local = 3;
19186 try {
19187 counter++;
19188 local += invertFunctionCall(increaseAndThrow42);
19189 counter++;
19190 } catch (ex) {
19191 counter++;
19192 counter++;
19193 } finally {
19194 counter++;
19195 return 3 + local;
19196 counter++;
19197 }
19198 counter++;
19199 }
19200 assertOptResultEquals(21, f);
19201 assertEquals(4, counter);
19202
19203 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19204 // doCatch, doFinally, finallyReturns, endReturnLocal]
19205
19206 counter = 0;
19207 var f = function() {
19208 var local = 3;
19209 try {
19210 counter++;
19211 local += invertFunctionCall(increaseAndThrow42);
19212 counter++;
19213 } catch (ex) {
19214 counter++;
19215 counter++;
19216 } finally {
19217 counter++;
19218 return 3 + local;
19219 counter++;
19220 }
19221 counter++;
19222 return 5 + local;
19223 }
19224 assertOptResultEquals(21, f);
19225 assertEquals(4, counter);
19226
19227 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19228 // doCatch, catchThrows]
19229
19230 counter = 0;
19231 var f = function() {
19232 var local = 3;
19233 try {
19234 counter++;
19235 local += invertFunctionCall(increaseAndThrow42);
19236 counter++;
19237 } catch (ex) {
19238 counter++;
19239 throw 2 + ex;
19240 counter++;
19241 }
19242 counter++;
19243 }
19244 assertOptResultEquals(undefined, f);
19245 assertEquals(4, counter);
19246
19247 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19248 // doCatch, catchThrows, endReturnLocal]
19249
19250 counter = 0;
19251 var f = function() {
19252 var local = 3;
19253 try {
19254 counter++;
19255 local += invertFunctionCall(increaseAndThrow42);
19256 counter++;
19257 } catch (ex) {
19258 counter++;
19259 throw 2 + ex;
19260 counter++;
19261 }
19262 counter++;
19263 return 5 + local;
19264 }
19265 assertOptResultEquals(23, f);
19266 assertEquals(4, counter);
19267
19268 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19269 // doCatch, catchThrows, doFinally]
19270
19271 counter = 0;
19272 var f = function() {
19273 var local = 3;
19274 try {
19275 counter++;
19276 local += invertFunctionCall(increaseAndThrow42);
19277 counter++;
19278 } catch (ex) {
19279 counter++;
19280 throw 2 + ex;
19281 counter++;
19282 } finally {
19283 counter++;
19284 local += 2;
19285 counter++;
19286 }
19287 counter++;
19288 }
19289 assertOptResultEquals(undefined, f);
19290 assertEquals(6, counter);
19291
19292 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19293 // doCatch, catchThrows, doFinally, endReturnLocal]
19294
19295 counter = 0;
19296 var f = function() {
19297 var local = 3;
19298 try {
19299 counter++;
19300 local += invertFunctionCall(increaseAndThrow42);
19301 counter++;
19302 } catch (ex) {
19303 counter++;
19304 throw 2 + ex;
19305 counter++;
19306 } finally {
19307 counter++;
19308 local += 2;
19309 counter++;
19310 }
19311 counter++;
19312 return 5 + local;
19313 }
19314 assertOptResultEquals(25, f);
19315 assertEquals(6, counter);
19316
19317 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19318 // doCatch, catchThrows, doFinally, finallyThrows]
19319
19320 counter = 0;
19321 var f = function() {
19322 var local = 3;
19323 try {
19324 counter++;
19325 local += invertFunctionCall(increaseAndThrow42);
19326 counter++;
19327 } catch (ex) {
19328 counter++;
19329 throw 2 + ex;
19330 counter++;
19331 } finally {
19332 counter++;
19333 throw 25;
19334 counter++;
19335 }
19336 counter++;
19337 }
19338 assertOptThrowsWith(25, f);
19339 assertEquals(4, counter);
19340
19341 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19342 // doCatch, catchThrows, doFinally, finallyThrows, endReturnLocal]
19343
19344 counter = 0;
19345 var f = function() {
19346 var local = 3;
19347 try {
19348 counter++;
19349 local += invertFunctionCall(increaseAndThrow42);
19350 counter++;
19351 } catch (ex) {
19352 counter++;
19353 throw 2 + ex;
19354 counter++;
19355 } finally {
19356 counter++;
19357 throw 25;
19358 counter++;
19359 }
19360 counter++;
19361 return 5 + local;
19362 }
19363 assertOptThrowsWith(25, f);
19364 assertEquals(4, counter);
19365
19366 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19367 // doCatch, catchThrows, doFinally, finallyReturns]
19368
19369 counter = 0;
19370 var f = function() {
19371 var local = 3;
19372 try {
19373 counter++;
19374 local += invertFunctionCall(increaseAndThrow42);
19375 counter++;
19376 } catch (ex) {
19377 counter++;
19378 throw 2 + ex;
19379 counter++;
19380 } finally {
19381 counter++;
19382 return 3 + local;
19383 counter++;
19384 }
19385 counter++;
19386 }
19387 assertOptResultEquals(21, f);
19388 assertEquals(4, counter);
19389
19390 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19391 // doCatch, catchThrows, doFinally, finallyReturns, endReturnLocal]
19392
19393 counter = 0;
19394 var f = function() {
19395 var local = 3;
19396 try {
19397 counter++;
19398 local += invertFunctionCall(increaseAndThrow42);
19399 counter++;
19400 } catch (ex) {
19401 counter++;
19402 throw 2 + ex;
19403 counter++;
19404 } finally {
19405 counter++;
19406 return 3 + local;
19407 counter++;
19408 }
19409 counter++;
19410 return 5 + local;
19411 }
19412 assertOptResultEquals(21, f);
19413 assertEquals(4, counter);
19414
19415 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19416 // doCatch, catchWithLocal]
19417
19418 counter = 0;
19419 var f = function() {
19420 var local = 3;
19421 try {
19422 counter++;
19423 local += invertFunctionCall(increaseAndThrow42);
19424 counter++;
19425 } catch (ex) {
19426 counter++;
19427 local += ex;
19428 counter++;
19429 }
19430 counter++;
19431 }
19432 assertOptResultEquals(undefined, f);
19433 assertEquals(4, counter);
19434
19435 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19436 // doCatch, catchWithLocal, endReturnLocal]
19437
19438 counter = 0;
19439 var f = function() {
19440 var local = 3;
19441 try {
19442 counter++;
19443 local += invertFunctionCall(increaseAndThrow42);
19444 counter++;
19445 } catch (ex) {
19446 counter++;
19447 local += ex;
19448 counter++;
19449 }
19450 counter++;
19451 return 5 + local;
19452 }
19453 assertOptResultEquals(23, f);
19454 assertEquals(4, counter);
19455
19456 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19457 // doCatch, catchWithLocal, doFinally]
19458
19459 counter = 0;
19460 var f = function() {
19461 var local = 3;
19462 try {
19463 counter++;
19464 local += invertFunctionCall(increaseAndThrow42);
19465 counter++;
19466 } catch (ex) {
19467 counter++;
19468 local += ex;
19469 counter++;
19470 } finally {
19471 counter++;
19472 local += 2;
19473 counter++;
19474 }
19475 counter++;
19476 }
19477 assertOptResultEquals(undefined, f);
19478 assertEquals(6, counter);
19479
19480 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19481 // doCatch, catchWithLocal, doFinally, endReturnLocal]
19482
19483 counter = 0;
19484 var f = function() {
19485 var local = 3;
19486 try {
19487 counter++;
19488 local += invertFunctionCall(increaseAndThrow42);
19489 counter++;
19490 } catch (ex) {
19491 counter++;
19492 local += ex;
19493 counter++;
19494 } finally {
19495 counter++;
19496 local += 2;
19497 counter++;
19498 }
19499 counter++;
19500 return 5 + local;
19501 }
19502 assertOptResultEquals(25, f);
19503 assertEquals(6, counter);
19504
19505 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19506 // doCatch, catchWithLocal, doFinally, finallyThrows]
19507
19508 counter = 0;
19509 var f = function() {
19510 var local = 3;
19511 try {
19512 counter++;
19513 local += invertFunctionCall(increaseAndThrow42);
19514 counter++;
19515 } catch (ex) {
19516 counter++;
19517 local += ex;
19518 counter++;
19519 } finally {
19520 counter++;
19521 throw 25;
19522 counter++;
19523 }
19524 counter++;
19525 }
19526 assertOptThrowsWith(25, f);
19527 assertEquals(4, counter);
19528
19529 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19530 // doCatch, catchWithLocal, doFinally, finallyThrows,
19531 // endReturnLocal]
19532
19533 counter = 0;
19534 var f = function() {
19535 var local = 3;
19536 try {
19537 counter++;
19538 local += invertFunctionCall(increaseAndThrow42);
19539 counter++;
19540 } catch (ex) {
19541 counter++;
19542 local += ex;
19543 counter++;
19544 } finally {
19545 counter++;
19546 throw 25;
19547 counter++;
19548 }
19549 counter++;
19550 return 5 + local;
19551 }
19552 assertOptThrowsWith(25, f);
19553 assertEquals(4, counter);
19554
19555 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19556 // doCatch, catchWithLocal, doFinally, finallyReturns]
19557
19558 counter = 0;
19559 var f = function() {
19560 var local = 3;
19561 try {
19562 counter++;
19563 local += invertFunctionCall(increaseAndThrow42);
19564 counter++;
19565 } catch (ex) {
19566 counter++;
19567 local += ex;
19568 counter++;
19569 } finally {
19570 counter++;
19571 return 3 + local;
19572 counter++;
19573 }
19574 counter++;
19575 }
19576 assertOptResultEquals(21, f);
19577 assertEquals(4, counter);
19578
19579 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19580 // doCatch, catchWithLocal, doFinally, finallyReturns,
19581 // endReturnLocal]
19582
19583 counter = 0;
19584 var f = function() {
19585 var local = 3;
19586 try {
19587 counter++;
19588 local += invertFunctionCall(increaseAndThrow42);
19589 counter++;
19590 } catch (ex) {
19591 counter++;
19592 local += ex;
19593 counter++;
19594 } finally {
19595 counter++;
19596 return 3 + local;
19597 counter++;
19598 }
19599 counter++;
19600 return 5 + local;
19601 }
19602 assertOptResultEquals(21, f);
19603 assertEquals(4, counter);
19604
19605 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19606 // doCatch, catchWithLocal, catchThrows]
19607
19608 counter = 0;
19609 var f = function() {
19610 var local = 3;
19611 try {
19612 counter++;
19613 local += invertFunctionCall(increaseAndThrow42);
19614 counter++;
19615 } catch (ex) {
19616 counter++;
19617 throw 2 + ex;
19618 counter++;
19619 }
19620 counter++;
19621 }
19622 assertOptResultEquals(undefined, f);
19623 assertEquals(4, counter);
19624
19625 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19626 // doCatch, catchWithLocal, catchThrows, endReturnLocal]
19627
19628 counter = 0;
19629 var f = function() {
19630 var local = 3;
19631 try {
19632 counter++;
19633 local += invertFunctionCall(increaseAndThrow42);
19634 counter++;
19635 } catch (ex) {
19636 counter++;
19637 throw 2 + ex;
19638 counter++;
19639 }
19640 counter++;
19641 return 5 + local;
19642 }
19643 assertOptResultEquals(23, f);
19644 assertEquals(4, counter);
19645
19646 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19647 // doCatch, catchWithLocal, catchThrows, doFinally]
19648
19649 counter = 0;
19650 var f = function() {
19651 var local = 3;
19652 try {
19653 counter++;
19654 local += invertFunctionCall(increaseAndThrow42);
19655 counter++;
19656 } catch (ex) {
19657 counter++;
19658 throw 2 + ex;
19659 counter++;
19660 } finally {
19661 counter++;
19662 local += 2;
19663 counter++;
19664 }
19665 counter++;
19666 }
19667 assertOptResultEquals(undefined, f);
19668 assertEquals(6, counter);
19669
19670 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19671 // doCatch, catchWithLocal, catchThrows, doFinally, endReturnLocal]
19672
19673 counter = 0;
19674 var f = function() {
19675 var local = 3;
19676 try {
19677 counter++;
19678 local += invertFunctionCall(increaseAndThrow42);
19679 counter++;
19680 } catch (ex) {
19681 counter++;
19682 throw 2 + ex;
19683 counter++;
19684 } finally {
19685 counter++;
19686 local += 2;
19687 counter++;
19688 }
19689 counter++;
19690 return 5 + local;
19691 }
19692 assertOptResultEquals(25, f);
19693 assertEquals(6, counter);
19694
19695 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19696 // doCatch, catchWithLocal, catchThrows, doFinally, finallyThrows]
19697
19698 counter = 0;
19699 var f = function() {
19700 var local = 3;
19701 try {
19702 counter++;
19703 local += invertFunctionCall(increaseAndThrow42);
19704 counter++;
19705 } catch (ex) {
19706 counter++;
19707 throw 2 + ex;
19708 counter++;
19709 } finally {
19710 counter++;
19711 throw 25;
19712 counter++;
19713 }
19714 counter++;
19715 }
19716 assertOptThrowsWith(25, f);
19717 assertEquals(4, counter);
19718
19719 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19720 // doCatch, catchWithLocal, catchThrows, doFinally, finallyThrows,
19721 // endReturnLocal]
19722
19723 counter = 0;
19724 var f = function() {
19725 var local = 3;
19726 try {
19727 counter++;
19728 local += invertFunctionCall(increaseAndThrow42);
19729 counter++;
19730 } catch (ex) {
19731 counter++;
19732 throw 2 + ex;
19733 counter++;
19734 } finally {
19735 counter++;
19736 throw 25;
19737 counter++;
19738 }
19739 counter++;
19740 return 5 + local;
19741 }
19742 assertOptThrowsWith(25, f);
19743 assertEquals(4, counter);
19744
19745 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19746 // doCatch, catchWithLocal, catchThrows, doFinally, finallyReturns]
19747
19748 counter = 0;
19749 var f = function() {
19750 var local = 3;
19751 try {
19752 counter++;
19753 local += invertFunctionCall(increaseAndThrow42);
19754 counter++;
19755 } catch (ex) {
19756 counter++;
19757 throw 2 + ex;
19758 counter++;
19759 } finally {
19760 counter++;
19761 return 3 + local;
19762 counter++;
19763 }
19764 counter++;
19765 }
19766 assertOptResultEquals(21, f);
19767 assertEquals(4, counter);
19768
19769 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19770 // doCatch, catchWithLocal, catchThrows, doFinally, finallyReturns,
19771 // endReturnLocal]
19772
19773 counter = 0;
19774 var f = function() {
19775 var local = 3;
19776 try {
19777 counter++;
19778 local += invertFunctionCall(increaseAndThrow42);
19779 counter++;
19780 } catch (ex) {
19781 counter++;
19782 throw 2 + ex;
19783 counter++;
19784 } finally {
19785 counter++;
19786 return 3 + local;
19787 counter++;
19788 }
19789 counter++;
19790 return 5 + local;
19791 }
19792 assertOptResultEquals(21, f);
19793 assertEquals(4, counter);
19794
19795 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19796 // doCatch, catchReturns]
19797
19798 counter = 0;
19799 var f = function() {
19800 var local = 3;
19801 try {
19802 counter++;
19803 local += invertFunctionCall(increaseAndThrow42);
19804 counter++;
19805 } catch (ex) {
19806 counter++;
19807 return 2 + ex;
19808 counter++;
19809 }
19810 counter++;
19811 }
19812 assertOptResultEquals(undefined, f);
19813 assertEquals(4, counter);
19814
19815 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19816 // doCatch, catchReturns, endReturnLocal]
19817
19818 counter = 0;
19819 var f = function() {
19820 var local = 3;
19821 try {
19822 counter++;
19823 local += invertFunctionCall(increaseAndThrow42);
19824 counter++;
19825 } catch (ex) {
19826 counter++;
19827 return 2 + ex;
19828 counter++;
19829 }
19830 counter++;
19831 return 5 + local;
19832 }
19833 assertOptResultEquals(23, f);
19834 assertEquals(4, counter);
19835
19836 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19837 // doCatch, catchReturns, doFinally]
19838
19839 counter = 0;
19840 var f = function() {
19841 var local = 3;
19842 try {
19843 counter++;
19844 local += invertFunctionCall(increaseAndThrow42);
19845 counter++;
19846 } catch (ex) {
19847 counter++;
19848 return 2 + ex;
19849 counter++;
19850 } finally {
19851 counter++;
19852 local += 2;
19853 counter++;
19854 }
19855 counter++;
19856 }
19857 assertOptResultEquals(undefined, f);
19858 assertEquals(6, counter);
19859
19860 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19861 // doCatch, catchReturns, doFinally, endReturnLocal]
19862
19863 counter = 0;
19864 var f = function() {
19865 var local = 3;
19866 try {
19867 counter++;
19868 local += invertFunctionCall(increaseAndThrow42);
19869 counter++;
19870 } catch (ex) {
19871 counter++;
19872 return 2 + ex;
19873 counter++;
19874 } finally {
19875 counter++;
19876 local += 2;
19877 counter++;
19878 }
19879 counter++;
19880 return 5 + local;
19881 }
19882 assertOptResultEquals(25, f);
19883 assertEquals(6, counter);
19884
19885 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19886 // doCatch, catchReturns, doFinally, finallyThrows]
19887
19888 counter = 0;
19889 var f = function() {
19890 var local = 3;
19891 try {
19892 counter++;
19893 local += invertFunctionCall(increaseAndThrow42);
19894 counter++;
19895 } catch (ex) {
19896 counter++;
19897 return 2 + ex;
19898 counter++;
19899 } finally {
19900 counter++;
19901 throw 25;
19902 counter++;
19903 }
19904 counter++;
19905 }
19906 assertOptThrowsWith(25, f);
19907 assertEquals(4, counter);
19908
19909 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19910 // doCatch, catchReturns, doFinally, finallyThrows, endReturnLocal]
19911
19912 counter = 0;
19913 var f = function() {
19914 var local = 3;
19915 try {
19916 counter++;
19917 local += invertFunctionCall(increaseAndThrow42);
19918 counter++;
19919 } catch (ex) {
19920 counter++;
19921 return 2 + ex;
19922 counter++;
19923 } finally {
19924 counter++;
19925 throw 25;
19926 counter++;
19927 }
19928 counter++;
19929 return 5 + local;
19930 }
19931 assertOptThrowsWith(25, f);
19932 assertEquals(4, counter);
19933
19934 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19935 // doCatch, catchReturns, doFinally, finallyReturns]
19936
19937 counter = 0;
19938 var f = function() {
19939 var local = 3;
19940 try {
19941 counter++;
19942 local += invertFunctionCall(increaseAndThrow42);
19943 counter++;
19944 } catch (ex) {
19945 counter++;
19946 return 2 + ex;
19947 counter++;
19948 } finally {
19949 counter++;
19950 return 3 + local;
19951 counter++;
19952 }
19953 counter++;
19954 }
19955 assertOptResultEquals(21, f);
19956 assertEquals(4, counter);
19957
19958 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19959 // doCatch, catchReturns, doFinally, finallyReturns, endReturnLocal]
19960
19961 counter = 0;
19962 var f = function() {
19963 var local = 3;
19964 try {
19965 counter++;
19966 local += invertFunctionCall(increaseAndThrow42);
19967 counter++;
19968 } catch (ex) {
19969 counter++;
19970 return 2 + ex;
19971 counter++;
19972 } finally {
19973 counter++;
19974 return 3 + local;
19975 counter++;
19976 }
19977 counter++;
19978 return 5 + local;
19979 }
19980 assertOptResultEquals(21, f);
19981 assertEquals(4, counter);
19982
19983 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
19984 // doCatch, catchReturns, catchWithLocal]
19985
19986 counter = 0;
19987 var f = function() {
19988 var local = 3;
19989 try {
19990 counter++;
19991 local += invertFunctionCall(increaseAndThrow42);
19992 counter++;
19993 } catch (ex) {
19994 counter++;
19995 return 2 + local;
19996 counter++;
19997 }
19998 counter++;
19999 }
20000 assertOptResultEquals(undefined, f);
20001 assertEquals(4, counter);
20002
20003 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
20004 // doCatch, catchReturns, catchWithLocal, endReturnLocal]
20005
20006 counter = 0;
20007 var f = function() {
20008 var local = 3;
20009 try {
20010 counter++;
20011 local += invertFunctionCall(increaseAndThrow42);
20012 counter++;
20013 } catch (ex) {
20014 counter++;
20015 return 2 + local;
20016 counter++;
20017 }
20018 counter++;
20019 return 5 + local;
20020 }
20021 assertOptResultEquals(23, f);
20022 assertEquals(4, counter);
20023
20024 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
20025 // doCatch, catchReturns, catchWithLocal, doFinally]
20026
20027 counter = 0;
20028 var f = function() {
20029 var local = 3;
20030 try {
20031 counter++;
20032 local += invertFunctionCall(increaseAndThrow42);
20033 counter++;
20034 } catch (ex) {
20035 counter++;
20036 return 2 + local;
20037 counter++;
20038 } finally {
20039 counter++;
20040 local += 2;
20041 counter++;
20042 }
20043 counter++;
20044 }
20045 assertOptResultEquals(undefined, f);
20046 assertEquals(6, counter);
20047
20048 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
20049 // doCatch, catchReturns, catchWithLocal, doFinally, endReturnLocal]
20050
20051 counter = 0;
20052 var f = function() {
20053 var local = 3;
20054 try {
20055 counter++;
20056 local += invertFunctionCall(increaseAndThrow42);
20057 counter++;
20058 } catch (ex) {
20059 counter++;
20060 return 2 + local;
20061 counter++;
20062 } finally {
20063 counter++;
20064 local += 2;
20065 counter++;
20066 }
20067 counter++;
20068 return 5 + local;
20069 }
20070 assertOptResultEquals(25, f);
20071 assertEquals(6, counter);
20072
20073 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
20074 // doCatch, catchReturns, catchWithLocal, doFinally, finallyThrows]
20075
20076 counter = 0;
20077 var f = function() {
20078 var local = 3;
20079 try {
20080 counter++;
20081 local += invertFunctionCall(increaseAndThrow42);
20082 counter++;
20083 } catch (ex) {
20084 counter++;
20085 return 2 + local;
20086 counter++;
20087 } finally {
20088 counter++;
20089 throw 25;
20090 counter++;
20091 }
20092 counter++;
20093 }
20094 assertOptThrowsWith(25, f);
20095 assertEquals(4, counter);
20096
20097 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
20098 // doCatch, catchReturns, catchWithLocal, doFinally, finallyThrows,
20099 // endReturnLocal]
20100
20101 counter = 0;
20102 var f = function() {
20103 var local = 3;
20104 try {
20105 counter++;
20106 local += invertFunctionCall(increaseAndThrow42);
20107 counter++;
20108 } catch (ex) {
20109 counter++;
20110 return 2 + local;
20111 counter++;
20112 } finally {
20113 counter++;
20114 throw 25;
20115 counter++;
20116 }
20117 counter++;
20118 return 5 + local;
20119 }
20120 assertOptThrowsWith(25, f);
20121 assertEquals(4, counter);
20122
20123 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
20124 // doCatch, catchReturns, catchWithLocal, doFinally, finallyReturns]
20125
20126 counter = 0;
20127 var f = function() {
20128 var local = 3;
20129 try {
20130 counter++;
20131 local += invertFunctionCall(increaseAndThrow42);
20132 counter++;
20133 } catch (ex) {
20134 counter++;
20135 return 2 + local;
20136 counter++;
20137 } finally {
20138 counter++;
20139 return 3 + local;
20140 counter++;
20141 }
20142 counter++;
20143 }
20144 assertOptResultEquals(21, f);
20145 assertEquals(4, counter);
20146
20147 // Variant flags: [alternativeFn2, tryReturns, tryResultToLocal,
20148 // doCatch, catchReturns, catchWithLocal, doFinally, finallyReturns,
20149 // endReturnLocal]
20150
20151 counter = 0;
20152 var f = function() {
20153 var local = 3;
20154 try {
20155 counter++;
20156 local += invertFunctionCall(increaseAndThrow42);
20157 counter++;
20158 } catch (ex) {
20159 counter++;
20160 return 2 + local;
20161 counter++;
20162 } finally {
20163 counter++;
20164 return 3 + local;
20165 counter++;
20166 }
20167 counter++;
20168 return 5 + local;
20169 }
20170 assertOptResultEquals(21, f);
20171 assertEquals(4, counter);
20172
20173 // Total: 864 tests.
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698