| 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;
|
|
|