9b17df46050a763f0b8554d4fada17d870ad984e
[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 successfullyParsed = true;