diff options
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGAbstractState.cpp')
-rw-r--r-- | Source/JavaScriptCore/dfg/DFGAbstractState.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGAbstractState.cpp b/Source/JavaScriptCore/dfg/DFGAbstractState.cpp index 153ba311c..50b9e2b9f 100644 --- a/Source/JavaScriptCore/dfg/DFGAbstractState.cpp +++ b/Source/JavaScriptCore/dfg/DFGAbstractState.cpp @@ -841,6 +841,7 @@ bool AbstractState::execute(unsigned indexInBlock) node.setCanExit(true); switch (node.arrayMode()) { case Array::Undecided: + case Array::Unprofiled: ASSERT_NOT_REACHED(); break; case Array::ForceExit: @@ -863,6 +864,7 @@ bool AbstractState::execute(unsigned indexInBlock) forNode(nodeIndex).makeTop(); break; case OUT_OF_BOUNDS_ARRAY_STORAGE_MODES: + case ALL_EFFECTFUL_ARRAY_STORAGE_MODES: forNode(node.child2()).filter(SpecInt32); clobberWorld(node.codeOrigin, indexInBlock); forNode(nodeIndex).makeTop(); @@ -926,6 +928,7 @@ bool AbstractState::execute(unsigned indexInBlock) forNode(child2).filter(SpecInt32); break; case OUT_OF_BOUNDS_ARRAY_STORAGE_MODES: + case ALL_EFFECTFUL_ARRAY_STORAGE_MODES: forNode(child2).filter(SpecInt32); clobberWorld(node.codeOrigin, indexInBlock); break; @@ -1397,6 +1400,20 @@ bool AbstractState::execute(unsigned indexInBlock) } break; } + case Arrayify: { + switch (node.arrayMode()) { + case EFFECTFUL_NON_ARRAY_ARRAY_STORAGE_MODES: + node.setCanExit(true); + forNode(node.child1()).filter(SpecCell); + forNode(nodeIndex).clear(); + clobberStructures(indexInBlock); + break; + default: + ASSERT_NOT_REACHED(); + break; + } + break; + } case GetIndexedPropertyStorage: { switch (node.arrayMode()) { case Array::String: |