File indexing completed on 2024-04-28 15:28:37

0001 description(
0002 'Tests whether bytecode codegen properly handles temporaries.'
0003 );
0004 
0005 var a = true;
0006 a = false || a;
0007 shouldBeTrue("a");
0008 
0009 var b = false;
0010 b = true && b;
0011 shouldBeFalse("b");
0012 
0013 function TestObject() {
0014     this.toString = function() { return this.test; }
0015     this.test = "FAIL";
0016     return this;
0017 }
0018 
0019 function assign_test1()
0020 {
0021     var testObject = new TestObject;
0022     var a = testObject;
0023     a.test = "PASS";
0024     return testObject.test;
0025 }
0026 
0027 shouldBe("assign_test1()", "'PASS'");
0028 
0029 function assign_test2()
0030 {
0031     var testObject = new TestObject;
0032     var a = testObject;
0033     a = a.test = "PASS";
0034     return testObject.test;
0035 }
0036 
0037 shouldBe("assign_test2()", "'PASS'");
0038 
0039 function assign_test3()
0040 {
0041     var testObject = new TestObject;
0042     var a = testObject;
0043     a.test = a = "PASS";
0044     return testObject.test;
0045 }
0046 
0047 shouldBe("assign_test3()", "'PASS'");
0048 
0049 var testObject4 = new TestObject;
0050 var a4 = testObject4;
0051 a4.test = this.a4 = "PASS";
0052 
0053 shouldBe("testObject4.test", "'PASS'");
0054 
0055 var testObject5 = new TestObject;
0056 var a5 = testObject5;
0057 a5 = this.a5.test = "PASS";
0058 
0059 shouldBe("testObject5.test", "'PASS'");
0060 
0061 function assign_test6()
0062 {
0063     var testObject = new TestObject;
0064     var a = testObject;
0065     a["test"] = "PASS";
0066     return testObject.test;
0067 }
0068 
0069 shouldBe("assign_test6()", "'PASS'");
0070 
0071 function assign_test7()
0072 {
0073     var testObject = new TestObject;
0074     var a = testObject;
0075     a = a["test"] = "PASS";
0076     return testObject.test;
0077 }
0078 
0079 shouldBe("assign_test7()", "'PASS'");
0080 
0081 function assign_test8()
0082 {
0083     var testObject = new TestObject;
0084     var a = testObject;
0085     a["test"] = a = "PASS";
0086     return testObject.test;
0087 }
0088 
0089 shouldBe("assign_test8()", "'PASS'");
0090 
0091 function assign_test9()
0092 {
0093     var testObject = new TestObject;
0094     var a = testObject;
0095     a["test"] = this.a = "PASS";
0096     return testObject.test;
0097 }
0098 
0099 shouldBe("assign_test9()", "'PASS'");
0100 
0101 var testObject10 = new TestObject;
0102 var a10 = testObject10;
0103 a10 = this.a10["test"] = "PASS";
0104 
0105 shouldBe("testObject10.test", "'PASS'");
0106 
0107 function assign_test11()
0108 {
0109     var testObject = new TestObject;
0110     var a = testObject;
0111     a[a = "test"] = "PASS";
0112     return testObject.test;
0113 }
0114 
0115 shouldBe("assign_test11()", "'PASS'");
0116 
0117 function assign_test12()
0118 {
0119     var test = "test";
0120     var testObject = new TestObject;
0121     var a = testObject;
0122     a[test] = "PASS";
0123     return testObject.test;
0124 }
0125 
0126 shouldBe("assign_test12()", "'PASS'");
0127 
0128 function assign_test13()
0129 {
0130     var testObject = new TestObject;
0131     var a = testObject;
0132     a.test = (a = "FAIL", "PASS");
0133     return testObject.test;
0134 }
0135 
0136 shouldBe("assign_test13()", "'PASS'");
0137 
0138 function assign_test14()
0139 {
0140     var testObject = new TestObject;
0141     var a = testObject;
0142     a["test"] = (a = "FAIL", "PASS");
0143     return testObject.test;
0144 }
0145 
0146 shouldBe("assign_test14()", "'PASS'");
0147 
0148 function assign_test15()
0149 {
0150     var test = "test";
0151     var testObject = new TestObject;
0152     var a = testObject;
0153     a[test] = (test = "FAIL", "PASS");
0154     return testObject.test;
0155 }
0156 
0157 shouldBe("assign_test15()", "'PASS'");
0158 
0159 function assign_test16()
0160 {
0161     var a = 1;
0162     a = (a = 2);
0163     return a;
0164 }
0165 
0166 shouldBe("assign_test16()", "2");
0167 
0168 var a17 = 1;
0169 a17 += (a17 += 1);
0170 
0171 shouldBe("a17", "3");
0172 
0173 function assign_test18()
0174 {
0175     var a = 1;
0176     a += (a += 1);
0177     return a;
0178 }
0179 
0180 shouldBe("assign_test18()", "3");
0181 
0182 var a19 = { b: 1 };
0183 a19.b += (a19.b += 1);
0184 
0185 shouldBe("a19.b", "3");
0186 
0187 function assign_test20()
0188 {
0189     var a = { b: 1 };
0190     a.b += (a.b += 1);
0191     return a.b;
0192 }
0193 
0194 shouldBe("assign_test20()", "3");
0195 
0196 var a21 = { b: 1 };
0197 a21["b"] += (a21["b"] += 1);
0198 
0199 shouldBe("a21['b']", "3");
0200 
0201 function assign_test22()
0202 {
0203     var a = { b: 1 };
0204     a["b"] += (a["b"] += 1);
0205     return a["b"];
0206 }
0207 
0208 shouldBe("assign_test22()", "3");
0209 
0210 function assign_test23()
0211 {
0212     var o = { b: 1 };
0213     var a = o;
0214     a.b += a = 2;
0215     return o.b;
0216 }
0217 
0218 shouldBe("assign_test23()", "3");
0219 
0220 function assign_test24()
0221 {
0222     var o = { b: 1 };
0223     var a = o;
0224     a["b"] += a = 2;
0225     return o["b"];
0226 }
0227 
0228 shouldBe("assign_test24()", "3");
0229 
0230 function assign_test25()
0231 {
0232     var o = { b: 1 };
0233     var a = o;
0234     a[a = "b"] += a = 2;
0235     return o["b"];
0236 }
0237 
0238 shouldBe("assign_test25()", "3");
0239 
0240 function assign_test26()
0241 {
0242     var o = { b: 1 };
0243     var a = o;
0244     var b = "b";
0245     a[b] += a = 2;
0246     return o["b"];
0247 }
0248 
0249 shouldBe("assign_test26()", "3");
0250 
0251 function assign_test27()
0252 {
0253     var o = { b: 1 };
0254     var a = o;
0255     a.b += (a = 100, 2);
0256     return o.b;
0257 }
0258 
0259 shouldBe("assign_test27()", "3");
0260 
0261 function assign_test28()
0262 {
0263     var o = { b: 1 };
0264     var a = o;
0265     a["b"] += (a = 100, 2);
0266     return o["b"];
0267 }
0268 
0269 shouldBe("assign_test28()", "3");
0270 
0271 function assign_test29()
0272 {
0273     var o = { b: 1 };
0274     var a = o;
0275     var b = "b";
0276     a[b] += (a = 100, 2);
0277     return o["b"];
0278 }
0279 
0280 shouldBe("assign_test29()", "3");
0281 
0282 function assign_test30()
0283 {
0284     var a = "foo";
0285     a += (a++);
0286     return a;
0287 }
0288 
0289 shouldBe("assign_test30()", "'fooNaN'");
0290 
0291 debug("Done.");
0292