Changeset 39488 in webkit for trunk/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
- Timestamp:
- Dec 28, 2008, 12:52:06 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp
r39366 r39488 1189 1189 break; 1190 1190 argv.append(newTemporary()); 1191 // op_new_array requires the initial values to be a sequential range of registers 1192 ASSERT(argv.size() == 1 || argv[argv.size() - 1]->index() == argv[argv.size() - 2]->index() + 1); 1191 1193 emitNode(argv.last().get(), n->value()); 1192 1194 } … … 1237 1239 ASSERT(opcodeID == op_call || opcodeID == op_call_eval); 1238 1240 ASSERT(func->refCount()); 1239 1241 ASSERT(thisRegister->refCount()); 1242 1243 RegisterID* originalFunc = func; 1240 1244 if (m_shouldEmitProfileHooks) { 1241 1245 // If codegen decided to recycle func as this call's destination register, … … 1243 1247 // for the sake of op_profile_did_call. 1244 1248 if (dst == func) { 1245 RefPtr<RegisterID> protect = thisRegister;1246 1249 RefPtr<RegisterID> movedThisRegister = emitMove(newTemporary(), thisRegister); 1247 1250 RefPtr<RegisterID> movedFunc = emitMove(thisRegister, func); … … 1257 1260 for (ArgumentListNode* n = argumentsNode->m_listNode.get(); n; n = n->m_next.get()) { 1258 1261 argv.append(newTemporary()); 1262 // op_call requires the arguments to be a sequential range of registers 1263 ASSERT(argv[argv.size() - 1]->index() == argv[argv.size() - 2]->index() + 1); 1259 1264 emitNode(argv.last().get(), n); 1260 1265 } … … 1291 1296 instructions().append(func->index()); 1292 1297 1293 if (dst == func) {1298 if (dst == originalFunc) { 1294 1299 thisRegister->deref(); 1295 1300 func->deref(); … … 1322 1327 ASSERT(func->refCount()); 1323 1328 1329 RegisterID* originalFunc = func; 1324 1330 if (m_shouldEmitProfileHooks) { 1325 1331 // If codegen decided to recycle func as this call's destination register, … … 1339 1345 for (ArgumentListNode* n = argumentsNode ? argumentsNode->m_listNode.get() : 0; n; n = n->m_next.get()) { 1340 1346 argv.append(newTemporary()); 1347 // op_construct requires the arguments to be a sequential range of registers 1348 ASSERT(argv[argv.size() - 1]->index() == argv[argv.size() - 2]->index() + 1); 1341 1349 emitNode(argv.last().get(), n); 1342 1350 } … … 1379 1387 instructions().append(func->index()); 1380 1388 1381 if (dst == func)1389 if (dst == originalFunc) 1382 1390 func->deref(); 1383 1391 }
Note:
See TracChangeset
for help on using the changeset viewer.