Bump version numbers.
[WebKit-https.git] / LayoutTests / fast / js / resources / codegen-temporaries.js
1 description(
2 'Tests whether bytecode codegen properly handles temporaries.'
3 );
4
5 var a = true;
6 a = false || a;
7 shouldBeTrue("a");
8
9 var b = false;
10 b = true && b;
11 shouldBeFalse("b");
12
13 function TestObject() {
14     this.toString = function() { return this.test; }
15     this.test = "FAIL";
16     return this;
17 }
18
19 function assign_test1()
20 {
21     var testObject = new TestObject;
22     var a = testObject;
23     a.test = "PASS";
24     return testObject.test;
25 }
26
27 shouldBe("assign_test1()", "'PASS'");
28
29 function assign_test2()
30 {
31     var testObject = new TestObject;
32     var a = testObject;
33     a = a.test = "PASS";
34     return testObject.test;
35 }
36
37 shouldBe("assign_test2()", "'PASS'");
38
39 function assign_test3()
40 {
41     var testObject = new TestObject;
42     var a = testObject;
43     a.test = a = "PASS";
44     return testObject.test;
45 }
46
47 shouldBe("assign_test3()", "'PASS'");
48
49 var testObject4 = new TestObject;
50 var a4 = testObject4;
51 a4.test = this.a4 = "PASS";
52
53 shouldBe("testObject4.test", "'PASS'");
54
55 var testObject5 = new TestObject;
56 var a5 = testObject5;
57 a5 = this.a5.test = "PASS";
58
59 shouldBe("testObject5.test", "'PASS'");
60
61 function assign_test6()
62 {
63     var testObject = new TestObject;
64     var a = testObject;
65     a["test"] = "PASS";
66     return testObject.test;
67 }
68
69 shouldBe("assign_test6()", "'PASS'");
70
71 function assign_test7()
72 {
73     var testObject = new TestObject;
74     var a = testObject;
75     a = a["test"] = "PASS";
76     return testObject.test;
77 }
78
79 shouldBe("assign_test7()", "'PASS'");
80
81 function assign_test8()
82 {
83     var testObject = new TestObject;
84     var a = testObject;
85     a["test"] = a = "PASS";
86     return testObject.test;
87 }
88
89 shouldBe("assign_test8()", "'PASS'");
90
91 function assign_test9()
92 {
93     var testObject = new TestObject;
94     var a = testObject;
95     a["test"] = this.a = "PASS";
96     return testObject.test;
97 }
98
99 shouldBe("assign_test9()", "'PASS'");
100
101 var testObject10 = new TestObject;
102 var a10 = testObject10;
103 a10 = this.a10["test"] = "PASS";
104
105 shouldBe("testObject10.test", "'PASS'");
106
107 function assign_test11()
108 {
109     var testObject = new TestObject;
110     var a = testObject;
111     a[a = "test"] = "PASS";
112     return testObject.test;
113 }
114
115 shouldBe("assign_test11()", "'PASS'");
116
117 function assign_test12()
118 {
119     var test = "test";
120     var testObject = new TestObject;
121     var a = testObject;
122     a[test] = "PASS";
123     return testObject.test;
124 }
125
126 shouldBe("assign_test12()", "'PASS'");
127
128 function assign_test13()
129 {
130     var testObject = new TestObject;
131     var a = testObject;
132     a.test = (a = "FAIL", "PASS");
133     return testObject.test;
134 }
135
136 shouldBe("assign_test13()", "'PASS'");
137
138 function assign_test14()
139 {
140     var testObject = new TestObject;
141     var a = testObject;
142     a["test"] = (a = "FAIL", "PASS");
143     return testObject.test;
144 }
145
146 shouldBe("assign_test14()", "'PASS'");
147
148 function assign_test15()
149 {
150     var test = "test";
151     var testObject = new TestObject;
152     var a = testObject;
153     a[test] = (test = "FAIL", "PASS");
154     return testObject.test;
155 }
156
157 shouldBe("assign_test15()", "'PASS'");
158
159 function assign_test16()
160 {
161     var a = 1;
162     a = (a = 2);
163     return a;
164 }
165
166 shouldBe("assign_test16()", "2");
167
168 var a17 = 1;
169 a17 += (a17 += 1);
170
171 shouldBe("a17", "3");
172
173 function assign_test18()
174 {
175     var a = 1;
176     a += (a += 1);
177     return a;
178 }
179
180 shouldBe("assign_test18()", "3");
181
182 var a19 = { b: 1 };
183 a19.b += (a19.b += 1);
184
185 shouldBe("a19.b", "3");
186
187 function assign_test20()
188 {
189     var a = { b: 1 };
190     a.b += (a.b += 1);
191     return a.b;
192 }
193
194 shouldBe("assign_test20()", "3");
195
196 var a21 = { b: 1 };
197 a21["b"] += (a21["b"] += 1);
198
199 shouldBe("a21['b']", "3");
200
201 function assign_test22()
202 {
203     var a = { b: 1 };
204     a["b"] += (a["b"] += 1);
205     return a["b"];
206 }
207
208 shouldBe("assign_test22()", "3");
209
210 function assign_test23()
211 {
212     var o = { b: 1 };
213     var a = o;
214     a.b += a = 2;
215     return o.b;
216 }
217
218 shouldBe("assign_test23()", "3");
219
220 function assign_test24()
221 {
222     var o = { b: 1 };
223     var a = o;
224     a["b"] += a = 2;
225     return o["b"];
226 }
227
228 shouldBe("assign_test24()", "3");
229
230 function assign_test25()
231 {
232     var o = { b: 1 };
233     var a = o;
234     a[a = "b"] += a = 2;
235     return o["b"];
236 }
237
238 shouldBe("assign_test25()", "3");
239
240 function assign_test26()
241 {
242     var o = { b: 1 };
243     var a = o;
244     var b = "b";
245     a[b] += a = 2;
246     return o["b"];
247 }
248
249 shouldBe("assign_test26()", "3");
250
251 function assign_test27()
252 {
253     var o = { b: 1 };
254     var a = o;
255     a.b += (a = 100, 2);
256     return o.b;
257 }
258
259 shouldBe("assign_test27()", "3");
260
261 function assign_test28()
262 {
263     var o = { b: 1 };
264     var a = o;
265     a["b"] += (a = 100, 2);
266     return o["b"];
267 }
268
269 shouldBe("assign_test28()", "3");
270
271 function assign_test29()
272 {
273     var o = { b: 1 };
274     var a = o;
275     var b = "b";
276     a[b] += (a = 100, 2);
277     return o["b"];
278 }
279
280 shouldBe("assign_test29()", "3");
281
282 function assign_test30()
283 {
284     var a = "foo";
285     a += (a++);
286     return a;
287 }
288
289 shouldBe("assign_test30()", "'fooNaN'");
290
291 function assign_test31()
292 {
293     function result() { return "PASS"; }
294     return (globalVar = result)()
295 }
296
297 shouldBe("assign_test31()", "'PASS'");
298
299 function bracket_test1()
300 {
301     var o = [-1];
302     var a = o[++o];
303     return a;
304 }
305
306 shouldBe("bracket_test1()", "-1");
307
308 function bracket_test2()
309 {
310     var o = [1];
311     var a = o[--o];
312     return a;
313 }
314
315 shouldBe("bracket_test2()", "1");
316
317 function bracket_test3()
318 {
319     var o = [0];
320     var a = o[o++];
321     return a;
322 }
323
324 shouldBe("bracket_test3()", "0");
325
326 function bracket_test4()
327 {
328     var o = [0];
329     var a = o[o--];
330     return a;
331 }
332
333 shouldBe("bracket_test4()", "0");
334
335 function bracket_test5()
336 {
337     var o = [1];
338     var a = o[o ^= 1];
339     return a;
340 }
341
342 shouldBe("bracket_test5()", "1");
343
344 function bracket_test6()
345 {
346     var o = { b: 1 }
347     var b = o[o = { b: 2 }, "b"];
348     return b;
349 }
350
351 shouldBe("bracket_test6()", "1");
352
353 function mult_test1()
354 {
355     var a = 1;
356     return a * (a = 2);
357 }
358
359 shouldBe("mult_test1()", "2");
360
361 function mult_test2()
362 {
363     var a = 1;
364     return a * ++a;
365 }
366
367 shouldBe("mult_test2()", "2");
368
369 function mult_test3()
370 {
371     var a = 1;
372     return a * (a += 1);
373 }
374
375 shouldBe("mult_test3()", "2");
376
377 function div_test1()
378 {
379     var a = 1;
380     return a / (a = 2);
381 }
382
383 shouldBe("div_test1()", "0.5");
384
385 function div_test2()
386 {
387     var a = 1;
388     return a / ++a;
389 }
390
391 shouldBe("div_test2()", "0.5");
392
393 function div_test3()
394 {
395     var a = 1;
396     return a / (a += 1);
397 }
398
399 shouldBe("div_test3()", "0.5");
400
401 function mod_test1()
402 {
403     var a = 1;
404     return a % (a = 2);
405 }
406
407 shouldBe("mod_test1()", "1");
408
409 function mod_test2()
410 {
411     var a = 1;
412     return a % ++a;
413 }
414
415 shouldBe("mod_test2()", "1");
416
417 function mod_test3()
418 {
419     var a = 1;
420     return a % (a += 1);
421 }
422
423 shouldBe("mod_test3()", "1");
424
425 function add_test1()
426 {
427     var a = 1;
428     return a + (a = 2);
429 }
430
431 shouldBe("add_test1()", "3");
432
433 function add_test2()
434 {
435     var a = 1;
436     return a + ++a;
437 }
438
439 shouldBe("add_test2()", "3");
440
441 function add_test3()
442 {
443     var a = 1;
444     return a + (a += 1);
445 }
446
447 shouldBe("add_test3()", "3");
448
449 function sub_test1()
450 {
451     var a = 1;
452     return a - (a = 2);
453 }
454
455 shouldBe("sub_test1()", "-1");
456
457 function sub_test2()
458 {
459     var a = 1;
460     return a - ++a;
461 }
462
463 shouldBe("sub_test2()", "-1");
464
465 function sub_test3()
466 {
467     var a = 1;
468     return a - (a += 1);
469 }
470
471 shouldBe("sub_test3()", "-1");
472
473 function lshift_test1()
474 {
475     var a = 1;
476     return a << (a = 2);
477 }
478
479 shouldBe("lshift_test1()", "4");
480
481 function lshift_test2()
482 {
483     var a = 1;
484     return a << ++a;
485 }
486
487 shouldBe("lshift_test2()", "4");
488
489 function lshift_test3()
490 {
491     var a = 1;
492     return a << (a += 1);
493 }
494
495 shouldBe("lshift_test3()", "4");
496
497 function rshift_test1()
498 {
499     var a = 4;
500     return a >> (a = 2);
501 }
502
503 shouldBe("rshift_test1()", "1");
504
505 function rshift_test2()
506 {
507     var a = 2;
508     return a >> --a;
509 }
510
511 shouldBe("rshift_test2()", "1");
512
513 function rshift_test3()
514 {
515     var a = 2;
516     return a >> (a -= 1);
517 }
518
519 shouldBe("rshift_test3()", "1");
520
521 function urshift_test1()
522 {
523     var a = 4;
524     return a >>> (a = 2);
525 }
526
527 shouldBe("urshift_test1()", "1");
528
529 function urshift_test2()
530 {
531     var a = 2;
532     return a >>> --a;
533 }
534
535 shouldBe("urshift_test2()", "1");
536
537 function urshift_test3()
538 {
539     var a = 2;
540     return a >>> (a -= 1);
541 }
542
543 shouldBe("urshift_test3()", "1");
544
545 function less_test1()
546 {
547     var a = 1;
548     return a < (a = 2);
549 }
550
551 shouldBeTrue("less_test1()");
552
553 function less_test2()
554 {
555     var a = 1;
556     return a < ++a;
557 }
558
559 shouldBeTrue("less_test2()");
560
561 function less_test3()
562 {
563     var a = 1;
564     return a < (a += 1);
565 }
566
567 shouldBeTrue("less_test3()");
568
569 function greater_test1()
570 {
571     var a = 2;
572     return a > (a = 1);
573 }
574
575 shouldBeTrue("greater_test1()");
576
577 function greater_test2()
578 {
579     var a = 2;
580     return a > --a;
581 }
582
583 shouldBeTrue("greater_test2()");
584
585 function greater_test3()
586 {
587     var a = 2;
588     return a > (a -= 1);
589 }
590
591 shouldBeTrue("greater_test3()");
592
593 function lesseq_test1()
594 {
595     var a = 1;
596     return a <= (a = 3, 2);
597 }
598
599 shouldBeTrue("lesseq_test1()");
600
601 function lesseq_test2()
602 {
603     var a = 1;
604     return a <= (++a, 1);
605 }
606
607 shouldBeTrue("lesseq_test2()");
608
609 function lesseq_test3()
610 {
611     var a = 1;
612     return a <= (a += 1, 1);
613 }
614
615 shouldBeTrue("lesseq_test3()");
616
617 function greatereq_test1()
618 {
619     var a = 2;
620     return a >= (a = 1, 2);
621 }
622
623 shouldBeTrue("greatereq_test1()");
624
625 function greatereq_test2()
626 {
627     var a = 2;
628     return a >= (--a, 2);
629 }
630
631 shouldBeTrue("greatereq_test2()");
632
633 function greatereq_test3()
634 {
635     var a = 2;
636     return a >= (a -= 1, 2);
637 }
638
639 shouldBeTrue("greatereq_test3()");
640
641 function instanceof_test1()
642 {
643     var a = { };
644     return a instanceof (a = 1, Object);
645 }
646
647 shouldBeTrue("instanceof_test1()");
648
649 function instanceof_test2()
650 {
651     var a = { valueOf: function() { return 1; } };
652     return a instanceof (++a, Object);
653 }
654
655 shouldBeTrue("instanceof_test2()");
656
657 function instanceof_test3()
658 {
659     var a = { valueOf: function() { return 1; } };
660     return a instanceof (a += 1, Object);
661 }
662
663 shouldBeTrue("instanceof_test3()");
664
665 function in_test1()
666 {
667     var a = "a";
668     return a in (a = "b", { a: 1 });
669 }
670
671 shouldBeTrue("in_test1()");
672
673 function in_test2()
674 {
675     var a = { toString: function() { return "a"; }, valueOf: function() { return 1; } };
676     return a in (++a, { a: 1 });
677 }
678
679 shouldBeTrue("in_test2()");
680
681 function in_test3()
682 {
683     var a = { toString: function() { return "a"; }, valueOf: function() { return 1; } };
684     return a in (a += 1, { a: 1 });
685 }
686
687 shouldBeTrue("in_test3()");
688
689 function eq_test1()
690 {
691     var a = 1;
692     return a == (a = 2);
693 }
694
695 shouldBeFalse("eq_test1()");
696
697 function eq_test2()
698 {
699     var a = 1;
700     return a == ++a;
701 }
702
703 shouldBeFalse("eq_test2()");
704
705 function eq_test3()
706 {
707     var a = 1;
708     return a == (a += 1);
709 }
710
711 shouldBeFalse("eq_test3()");
712
713 function neq_test1()
714 {
715     var a = 1;
716     return a != (a = 2);
717 }
718
719 shouldBeTrue("neq_test1()");
720
721 function neq_test2()
722 {
723     var a = 1;
724     return a != ++a;
725 }
726
727 shouldBeTrue("neq_test2()");
728
729 function neq_test3()
730 {
731     var a = 1;
732     return a != (a += 1);
733 }
734
735 shouldBeTrue("neq_test3()");
736
737 function stricteq_test1()
738 {
739     var a = 1;
740     return a === (a = 2);
741 }
742
743 shouldBeFalse("stricteq_test1()");
744
745 function stricteq_test2()
746 {
747     var a = 1;
748     return a === ++a;
749 }
750
751 shouldBeFalse("stricteq_test2()");
752
753 function stricteq_test3()
754 {
755     var a = 1;
756     return a === (a += 1);
757 }
758
759 shouldBeFalse("stricteq_test3()");
760
761 function nstricteq_test1()
762 {
763     var a = 1;
764     return a !== (a = 2);
765 }
766
767 shouldBeTrue("nstricteq_test1()");
768
769 function nstricteq_test2()
770 {
771     var a = 1;
772     return a !== ++a;
773 }
774
775 shouldBeTrue("nstricteq_test2()");
776
777 function nstricteq_test3()
778 {
779     var a = 1;
780     return a !== (a += 1);
781 }
782
783 shouldBeTrue("nstricteq_test3()");
784
785 function bitand_test1()
786 {
787     var a = 1;
788     return a & (a = 2);
789 }
790
791 shouldBe("bitand_test1()", "0");
792
793 function bitand_test2()
794 {
795     var a = 1;
796     return a & ++a;
797 }
798
799 shouldBe("bitand_test2()", "0");
800
801 function bitand_test3()
802 {
803     var a = 1;
804     return a & (a += 1);
805 }
806
807 shouldBe("bitand_test3()", "0");
808
809 function bitor_test1()
810 {
811     var a = 1;
812     return a | (a = 2);
813 }
814
815 shouldBe("bitor_test1()", "3");
816
817 function bitor_test2()
818 {
819     var a = 1;
820     return a | ++a;
821 }
822
823 shouldBe("bitor_test2()", "3");
824
825 function bitor_test3()
826 {
827     var a = 1;
828     return a | (a += 1);
829 }
830
831 shouldBe("bitor_test3()", "3");
832
833 function bitxor_test1()
834 {
835     var a = 1;
836     return a ^ (a = 2);
837 }
838
839 shouldBe("bitxor_test1()", "3");
840
841 function bitxor_test2()
842 {
843     var a = 1;
844     return a ^ ++a;
845 }
846
847 shouldBe("bitxor_test2()", "3");
848
849 function bitxor_test3()
850 {
851     var a = 1;
852     return a ^ (a += 1);
853 }
854
855 shouldBe("bitxor_test3()", "3");
856
857 var successfullyParsed = true;