Index: src/runtime/runtime-array.cc |
diff --git a/src/runtime/runtime-array.cc b/src/runtime/runtime-array.cc |
index b5655db611a5ce34161d45990718872fa7f02916..af2d4c54813104a5e9566293951e9c488822b9fd 100644 |
--- a/src/runtime/runtime-array.cc |
+++ b/src/runtime/runtime-array.cc |
@@ -298,6 +298,7 @@ |
case FAST_SLOPPY_ARGUMENTS_ELEMENTS: |
case SLOW_SLOPPY_ARGUMENTS_ELEMENTS: |
#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ |
+ case EXTERNAL_##TYPE##_ELEMENTS: \ |
case TYPE##_ELEMENTS: |
TYPED_ARRAYS(TYPED_ARRAY_CASE) |
@@ -417,6 +418,7 @@ |
} |
#define TYPED_ARRAY_CASE(Type, type, TYPE, ctype, size) \ |
case TYPE##_ELEMENTS: \ |
+ case EXTERNAL_##TYPE##_ELEMENTS: |
TYPED_ARRAYS(TYPED_ARRAY_CASE) |
#undef TYPED_ARRAY_CASE |
@@ -608,6 +610,15 @@ |
} |
break; |
} |
+ case EXTERNAL_UINT8_CLAMPED_ELEMENTS: { |
+ Handle<ExternalUint8ClampedArray> pixels( |
+ ExternalUint8ClampedArray::cast(receiver->elements())); |
+ for (uint32_t j = 0; j < length; j++) { |
+ Handle<Smi> e(Smi::FromInt(pixels->get_scalar(j)), isolate); |
+ visitor->visit(j, e); |
+ } |
+ break; |
+ } |
case UINT8_CLAMPED_ELEMENTS: { |
Handle<FixedUint8ClampedArray> pixels( |
FixedUint8ClampedArray::cast(receiver->elements())); |
@@ -617,39 +628,79 @@ |
} |
break; |
} |
+ case EXTERNAL_INT8_ELEMENTS: { |
+ IterateTypedArrayElements<ExternalInt8Array, int8_t>( |
+ isolate, receiver, true, true, visitor); |
+ break; |
+ } |
case INT8_ELEMENTS: { |
IterateTypedArrayElements<FixedInt8Array, int8_t>( |
isolate, receiver, true, true, visitor); |
break; |
} |
+ case EXTERNAL_UINT8_ELEMENTS: { |
+ IterateTypedArrayElements<ExternalUint8Array, uint8_t>( |
+ isolate, receiver, true, true, visitor); |
+ break; |
+ } |
case UINT8_ELEMENTS: { |
IterateTypedArrayElements<FixedUint8Array, uint8_t>( |
isolate, receiver, true, true, visitor); |
break; |
} |
+ case EXTERNAL_INT16_ELEMENTS: { |
+ IterateTypedArrayElements<ExternalInt16Array, int16_t>( |
+ isolate, receiver, true, true, visitor); |
+ break; |
+ } |
case INT16_ELEMENTS: { |
IterateTypedArrayElements<FixedInt16Array, int16_t>( |
isolate, receiver, true, true, visitor); |
break; |
} |
+ case EXTERNAL_UINT16_ELEMENTS: { |
+ IterateTypedArrayElements<ExternalUint16Array, uint16_t>( |
+ isolate, receiver, true, true, visitor); |
+ break; |
+ } |
case UINT16_ELEMENTS: { |
IterateTypedArrayElements<FixedUint16Array, uint16_t>( |
isolate, receiver, true, true, visitor); |
break; |
} |
+ case EXTERNAL_INT32_ELEMENTS: { |
+ IterateTypedArrayElements<ExternalInt32Array, int32_t>( |
+ isolate, receiver, true, false, visitor); |
+ break; |
+ } |
case INT32_ELEMENTS: { |
IterateTypedArrayElements<FixedInt32Array, int32_t>( |
isolate, receiver, true, false, visitor); |
break; |
} |
+ case EXTERNAL_UINT32_ELEMENTS: { |
+ IterateTypedArrayElements<ExternalUint32Array, uint32_t>( |
+ isolate, receiver, true, false, visitor); |
+ break; |
+ } |
case UINT32_ELEMENTS: { |
IterateTypedArrayElements<FixedUint32Array, uint32_t>( |
isolate, receiver, true, false, visitor); |
break; |
} |
+ case EXTERNAL_FLOAT32_ELEMENTS: { |
+ IterateTypedArrayElements<ExternalFloat32Array, float>( |
+ isolate, receiver, false, false, visitor); |
+ break; |
+ } |
case FLOAT32_ELEMENTS: { |
IterateTypedArrayElements<FixedFloat32Array, float>( |
isolate, receiver, false, false, visitor); |
+ break; |
+ } |
+ case EXTERNAL_FLOAT64_ELEMENTS: { |
+ IterateTypedArrayElements<ExternalFloat64Array, double>( |
+ isolate, receiver, false, false, visitor); |
break; |
} |
case FLOAT64_ELEMENTS: { |
@@ -1182,7 +1233,8 @@ |
HandleScope scope(isolate); |
DCHECK(args.length() == 1); |
CONVERT_ARG_HANDLE_CHECKED(JSObject, array, 0); |
- RUNTIME_ASSERT(!array->HasFixedTypedArrayElements() && |
+ RUNTIME_ASSERT(!array->HasExternalArrayElements() && |
+ !array->HasFixedTypedArrayElements() && |
!array->IsJSGlobalProxy()); |
JSObject::NormalizeElements(array); |
return *array; |