Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 341f929750465214f68bb48a20baaaf2e8c9a50f..fcfbd1c6c3a4f08b2cc9e4d96e7620cc33eb2f8b 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -3656,6 +3656,7 @@ MaybeObject* JSObject::DefineGetterSetter(String* name, |
if (is_element) { |
switch (GetElementsKind()) { |
case FAST_ELEMENTS: |
+ case FAST_DOUBLE_ELEMENTS: |
break; |
case EXTERNAL_PIXEL_ELEMENTS: |
case EXTERNAL_BYTE_ELEMENTS: |
@@ -3666,7 +3667,6 @@ MaybeObject* JSObject::DefineGetterSetter(String* name, |
case EXTERNAL_UNSIGNED_INT_ELEMENTS: |
case EXTERNAL_FLOAT_ELEMENTS: |
case EXTERNAL_DOUBLE_ELEMENTS: |
- case FAST_DOUBLE_ELEMENTS: |
// Ignore getters and setters on pixel and external array |
// elements. |
return heap->undefined_value(); |
@@ -3905,6 +3905,7 @@ MaybeObject* JSObject::DefineAccessor(AccessorInfo* info) { |
// Accessors overwrite previous callbacks (cf. with getters/setters). |
switch (GetElementsKind()) { |
case FAST_ELEMENTS: |
+ case FAST_DOUBLE_ELEMENTS: |
break; |
case EXTERNAL_PIXEL_ELEMENTS: |
case EXTERNAL_BYTE_ELEMENTS: |
@@ -3915,7 +3916,6 @@ MaybeObject* JSObject::DefineAccessor(AccessorInfo* info) { |
case EXTERNAL_UNSIGNED_INT_ELEMENTS: |
case EXTERNAL_FLOAT_ELEMENTS: |
case EXTERNAL_DOUBLE_ELEMENTS: |
- case FAST_DOUBLE_ELEMENTS: |
// Ignore getters and setters on pixel and external array |
// elements. |
return isolate->heap()->undefined_value(); |
@@ -4688,6 +4688,9 @@ MaybeObject* FixedArray::AddKeysFromJSArray(JSArray* array) { |
switch (array->GetElementsKind()) { |
case JSObject::FAST_ELEMENTS: |
return UnionOfKeys(FixedArray::cast(array->elements())); |
+ case JSObject::FAST_DOUBLE_ELEMENTS: |
+ UNIMPLEMENTED(); |
+ break; |
case JSObject::DICTIONARY_ELEMENTS: { |
NumberDictionary* dict = array->element_dictionary(); |
int size = dict->NumberOfElements(); |
@@ -4722,7 +4725,6 @@ MaybeObject* FixedArray::AddKeysFromJSArray(JSArray* array) { |
case JSObject::EXTERNAL_FLOAT_ELEMENTS: |
case JSObject::EXTERNAL_DOUBLE_ELEMENTS: |
case JSObject::EXTERNAL_PIXEL_ELEMENTS: |
- case JSObject::FAST_DOUBLE_ELEMENTS: |
break; |
} |
UNREACHABLE(); |
@@ -8038,6 +8040,17 @@ JSObject::LocalElementType JSObject::HasLocalElement(uint32_t index) { |
} |
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 FAST_ELEMENT; |
+ } |
+ break; |
+ } |
case EXTERNAL_PIXEL_ELEMENTS: { |
ExternalPixelArray* pixels = ExternalPixelArray::cast(elements()); |
if (index < static_cast<uint32_t>(pixels->length())) return FAST_ELEMENT; |
@@ -8055,9 +8068,6 @@ JSObject::LocalElementType JSObject::HasLocalElement(uint32_t index) { |
if (index < static_cast<uint32_t>(array->length())) return FAST_ELEMENT; |
break; |
} |
- case FAST_DOUBLE_ELEMENTS: |
- UNREACHABLE(); |
- break; |
case DICTIONARY_ELEMENTS: { |
if (element_dictionary()->FindEntry(index) != |
NumberDictionary::kNotFound) { |