OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |