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