diff options
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGArrayMode.h')
-rw-r--r-- | Source/JavaScriptCore/dfg/DFGArrayMode.h | 25 |
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) |