Index: fpdfsdk/src/jsapi/fxjs_v8.cpp |
diff --git a/fpdfsdk/src/jsapi/fxjs_v8.cpp b/fpdfsdk/src/jsapi/fxjs_v8.cpp |
index e0c8938c34b02dbf8021b1fe63271fee479300c1..41d75717ae57961522e5b72d938c1c41a5abb086 100644 |
--- a/fpdfsdk/src/jsapi/fxjs_v8.cpp |
+++ b/fpdfsdk/src/jsapi/fxjs_v8.cpp |
@@ -75,6 +75,28 @@ class CJS_ObjDefintion { |
v8::Global<v8::Object> m_StaticObj; |
}; |
+void* JS_ArrayBufferAllocator::Allocate(size_t length) { |
+ return calloc(1, length); |
+} |
+ |
+void* JS_ArrayBufferAllocator::AllocateUninitialized(size_t length) { |
+ return malloc(length); |
+} |
+ |
+void JS_ArrayBufferAllocator::Free(void* data, size_t length) { |
+ free(data); |
+} |
+ |
+void JS_PrepareIsolate(v8::Isolate* pIsolate) { |
+ if (!pIsolate->GetData(g_embedderDataSlot)) |
+ pIsolate->SetData(g_embedderDataSlot, new CFX_PtrArray()); |
+} |
+ |
+void JS_ResetIsolate(v8::Isolate* pIsolate) { |
+ delete (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
+ pIsolate->SetData(g_embedderDataSlot, nullptr); |
+} |
+ |
int JS_DefineObj(v8::Isolate* pIsolate, |
const wchar_t* sObjName, |
FXJSOBJTYPE eObjType, |
@@ -82,11 +104,9 @@ int JS_DefineObj(v8::Isolate* pIsolate, |
LP_DESTRUCTOR pDestructor) { |
v8::Isolate::Scope isolate_scope(pIsolate); |
v8::HandleScope handle_scope(pIsolate); |
+ |
+ JS_PrepareIsolate(pIsolate); |
CFX_PtrArray* pArray = (CFX_PtrArray*)pIsolate->GetData(g_embedderDataSlot); |
- if (!pArray) { |
- pArray = new CFX_PtrArray(); |
- pIsolate->SetData(g_embedderDataSlot, pArray); |
- } |
CJS_ObjDefintion* pObjDef = new CJS_ObjDefintion(pIsolate, sObjName, eObjType, |
pConstructor, pDestructor); |
pArray->Add(pObjDef); |