| 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) {
|
|
|