Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(287)

Side by Side Diff: src/api.cc

Issue 1069883002: WIP SharedArrayBuffer implementation (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: update MakeTypeError calls Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/api.h" 5 #include "src/api.h"
6 6
7 #include <string.h> // For memcpy, strlen. 7 #include <string.h> // For memcpy, strlen.
8 #ifdef V8_USE_ADDRESS_SANITIZER 8 #ifdef V8_USE_ADDRESS_SANITIZER
9 #include <sanitizer/asan_interface.h> 9 #include <sanitizer/asan_interface.h>
10 #endif // V8_USE_ADDRESS_SANITIZER 10 #endif // V8_USE_ADDRESS_SANITIZER
(...skipping 2644 matching lines...) Expand 10 before | Expand all | Expand 10 after
2655 return Utils::OpenHandle(this)->IsSymbol(); 2655 return Utils::OpenHandle(this)->IsSymbol();
2656 } 2656 }
2657 2657
2658 2658
2659 bool Value::IsArray() const { 2659 bool Value::IsArray() const {
2660 return Utils::OpenHandle(this)->IsJSArray(); 2660 return Utils::OpenHandle(this)->IsJSArray();
2661 } 2661 }
2662 2662
2663 2663
2664 bool Value::IsArrayBuffer() const { 2664 bool Value::IsArrayBuffer() const {
2665 return Utils::OpenHandle(this)->IsJSArrayBuffer(); 2665 i::Handle<i::Object> obj = Utils::OpenHandle(this);
2666 return obj->IsJSArrayBuffer() && !i::JSArrayBuffer::cast(*obj)->is_shared();
2666 } 2667 }
2667 2668
2668 2669
2669 bool Value::IsArrayBufferView() const { 2670 bool Value::IsArrayBufferView() const {
2670 return Utils::OpenHandle(this)->IsJSArrayBufferView(); 2671 return Utils::OpenHandle(this)->IsJSArrayBufferView();
2671 } 2672 }
2672 2673
2673 2674
2674 bool Value::IsTypedArray() const { 2675 bool Value::IsTypedArray() const {
2675 return Utils::OpenHandle(this)->IsJSTypedArray(); 2676 i::Handle<i::Object> obj = Utils::OpenHandle(this);
2677 return obj->IsJSTypedArray() && !i::JSTypedArray::cast(*obj)->is_shared();
2676 } 2678 }
2677 2679
2678 2680
2679 #define VALUE_IS_TYPED_ARRAY(Type, typeName, TYPE, ctype, size) \ 2681 #define VALUE_IS_TYPED_ARRAY(Type, typeName, TYPE, ctype, size) \
2680 bool Value::Is##Type##Array() const { \ 2682 bool Value::Is##Type##Array() const { \
2681 i::Handle<i::Object> obj = Utils::OpenHandle(this); \ 2683 i::Handle<i::Object> obj = Utils::OpenHandle(this); \
2682 return obj->IsJSTypedArray() && \ 2684 if (!obj->IsJSTypedArray()) return false; \
2683 i::JSTypedArray::cast(*obj)->type() == i::kExternal##Type##Array; \ 2685 i::JSTypedArray* typed_array = i::JSTypedArray::cast(*obj); \
2686 return typed_array->type() == i::kExternal##Type##Array && \
2687 !typed_array->is_shared(); \
2684 } 2688 }
2685 2689
2690
2686 TYPED_ARRAYS(VALUE_IS_TYPED_ARRAY) 2691 TYPED_ARRAYS(VALUE_IS_TYPED_ARRAY)
2687 2692
2688 #undef VALUE_IS_TYPED_ARRAY 2693 #undef VALUE_IS_TYPED_ARRAY
2689 2694
2690 2695
2691 bool Value::IsDataView() const { 2696 bool Value::IsDataView() const {
2692 return Utils::OpenHandle(this)->IsJSDataView(); 2697 return Utils::OpenHandle(this)->IsJSDataView();
2693 } 2698 }
2694 2699
2695 2700
2701 bool Value::IsSharedArrayBuffer() const {
2702 i::Handle<i::Object> obj = Utils::OpenHandle(this);
2703 return obj->IsJSArrayBuffer() && i::JSArrayBuffer::cast(*obj)->is_shared();
2704 }
2705
2706
2707 bool Value::IsSharedTypedArray() const {
2708 i::Handle<i::Object> obj = Utils::OpenHandle(this);
2709 return obj->IsJSTypedArray() && i::JSTypedArray::cast(*obj)->is_shared();
2710 }
2711
2712
2713 #define VALUE_IS_SHARED_TYPED_ARRAY(Type, typeName, TYPE, ctype, size) \
2714 bool Value::IsShared##Type##Array() const { \
2715 i::Handle<i::Object> obj = Utils::OpenHandle(this); \
2716 if (!obj->IsJSTypedArray()) return false; \
2717 i::JSTypedArray* typed_array = i::JSTypedArray::cast(*obj); \
2718 return typed_array->type() == v8::internal::kExternal##Type##Array && \
2719 typed_array->is_shared(); \
2720 }
2721
2722
2723 TYPED_ARRAYS(VALUE_IS_SHARED_TYPED_ARRAY)
2724
2725 #undef VALUE_IS_SHARED_TYPED_ARRAY
2726
2727
2696 bool Value::IsObject() const { 2728 bool Value::IsObject() const {
2697 return Utils::OpenHandle(this)->IsJSObject(); 2729 return Utils::OpenHandle(this)->IsJSObject();
2698 } 2730 }
2699 2731
2700 2732
2701 bool Value::IsNumber() const { 2733 bool Value::IsNumber() const {
2702 return Utils::OpenHandle(this)->IsNumber(); 2734 return Utils::OpenHandle(this)->IsNumber();
2703 } 2735 }
2704 2736
2705 2737
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
3062 3094
3063 void v8::Promise::Resolver::CheckCast(Value* that) { 3095 void v8::Promise::Resolver::CheckCast(Value* that) {
3064 Utils::ApiCheck(that->IsPromise(), 3096 Utils::ApiCheck(that->IsPromise(),
3065 "v8::Promise::Resolver::Cast()", 3097 "v8::Promise::Resolver::Cast()",
3066 "Could not convert to promise resolver"); 3098 "Could not convert to promise resolver");
3067 } 3099 }
3068 3100
3069 3101
3070 void v8::ArrayBuffer::CheckCast(Value* that) { 3102 void v8::ArrayBuffer::CheckCast(Value* that) {
3071 i::Handle<i::Object> obj = Utils::OpenHandle(that); 3103 i::Handle<i::Object> obj = Utils::OpenHandle(that);
3072 Utils::ApiCheck(obj->IsJSArrayBuffer(), 3104 Utils::ApiCheck(
3073 "v8::ArrayBuffer::Cast()", 3105 obj->IsJSArrayBuffer() && !i::JSArrayBuffer::cast(*obj)->is_shared(),
3074 "Could not convert to ArrayBuffer"); 3106 "v8::ArrayBuffer::Cast()", "Could not convert to ArrayBuffer");
3075 } 3107 }
3076 3108
3077 3109
3078 void v8::ArrayBufferView::CheckCast(Value* that) { 3110 void v8::ArrayBufferView::CheckCast(Value* that) {
3079 i::Handle<i::Object> obj = Utils::OpenHandle(that); 3111 i::Handle<i::Object> obj = Utils::OpenHandle(that);
3080 Utils::ApiCheck(obj->IsJSArrayBufferView(), 3112 Utils::ApiCheck(obj->IsJSArrayBufferView(),
3081 "v8::ArrayBufferView::Cast()", 3113 "v8::ArrayBufferView::Cast()",
3082 "Could not convert to ArrayBufferView"); 3114 "Could not convert to ArrayBufferView");
3083 } 3115 }
3084 3116
3085 3117
3086 void v8::TypedArray::CheckCast(Value* that) { 3118 void v8::TypedArray::CheckCast(Value* that) {
3087 i::Handle<i::Object> obj = Utils::OpenHandle(that); 3119 i::Handle<i::Object> obj = Utils::OpenHandle(that);
3088 Utils::ApiCheck(obj->IsJSTypedArray(), 3120 Utils::ApiCheck(
3089 "v8::TypedArray::Cast()", 3121 obj->IsJSTypedArray() && !i::JSTypedArray::cast(*obj)->is_shared(),
3090 "Could not convert to TypedArray"); 3122 "v8::TypedArray::Cast()", "Could not convert to TypedArray");
3091 } 3123 }
3092 3124
3093 3125
3094 #define CHECK_TYPED_ARRAY_CAST(Type, typeName, TYPE, ctype, size) \ 3126 #define CHECK_TYPED_ARRAY_CAST(Type, typeName, TYPE, ctype, size) \
3095 void v8::Type##Array::CheckCast(Value* that) { \ 3127 void v8::Type##Array::CheckCast(Value* that) { \
3096 i::Handle<i::Object> obj = Utils::OpenHandle(that); \ 3128 i::Handle<i::Object> obj = Utils::OpenHandle(that); \
3097 Utils::ApiCheck( \ 3129 Utils::ApiCheck(obj->IsJSTypedArray() && \
3098 obj->IsJSTypedArray() && \ 3130 i::JSTypedArray::cast(*obj)->type() == \
3099 i::JSTypedArray::cast(*obj)->type() == i::kExternal##Type##Array, \ 3131 i::kExternal##Type##Array && \
3100 "v8::" #Type "Array::Cast()", "Could not convert to " #Type "Array"); \ 3132 !i::JSTypedArray::cast(*obj)->is_shared(), \
3133 "v8::" #Type "Array::Cast()", \
3134 "Could not convert to " #Type "Array"); \
3101 } 3135 }
3102 3136
3103 3137
3104 TYPED_ARRAYS(CHECK_TYPED_ARRAY_CAST) 3138 TYPED_ARRAYS(CHECK_TYPED_ARRAY_CAST)
3105 3139
3106 #undef CHECK_TYPED_ARRAY_CAST 3140 #undef CHECK_TYPED_ARRAY_CAST
3107 3141
3108 3142
3109 void v8::DataView::CheckCast(Value* that) { 3143 void v8::DataView::CheckCast(Value* that) {
3110 i::Handle<i::Object> obj = Utils::OpenHandle(that); 3144 i::Handle<i::Object> obj = Utils::OpenHandle(that);
3111 Utils::ApiCheck(obj->IsJSDataView(), 3145 Utils::ApiCheck(obj->IsJSDataView(),
3112 "v8::DataView::Cast()", 3146 "v8::DataView::Cast()",
3113 "Could not convert to DataView"); 3147 "Could not convert to DataView");
3114 } 3148 }
3115 3149
3116 3150
3151 void v8::SharedArrayBuffer::CheckCast(Value* that) {
3152 i::Handle<i::Object> obj = Utils::OpenHandle(that);
3153 Utils::ApiCheck(
3154 obj->IsJSArrayBuffer() && i::JSArrayBuffer::cast(*obj)->is_shared(),
3155 "v8::SharedArrayBuffer::Cast()",
3156 "Could not convert to SharedArrayBuffer");
3157 }
3158
3159
3160 void v8::SharedTypedArray::CheckCast(Value* that) {
3161 i::Handle<i::Object> obj = Utils::OpenHandle(that);
3162 Utils::ApiCheck(
3163 obj->IsJSTypedArray() && i::JSTypedArray::cast(*obj)->is_shared(),
3164 "v8::SharedTypedArray::Cast()", "Could not convert to SharedTypedArray");
3165 }
3166
3167
3168 #define CHECK_SHARED_TYPED_ARRAY_CAST(Type, typeName, TYPE, ctype, size) \
3169 void v8::Shared##Type##Array::CheckCast(Value* that) { \
3170 i::Handle<i::Object> obj = Utils::OpenHandle(that); \
3171 Utils::ApiCheck(obj->IsJSTypedArray() && \
3172 i::JSTypedArray::cast(*obj)->type() == \
3173 i::kExternal##Type##Array && \
3174 i::JSTypedArray::cast(*obj)->is_shared(), \
3175 "v8::Shared" #Type "Array::Cast()", \
3176 "Could not convert to Shared" #Type "Array"); \
3177 }
3178
3179
3180 TYPED_ARRAYS(CHECK_SHARED_TYPED_ARRAY_CAST)
3181
3182 #undef CHECK_SHARED_TYPED_ARRAY_CAST
3183
3184
3117 void v8::Date::CheckCast(v8::Value* that) { 3185 void v8::Date::CheckCast(v8::Value* that) {
3118 i::Handle<i::Object> obj = Utils::OpenHandle(that); 3186 i::Handle<i::Object> obj = Utils::OpenHandle(that);
3119 i::Isolate* isolate = NULL; 3187 i::Isolate* isolate = NULL;
3120 if (obj->IsHeapObject()) isolate = i::HeapObject::cast(*obj)->GetIsolate(); 3188 if (obj->IsHeapObject()) isolate = i::HeapObject::cast(*obj)->GetIsolate();
3121 Utils::ApiCheck(isolate != NULL && 3189 Utils::ApiCheck(isolate != NULL &&
3122 obj->HasSpecificClassOf(isolate->heap()->Date_string()), 3190 obj->HasSpecificClassOf(isolate->heap()->Date_string()),
3123 "v8::Date::Cast()", 3191 "v8::Date::Cast()",
3124 "Could not convert to date"); 3192 "Could not convert to date");
3125 } 3193 }
3126 3194
(...skipping 2173 matching lines...) Expand 10 before | Expand all | Expand 10 after
5300 5368
5301 void v8::V8::SetArrayBufferAllocator( 5369 void v8::V8::SetArrayBufferAllocator(
5302 ArrayBuffer::Allocator* allocator) { 5370 ArrayBuffer::Allocator* allocator) {
5303 if (!Utils::ApiCheck(i::V8::ArrayBufferAllocator() == NULL, 5371 if (!Utils::ApiCheck(i::V8::ArrayBufferAllocator() == NULL,
5304 "v8::V8::SetArrayBufferAllocator", 5372 "v8::V8::SetArrayBufferAllocator",
5305 "ArrayBufferAllocator might only be set once")) 5373 "ArrayBufferAllocator might only be set once"))
5306 return; 5374 return;
5307 i::V8::SetArrayBufferAllocator(allocator); 5375 i::V8::SetArrayBufferAllocator(allocator);
5308 } 5376 }
5309 5377
5378 void v8::V8::SetSharedArrayBufferAllocator(
5379 SharedArrayBuffer::Allocator* allocator) {
5380 if (!Utils::ApiCheck(i::V8::SharedArrayBufferAllocator() == NULL,
5381 "v8::V8::SetSharedArrayBufferAllocator",
5382 "SharedArrayBufferAllocator might only be set once"))
5383 return;
5384 i::V8::SetSharedArrayBufferAllocator(allocator);
5385 }
5386
5310 5387
5311 bool v8::V8::Dispose() { 5388 bool v8::V8::Dispose() {
5312 i::V8::TearDown(); 5389 i::V8::TearDown();
5313 #ifdef V8_USE_EXTERNAL_STARTUP_DATA 5390 #ifdef V8_USE_EXTERNAL_STARTUP_DATA
5314 i::DisposeNatives(); 5391 i::DisposeNatives();
5315 #endif 5392 #endif
5316 return true; 5393 return true;
5317 } 5394 }
5318 5395
5319 5396
(...skipping 952 matching lines...) Expand 10 before | Expand all | Expand 10 after
6272 i::Handle<i::JSArrayBuffer> obj = Utils::OpenHandle(this); 6349 i::Handle<i::JSArrayBuffer> obj = Utils::OpenHandle(this);
6273 return static_cast<size_t>(obj->byte_length()->Number()); 6350 return static_cast<size_t>(obj->byte_length()->Number());
6274 } 6351 }
6275 6352
6276 6353
6277 Local<ArrayBuffer> v8::ArrayBuffer::New(Isolate* isolate, size_t byte_length) { 6354 Local<ArrayBuffer> v8::ArrayBuffer::New(Isolate* isolate, size_t byte_length) {
6278 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); 6355 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
6279 LOG_API(i_isolate, "v8::ArrayBuffer::New(size_t)"); 6356 LOG_API(i_isolate, "v8::ArrayBuffer::New(size_t)");
6280 ENTER_V8(i_isolate); 6357 ENTER_V8(i_isolate);
6281 i::Handle<i::JSArrayBuffer> obj = 6358 i::Handle<i::JSArrayBuffer> obj =
6282 i_isolate->factory()->NewJSArrayBuffer(); 6359 i_isolate->factory()->NewJSArrayBuffer(i::NOT_SHARED);
6283 i::Runtime::SetupArrayBufferAllocatingData(i_isolate, obj, byte_length); 6360 i::Runtime::SetupArrayBufferAllocatingData(i_isolate, obj, byte_length);
6284 return Utils::ToLocal(obj); 6361 return Utils::ToLocal(obj);
6285 } 6362 }
6286 6363
6287 6364
6288 Local<ArrayBuffer> v8::ArrayBuffer::New(Isolate* isolate, void* data, 6365 Local<ArrayBuffer> v8::ArrayBuffer::New(Isolate* isolate, void* data,
6289 size_t byte_length, 6366 size_t byte_length,
6290 ArrayBufferCreationMode mode) { 6367 ArrayBufferCreationMode mode) {
6291 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); 6368 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
6292 LOG_API(i_isolate, "v8::ArrayBuffer::New(void*, size_t)"); 6369 LOG_API(i_isolate, "v8::ArrayBuffer::New(void*, size_t)");
6293 ENTER_V8(i_isolate); 6370 ENTER_V8(i_isolate);
6294 i::Handle<i::JSArrayBuffer> obj = 6371 i::Handle<i::JSArrayBuffer> obj =
6295 i_isolate->factory()->NewJSArrayBuffer(); 6372 i_isolate->factory()->NewJSArrayBuffer(i::NOT_SHARED);
6296 i::Runtime::SetupArrayBuffer(i_isolate, obj, 6373 i::Runtime::SetupArrayBuffer(i_isolate, obj,
6297 mode == ArrayBufferCreationMode::kExternalized, 6374 mode == ArrayBufferCreationMode::kExternalized,
6298 data, byte_length); 6375 data, byte_length);
6299 return Utils::ToLocal(obj); 6376 return Utils::ToLocal(obj);
6300 } 6377 }
6301 6378
6302 6379
6303 Local<ArrayBuffer> v8::ArrayBufferView::Buffer() { 6380 Local<ArrayBuffer> v8::ArrayBufferView::Buffer() {
6304 i::Handle<i::JSArrayBufferView> obj = Utils::OpenHandle(this); 6381 i::Handle<i::JSArrayBufferView> obj = Utils::OpenHandle(this);
6305 i::Handle<i::JSArrayBuffer> buffer; 6382 i::Handle<i::JSArrayBuffer> buffer;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
6383 "v8::" #Type "Array::New(Handle<ArrayBuffer>, size_t, size_t)"); \ 6460 "v8::" #Type "Array::New(Handle<ArrayBuffer>, size_t, size_t)"); \
6384 ENTER_V8(isolate); \ 6461 ENTER_V8(isolate); \
6385 if (!Utils::ApiCheck(length <= static_cast<size_t>(i::Smi::kMaxValue), \ 6462 if (!Utils::ApiCheck(length <= static_cast<size_t>(i::Smi::kMaxValue), \
6386 "v8::" #Type \ 6463 "v8::" #Type \
6387 "Array::New(Handle<ArrayBuffer>, size_t, size_t)", \ 6464 "Array::New(Handle<ArrayBuffer>, size_t, size_t)", \
6388 "length exceeds max allowed value")) { \ 6465 "length exceeds max allowed value")) { \
6389 return Local<Type##Array>(); \ 6466 return Local<Type##Array>(); \
6390 } \ 6467 } \
6391 i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*array_buffer); \ 6468 i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*array_buffer); \
6392 i::Handle<i::JSTypedArray> obj = isolate->factory()->NewJSTypedArray( \ 6469 i::Handle<i::JSTypedArray> obj = isolate->factory()->NewJSTypedArray( \
6393 i::kExternal##Type##Array, buffer, byte_offset, length); \ 6470 i::kExternal##Type##Array, buffer, byte_offset, length, \
6471 i::NOT_SHARED); \
6394 return Utils::ToLocal##Type##Array(obj); \ 6472 return Utils::ToLocal##Type##Array(obj); \
6395 } 6473 }
6396 6474
6397 6475
6398 TYPED_ARRAYS(TYPED_ARRAY_NEW) 6476 TYPED_ARRAYS(TYPED_ARRAY_NEW)
6399 #undef TYPED_ARRAY_NEW 6477 #undef TYPED_ARRAY_NEW
6400 6478
6401 Local<DataView> DataView::New(Handle<ArrayBuffer> array_buffer, 6479 Local<DataView> DataView::New(Handle<ArrayBuffer> array_buffer,
6402 size_t byte_offset, size_t byte_length) { 6480 size_t byte_offset, size_t byte_length) {
6403 i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*array_buffer); 6481 i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*array_buffer);
6404 i::Isolate* isolate = buffer->GetIsolate(); 6482 i::Isolate* isolate = buffer->GetIsolate();
6405 LOG_API(isolate, "v8::DataView::New(void*, size_t, size_t)"); 6483 LOG_API(isolate, "v8::DataView::New(void*, size_t, size_t)");
6406 ENTER_V8(isolate); 6484 ENTER_V8(isolate);
6407 i::Handle<i::JSDataView> obj = 6485 i::Handle<i::JSDataView> obj =
6408 isolate->factory()->NewJSDataView(buffer, byte_offset, byte_length); 6486 isolate->factory()->NewJSDataView(buffer, byte_offset, byte_length);
6409 return Utils::ToLocal(obj); 6487 return Utils::ToLocal(obj);
6410 } 6488 }
6411 6489
6412 6490
6491 bool v8::SharedArrayBuffer::IsExternal() const {
6492 return Utils::OpenHandle(this)->is_external();
6493 }
6494
6495
6496 v8::SharedArrayBuffer::Contents v8::SharedArrayBuffer::Externalize() {
6497 i::Handle<i::JSArrayBuffer> obj = Utils::OpenHandle(this);
6498 Utils::ApiCheck(!obj->is_external(), "v8::SharedArrayBuffer::Externalize",
6499 "SharedArrayBuffer already externalized");
6500 obj->set_is_external(true);
6501 size_t byte_length = static_cast<size_t>(obj->byte_length()->Number());
6502 Contents contents;
6503 contents.data_ = obj->backing_store();
6504 contents.byte_length_ = byte_length;
6505 return contents;
6506 }
6507
6508
6509 size_t v8::SharedArrayBuffer::ByteLength() const {
6510 i::Handle<i::JSArrayBuffer> obj = Utils::OpenHandle(this);
6511 return static_cast<size_t>(obj->byte_length()->Number());
6512 }
6513
6514
6515 Local<SharedArrayBuffer> v8::SharedArrayBuffer::New(Isolate* isolate,
6516 size_t byte_length) {
6517 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
6518 LOG_API(i_isolate, "v8::SharedArrayBuffer::New(size_t)");
6519 ENTER_V8(i_isolate);
6520 i::Handle<i::JSArrayBuffer> obj =
6521 i_isolate->factory()->NewJSArrayBuffer(i::SHARED);
6522 i::Runtime::SetupArrayBufferAllocatingData(i_isolate, obj, byte_length, true);
6523 return Utils::ToLocalShared(obj);
6524 }
6525
6526
6527 Local<SharedArrayBuffer> v8::SharedArrayBuffer::New(Isolate* isolate,
6528 void* data,
6529 size_t byte_length) {
6530 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
6531 LOG_API(i_isolate, "v8::SharedArrayBuffer::New(void*, size_t)");
6532 ENTER_V8(i_isolate);
6533 i::Handle<i::JSArrayBuffer> obj =
6534 i_isolate->factory()->NewJSArrayBuffer(i::SHARED);
6535 i::Runtime::SetupArrayBuffer(i_isolate, obj, true, data, byte_length);
6536 return Utils::ToLocalShared(obj);
6537 }
6538
6539
6540 Local<SharedArrayBuffer> v8::SharedTypedArray::Buffer() {
6541 i::Handle<i::JSTypedArray> obj = Utils::OpenHandle(this);
6542 i::Handle<i::JSArrayBuffer> buffer = i::JSTypedArray::cast(*obj)->GetBuffer();
6543 return Utils::ToLocalShared(buffer);
6544 }
6545
6546
6547 size_t v8::SharedTypedArray::ByteOffset() {
6548 i::Handle<i::JSTypedArray> obj = Utils::OpenHandle(this);
6549 return static_cast<size_t>(obj->byte_offset()->Number());
6550 }
6551
6552
6553 size_t v8::SharedTypedArray::ByteLength() {
6554 i::Handle<i::JSTypedArray> obj = Utils::OpenHandle(this);
6555 return static_cast<size_t>(obj->byte_length()->Number());
6556 }
6557
6558
6559 size_t v8::SharedTypedArray::Length() {
6560 i::Handle<i::JSTypedArray> obj = Utils::OpenHandle(this);
6561 return static_cast<size_t>(obj->length()->Number());
6562 }
6563
6564
6565 #define SHARED_TYPED_ARRAY_NEW(Type, type, TYPE, ctype, size) \
6566 Local<Shared##Type##Array> Shared##Type##Array::New( \
6567 Handle<SharedArrayBuffer> array_buffer, size_t byte_offset, \
6568 size_t length) { \
6569 i::Isolate* isolate = Utils::OpenHandle(*array_buffer)->GetIsolate(); \
6570 LOG_API(isolate, "v8::Shared" #Type \
6571 "Array::New(Handle<SharedArrayBuffer>, size_t, size_t)"); \
6572 ENTER_V8(isolate); \
6573 if (!Utils::ApiCheck( \
6574 length <= static_cast<size_t>(i::Smi::kMaxValue), \
6575 "v8::Shared" #Type \
6576 "Array::New(Handle<SharedArrayBuffer>, size_t, size_t)", \
6577 "length exceeds max allowed value")) { \
6578 return Local<Shared##Type##Array>(); \
6579 } \
6580 i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*array_buffer); \
6581 i::Handle<i::JSTypedArray> obj = isolate->factory()->NewJSTypedArray( \
6582 i::kExternal##Type##Array, buffer, byte_offset, length, i::SHARED); \
6583 return Utils::ToLocalShared##Type##Array(obj); \
6584 }
6585
6586
6587 TYPED_ARRAYS(SHARED_TYPED_ARRAY_NEW)
6588 #undef SHARED_TYPED_ARRAY_NEW
6589
6590
6413 Local<Symbol> v8::Symbol::New(Isolate* isolate, Local<String> name) { 6591 Local<Symbol> v8::Symbol::New(Isolate* isolate, Local<String> name) {
6414 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); 6592 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
6415 LOG_API(i_isolate, "Symbol::New()"); 6593 LOG_API(i_isolate, "Symbol::New()");
6416 ENTER_V8(i_isolate); 6594 ENTER_V8(i_isolate);
6417 i::Handle<i::Symbol> result = i_isolate->factory()->NewSymbol(); 6595 i::Handle<i::Symbol> result = i_isolate->factory()->NewSymbol();
6418 if (!name.IsEmpty()) result->set_name(*Utils::OpenHandle(*name)); 6596 if (!name.IsEmpty()) result->set_name(*Utils::OpenHandle(*name));
6419 return Utils::ToLocal(result); 6597 return Utils::ToLocal(result);
6420 } 6598 }
6421 6599
6422 6600
(...skipping 1588 matching lines...) Expand 10 before | Expand all | Expand 10 after
8011 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); 8189 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate());
8012 Address callback_address = 8190 Address callback_address =
8013 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); 8191 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
8014 VMState<EXTERNAL> state(isolate); 8192 VMState<EXTERNAL> state(isolate);
8015 ExternalCallbackScope call_scope(isolate, callback_address); 8193 ExternalCallbackScope call_scope(isolate, callback_address);
8016 callback(info); 8194 callback(info);
8017 } 8195 }
8018 8196
8019 8197
8020 } } // namespace v8::internal 8198 } } // namespace v8::internal
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698