Chromium Code Reviews| Index: src/objects.cc |
| diff --git a/src/objects.cc b/src/objects.cc |
| index f25078bb197570faeaa0dfc7205b0efef7e2f03a..8d2392169fe8c7910b722be71107a8f171827409 100644 |
| --- a/src/objects.cc |
| +++ b/src/objects.cc |
| @@ -8142,6 +8142,15 @@ bool JSObject::HasElementWithReceiver(JSReceiver* receiver, uint32_t index) { |
| !FixedArray::cast(elements())->get(index)->IsTheHole()) return true; |
| break; |
| } |
| + case FAST_DOUBLE_ELEMENTS: { |
| + uint32_t length = IsJSArray() ? |
| + static_cast<uint32_t> |
| + (Smi::cast(JSArray::cast(this)->length())->value()) : |
| + static_cast<uint32_t>(FixedDoubleArray::cast(elements())->length()); |
| + if ((index < length) && |
| + !FixedDoubleArray::cast(elements())->is_the_hole(index)) return true; |
| + break; |
| + } |
| case EXTERNAL_PIXEL_ELEMENTS: { |
| ExternalPixelArray* pixels = ExternalPixelArray::cast(elements()); |
| if (index < static_cast<uint32_t>(pixels->length())) { |
| @@ -8163,9 +8172,6 @@ bool JSObject::HasElementWithReceiver(JSReceiver* receiver, uint32_t index) { |
| } |
| break; |
| } |
| - case FAST_DOUBLE_ELEMENTS: |
| - UNREACHABLE(); |
| - break; |
| case DICTIONARY_ELEMENTS: { |
| if (element_dictionary()->FindEntry(index) |
| != NumberDictionary::kNotFound) { |
| @@ -9632,9 +9638,21 @@ int JSObject::GetLocalElementKeys(FixedArray* storage, |
| ASSERT(!storage || storage->length() >= counter); |
| break; |
| } |
| - case FAST_DOUBLE_ELEMENTS: |
| - UNREACHABLE(); |
| + case FAST_DOUBLE_ELEMENTS: { |
|
Mads Ager (chromium)
2011/07/20 10:10:29
Move this to right after FAST_ELEMENTS so the simi
|
| + int length = IsJSArray() ? |
| + Smi::cast(JSArray::cast(this)->length())->value() : |
| + FixedDoubleArray::cast(elements())->length(); |
| + for (int i = 0; i < length; i++) { |
| + if (!FixedDoubleArray::cast(elements())->is_the_hole(i)) { |
| + if (storage != NULL) { |
| + storage->set(counter, Smi::FromInt(i)); |
| + } |
| + counter++; |
| + } |
| + } |
| + ASSERT(!storage || storage->length() >= counter); |
| break; |
| + } |
| case DICTIONARY_ELEMENTS: { |
| if (storage != NULL) { |
| element_dictionary()->CopyKeysTo(storage, |