Index: fxjs/fxjs_v8.cpp |
diff --git a/fxjs/fxjs_v8.cpp b/fxjs/fxjs_v8.cpp |
index ebe38fdb7f74878a2ed3557c8255951c3cb5ad09..19197b9ffb4f769142ee03e1aa43640ed3e37a91 100644 |
--- a/fxjs/fxjs_v8.cpp |
+++ b/fxjs/fxjs_v8.cpp |
@@ -38,7 +38,7 @@ class CFXJS_ObjDefinition { |
static CFXJS_ObjDefinition* ForID(v8::Isolate* pIsolate, int id) { |
// Note: GetAt() halts if out-of-range even in release builds. |
- return FXJS_PerIsolateData::Get(pIsolate)->m_ObjectDefnArray[id]; |
+ return FXJS_PerIsolateData::Get(pIsolate)->m_ObjectDefnArray[id].get(); |
} |
CFXJS_ObjDefinition(v8::Isolate* isolate, |
@@ -70,7 +70,7 @@ class CFXJS_ObjDefinition { |
int AssignID() { |
FXJS_PerIsolateData* pData = FXJS_PerIsolateData::Get(m_pIsolate); |
- pData->m_ObjectDefnArray.push_back(this); |
+ pData->m_ObjectDefnArray.emplace_back(this); |
return pData->m_ObjectDefnArray.size() - 1; |
} |
@@ -150,7 +150,7 @@ void V8TemplateMapTraits::Dispose(v8::Isolate* isolate, |
V8TemplateMapTraits::MapType* V8TemplateMapTraits::MapFromWeakCallbackInfo( |
const v8::WeakCallbackInfo<WeakCallbackDataType>& data) { |
V8TemplateMap* pMap = |
- (FXJS_PerIsolateData::Get(data.GetIsolate()))->m_pDynamicObjsMap; |
+ (FXJS_PerIsolateData::Get(data.GetIsolate()))->m_pDynamicObjsMap.get(); |
return pMap ? &pMap->m_map : nullptr; |
} |
@@ -206,7 +206,7 @@ FXJS_PerIsolateData::~FXJS_PerIsolateData() {} |
// static |
void FXJS_PerIsolateData::SetUp(v8::Isolate* pIsolate) { |
if (!pIsolate->GetData(g_embedderDataSlot)) |
- pIsolate->SetData(g_embedderDataSlot, new FXJS_PerIsolateData()); |
+ pIsolate->SetData(g_embedderDataSlot, new FXJS_PerIsolateData(pIsolate)); |
} |
// static |
@@ -215,7 +215,8 @@ FXJS_PerIsolateData* FXJS_PerIsolateData::Get(v8::Isolate* pIsolate) { |
pIsolate->GetData(g_embedderDataSlot)); |
} |
-FXJS_PerIsolateData::FXJS_PerIsolateData() : m_pDynamicObjsMap(nullptr) {} |
+FXJS_PerIsolateData::FXJS_PerIsolateData(v8::Isolate* pIsolate) |
+ : m_pDynamicObjsMap(new V8TemplateMap(pIsolate)) {} |
CFXJS_Engine::CFXJS_Engine() : m_isolate(nullptr) {} |
@@ -380,10 +381,6 @@ void CFXJS_Engine::InitializeEngine() { |
v8::Context::New(m_isolate, nullptr, GetGlobalObjectTemplate(m_isolate)); |
v8::Context::Scope context_scope(v8Context); |
- FXJS_PerIsolateData* pData = FXJS_PerIsolateData::Get(m_isolate); |
- if (!pData) |
- return; |
- pData->CreateDynamicObjsMap(m_isolate); |
v8Context->SetAlignedPointerInEmbedderData(kPerContextDataIndex, this); |
int maxID = CFXJS_ObjDefinition::MaxID(m_isolate); |
@@ -455,12 +452,8 @@ void CFXJS_Engine::ReleaseEngine() { |
if (m_isolate == g_isolate && --g_isolate_ref_count > 0) |
return; |
- pData->ReleaseDynamicObjsMap(); |
- for (int i = 0; i < maxID; ++i) |
- delete CFXJS_ObjDefinition::ForID(m_isolate, i); |
- |
- m_isolate->SetData(g_embedderDataSlot, nullptr); |
delete pData; |
+ m_isolate->SetData(g_embedderDataSlot, nullptr); |
} |
int CFXJS_Engine::Execute(const CFX_WideString& script, FXJSErr* pError) { |