Changeset 122640 in webkit
- Timestamp:
- Jul 13, 2012 4:12:14 PM (12 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r122624 r122640 1 2012-07-13 Oliver Hunt <oliver@apple.com> 2 3 LLInt fails to mark structures stored in the bytecode 4 https://bugs.webkit.org/show_bug.cgi?id=91296 5 6 Reviewed by Geoffrey Garen. 7 8 LLInt stores structures in the bytecode, so we need to visit the appropriate 9 instructions as we would if we were running in the classic interpreter. 10 This requires adding additional checks for the LLInt specific opcodes, and 11 the lint specific variants of operand ordering. 12 13 * bytecode/CodeBlock.cpp: 14 (JSC::CodeBlock::visitStructures): 15 (JSC::CodeBlock::stronglyVisitStrongReferences): 16 1 17 2012-07-13 Yong Li <yoli@rim.com> 2 18 -
trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp
r122544 r122640 1841 1841 Interpreter* interpreter = m_globalData->interpreter; 1842 1842 1843 if ( vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id) && vPC[4].u.structure) {1843 if ((vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id) || vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_out_of_line)) && vPC[4].u.structure) { 1844 1844 visitor.append(&vPC[4].u.structure); 1845 1845 return; 1846 1846 } 1847 1847 1848 1848 if (vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_self) || vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_getter_self) || vPC[0].u.opcode == interpreter->getOpcode(op_get_by_id_custom_self)) { 1849 1849 visitor.append(&vPC[4].u.structure); … … 1861 1861 return; 1862 1862 } 1863 #if ENABLE(LLINT) 1864 if (vPC[0].u.opcode == interpreter->getOpcode(op_put_by_id_transition_direct) || vPC[0].u.opcode == interpreter->getOpcode(op_put_by_id_transition_direct_out_of_line) || vPC[0].u.opcode == interpreter->getOpcode(op_put_by_id_transition_normal) || vPC[0].u.opcode == interpreter->getOpcode(op_put_by_id_transition_normal_out_of_line)) { 1865 visitor.append(&vPC[4].u.structure); 1866 visitor.append(&vPC[6].u.structure); 1867 if (vPC[7].u.structureChain) 1868 visitor.append(&vPC[7].u.structureChain); 1869 return; 1870 } 1871 #endif 1872 1863 1873 if (vPC[0].u.opcode == interpreter->getOpcode(op_put_by_id_transition)) { 1864 1874 visitor.append(&vPC[4].u.structure); … … 1868 1878 return; 1869 1879 } 1870 if ( vPC[0].u.opcode == interpreter->getOpcode(op_put_by_id) && vPC[4].u.structure) {1880 if ((vPC[0].u.opcode == interpreter->getOpcode(op_put_by_id) || vPC[0].u.opcode == interpreter->getOpcode(op_put_by_id_out_of_line)) && vPC[4].u.structure) { 1871 1881 visitor.append(&vPC[4].u.structure); 1872 1882 return; … … 2239 2249 } 2240 2250 #endif 2251 #if ENABLE(LLINT) 2252 if (!m_globalData->interpreter->classicEnabled() && !!numberOfInstructions() && getJITType() < JITCode::bottomTierJIT()) { 2253 for (size_t size = m_propertyAccessInstructions.size(), i = 0; i < size; ++i) 2254 visitStructures(visitor, &instructions()[m_propertyAccessInstructions[i]]); 2255 for (size_t size = m_globalResolveInstructions.size(), i = 0; i < size; ++i) 2256 visitStructures(visitor, &instructions()[m_globalResolveInstructions[i]]); 2257 } 2258 #endif 2241 2259 2242 2260 updateAllPredictions(Collection);
Note: See TracChangeset
for help on using the changeset viewer.