diff options
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGAbstractState.cpp')
-rw-r--r-- | Source/JavaScriptCore/dfg/DFGAbstractState.cpp | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGAbstractState.cpp b/Source/JavaScriptCore/dfg/DFGAbstractState.cpp index 5f79f666f..b860a7310 100644 --- a/Source/JavaScriptCore/dfg/DFGAbstractState.cpp +++ b/Source/JavaScriptCore/dfg/DFGAbstractState.cpp @@ -852,11 +852,11 @@ bool AbstractState::execute(unsigned indexInBlock) forNode(node.child2()).filter(SpecInt32); forNode(nodeIndex).makeTop(); break; - case Array::JSArray: + case IN_BOUNDS_ARRAY_STORAGE_MODES: forNode(node.child2()).filter(SpecInt32); forNode(nodeIndex).makeTop(); break; - case Array::JSArrayOutOfBounds: + case OUT_OF_BOUNDS_ARRAY_STORAGE_MODES: forNode(node.child2()).filter(SpecInt32); clobberWorld(node.codeOrigin, indexInBlock); forNode(nodeIndex).makeTop(); @@ -916,10 +916,10 @@ bool AbstractState::execute(unsigned indexInBlock) case Array::Generic: clobberWorld(node.codeOrigin, indexInBlock); break; - case Array::JSArray: + case IN_BOUNDS_ARRAY_STORAGE_MODES: forNode(child2).filter(SpecInt32); break; - case Array::JSArrayOutOfBounds: + case OUT_OF_BOUNDS_ARRAY_STORAGE_MODES: forNode(child2).filter(SpecInt32); clobberWorld(node.codeOrigin, indexInBlock); break; @@ -1341,7 +1341,7 @@ bool AbstractState::execute(unsigned indexInBlock) forNode(node.child1()).set(node.structureTransitionData().newStructure); m_haveStructures = true; break; - case GetPropertyStorage: + case GetButterfly: case AllocatePropertyStorage: case ReallocatePropertyStorage: node.setCanExit(false); @@ -1359,8 +1359,7 @@ bool AbstractState::execute(unsigned indexInBlock) case Array::String: forNode(node.child1()).filter(SpecString); break; - case Array::JSArray: - case Array::JSArrayOutOfBounds: + case ALL_ARRAY_STORAGE_MODES: // This doesn't filter anything meaningful right now. We may want to add // CFA tracking of array mode speculations, but we don't have that, yet. forNode(node.child1()).filter(SpecCell); @@ -1523,11 +1522,14 @@ inline void AbstractState::clobberCapturedVars(const CodeOrigin& codeOrigin) m_variables.local(i).makeTop(); } } else { - for (size_t i = m_codeBlock->m_numCapturedVars; i--;) - m_variables.local(i).makeTop(); + for (size_t i = m_codeBlock->m_numVars; i--;) { + if (m_codeBlock->isCaptured(i)) + m_variables.local(i).makeTop(); + } } - if (m_codeBlock->argumentsAreCaptured()) { - for (size_t i = m_variables.numberOfArguments(); i--;) + + for (size_t i = m_variables.numberOfArguments(); i--;) { + if (m_codeBlock->isCaptured(argumentToOperand(i))) m_variables.argument(i).makeTop(); } } |