summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/dfg/DFGArrayMode.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGArrayMode.h')
-rw-r--r--Source/JavaScriptCore/dfg/DFGArrayMode.h25
1 files changed, 24 insertions, 1 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGArrayMode.h b/Source/JavaScriptCore/dfg/DFGArrayMode.h
index 6ce62ae72..36a8637f5 100644
--- a/Source/JavaScriptCore/dfg/DFGArrayMode.h
+++ b/Source/JavaScriptCore/dfg/DFGArrayMode.h
@@ -63,12 +63,25 @@ enum Mode {
Array::Mode fromObserved(ArrayModes modes, bool makeSafe);
+Array::Mode fromStructure(Structure*, bool makeSafe);
+
Array::Mode refineArrayMode(Array::Mode, SpeculatedType base, SpeculatedType index);
bool modeAlreadyChecked(AbstractValue&, Array::Mode);
const char* modeToString(Array::Mode);
+inline bool modeIsJSArray(Array::Mode arrayMode)
+{
+ switch (arrayMode) {
+ case Array::JSArray:
+ case Array::JSArrayOutOfBounds:
+ return true;
+ default:
+ return false;
+ }
+}
+
inline bool canCSEStorage(Array::Mode arrayMode)
{
switch (arrayMode) {
@@ -82,6 +95,11 @@ inline bool canCSEStorage(Array::Mode arrayMode)
}
}
+inline bool lengthNeedsStorage(Array::Mode arrayMode)
+{
+ return modeIsJSArray(arrayMode);
+}
+
inline Array::Mode modeForPut(Array::Mode arrayMode)
{
switch (arrayMode) {
@@ -115,7 +133,7 @@ inline bool modesCompatibleForStorageLoad(Array::Mode left, Array::Mode right)
return false;
}
-inline bool modeSupportsLength(Array::Mode mode)
+inline bool modeIsSpecific(Array::Mode mode)
{
switch (mode) {
case Array::Undecided:
@@ -127,6 +145,11 @@ inline bool modeSupportsLength(Array::Mode mode)
}
}
+inline bool modeSupportsLength(Array::Mode mode)
+{
+ return modeIsSpecific(mode);
+}
+
} } // namespace JSC::DFG
#endif // ENABLE(DFG_JIT)