Changeset 33562
- Timestamp:
- 05/17/08 21:53:26 (6 months ago)
- Location:
- branches/squirrelfish
- Files:
-
- 6 modified
-
JavaScriptCore/ChangeLog (modified) (1 diff)
-
JavaScriptCore/kjs/grammar.y (modified) (1 diff)
-
JavaScriptCore/kjs/nodes.cpp (modified) (1 diff)
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/js/codegen-temporaries-expected.txt (modified) (1 diff)
-
LayoutTests/fast/js/resources/codegen-temporaries.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/squirrelfish/JavaScriptCore/ChangeLog
r33560 r33562 1 2008-05-17 Cameron Zwarich <cwzwarich@uwaterloo.ca> 2 3 Reviewed by Oliver. 4 5 Bug 18991: SquirrelFish: Major codegen issue in a.b=expr, a[b]=expr 6 <https://bugs.webkit.org/show_bug.cgi?id=18991> 7 8 Fix the last remaining blocking cases of this bug. 9 10 * kjs/grammar.y: 11 * kjs/nodes.cpp: 12 (KJS::ReadModifyResolveNode::emitCode): 13 1 14 2008-05-17 Cameron Zwarich <cwzwarich@uwaterloo.ca> 2 15 -
branches/squirrelfish/JavaScriptCore/kjs/grammar.y
r33552 r33562 424 424 PostfixExpr: 425 425 LeftHandSideExpr 426 | LeftHandSideExpr PLUSPLUS { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode($1.m_node, OpPlusPlus), $1.m_featureInfo ); }427 | LeftHandSideExpr MINUSMINUS { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode($1.m_node, OpMinusMinus), $1.m_featureInfo ); }426 | LeftHandSideExpr PLUSPLUS { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode($1.m_node, OpPlusPlus), $1.m_featureInfo | AssignFeature); } 427 | LeftHandSideExpr MINUSMINUS { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode($1.m_node, OpMinusMinus), $1.m_featureInfo | AssignFeature); } 428 428 ; 429 429 430 430 PostfixExprNoBF: 431 431 LeftHandSideExprNoBF 432 | LeftHandSideExprNoBF PLUSPLUS { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode($1.m_node, OpPlusPlus), $1.m_featureInfo ); }433 | LeftHandSideExprNoBF MINUSMINUS { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode($1.m_node, OpMinusMinus), $1.m_featureInfo ); }432 | LeftHandSideExprNoBF PLUSPLUS { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode($1.m_node, OpPlusPlus), $1.m_featureInfo | AssignFeature); } 433 | LeftHandSideExprNoBF MINUSMINUS { $$ = createNodeFeatureInfo<ExpressionNode*>(makePostfixNode($1.m_node, OpMinusMinus), $1.m_featureInfo | AssignFeature); } 434 434 ; 435 435 -
branches/squirrelfish/JavaScriptCore/kjs/nodes.cpp
r33560 r33562 4158 4158 } 4159 4159 4160 if (generator.leftHandSideNeedsCopy(m_rightHasAssignments) && !m_right.get()->isNumber()) { 4161 RefPtr<RegisterID> result = generator.newTemporary(); 4162 generator.emitMove(result.get(), local); 4163 RegisterID* src2 = generator.emitNode(m_right.get()); 4164 emitReadModifyAssignment(generator, result.get(), result.get(), src2, m_operator); 4165 generator.emitMove(local, result.get()); 4166 return generator.moveToDestinationIfNeeded(dst, result.get()); 4167 } 4168 4160 4169 RegisterID* src2 = generator.emitNode(m_right.get()); 4161 4170 RegisterID* result = emitReadModifyAssignment(generator, local, local, src2, m_operator); -
branches/squirrelfish/LayoutTests/ChangeLog
r33552 r33562 1 2008-05-17 Cameron Zwarich <cwzwarich@uwaterloo.ca> 2 3 Reviewed by Oliver. 4 5 Add more tests for: 6 7 Bug 18991: SquirrelFish: Major codegen issue in a.b=expr, a[b]=expr 8 <https://bugs.webkit.org/show_bug.cgi?id=18991> 9 10 * fast/js/codegen-temporaries-expected.txt: 11 * fast/js/resources/codegen-temporaries.js: 12 1 13 2008-05-17 Cameron Zwarich <cwzwarich@uwaterloo.ca> 2 14 -
branches/squirrelfish/LayoutTests/fast/js/codegen-temporaries-expected.txt
r33552 r33562 22 22 PASS assign_test15() is 'PASS' 23 23 PASS assign_test16() is 2 24 PASS a17 is 3 25 PASS assign_test18() is 3 26 PASS a19.b is 3 27 PASS assign_test20() is 3 28 PASS a21['b'] is 3 29 PASS assign_test22() is 3 30 PASS assign_test23() is 3 31 PASS assign_test24() is 3 32 PASS assign_test25() is 3 33 PASS assign_test26() is 3 34 PASS assign_test27() is 3 35 PASS assign_test28() is 3 36 PASS assign_test29() is 3 37 PASS assign_test30() is 'fooNaN' 24 38 PASS successfullyParsed is true 25 39 -
branches/squirrelfish/LayoutTests/fast/js/resources/codegen-temporaries.js
r33552 r33562 166 166 shouldBe("assign_test16()", "2"); 167 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 168 291 successfullyParsed = true;