Changeset 130826 in webkit for trunk/Source/JavaScriptCore/dfg/DFGArrayMode.cpp
- Timestamp:
- Oct 9, 2012, 4:39:53 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/dfg/DFGArrayMode.cpp
r129053 r130826 40 40 case asArrayModes(NonArray): 41 41 if (action == Array::Write && !profile->mayInterceptIndexedAccesses()) 42 return Array::BlankToArrayStorage; // FIXME: we don't know whether to go to slow put mode, or not. This is a decent guess. 43 return Array::Undecided; 42 return Array::BlankToContiguousOrArrayStorage; // FIXME: we don't know whether to go to slow put mode or not. We're guessing that we don't need slow put. 43 return Array::Undecided; 44 case asArrayModes(NonArrayWithContiguous): 45 return makeSafe ? Array::ContiguousOutOfBounds : (profile->mayStoreToHole() ? Array::ContiguousToTail : Array::Contiguous); 46 case asArrayModes(ArrayWithContiguous): 47 return makeSafe ? Array::ArrayWithContiguousOutOfBounds : (profile->mayStoreToHole() ? Array::ArrayWithContiguousToTail : Array::ArrayWithContiguous); 48 case asArrayModes(NonArrayWithContiguous) | asArrayModes(ArrayWithContiguous): 49 return makeSafe ? Array::PossiblyArrayWithContiguousOutOfBounds : (profile->mayStoreToHole() ? Array::PossiblyArrayWithContiguousToTail : Array::PossiblyArrayWithContiguous); 44 50 case asArrayModes(NonArrayWithArrayStorage): 45 51 return makeSafe ? Array::ArrayStorageOutOfBounds : (profile->mayStoreToHole() ? Array::ArrayStorageToHole : Array::ArrayStorage); … … 57 63 case asArrayModes(NonArrayWithArrayStorage) | asArrayModes(ArrayWithArrayStorage) | asArrayModes(NonArrayWithSlowPutArrayStorage) | asArrayModes(ArrayWithSlowPutArrayStorage): 58 64 return Array::PossiblyArrayWithSlowPutArrayStorage; 65 case asArrayModes(NonArrayWithContiguous) | asArrayModes(NonArrayWithArrayStorage): 66 return Array::ContiguousOrArrayStorage; 67 case asArrayModes(ArrayWithContiguous) | asArrayModes(ArrayWithArrayStorage): 68 return Array::ArrayWithContiguousOrArrayStorage; 69 case asArrayModes(NonArrayWithContiguous) | asArrayModes(NonArrayWithArrayStorage) | asArrayModes(ArrayWithContiguous) | asArrayModes(ArrayWithArrayStorage): 70 return Array::PossiblyArrayWithContiguousOrArrayStorage; 71 case asArrayModes(NonArray) | asArrayModes(NonArrayWithContiguous): 72 if (action == Array::Write && !profile->mayInterceptIndexedAccesses()) 73 return Array::BlankToContiguous; 74 return Array::Undecided; 75 case asArrayModes(NonArray) | asArrayModes(NonArrayWithContiguous) | asArrayModes(NonArrayWithArrayStorage): 76 if (action == Array::Write && !profile->mayInterceptIndexedAccesses()) 77 return Array::BlankToContiguousOrArrayStorage; 78 return Array::Undecided; 59 79 case asArrayModes(NonArray) | asArrayModes(NonArrayWithArrayStorage): 60 80 if (action == Array::Write && !profile->mayInterceptIndexedAccesses()) … … 145 165 return isStringSpeculation(value.m_type); 146 166 167 case Array::Contiguous: 168 case Array::ContiguousToTail: 169 case Array::ContiguousOutOfBounds: 170 case Array::PossiblyArrayWithContiguous: 171 case Array::PossiblyArrayWithContiguousToTail: 172 case Array::PossiblyArrayWithContiguousOutOfBounds: 173 return value.m_currentKnownStructure.hasSingleton() 174 && (value.m_currentKnownStructure.singleton()->indexingType() & HasContiguous); 175 176 case Array::ArrayWithContiguous: 177 case Array::ArrayWithContiguousToTail: 178 case Array::ArrayWithContiguousOutOfBounds: 179 return value.m_currentKnownStructure.hasSingleton() 180 && (value.m_currentKnownStructure.singleton()->indexingType() & HasContiguous) 181 && (value.m_currentKnownStructure.singleton()->indexingType() & IsArray); 182 147 183 case Array::ArrayStorage: 148 184 case Array::ArrayStorageToHole: … … 171 207 && (value.m_currentKnownStructure.singleton()->indexingType() & IsArray); 172 208 173 case ALL_EFFECTFUL_ARRAY_STORAGE_MODES: 209 case ALL_EFFECTFUL_MODES: 210 case POLYMORPHIC_MODES: 174 211 return false; 175 212 … … 226 263 case Array::String: 227 264 return "String"; 265 case Array::Contiguous: 266 return "Contiguous"; 267 case Array::ContiguousToTail: 268 return "ContiguousToTail"; 269 case Array::ContiguousOutOfBounds: 270 return "ContiguousOutOfBounds"; 271 case Array::ArrayWithContiguous: 272 return "ArrayWithContiguous"; 273 case Array::ArrayWithContiguousToTail: 274 return "ArrayWithContiguousToTail"; 275 case Array::ArrayWithContiguousOutOfBounds: 276 return "ArrayWithContiguousOutOfBounds"; 277 case Array::PossiblyArrayWithContiguous: 278 return "PossiblyArrayWithContiguous"; 279 case Array::PossiblyArrayWithContiguousToTail: 280 return "PossiblyArrayWithContiguousToTail"; 281 case Array::PossiblyArrayWithContiguousOutOfBounds: 282 return "PossiblyArrayWithContiguousOutOfBounds"; 228 283 case Array::ArrayStorage: 229 284 return "ArrayStorage"; … … 250 305 case Array::PossiblyArrayWithArrayStorageOutOfBounds: 251 306 return "PossiblyArrayWithArrayStorageOutOfBounds"; 307 case Array::BlankToContiguous: 308 return "BlankToContiguous"; 252 309 case Array::BlankToArrayStorage: 253 310 return "BlankToArrayStorage"; 254 311 case Array::BlankToSlowPutArrayStorage: 255 312 return "BlankToSlowPutArrayStorage"; 313 case Array::BlankToContiguousOrArrayStorage: 314 return "BlankToContiguousOrArrayStorage"; 315 case Array::ContiguousOrArrayStorage: 316 return "ContiguousOrArrayStorage"; 317 case Array::ArrayWithContiguousOrArrayStorage: 318 return "ArrayWithContiguousOrArrayStorage"; 319 case Array::PossiblyArrayWithContiguousOrArrayStorage: 320 return "PossiblyArrayWithContiguousOrArrayStorage"; 256 321 case Array::Arguments: 257 322 return "Arguments";
Note:
See TracChangeset
for help on using the changeset viewer.