| Index: src/factory.cc
|
| diff --git a/src/factory.cc b/src/factory.cc
|
| index 96b564f432703ca947395682d493615e26be13b5..302c04cf83fad8b11aaff1562d3f6b2e574b0f1b 100644
|
| --- a/src/factory.cc
|
| +++ b/src/factory.cc
|
| @@ -1710,9 +1710,10 @@ Handle<JSGeneratorObject> Factory::NewJSGeneratorObject(
|
| }
|
|
|
|
|
| -Handle<JSArrayBuffer> Factory::NewJSArrayBuffer() {
|
| +Handle<JSArrayBuffer> Factory::NewJSArrayBuffer(bool is_shared) {
|
| Handle<JSFunction> array_buffer_fun(
|
| - isolate()->native_context()->array_buffer_fun());
|
| + is_shared ? isolate()->native_context()->shared_array_buffer_fun()
|
| + : isolate()->native_context()->array_buffer_fun());
|
| CALL_HEAP_FUNCTION(
|
| isolate(),
|
| isolate()->heap()->AllocateJSObject(*array_buffer_fun),
|
| @@ -1791,6 +1792,23 @@ JSFunction* GetTypedArrayFun(ExternalArrayType type, Isolate* isolate) {
|
| }
|
|
|
|
|
| +JSFunction* GetSharedTypedArrayFun(ExternalArrayType type, Isolate* isolate) {
|
| + Context* native_context = isolate->context()->native_context();
|
| + switch (type) {
|
| +#define SHARED_TYPED_ARRAY_FUN(Type, type, TYPE, ctype, size) \
|
| + case kExternal##Type##Array: \
|
| + return native_context->shared_##type##_array_fun();
|
| +
|
| + TYPED_ARRAYS(SHARED_TYPED_ARRAY_FUN)
|
| +#undef SHARED_TYPED_ARRAY_FUN
|
| +
|
| + default:
|
| + UNREACHABLE();
|
| + return NULL;
|
| + }
|
| +}
|
| +
|
| +
|
| void SetupArrayBufferView(i::Isolate* isolate,
|
| i::Handle<i::JSArrayBufferView> obj,
|
| i::Handle<i::JSArrayBuffer> buffer,
|
| @@ -1822,8 +1840,11 @@ void SetupArrayBufferView(i::Isolate* isolate,
|
| } // namespace
|
|
|
|
|
| -Handle<JSTypedArray> Factory::NewJSTypedArray(ExternalArrayType type) {
|
| - Handle<JSFunction> typed_array_fun_handle(GetTypedArrayFun(type, isolate()));
|
| +Handle<JSTypedArray> Factory::NewJSTypedArray(ExternalArrayType type,
|
| + bool is_shared) {
|
| + Handle<JSFunction> typed_array_fun_handle(
|
| + is_shared ? GetSharedTypedArrayFun(type, isolate())
|
| + : GetTypedArrayFun(type, isolate()));
|
|
|
| CALL_HEAP_FUNCTION(
|
| isolate(),
|
| @@ -1834,9 +1855,9 @@ Handle<JSTypedArray> Factory::NewJSTypedArray(ExternalArrayType type) {
|
|
|
| Handle<JSTypedArray> Factory::NewJSTypedArray(ExternalArrayType type,
|
| Handle<JSArrayBuffer> buffer,
|
| - size_t byte_offset,
|
| - size_t length) {
|
| - Handle<JSTypedArray> obj = NewJSTypedArray(type);
|
| + size_t byte_offset, size_t length,
|
| + bool is_shared) {
|
| + Handle<JSTypedArray> obj = NewJSTypedArray(type, is_shared);
|
|
|
| size_t element_size = GetExternalArrayElementSize(type);
|
| ElementsKind elements_kind = GetExternalArrayElementsKind(type);
|
| @@ -1850,6 +1871,7 @@ Handle<JSTypedArray> Factory::NewJSTypedArray(ExternalArrayType type,
|
|
|
| Handle<Object> length_object = NewNumberFromSize(length);
|
| obj->set_length(*length_object);
|
| + obj->set_is_shared(is_shared);
|
|
|
| Handle<ExternalArray> elements = NewExternalArray(
|
| static_cast<int>(length), type,
|
|
|