diff options
Diffstat (limited to 'deps/v8/src/api.cc')
-rw-r--r-- | deps/v8/src/api.cc | 65 |
1 files changed, 47 insertions, 18 deletions
diff --git a/deps/v8/src/api.cc b/deps/v8/src/api.cc index 09da3ac883..671960a0b7 100644 --- a/deps/v8/src/api.cc +++ b/deps/v8/src/api.cc @@ -8341,41 +8341,70 @@ v8::Local<Value> Isolate::ThrowException(v8::Local<v8::Value> value) { return v8::Undefined(reinterpret_cast<v8::Isolate*>(isolate)); } -void Isolate::AddGCPrologueCallback(GCCallback callback, GCType gc_type) { +void Isolate::AddGCPrologueCallback(GCCallbackWithData callback, void* data, + GCType gc_type) { i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); - isolate->heap()->AddGCPrologueCallback(callback, gc_type); + isolate->heap()->AddGCPrologueCallback(callback, gc_type, data); } - -void Isolate::RemoveGCPrologueCallback(GCCallback callback) { +void Isolate::RemoveGCPrologueCallback(GCCallbackWithData callback, + void* data) { i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); - isolate->heap()->RemoveGCPrologueCallback(callback); + isolate->heap()->RemoveGCPrologueCallback(callback, data); } +void Isolate::AddGCEpilogueCallback(GCCallbackWithData callback, void* data, + GCType gc_type) { + i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); + isolate->heap()->AddGCEpilogueCallback(callback, gc_type, data); +} -void Isolate::AddGCEpilogueCallback(GCCallback callback, GCType gc_type) { +void Isolate::RemoveGCEpilogueCallback(GCCallbackWithData callback, + void* data) { i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); - isolate->heap()->AddGCEpilogueCallback(callback, gc_type); + isolate->heap()->RemoveGCEpilogueCallback(callback, data); } +static void CallGCCallbackWithoutData(Isolate* isolate, GCType type, + GCCallbackFlags flags, void* data) { + reinterpret_cast<Isolate::GCCallback>(data)(isolate, type, flags); +} -void Isolate::RemoveGCEpilogueCallback(GCCallback callback) { - i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); - isolate->heap()->RemoveGCEpilogueCallback(callback); +void Isolate::AddGCPrologueCallback(GCCallback callback, GCType gc_type) { + void* data = reinterpret_cast<void*>(callback); + AddGCPrologueCallback(CallGCCallbackWithoutData, data, gc_type); } +void Isolate::RemoveGCPrologueCallback(GCCallback callback) { + void* data = reinterpret_cast<void*>(callback); + RemoveGCPrologueCallback(CallGCCallbackWithoutData, data); +} -void V8::AddGCPrologueCallback(GCCallback callback, GCType gc_type) { - i::Isolate* isolate = i::Isolate::Current(); - isolate->heap()->AddGCPrologueCallback( - reinterpret_cast<v8::Isolate::GCCallback>(callback), gc_type, false); +void Isolate::AddGCEpilogueCallback(GCCallback callback, GCType gc_type) { + void* data = reinterpret_cast<void*>(callback); + AddGCEpilogueCallback(CallGCCallbackWithoutData, data, gc_type); +} + +void Isolate::RemoveGCEpilogueCallback(GCCallback callback) { + void* data = reinterpret_cast<void*>(callback); + RemoveGCEpilogueCallback(CallGCCallbackWithoutData, data); } +static void CallGCCallbackWithoutIsolate(Isolate* isolate, GCType type, + GCCallbackFlags flags, void* data) { + reinterpret_cast<v8::GCCallback>(data)(type, flags); +} -void V8::AddGCEpilogueCallback(GCCallback callback, GCType gc_type) { - i::Isolate* isolate = i::Isolate::Current(); - isolate->heap()->AddGCEpilogueCallback( - reinterpret_cast<v8::Isolate::GCCallback>(callback), gc_type, false); +void V8::AddGCPrologueCallback(v8::GCCallback callback, GCType gc_type) { + void* data = reinterpret_cast<void*>(callback); + Isolate::GetCurrent()->AddGCPrologueCallback(CallGCCallbackWithoutIsolate, + data, gc_type); +} + +void V8::AddGCEpilogueCallback(v8::GCCallback callback, GCType gc_type) { + void* data = reinterpret_cast<void*>(callback); + Isolate::GetCurrent()->AddGCEpilogueCallback(CallGCCallbackWithoutIsolate, + data, gc_type); } void Isolate::SetEmbedderHeapTracer(EmbedderHeapTracer* tracer) { |