| OLD | NEW | 
|---|
| 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without | 
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are | 
| 4 // met: | 4 // met: | 
| 5 // | 5 // | 
| 6 //     * Redistributions of source code must retain the above copyright | 6 //     * Redistributions of source code must retain the above copyright | 
| 7 //       notice, this list of conditions and the following disclaimer. | 7 //       notice, this list of conditions and the following disclaimer. | 
| 8 //     * Redistributions in binary form must reproduce the above | 8 //     * Redistributions in binary form must reproduce the above | 
| 9 //       copyright notice, this list of conditions and the following | 9 //       copyright notice, this list of conditions and the following | 
| 10 //       disclaimer in the documentation and/or other materials provided | 10 //       disclaimer in the documentation and/or other materials provided | 
| (...skipping 2204 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2215   if (HasFastProperties()) return this; | 2215   if (HasFastProperties()) return this; | 
| 2216   ASSERT(!IsGlobalObject()); | 2216   ASSERT(!IsGlobalObject()); | 
| 2217   return property_dictionary()-> | 2217   return property_dictionary()-> | 
| 2218       TransformPropertiesToFastFor(this, unused_property_fields); | 2218       TransformPropertiesToFastFor(this, unused_property_fields); | 
| 2219 } | 2219 } | 
| 2220 | 2220 | 
| 2221 | 2221 | 
| 2222 Object* JSObject::NormalizeElements() { | 2222 Object* JSObject::NormalizeElements() { | 
| 2223   ASSERT(!HasPixelElements() && !HasExternalArrayElements()); | 2223   ASSERT(!HasPixelElements() && !HasExternalArrayElements()); | 
| 2224   if (HasDictionaryElements()) return this; | 2224   if (HasDictionaryElements()) return this; | 
|  | 2225   ASSERT(map()->has_fast_elements()); | 
|  | 2226 | 
|  | 2227   Object* obj = map()->GetSlowElementsMap(); | 
|  | 2228   if (obj->IsFailure()) return obj; | 
|  | 2229   Map* new_map = Map::cast(obj); | 
| 2225 | 2230 | 
| 2226   // Get number of entries. | 2231   // Get number of entries. | 
| 2227   FixedArray* array = FixedArray::cast(elements()); | 2232   FixedArray* array = FixedArray::cast(elements()); | 
| 2228 | 2233 | 
| 2229   // Compute the effective length. | 2234   // Compute the effective length. | 
| 2230   int length = IsJSArray() ? | 2235   int length = IsJSArray() ? | 
| 2231                Smi::cast(JSArray::cast(this)->length())->value() : | 2236                Smi::cast(JSArray::cast(this)->length())->value() : | 
| 2232                array->length(); | 2237                array->length(); | 
| 2233   Object* obj = NumberDictionary::Allocate(length); | 2238   obj = NumberDictionary::Allocate(length); | 
| 2234   if (obj->IsFailure()) return obj; | 2239   if (obj->IsFailure()) return obj; | 
| 2235   NumberDictionary* dictionary = NumberDictionary::cast(obj); | 2240   NumberDictionary* dictionary = NumberDictionary::cast(obj); | 
| 2236   // Copy entries. | 2241   // Copy entries. | 
| 2237   for (int i = 0; i < length; i++) { | 2242   for (int i = 0; i < length; i++) { | 
| 2238     Object* value = array->get(i); | 2243     Object* value = array->get(i); | 
| 2239     if (!value->IsTheHole()) { | 2244     if (!value->IsTheHole()) { | 
| 2240       PropertyDetails details = PropertyDetails(NONE, NORMAL); | 2245       PropertyDetails details = PropertyDetails(NONE, NORMAL); | 
| 2241       Object* result = dictionary->AddNumberEntry(i, array->get(i), details); | 2246       Object* result = dictionary->AddNumberEntry(i, array->get(i), details); | 
| 2242       if (result->IsFailure()) return result; | 2247       if (result->IsFailure()) return result; | 
| 2243       dictionary = NumberDictionary::cast(result); | 2248       dictionary = NumberDictionary::cast(result); | 
| 2244     } | 2249     } | 
| 2245   } | 2250   } | 
| 2246   // Switch to using the dictionary as the backing storage for elements. | 2251   // Switch to using the dictionary as the backing storage for | 
|  | 2252   // elements. Set the new map first to satify the elements type | 
|  | 2253   // assert in set_elements(). | 
|  | 2254   set_map(new_map); | 
| 2247   set_elements(dictionary); | 2255   set_elements(dictionary); | 
| 2248 | 2256 | 
| 2249   Counters::elements_to_dictionary.Increment(); | 2257   Counters::elements_to_dictionary.Increment(); | 
| 2250 | 2258 | 
| 2251 #ifdef DEBUG | 2259 #ifdef DEBUG | 
| 2252   if (FLAG_trace_normalization) { | 2260   if (FLAG_trace_normalization) { | 
| 2253     PrintF("Object elements have been normalized:\n"); | 2261     PrintF("Object elements have been normalized:\n"); | 
| 2254     Print(); | 2262     Print(); | 
| 2255   } | 2263   } | 
| 2256 #endif | 2264 #endif | 
| (...skipping 3209 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5466   PrintF("\n"); | 5474   PrintF("\n"); | 
| 5467 | 5475 | 
| 5468   PrintF("RelocInfo (size = %d)\n", relocation_size()); | 5476   PrintF("RelocInfo (size = %d)\n", relocation_size()); | 
| 5469   for (RelocIterator it(this); !it.done(); it.next()) | 5477   for (RelocIterator it(this); !it.done(); it.next()) | 
| 5470     it.rinfo()->Print(); | 5478     it.rinfo()->Print(); | 
| 5471   PrintF("\n"); | 5479   PrintF("\n"); | 
| 5472 } | 5480 } | 
| 5473 #endif  // ENABLE_DISASSEMBLER | 5481 #endif  // ENABLE_DISASSEMBLER | 
| 5474 | 5482 | 
| 5475 | 5483 | 
| 5476 void JSObject::SetFastElements(FixedArray* elems) { | 5484 Object* JSObject::SetFastElementsCapacityAndLength(int capacity, int length) { | 
| 5477   // We should never end in here with a pixel or external array. | 5485   // We should never end in here with a pixel or external array. | 
| 5478   ASSERT(!HasPixelElements() && !HasExternalArrayElements()); | 5486   ASSERT(!HasPixelElements() && !HasExternalArrayElements()); | 
| 5479 #ifdef DEBUG | 5487 | 
| 5480   // Check the provided array is filled with the_hole. | 5488   Object* obj = Heap::AllocateFixedArrayWithHoles(capacity); | 
| 5481   uint32_t len = static_cast<uint32_t>(elems->length()); | 5489   if (obj->IsFailure()) return obj; | 
| 5482   for (uint32_t i = 0; i < len; i++) ASSERT(elems->get(i)->IsTheHole()); | 5490   FixedArray* elems = FixedArray::cast(obj); | 
| 5483 #endif | 5491 | 
|  | 5492   obj = map()->GetFastElementsMap(); | 
|  | 5493   if (obj->IsFailure()) return obj; | 
|  | 5494   Map* new_map = Map::cast(obj); | 
|  | 5495 | 
| 5484   AssertNoAllocation no_gc; | 5496   AssertNoAllocation no_gc; | 
| 5485   WriteBarrierMode mode = elems->GetWriteBarrierMode(no_gc); | 5497   WriteBarrierMode mode = elems->GetWriteBarrierMode(no_gc); | 
| 5486   switch (GetElementsKind()) { | 5498   switch (GetElementsKind()) { | 
| 5487     case FAST_ELEMENTS: { | 5499     case FAST_ELEMENTS: { | 
| 5488       FixedArray* old_elements = FixedArray::cast(elements()); | 5500       FixedArray* old_elements = FixedArray::cast(elements()); | 
| 5489       uint32_t old_length = static_cast<uint32_t>(old_elements->length()); | 5501       uint32_t old_length = static_cast<uint32_t>(old_elements->length()); | 
| 5490       // Fill out the new array with this content and array holes. | 5502       // Fill out the new array with this content and array holes. | 
| 5491       for (uint32_t i = 0; i < old_length; i++) { | 5503       for (uint32_t i = 0; i < old_length; i++) { | 
| 5492         elems->set(i, old_elements->get(i), mode); | 5504         elems->set(i, old_elements->get(i), mode); | 
| 5493       } | 5505       } | 
| 5494       break; | 5506       break; | 
| 5495     } | 5507     } | 
| 5496     case DICTIONARY_ELEMENTS: { | 5508     case DICTIONARY_ELEMENTS: { | 
| 5497       NumberDictionary* dictionary = NumberDictionary::cast(elements()); | 5509       NumberDictionary* dictionary = NumberDictionary::cast(elements()); | 
| 5498       for (int i = 0; i < dictionary->Capacity(); i++) { | 5510       for (int i = 0; i < dictionary->Capacity(); i++) { | 
| 5499         Object* key = dictionary->KeyAt(i); | 5511         Object* key = dictionary->KeyAt(i); | 
| 5500         if (key->IsNumber()) { | 5512         if (key->IsNumber()) { | 
| 5501           uint32_t entry = static_cast<uint32_t>(key->Number()); | 5513           uint32_t entry = static_cast<uint32_t>(key->Number()); | 
| 5502           elems->set(entry, dictionary->ValueAt(i), mode); | 5514           elems->set(entry, dictionary->ValueAt(i), mode); | 
| 5503         } | 5515         } | 
| 5504       } | 5516       } | 
| 5505       break; | 5517       break; | 
| 5506     } | 5518     } | 
| 5507     default: | 5519     default: | 
| 5508       UNREACHABLE(); | 5520       UNREACHABLE(); | 
| 5509       break; | 5521       break; | 
| 5510   } | 5522   } | 
|  | 5523 | 
|  | 5524   set_map(new_map); | 
| 5511   set_elements(elems); | 5525   set_elements(elems); | 
|  | 5526 | 
|  | 5527   if (IsJSArray()) { | 
|  | 5528     JSArray::cast(this)->set_length(Smi::FromInt(length)); | 
|  | 5529   } | 
|  | 5530 | 
|  | 5531   return this; | 
| 5512 } | 5532 } | 
| 5513 | 5533 | 
| 5514 | 5534 | 
| 5515 Object* JSObject::SetSlowElements(Object* len) { | 5535 Object* JSObject::SetSlowElements(Object* len) { | 
| 5516   // We should never end in here with a pixel or external array. | 5536   // We should never end in here with a pixel or external array. | 
| 5517   ASSERT(!HasPixelElements() && !HasExternalArrayElements()); | 5537   ASSERT(!HasPixelElements() && !HasExternalArrayElements()); | 
| 5518 | 5538 | 
| 5519   uint32_t new_length = static_cast<uint32_t>(len->Number()); | 5539   uint32_t new_length = static_cast<uint32_t>(len->Number()); | 
| 5520 | 5540 | 
| 5521   switch (GetElementsKind()) { | 5541   switch (GetElementsKind()) { | 
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5588                                             HandleVector<Object>(NULL, 0))); | 5608                                             HandleVector<Object>(NULL, 0))); | 
| 5589 } | 5609 } | 
| 5590 | 5610 | 
| 5591 | 5611 | 
| 5592 Object* JSObject::SetElementsLength(Object* len) { | 5612 Object* JSObject::SetElementsLength(Object* len) { | 
| 5593   // We should never end in here with a pixel or external array. | 5613   // We should never end in here with a pixel or external array. | 
| 5594   ASSERT(AllowsSetElementsLength()); | 5614   ASSERT(AllowsSetElementsLength()); | 
| 5595 | 5615 | 
| 5596   Object* smi_length = len->ToSmi(); | 5616   Object* smi_length = len->ToSmi(); | 
| 5597   if (smi_length->IsSmi()) { | 5617   if (smi_length->IsSmi()) { | 
| 5598     int value = Smi::cast(smi_length)->value(); | 5618     const int value = Smi::cast(smi_length)->value(); | 
| 5599     if (value < 0) return ArrayLengthRangeError(); | 5619     if (value < 0) return ArrayLengthRangeError(); | 
| 5600     switch (GetElementsKind()) { | 5620     switch (GetElementsKind()) { | 
| 5601       case FAST_ELEMENTS: { | 5621       case FAST_ELEMENTS: { | 
| 5602         int old_capacity = FixedArray::cast(elements())->length(); | 5622         int old_capacity = FixedArray::cast(elements())->length(); | 
| 5603         if (value <= old_capacity) { | 5623         if (value <= old_capacity) { | 
| 5604           if (IsJSArray()) { | 5624           if (IsJSArray()) { | 
| 5605             int old_length = FastD2I(JSArray::cast(this)->length()->Number()); | 5625             int old_length = FastD2I(JSArray::cast(this)->length()->Number()); | 
| 5606             // NOTE: We may be able to optimize this by removing the | 5626             // NOTE: We may be able to optimize this by removing the | 
| 5607             // last part of the elements backing storage array and | 5627             // last part of the elements backing storage array and | 
| 5608             // setting the capacity to the new size. | 5628             // setting the capacity to the new size. | 
| 5609             for (int i = value; i < old_length; i++) { | 5629             for (int i = value; i < old_length; i++) { | 
| 5610               FixedArray::cast(elements())->set_the_hole(i); | 5630               FixedArray::cast(elements())->set_the_hole(i); | 
| 5611             } | 5631             } | 
| 5612             JSArray::cast(this)->set_length(Smi::cast(smi_length)); | 5632             JSArray::cast(this)->set_length(Smi::cast(smi_length)); | 
| 5613           } | 5633           } | 
| 5614           return this; | 5634           return this; | 
| 5615         } | 5635         } | 
| 5616         int min = NewElementsCapacity(old_capacity); | 5636         int min = NewElementsCapacity(old_capacity); | 
| 5617         int new_capacity = value > min ? value : min; | 5637         int new_capacity = value > min ? value : min; | 
| 5618         if (new_capacity <= kMaxFastElementsLength || | 5638         if (new_capacity <= kMaxFastElementsLength || | 
| 5619             !ShouldConvertToSlowElements(new_capacity)) { | 5639             !ShouldConvertToSlowElements(new_capacity)) { | 
| 5620           Object* obj = Heap::AllocateFixedArrayWithHoles(new_capacity); | 5640           Object* obj = SetFastElementsCapacityAndLength(new_capacity, value); | 
| 5621           if (obj->IsFailure()) return obj; | 5641           if (obj->IsFailure()) return obj; | 
| 5622           if (IsJSArray()) { |  | 
| 5623             JSArray::cast(this)->set_length(Smi::cast(smi_length)); |  | 
| 5624           } |  | 
| 5625           SetFastElements(FixedArray::cast(obj)); |  | 
| 5626           return this; | 5642           return this; | 
| 5627         } | 5643         } | 
| 5628         break; | 5644         break; | 
| 5629       } | 5645       } | 
| 5630       case DICTIONARY_ELEMENTS: { | 5646       case DICTIONARY_ELEMENTS: { | 
| 5631         if (IsJSArray()) { | 5647         if (IsJSArray()) { | 
| 5632           if (value == 0) { | 5648           if (value == 0) { | 
| 5633             // If the length of a slow array is reset to zero, we clear | 5649             // If the length of a slow array is reset to zero, we clear | 
| 5634             // the array and flush backing storage. This has the added | 5650             // the array and flush backing storage. This has the added | 
| 5635             // benefit that the array returns to fast mode. | 5651             // benefit that the array returns to fast mode. | 
| 5636             initialize_elements(); | 5652             Object* obj = ResetElements(); | 
|  | 5653             if (obj->IsFailure()) return obj; | 
| 5637           } else { | 5654           } else { | 
| 5638             // Remove deleted elements. | 5655             // Remove deleted elements. | 
| 5639             uint32_t old_length = | 5656             uint32_t old_length = | 
| 5640             static_cast<uint32_t>(JSArray::cast(this)->length()->Number()); | 5657             static_cast<uint32_t>(JSArray::cast(this)->length()->Number()); | 
| 5641             element_dictionary()->RemoveNumberEntries(value, old_length); | 5658             element_dictionary()->RemoveNumberEntries(value, old_length); | 
| 5642           } | 5659           } | 
| 5643           JSArray::cast(this)->set_length(Smi::cast(smi_length)); | 5660           JSArray::cast(this)->set_length(Smi::cast(smi_length)); | 
| 5644         } | 5661         } | 
| 5645         return this; | 5662         return this; | 
| 5646       } | 5663       } | 
| (...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 6085     return value; | 6102     return value; | 
| 6086   } | 6103   } | 
| 6087 | 6104 | 
| 6088   // Allow gap in fast case. | 6105   // Allow gap in fast case. | 
| 6089   if ((index - elms_length) < kMaxGap) { | 6106   if ((index - elms_length) < kMaxGap) { | 
| 6090     // Try allocating extra space. | 6107     // Try allocating extra space. | 
| 6091     int new_capacity = NewElementsCapacity(index+1); | 6108     int new_capacity = NewElementsCapacity(index+1); | 
| 6092     if (new_capacity <= kMaxFastElementsLength || | 6109     if (new_capacity <= kMaxFastElementsLength || | 
| 6093         !ShouldConvertToSlowElements(new_capacity)) { | 6110         !ShouldConvertToSlowElements(new_capacity)) { | 
| 6094       ASSERT(static_cast<uint32_t>(new_capacity) > index); | 6111       ASSERT(static_cast<uint32_t>(new_capacity) > index); | 
| 6095       Object* obj = Heap::AllocateFixedArrayWithHoles(new_capacity); | 6112       Object* obj = SetFastElementsCapacityAndLength(new_capacity, index + 1); | 
| 6096       if (obj->IsFailure()) return obj; | 6113       if (obj->IsFailure()) return obj; | 
| 6097       SetFastElements(FixedArray::cast(obj)); |  | 
| 6098       if (IsJSArray()) { |  | 
| 6099         JSArray::cast(this)->set_length(Smi::FromInt(index + 1)); |  | 
| 6100       } |  | 
| 6101       FixedArray::cast(elements())->set(index, value); | 6114       FixedArray::cast(elements())->set(index, value); | 
| 6102       return value; | 6115       return value; | 
| 6103     } | 6116     } | 
| 6104   } | 6117   } | 
| 6105 | 6118 | 
| 6106   // Otherwise default to slow case. | 6119   // Otherwise default to slow case. | 
| 6107   Object* obj = NormalizeElements(); | 6120   Object* obj = NormalizeElements(); | 
| 6108   if (obj->IsFailure()) return obj; | 6121   if (obj->IsFailure()) return obj; | 
| 6109   ASSERT(HasDictionaryElements()); | 6122   ASSERT(HasDictionaryElements()); | 
| 6110   return SetElement(index, value); | 6123   return SetElement(index, value); | 
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 6209         Object* return_value = array->JSArrayUpdateLengthFromIndex(index, | 6222         Object* return_value = array->JSArrayUpdateLengthFromIndex(index, | 
| 6210                                                                    value); | 6223                                                                    value); | 
| 6211         if (return_value->IsFailure()) return return_value; | 6224         if (return_value->IsFailure()) return return_value; | 
| 6212       } | 6225       } | 
| 6213 | 6226 | 
| 6214       // Attempt to put this object back in fast case. | 6227       // Attempt to put this object back in fast case. | 
| 6215       if (ShouldConvertToFastElements()) { | 6228       if (ShouldConvertToFastElements()) { | 
| 6216         uint32_t new_length = 0; | 6229         uint32_t new_length = 0; | 
| 6217         if (IsJSArray()) { | 6230         if (IsJSArray()) { | 
| 6218           CHECK(JSArray::cast(this)->length()->ToArrayIndex(&new_length)); | 6231           CHECK(JSArray::cast(this)->length()->ToArrayIndex(&new_length)); | 
| 6219           JSArray::cast(this)->set_length(Smi::FromInt(new_length)); |  | 
| 6220         } else { | 6232         } else { | 
| 6221           new_length = NumberDictionary::cast(elements())->max_number_key() + 1; | 6233           new_length = NumberDictionary::cast(elements())->max_number_key() + 1; | 
| 6222         } | 6234         } | 
| 6223         Object* obj = Heap::AllocateFixedArrayWithHoles(new_length); | 6235         Object* obj = SetFastElementsCapacityAndLength(new_length, new_length); | 
| 6224         if (obj->IsFailure()) return obj; | 6236         if (obj->IsFailure()) return obj; | 
| 6225         SetFastElements(FixedArray::cast(obj)); |  | 
| 6226 #ifdef DEBUG | 6237 #ifdef DEBUG | 
| 6227         if (FLAG_trace_normalization) { | 6238         if (FLAG_trace_normalization) { | 
| 6228           PrintF("Object elements are fast case again:\n"); | 6239           PrintF("Object elements are fast case again:\n"); | 
| 6229           Print(); | 6240           Print(); | 
| 6230         } | 6241         } | 
| 6231 #endif | 6242 #endif | 
| 6232       } | 6243       } | 
| 6233 | 6244 | 
| 6234       return value; | 6245       return value; | 
| 6235     } | 6246     } | 
| (...skipping 1283 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 7519   if (HasDictionaryElements()) { | 7530   if (HasDictionaryElements()) { | 
| 7520     // Convert to fast elements containing only the existing properties. | 7531     // Convert to fast elements containing only the existing properties. | 
| 7521     // Ordering is irrelevant, since we are going to sort anyway. | 7532     // Ordering is irrelevant, since we are going to sort anyway. | 
| 7522     NumberDictionary* dict = element_dictionary(); | 7533     NumberDictionary* dict = element_dictionary(); | 
| 7523     if (IsJSArray() || dict->requires_slow_elements() || | 7534     if (IsJSArray() || dict->requires_slow_elements() || | 
| 7524         dict->max_number_key() >= limit) { | 7535         dict->max_number_key() >= limit) { | 
| 7525       return PrepareSlowElementsForSort(limit); | 7536       return PrepareSlowElementsForSort(limit); | 
| 7526     } | 7537     } | 
| 7527     // Convert to fast elements. | 7538     // Convert to fast elements. | 
| 7528 | 7539 | 
|  | 7540     Object* obj = map()->GetFastElementsMap(); | 
|  | 7541     if (obj->IsFailure()) return obj; | 
|  | 7542     Map* new_map = Map::cast(obj); | 
|  | 7543 | 
| 7529     PretenureFlag tenure = Heap::InNewSpace(this) ? NOT_TENURED: TENURED; | 7544     PretenureFlag tenure = Heap::InNewSpace(this) ? NOT_TENURED: TENURED; | 
| 7530     Object* new_array = | 7545     Object* new_array = | 
| 7531         Heap::AllocateFixedArray(dict->NumberOfElements(), tenure); | 7546         Heap::AllocateFixedArray(dict->NumberOfElements(), tenure); | 
| 7532     if (new_array->IsFailure()) { | 7547     if (new_array->IsFailure()) return new_array; | 
| 7533       return new_array; |  | 
| 7534     } |  | 
| 7535     FixedArray* fast_elements = FixedArray::cast(new_array); | 7548     FixedArray* fast_elements = FixedArray::cast(new_array); | 
| 7536     dict->CopyValuesTo(fast_elements); | 7549     dict->CopyValuesTo(fast_elements); | 
|  | 7550 | 
|  | 7551     set_map(new_map); | 
| 7537     set_elements(fast_elements); | 7552     set_elements(fast_elements); | 
| 7538   } | 7553   } | 
| 7539   ASSERT(HasFastElements()); | 7554   ASSERT(HasFastElements()); | 
| 7540 | 7555 | 
| 7541   // Collect holes at the end, undefined before that and the rest at the | 7556   // Collect holes at the end, undefined before that and the rest at the | 
| 7542   // start, and return the number of non-hole, non-undefined values. | 7557   // start, and return the number of non-hole, non-undefined values. | 
| 7543 | 7558 | 
| 7544   FixedArray* elements = FixedArray::cast(this->elements()); | 7559   FixedArray* elements = FixedArray::cast(this->elements()); | 
| 7545   uint32_t elements_length = static_cast<uint32_t>(elements->length()); | 7560   uint32_t elements_length = static_cast<uint32_t>(elements->length()); | 
| 7546   if (limit > elements_length) { | 7561   if (limit > elements_length) { | 
| (...skipping 1176 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 8723   if (break_point_objects()->IsUndefined()) return 0; | 8738   if (break_point_objects()->IsUndefined()) return 0; | 
| 8724   // Single beak point. | 8739   // Single beak point. | 
| 8725   if (!break_point_objects()->IsFixedArray()) return 1; | 8740   if (!break_point_objects()->IsFixedArray()) return 1; | 
| 8726   // Multiple break points. | 8741   // Multiple break points. | 
| 8727   return FixedArray::cast(break_point_objects())->length(); | 8742   return FixedArray::cast(break_point_objects())->length(); | 
| 8728 } | 8743 } | 
| 8729 #endif | 8744 #endif | 
| 8730 | 8745 | 
| 8731 | 8746 | 
| 8732 } }  // namespace v8::internal | 8747 } }  // namespace v8::internal | 
| OLD | NEW | 
|---|