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