summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/dfg/DFGAbstractState.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGAbstractState.cpp')
-rw-r--r--Source/JavaScriptCore/dfg/DFGAbstractState.cpp17
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: