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

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: 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 3030 matching lines...) Expand 10 before | Expand all | Expand 10 after
3041 3041
3042 void v8::Promise::Resolver::CheckCast(Value* that) { 3042 void v8::Promise::Resolver::CheckCast(Value* that) {
3043 Utils::ApiCheck(that->IsPromise(), 3043 Utils::ApiCheck(that->IsPromise(),
3044 "v8::Promise::Resolver::Cast()", 3044 "v8::Promise::Resolver::Cast()",
3045 "Could not convert to promise resolver"); 3045 "Could not convert to promise resolver");
3046 } 3046 }
3047 3047
3048 3048
3049 void v8::ArrayBuffer::CheckCast(Value* that) { 3049 void v8::ArrayBuffer::CheckCast(Value* that) {
3050 i::Handle<i::Object> obj = Utils::OpenHandle(that); 3050 i::Handle<i::Object> obj = Utils::OpenHandle(that);
3051 Utils::ApiCheck(obj->IsJSArrayBuffer(), 3051 Utils::ApiCheck(
3052 "v8::ArrayBuffer::Cast()", 3052 obj->IsJSArrayBuffer() && !i::JSArrayBuffer::cast(*obj)->is_shared(),
3053 "Could not convert to ArrayBuffer"); 3053 "v8::ArrayBuffer::Cast()", "Could not convert to ArrayBuffer");
3054 } 3054 }
3055 3055
3056 3056
3057 void v8::ArrayBufferView::CheckCast(Value* that) { 3057 void v8::ArrayBufferView::CheckCast(Value* that) {
3058 i::Handle<i::Object> obj = Utils::OpenHandle(that); 3058 i::Handle<i::Object> obj = Utils::OpenHandle(that);
3059 Utils::ApiCheck(obj->IsJSArrayBufferView(), 3059 Utils::ApiCheck(obj->IsJSArrayBufferView(),
3060 "v8::ArrayBufferView::Cast()", 3060 "v8::ArrayBufferView::Cast()",
3061 "Could not convert to ArrayBufferView"); 3061 "Could not convert to ArrayBufferView");
3062 } 3062 }
3063 3063
3064 3064
3065 void v8::TypedArray::CheckCast(Value* that) { 3065 void v8::TypedArray::CheckCast(Value* that) {
3066 i::Handle<i::Object> obj = Utils::OpenHandle(that); 3066 i::Handle<i::Object> obj = Utils::OpenHandle(that);
3067 Utils::ApiCheck(obj->IsJSTypedArray(), 3067 Utils::ApiCheck(
3068 "v8::TypedArray::Cast()", 3068 obj->IsJSTypedArray() && !i::JSTypedArray::cast(*obj)->is_shared(),
3069 "Could not convert to TypedArray"); 3069 "v8::TypedArray::Cast()", "Could not convert to TypedArray");
3070 } 3070 }
3071 3071
3072 3072
3073 #define CHECK_TYPED_ARRAY_CAST(Type, typeName, TYPE, ctype, size) \ 3073 #define CHECK_TYPED_ARRAY_CAST(Type, typeName, TYPE, ctype, size) \
3074 void v8::Type##Array::CheckCast(Value* that) { \ 3074 void v8::Type##Array::CheckCast(Value* that) { \
3075 i::Handle<i::Object> obj = Utils::OpenHandle(that); \ 3075 i::Handle<i::Object> obj = Utils::OpenHandle(that); \
3076 Utils::ApiCheck(obj->IsJSTypedArray() && \ 3076 Utils::ApiCheck( \
3077 i::JSTypedArray::cast(*obj)->type() == \ 3077 obj->IsJSTypedArray() && \
3078 kExternal##Type##Array, \ 3078 i::JSTypedArray::cast(*obj)->type() == kExternal##Type##Array && \
3079 "v8::" #Type "Array::Cast()", \ 3079 !i::JSTypedArray::cast(*obj)->is_shared(), \
3080 "Could not convert to " #Type "Array"); \ 3080 "v8::" #Type "Array::Cast()", "Could not convert to " #Type "Array"); \
3081 } 3081 }
3082 3082
3083 3083
3084 TYPED_ARRAYS(CHECK_TYPED_ARRAY_CAST) 3084 TYPED_ARRAYS(CHECK_TYPED_ARRAY_CAST)
3085 3085
3086 #undef CHECK_TYPED_ARRAY_CAST 3086 #undef CHECK_TYPED_ARRAY_CAST
3087 3087
3088 3088
3089 void v8::DataView::CheckCast(Value* that) { 3089 void v8::DataView::CheckCast(Value* that) {
3090 i::Handle<i::Object> obj = Utils::OpenHandle(that); 3090 i::Handle<i::Object> obj = Utils::OpenHandle(that);
3091 Utils::ApiCheck(obj->IsJSDataView(), 3091 Utils::ApiCheck(obj->IsJSDataView(),
3092 "v8::DataView::Cast()", 3092 "v8::DataView::Cast()",
3093 "Could not convert to DataView"); 3093 "Could not convert to DataView");
3094 } 3094 }
3095 3095
3096 3096
3097 void v8::SharedArrayBuffer::CheckCast(Value* that) {
3098 i::Handle<i::Object> obj = Utils::OpenHandle(that);
3099 Utils::ApiCheck(
3100 obj->IsJSArrayBuffer() && i::JSArrayBuffer::cast(*obj)->is_shared(),
3101 "v8::SharedArrayBuffer::Cast()",
3102 "Could not convert to SharedArrayBuffer");
3103 }
3104
3105
3106 void v8::SharedTypedArray::CheckCast(Value* that) {
3107 i::Handle<i::Object> obj = Utils::OpenHandle(that);
3108 Utils::ApiCheck(
3109 obj->IsJSTypedArray() && i::JSTypedArray::cast(*obj)->is_shared(),
3110 "v8::SharedTypedArray::Cast()", "Could not convert to SharedTypedArray");
3111 }
3112
3113
3114 #define CHECK_SHARED_TYPED_ARRAY_CAST(Type, typeName, TYPE, ctype, size) \
3115 void v8::Shared##Type##Array::CheckCast(Value* that) { \
3116 i::Handle<i::Object> obj = Utils::OpenHandle(that); \
3117 Utils::ApiCheck( \
3118 obj->IsJSTypedArray() && \
3119 i::JSTypedArray::cast(*obj)->type() == kExternal##Type##Array && \
3120 i::JSTypedArray::cast(*obj)->is_shared(), \
3121 "v8::Shared" #Type "Array::Cast()", \
3122 "Could not convert to Shared" #Type "Array"); \
3123 }
3124
3125
3126 TYPED_ARRAYS(CHECK_SHARED_TYPED_ARRAY_CAST)
3127
3128 #undef CHECK_SHARED_TYPED_ARRAY_CAST
3129
3130
3097 void v8::Date::CheckCast(v8::Value* that) { 3131 void v8::Date::CheckCast(v8::Value* that) {
3098 i::Handle<i::Object> obj = Utils::OpenHandle(that); 3132 i::Handle<i::Object> obj = Utils::OpenHandle(that);
3099 i::Isolate* isolate = NULL; 3133 i::Isolate* isolate = NULL;
3100 if (obj->IsHeapObject()) isolate = i::HeapObject::cast(*obj)->GetIsolate(); 3134 if (obj->IsHeapObject()) isolate = i::HeapObject::cast(*obj)->GetIsolate();
3101 Utils::ApiCheck(isolate != NULL && 3135 Utils::ApiCheck(isolate != NULL &&
3102 obj->HasSpecificClassOf(isolate->heap()->Date_string()), 3136 obj->HasSpecificClassOf(isolate->heap()->Date_string()),
3103 "v8::Date::Cast()", 3137 "v8::Date::Cast()",
3104 "Could not convert to date"); 3138 "Could not convert to date");
3105 } 3139 }
3106 3140
(...skipping 2314 matching lines...) Expand 10 before | Expand all | Expand 10 after
5421 5455
5422 void v8::V8::SetArrayBufferAllocator( 5456 void v8::V8::SetArrayBufferAllocator(
5423 ArrayBuffer::Allocator* allocator) { 5457 ArrayBuffer::Allocator* allocator) {
5424 if (!Utils::ApiCheck(i::V8::ArrayBufferAllocator() == NULL, 5458 if (!Utils::ApiCheck(i::V8::ArrayBufferAllocator() == NULL,
5425 "v8::V8::SetArrayBufferAllocator", 5459 "v8::V8::SetArrayBufferAllocator",
5426 "ArrayBufferAllocator might only be set once")) 5460 "ArrayBufferAllocator might only be set once"))
5427 return; 5461 return;
5428 i::V8::SetArrayBufferAllocator(allocator); 5462 i::V8::SetArrayBufferAllocator(allocator);
5429 } 5463 }
5430 5464
5465 void v8::V8::SetSharedArrayBufferAllocator(
5466 SharedArrayBuffer::Allocator* allocator) {
5467 if (!Utils::ApiCheck(i::V8::SharedArrayBufferAllocator() == NULL,
5468 "v8::V8::SetSharedArrayBufferAllocator",
5469 "SharedArrayBufferAllocator might only be set once"))
5470 return;
5471 i::V8::SetSharedArrayBufferAllocator(allocator);
5472 }
5473
5431 5474
5432 bool v8::V8::Dispose() { 5475 bool v8::V8::Dispose() {
5433 i::V8::TearDown(); 5476 i::V8::TearDown();
5434 #ifdef V8_USE_EXTERNAL_STARTUP_DATA 5477 #ifdef V8_USE_EXTERNAL_STARTUP_DATA
5435 i::DisposeNatives(); 5478 i::DisposeNatives();
5436 #endif 5479 #endif
5437 return true; 5480 return true;
5438 } 5481 }
5439 5482
5440 5483
(...skipping 940 matching lines...) Expand 10 before | Expand all | Expand 10 after
6381 i::Handle<i::JSArrayBuffer> obj = Utils::OpenHandle(this); 6424 i::Handle<i::JSArrayBuffer> obj = Utils::OpenHandle(this);
6382 return static_cast<size_t>(obj->byte_length()->Number()); 6425 return static_cast<size_t>(obj->byte_length()->Number());
6383 } 6426 }
6384 6427
6385 6428
6386 Local<ArrayBuffer> v8::ArrayBuffer::New(Isolate* isolate, size_t byte_length) { 6429 Local<ArrayBuffer> v8::ArrayBuffer::New(Isolate* isolate, size_t byte_length) {
6387 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); 6430 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
6388 LOG_API(i_isolate, "v8::ArrayBuffer::New(size_t)"); 6431 LOG_API(i_isolate, "v8::ArrayBuffer::New(size_t)");
6389 ENTER_V8(i_isolate); 6432 ENTER_V8(i_isolate);
6390 i::Handle<i::JSArrayBuffer> obj = 6433 i::Handle<i::JSArrayBuffer> obj =
6391 i_isolate->factory()->NewJSArrayBuffer(); 6434 i_isolate->factory()->NewJSArrayBuffer(false);
6392 i::Runtime::SetupArrayBufferAllocatingData(i_isolate, obj, byte_length); 6435 i::Runtime::SetupArrayBufferAllocatingData(i_isolate, obj, byte_length);
6393 return Utils::ToLocal(obj); 6436 return Utils::ToLocal(obj);
6394 } 6437 }
6395 6438
6396 6439
6397 Local<ArrayBuffer> v8::ArrayBuffer::New(Isolate* isolate, void* data, 6440 Local<ArrayBuffer> v8::ArrayBuffer::New(Isolate* isolate, void* data,
6398 size_t byte_length) { 6441 size_t byte_length) {
6399 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); 6442 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
6400 LOG_API(i_isolate, "v8::ArrayBuffer::New(void*, size_t)"); 6443 LOG_API(i_isolate, "v8::ArrayBuffer::New(void*, size_t)");
6401 ENTER_V8(i_isolate); 6444 ENTER_V8(i_isolate);
6402 i::Handle<i::JSArrayBuffer> obj = 6445 i::Handle<i::JSArrayBuffer> obj =
6403 i_isolate->factory()->NewJSArrayBuffer(); 6446 i_isolate->factory()->NewJSArrayBuffer(false);
6404 i::Runtime::SetupArrayBuffer(i_isolate, obj, true, data, byte_length); 6447 i::Runtime::SetupArrayBuffer(i_isolate, obj, true, data, byte_length);
6405 return Utils::ToLocal(obj); 6448 return Utils::ToLocal(obj);
6406 } 6449 }
6407 6450
6408 6451
6409 Local<ArrayBuffer> v8::ArrayBufferView::Buffer() { 6452 Local<ArrayBuffer> v8::ArrayBufferView::Buffer() {
6410 i::Handle<i::JSArrayBufferView> obj = Utils::OpenHandle(this); 6453 i::Handle<i::JSArrayBufferView> obj = Utils::OpenHandle(this);
6411 i::Handle<i::JSArrayBuffer> buffer; 6454 i::Handle<i::JSArrayBuffer> buffer;
6412 if (obj->IsJSDataView()) { 6455 if (obj->IsJSDataView()) {
6413 i::Handle<i::JSDataView> data_view(i::JSDataView::cast(*obj)); 6456 i::Handle<i::JSDataView> data_view(i::JSDataView::cast(*obj));
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
6480 "v8::" #Type "Array::New(Handle<ArrayBuffer>, size_t, size_t)"); \ 6523 "v8::" #Type "Array::New(Handle<ArrayBuffer>, size_t, size_t)"); \
6481 ENTER_V8(isolate); \ 6524 ENTER_V8(isolate); \
6482 if (!Utils::ApiCheck(length <= static_cast<size_t>(i::Smi::kMaxValue), \ 6525 if (!Utils::ApiCheck(length <= static_cast<size_t>(i::Smi::kMaxValue), \
6483 "v8::" #Type \ 6526 "v8::" #Type \
6484 "Array::New(Handle<ArrayBuffer>, size_t, size_t)", \ 6527 "Array::New(Handle<ArrayBuffer>, size_t, size_t)", \
6485 "length exceeds max allowed value")) { \ 6528 "length exceeds max allowed value")) { \
6486 return Local<Type##Array>(); \ 6529 return Local<Type##Array>(); \
6487 } \ 6530 } \
6488 i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*array_buffer); \ 6531 i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*array_buffer); \
6489 i::Handle<i::JSTypedArray> obj = isolate->factory()->NewJSTypedArray( \ 6532 i::Handle<i::JSTypedArray> obj = isolate->factory()->NewJSTypedArray( \
6490 v8::kExternal##Type##Array, buffer, byte_offset, length); \ 6533 v8::kExternal##Type##Array, buffer, byte_offset, length, false); \
6491 return Utils::ToLocal##Type##Array(obj); \ 6534 return Utils::ToLocal##Type##Array(obj); \
6492 } 6535 }
6493 6536
6494 6537
6495 TYPED_ARRAYS(TYPED_ARRAY_NEW) 6538 TYPED_ARRAYS(TYPED_ARRAY_NEW)
6496 #undef TYPED_ARRAY_NEW 6539 #undef TYPED_ARRAY_NEW
6497 6540
6498 Local<DataView> DataView::New(Handle<ArrayBuffer> array_buffer, 6541 Local<DataView> DataView::New(Handle<ArrayBuffer> array_buffer,
6499 size_t byte_offset, size_t byte_length) { 6542 size_t byte_offset, size_t byte_length) {
6500 i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*array_buffer); 6543 i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*array_buffer);
6501 i::Isolate* isolate = buffer->GetIsolate(); 6544 i::Isolate* isolate = buffer->GetIsolate();
6502 LOG_API(isolate, "v8::DataView::New(void*, size_t, size_t)"); 6545 LOG_API(isolate, "v8::DataView::New(void*, size_t, size_t)");
6503 ENTER_V8(isolate); 6546 ENTER_V8(isolate);
6504 i::Handle<i::JSDataView> obj = 6547 i::Handle<i::JSDataView> obj =
6505 isolate->factory()->NewJSDataView(buffer, byte_offset, byte_length); 6548 isolate->factory()->NewJSDataView(buffer, byte_offset, byte_length);
6506 return Utils::ToLocal(obj); 6549 return Utils::ToLocal(obj);
6507 } 6550 }
6508 6551
6509 6552
6553 bool v8::SharedArrayBuffer::IsExternal() const {
6554 return Utils::OpenHandle(this)->is_external();
6555 }
6556
6557
6558 v8::SharedArrayBuffer::Contents v8::SharedArrayBuffer::Externalize() {
6559 i::Handle<i::JSArrayBuffer> obj = Utils::OpenHandle(this);
6560 Utils::ApiCheck(!obj->is_external(), "v8::SharedArrayBuffer::Externalize",
6561 "SharedArrayBuffer already externalized");
6562 obj->set_is_external(true);
6563 size_t byte_length = static_cast<size_t>(obj->byte_length()->Number());
6564 Contents contents;
6565 contents.data_ = obj->backing_store();
6566 contents.byte_length_ = byte_length;
6567 return contents;
6568 }
6569
6570
6571 size_t v8::SharedArrayBuffer::ByteLength() const {
6572 i::Handle<i::JSArrayBuffer> obj = Utils::OpenHandle(this);
6573 return static_cast<size_t>(obj->byte_length()->Number());
6574 }
6575
6576
6577 Local<SharedArrayBuffer> v8::SharedArrayBuffer::New(Isolate* isolate,
6578 size_t byte_length) {
6579 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
6580 LOG_API(i_isolate, "v8::SharedArrayBuffer::New(size_t)");
6581 ENTER_V8(i_isolate);
6582 i::Handle<i::JSArrayBuffer> obj =
6583 i_isolate->factory()->NewJSArrayBuffer(true);
6584 i::Runtime::SetupArrayBufferAllocatingData(i_isolate, obj, byte_length, true,
6585 true);
6586 return Utils::ToLocalShared(obj);
6587 }
6588
6589
6590 Local<SharedArrayBuffer> v8::SharedArrayBuffer::New(Isolate* isolate,
6591 void* data,
6592 size_t byte_length) {
6593 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
6594 LOG_API(i_isolate, "v8::SharedArrayBuffer::New(void*, size_t)");
6595 ENTER_V8(i_isolate);
6596 i::Handle<i::JSArrayBuffer> obj =
6597 i_isolate->factory()->NewJSArrayBuffer(true);
6598 i::Runtime::SetupArrayBuffer(i_isolate, obj, true, data, byte_length, true);
6599 return Utils::ToLocalShared(obj);
6600 }
6601
6602
6603 Local<SharedArrayBuffer> v8::SharedTypedArray::Buffer() {
6604 i::Handle<i::JSTypedArray> obj = Utils::OpenHandle(this);
6605 i::Handle<i::JSArrayBuffer> buffer = i::JSTypedArray::cast(*obj)->GetBuffer();
6606 return Utils::ToLocalShared(buffer);
6607 }
6608
6609
6610 size_t v8::SharedTypedArray::ByteOffset() {
6611 i::Handle<i::JSTypedArray> obj = Utils::OpenHandle(this);
6612 return static_cast<size_t>(obj->byte_offset()->Number());
6613 }
6614
6615
6616 size_t v8::SharedTypedArray::ByteLength() {
6617 i::Handle<i::JSTypedArray> obj = Utils::OpenHandle(this);
6618 return static_cast<size_t>(obj->byte_length()->Number());
6619 }
6620
6621
6622 size_t v8::SharedTypedArray::Length() {
6623 i::Handle<i::JSTypedArray> obj = Utils::OpenHandle(this);
6624 return static_cast<size_t>(obj->length()->Number());
6625 }
6626
6627
6628 #define SHARED_TYPED_ARRAY_NEW(Type, type, TYPE, ctype, size) \
6629 Local<Shared##Type##Array> Shared##Type##Array::New( \
6630 Handle<SharedArrayBuffer> array_buffer, size_t byte_offset, \
6631 size_t length) { \
6632 i::Isolate* isolate = Utils::OpenHandle(*array_buffer)->GetIsolate(); \
6633 LOG_API(isolate, "v8::Shared" #Type \
6634 "Array::New(Handle<SharedArrayBuffer>, size_t, size_t)"); \
6635 ENTER_V8(isolate); \
6636 if (!Utils::ApiCheck( \
6637 length <= static_cast<size_t>(i::Smi::kMaxValue), \
6638 "v8::Shared" #Type \
6639 "Array::New(Handle<SharedArrayBuffer>, size_t, size_t)", \
6640 "length exceeds max allowed value")) { \
6641 return Local<Shared##Type##Array>(); \
6642 } \
6643 i::Handle<i::JSArrayBuffer> buffer = Utils::OpenHandle(*array_buffer); \
6644 i::Handle<i::JSTypedArray> obj = isolate->factory()->NewJSTypedArray( \
6645 v8::kExternal##Type##Array, buffer, byte_offset, length, true); \
6646 return Utils::ToLocalShared##Type##Array(obj); \
6647 }
6648
6649
6650 TYPED_ARRAYS(SHARED_TYPED_ARRAY_NEW)
6651 #undef SHARED_TYPED_ARRAY_NEW
6652
6653
6510 Local<Symbol> v8::Symbol::New(Isolate* isolate, Local<String> name) { 6654 Local<Symbol> v8::Symbol::New(Isolate* isolate, Local<String> name) {
6511 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); 6655 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
6512 LOG_API(i_isolate, "Symbol::New()"); 6656 LOG_API(i_isolate, "Symbol::New()");
6513 ENTER_V8(i_isolate); 6657 ENTER_V8(i_isolate);
6514 i::Handle<i::Symbol> result = i_isolate->factory()->NewSymbol(); 6658 i::Handle<i::Symbol> result = i_isolate->factory()->NewSymbol();
6515 if (!name.IsEmpty()) result->set_name(*Utils::OpenHandle(*name)); 6659 if (!name.IsEmpty()) result->set_name(*Utils::OpenHandle(*name));
6516 return Utils::ToLocal(result); 6660 return Utils::ToLocal(result);
6517 } 6661 }
6518 6662
6519 6663
(...skipping 1563 matching lines...) Expand 10 before | Expand all | Expand 10 after
8083 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); 8227 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate());
8084 Address callback_address = 8228 Address callback_address =
8085 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); 8229 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
8086 VMState<EXTERNAL> state(isolate); 8230 VMState<EXTERNAL> state(isolate);
8087 ExternalCallbackScope call_scope(isolate, callback_address); 8231 ExternalCallbackScope call_scope(isolate, callback_address);
8088 callback(info); 8232 callback(info);
8089 } 8233 }
8090 8234
8091 8235
8092 } } // namespace v8::internal 8236 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/api.h ('k') | src/arraybuffer.js » ('j') | src/bootstrapper.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698