Remove redundancy between CFX_KeyValue and JSGlobalData. Split CFX_Value off of CFX_KeyValue and use it in JSGlobalData. There's one superfluous field, but the re-use of the data type enum is troubling without it. Change-Id: I474bed7b32bfe8937e6849624c9545e4d170959d Reviewed-on: https://pdfium-review.googlesource.com/c/45250 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fxjs/cfx_globaldata.cpp b/fxjs/cfx_globaldata.cpp index db0d125..4038e9d 100644 --- a/fxjs/cfx_globaldata.cpp +++ b/fxjs/cfx_globaldata.cpp
@@ -39,7 +39,7 @@ } void MakeNameTypeString(const ByteString& name, - CFX_KeyValue::DataType eType, + CFX_Value::DataType eType, CFX_BinaryBuf* result) { uint32_t dwNameLen = (uint32_t)name.GetLength(); result->AppendBlock(&dwNameLen, sizeof(uint32_t)); @@ -53,31 +53,31 @@ const CFX_KeyValue& pData, CFX_BinaryBuf* result) { switch (pData.nType) { - case CFX_KeyValue::DataType::NUMBER: { + case CFX_Value::DataType::NUMBER: { MakeNameTypeString(name, pData.nType, result); double dData = pData.dData; result->AppendBlock(&dData, sizeof(double)); return true; } - case CFX_KeyValue::DataType::BOOLEAN: { + case CFX_Value::DataType::BOOLEAN: { MakeNameTypeString(name, pData.nType, result); uint16_t wData = static_cast<uint16_t>(pData.bData); result->AppendBlock(&wData, sizeof(uint16_t)); return true; } - case CFX_KeyValue::DataType::STRING: { + case CFX_Value::DataType::STRING: { MakeNameTypeString(name, pData.nType, result); uint32_t dwDataLen = (uint32_t)pData.sData.GetLength(); result->AppendBlock(&dwDataLen, sizeof(uint32_t)); result->AppendString(pData.sData); return true; } - case CFX_KeyValue::DataType::NULLOBJ: { + case CFX_Value::DataType::NULLOBJ: { MakeNameTypeString(name, pData.nType, result); return true; } // Arrays don't get persisted per JS spec page 484. - case CFX_KeyValue::DataType::OBJECT: + case CFX_Value::DataType::OBJECT: default: break; } @@ -145,13 +145,13 @@ CFX_GlobalData::Element* pData = GetGlobalVariable(sPropName); if (pData) { - pData->data.nType = CFX_KeyValue::DataType::NUMBER; + pData->data.nType = CFX_Value::DataType::NUMBER; pData->data.dData = dData; return; } auto pNewData = pdfium::MakeUnique<CFX_GlobalData::Element>(); pNewData->data.sKey = std::move(sPropName); - pNewData->data.nType = CFX_KeyValue::DataType::NUMBER; + pNewData->data.nType = CFX_Value::DataType::NUMBER; pNewData->data.dData = dData; m_arrayGlobalData.push_back(std::move(pNewData)); } @@ -163,13 +163,13 @@ CFX_GlobalData::Element* pData = GetGlobalVariable(sPropName); if (pData) { - pData->data.nType = CFX_KeyValue::DataType::BOOLEAN; + pData->data.nType = CFX_Value::DataType::BOOLEAN; pData->data.bData = bData; return; } auto pNewData = pdfium::MakeUnique<CFX_GlobalData::Element>(); pNewData->data.sKey = std::move(sPropName); - pNewData->data.nType = CFX_KeyValue::DataType::BOOLEAN; + pNewData->data.nType = CFX_Value::DataType::BOOLEAN; pNewData->data.bData = bData; m_arrayGlobalData.push_back(std::move(pNewData)); } @@ -181,13 +181,13 @@ CFX_GlobalData::Element* pData = GetGlobalVariable(sPropName); if (pData) { - pData->data.nType = CFX_KeyValue::DataType::STRING; + pData->data.nType = CFX_Value::DataType::STRING; pData->data.sData = sData; return; } auto pNewData = pdfium::MakeUnique<CFX_GlobalData::Element>(); pNewData->data.sKey = std::move(sPropName); - pNewData->data.nType = CFX_KeyValue::DataType::STRING; + pNewData->data.nType = CFX_Value::DataType::STRING; pNewData->data.sData = sData; m_arrayGlobalData.push_back(std::move(pNewData)); } @@ -199,13 +199,13 @@ CFX_GlobalData::Element* pData = GetGlobalVariable(sPropName); if (pData) { - pData->data.nType = CFX_KeyValue::DataType::OBJECT; + pData->data.nType = CFX_Value::DataType::OBJECT; pData->data.objData = std::move(array); return; } auto pNewData = pdfium::MakeUnique<CFX_GlobalData::Element>(); pNewData->data.sKey = std::move(sPropName); - pNewData->data.nType = CFX_KeyValue::DataType::OBJECT; + pNewData->data.nType = CFX_Value::DataType::OBJECT; pNewData->data.objData = std::move(array); m_arrayGlobalData.push_back(std::move(pNewData)); } @@ -216,12 +216,12 @@ CFX_GlobalData::Element* pData = GetGlobalVariable(sPropName); if (pData) { - pData->data.nType = CFX_KeyValue::DataType::NULLOBJ; + pData->data.nType = CFX_Value::DataType::NULLOBJ; return; } auto pNewData = pdfium::MakeUnique<CFX_GlobalData::Element>(); pNewData->data.sKey = std::move(sPropName); - pNewData->data.nType = CFX_KeyValue::DataType::NULLOBJ; + pNewData->data.nType = CFX_Value::DataType::NULLOBJ; m_arrayGlobalData.push_back(std::move(pNewData)); } @@ -317,12 +317,12 @@ ByteString sEntry = ByteString(p, dwNameLen); p += sizeof(char) * dwNameLen; - CFX_KeyValue::DataType wDataType = - static_cast<CFX_KeyValue::DataType>(*((uint16_t*)p)); + CFX_Value::DataType wDataType = + static_cast<CFX_Value::DataType>(*((uint16_t*)p)); p += sizeof(uint16_t); switch (wDataType) { - case CFX_KeyValue::DataType::NUMBER: { + case CFX_Value::DataType::NUMBER: { double dData = 0; switch (wVersion) { case 1: { @@ -338,13 +338,13 @@ SetGlobalVariableNumber(sEntry, dData); SetGlobalVariablePersistent(sEntry, true); } break; - case CFX_KeyValue::DataType::BOOLEAN: { + case CFX_Value::DataType::BOOLEAN: { uint16_t wData = *((uint16_t*)p); p += sizeof(uint16_t); SetGlobalVariableBoolean(sEntry, (bool)(wData == 1)); SetGlobalVariablePersistent(sEntry, true); } break; - case CFX_KeyValue::DataType::STRING: { + case CFX_Value::DataType::STRING: { uint32_t dwLength = *((uint32_t*)p); p += sizeof(uint32_t); if (p + dwLength > buffer.end()) @@ -354,11 +354,11 @@ SetGlobalVariablePersistent(sEntry, true); p += sizeof(char) * dwLength; } break; - case CFX_KeyValue::DataType::NULLOBJ: { + case CFX_Value::DataType::NULLOBJ: { SetGlobalVariableNull(sEntry); SetGlobalVariablePersistent(sEntry, true); } break; - case CFX_KeyValue::DataType::OBJECT: + case CFX_Value::DataType::OBJECT: default: // Arrays aren't allowed in these buffers, nor are unrecoginzed tags. return false;
diff --git a/fxjs/cfx_globaldata_unittest.cpp b/fxjs/cfx_globaldata_unittest.cpp index 8f6cbce..1c2e681 100644 --- a/fxjs/cfx_globaldata_unittest.cpp +++ b/fxjs/cfx_globaldata_unittest.cpp
@@ -73,25 +73,25 @@ auto* element = pInstance->GetAt(0); ASSERT_TRUE(element); EXPECT_EQ("double", element->data.sKey); - EXPECT_EQ(CFX_KeyValue::DataType::NUMBER, element->data.nType); + EXPECT_EQ(CFX_Value::DataType::NUMBER, element->data.nType); EXPECT_EQ(2.0, element->data.dData); element = pInstance->GetAt(1); ASSERT_TRUE(element); EXPECT_EQ("string", element->data.sKey); - EXPECT_EQ(CFX_KeyValue::DataType::STRING, element->data.nType); + EXPECT_EQ(CFX_Value::DataType::STRING, element->data.nType); EXPECT_EQ("clams", element->data.sData); element = pInstance->GetAt(2); ASSERT_TRUE(element); EXPECT_EQ("boolean", element->data.sKey); - EXPECT_EQ(CFX_KeyValue::DataType::BOOLEAN, element->data.nType); + EXPECT_EQ(CFX_Value::DataType::BOOLEAN, element->data.nType); EXPECT_EQ(true, element->data.bData); element = pInstance->GetAt(3); ASSERT_TRUE(element); EXPECT_EQ("null", element->data.sKey); - EXPECT_EQ(CFX_KeyValue::DataType::NULLOBJ, element->data.nType); + EXPECT_EQ(CFX_Value::DataType::NULLOBJ, element->data.nType); // Arrays don't get persisted. element = pInstance->GetAt(4); @@ -115,25 +115,25 @@ auto* element = pInstance->GetAt(0); ASSERT_TRUE(element); EXPECT_EQ("double", element->data.sKey); - EXPECT_EQ(CFX_KeyValue::DataType::NUMBER, element->data.nType); + EXPECT_EQ(CFX_Value::DataType::NUMBER, element->data.nType); EXPECT_EQ(2.0, element->data.dData); element = pInstance->GetAt(1); ASSERT_TRUE(element); EXPECT_EQ("string", element->data.sKey); - EXPECT_EQ(CFX_KeyValue::DataType::STRING, element->data.nType); + EXPECT_EQ(CFX_Value::DataType::STRING, element->data.nType); EXPECT_EQ("clams", element->data.sData); element = pInstance->GetAt(2); ASSERT_TRUE(element); EXPECT_EQ("boolean", element->data.sKey); - EXPECT_EQ(CFX_KeyValue::DataType::BOOLEAN, element->data.nType); + EXPECT_EQ(CFX_Value::DataType::BOOLEAN, element->data.nType); EXPECT_EQ(true, element->data.bData); element = pInstance->GetAt(3); ASSERT_TRUE(element); EXPECT_EQ("null", element->data.sKey); - EXPECT_EQ(CFX_KeyValue::DataType::NULLOBJ, element->data.nType); + EXPECT_EQ(CFX_Value::DataType::NULLOBJ, element->data.nType); ASSERT_TRUE(pInstance->Release()); }
diff --git a/fxjs/cfx_keyvalue.cpp b/fxjs/cfx_keyvalue.cpp index 5a4a5fb7..d1c7fae 100644 --- a/fxjs/cfx_keyvalue.cpp +++ b/fxjs/cfx_keyvalue.cpp
@@ -6,6 +6,10 @@ #include "fxjs/cfx_keyvalue.h" +CFX_Value::CFX_Value() = default; + +CFX_Value::~CFX_Value() = default; + CFX_KeyValue::CFX_KeyValue() = default; CFX_KeyValue::~CFX_KeyValue() = default;
diff --git a/fxjs/cfx_keyvalue.h b/fxjs/cfx_keyvalue.h index 8facfb8..59c31cb 100644 --- a/fxjs/cfx_keyvalue.h +++ b/fxjs/cfx_keyvalue.h
@@ -10,7 +10,7 @@ #include "core/fxcrt/fx_string.h" #include "fxjs/cfx_globalarray.h" -class CFX_KeyValue { +class CFX_Value { public: enum class DataType : uint8_t { NUMBER = 0, @@ -20,15 +20,22 @@ NULLOBJ }; - CFX_KeyValue(); - ~CFX_KeyValue(); + CFX_Value(); + ~CFX_Value(); - ByteString sKey; - CFX_KeyValue::DataType nType; + DataType nType = DataType::NULLOBJ; bool bData; double dData; ByteString sData; CFX_GlobalArray objData; }; +class CFX_KeyValue : public CFX_Value { + public: + CFX_KeyValue(); + ~CFX_KeyValue(); + + ByteString sKey; +}; + #endif // FXJS_CFX_KEYVALUE_H_
diff --git a/fxjs/cjs_global.cpp b/fxjs/cjs_global.cpp index fd3a9ac..35619c0 100644 --- a/fxjs/cjs_global.cpp +++ b/fxjs/cjs_global.cpp
@@ -123,17 +123,9 @@ } // namespace -CJS_Global::JSGlobalData::JSGlobalData() - : nType(CFX_KeyValue::DataType::NUMBER), - dData(0), - bData(false), - sData(""), - bPersistent(false), - bDeleted(false) {} +CJS_Global::JSGlobalData::JSGlobalData() = default; -CJS_Global::JSGlobalData::~JSGlobalData() { - pData.Reset(); -} +CJS_Global::JSGlobalData::~JSGlobalData() = default; const JSMethodSpec CJS_Global::MethodSpecs[] = { {"setPersistent", setPersistent_static}}; @@ -256,17 +248,17 @@ return CJS_Result::Success(); switch (pData->nType) { - case CFX_KeyValue::DataType::NUMBER: + case CFX_Value::DataType::NUMBER: return CJS_Result::Success(pRuntime->NewNumber(pData->dData)); - case CFX_KeyValue::DataType::BOOLEAN: + case CFX_Value::DataType::BOOLEAN: return CJS_Result::Success(pRuntime->NewBoolean(pData->bData)); - case CFX_KeyValue::DataType::STRING: + case CFX_Value::DataType::STRING: return CJS_Result::Success(pRuntime->NewString( WideString::FromLocal(pData->sData.AsStringView()).AsStringView())); - case CFX_KeyValue::DataType::OBJECT: + case CFX_Value::DataType::OBJECT: return CJS_Result::Success( v8::Local<v8::Object>::New(pRuntime->GetIsolate(), pData->pData)); - case CFX_KeyValue::DataType::NULLOBJ: + case CFX_Value::DataType::NULLOBJ: return CJS_Result::Success(pRuntime->NewNull()); default: break; @@ -279,27 +271,27 @@ v8::Local<v8::Value> vp) { ByteString sPropName = WideString(propname).ToDefANSI(); if (vp->IsNumber()) { - return SetGlobalVariables(sPropName, CFX_KeyValue::DataType::NUMBER, + return SetGlobalVariables(sPropName, CFX_Value::DataType::NUMBER, pRuntime->ToDouble(vp), false, "", v8::Local<v8::Object>(), false); } if (vp->IsBoolean()) { - return SetGlobalVariables(sPropName, CFX_KeyValue::DataType::BOOLEAN, 0, + return SetGlobalVariables(sPropName, CFX_Value::DataType::BOOLEAN, 0, pRuntime->ToBoolean(vp), "", v8::Local<v8::Object>(), false); } if (vp->IsString()) { - return SetGlobalVariables(sPropName, CFX_KeyValue::DataType::STRING, 0, - false, pRuntime->ToWideString(vp).ToDefANSI(), + return SetGlobalVariables(sPropName, CFX_Value::DataType::STRING, 0, false, + pRuntime->ToWideString(vp).ToDefANSI(), v8::Local<v8::Object>(), false); } if (vp->IsObject()) { - return SetGlobalVariables(sPropName, CFX_KeyValue::DataType::OBJECT, 0, - false, "", pRuntime->ToObject(vp), false); + return SetGlobalVariables(sPropName, CFX_Value::DataType::OBJECT, 0, false, + "", pRuntime->ToObject(vp), false); } if (vp->IsNull()) { - return SetGlobalVariables(sPropName, CFX_KeyValue::DataType::NULLOBJ, 0, - false, "", v8::Local<v8::Object>(), false); + return SetGlobalVariables(sPropName, CFX_Value::DataType::NULLOBJ, 0, false, + "", v8::Local<v8::Object>(), false); } if (vp->IsUndefined()) { DelProperty(pRuntime, propname); @@ -330,41 +322,41 @@ for (int i = 0, sz = m_pGlobalData->GetSize(); i < sz; i++) { CFX_GlobalData::Element* pData = m_pGlobalData->GetAt(i); switch (pData->data.nType) { - case CFX_KeyValue::DataType::NUMBER: - SetGlobalVariables(pData->data.sKey, CFX_KeyValue::DataType::NUMBER, + case CFX_Value::DataType::NUMBER: + SetGlobalVariables(pData->data.sKey, CFX_Value::DataType::NUMBER, pData->data.dData, false, "", v8::Local<v8::Object>(), pData->bPersistent == 1); pRuntime->PutObjectProperty(ToV8Object(), pData->data.sKey.UTF8Decode(), pRuntime->NewNumber(pData->data.dData)); break; - case CFX_KeyValue::DataType::BOOLEAN: - SetGlobalVariables(pData->data.sKey, CFX_KeyValue::DataType::BOOLEAN, 0, + case CFX_Value::DataType::BOOLEAN: + SetGlobalVariables(pData->data.sKey, CFX_Value::DataType::BOOLEAN, 0, pData->data.bData == 1, "", v8::Local<v8::Object>(), pData->bPersistent == 1); pRuntime->PutObjectProperty( ToV8Object(), pData->data.sKey.UTF8Decode(), pRuntime->NewBoolean(pData->data.bData == 1)); break; - case CFX_KeyValue::DataType::STRING: - SetGlobalVariables(pData->data.sKey, CFX_KeyValue::DataType::STRING, 0, + case CFX_Value::DataType::STRING: + SetGlobalVariables(pData->data.sKey, CFX_Value::DataType::STRING, 0, false, pData->data.sData, v8::Local<v8::Object>(), pData->bPersistent == 1); pRuntime->PutObjectProperty( ToV8Object(), pData->data.sKey.UTF8Decode(), pRuntime->NewString(pData->data.sData.UTF8Decode().AsStringView())); break; - case CFX_KeyValue::DataType::OBJECT: { + case CFX_Value::DataType::OBJECT: { v8::Local<v8::Object> pObj = pRuntime->NewObject(); if (!pObj.IsEmpty()) { PutObjectProperty(pObj, &pData->data); - SetGlobalVariables(pData->data.sKey, CFX_KeyValue::DataType::OBJECT, - 0, false, "", pObj, pData->bPersistent == 1); + SetGlobalVariables(pData->data.sKey, CFX_Value::DataType::OBJECT, 0, + false, "", pObj, pData->bPersistent == 1); pRuntime->PutObjectProperty(ToV8Object(), pData->data.sKey.UTF8Decode(), pObj); } } break; - case CFX_KeyValue::DataType::NULLOBJ: - SetGlobalVariables(pData->data.sKey, CFX_KeyValue::DataType::NULLOBJ, 0, + case CFX_Value::DataType::NULLOBJ: + SetGlobalVariables(pData->data.sKey, CFX_Value::DataType::NULLOBJ, 0, false, "", v8::Local<v8::Object>(), pData->bPersistent == 1); pRuntime->PutObjectProperty(ToV8Object(), pData->data.sKey.UTF8Decode(), @@ -383,19 +375,19 @@ continue; } switch (pData->nType) { - case CFX_KeyValue::DataType::NUMBER: + case CFX_Value::DataType::NUMBER: m_pGlobalData->SetGlobalVariableNumber(name, pData->dData); m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); break; - case CFX_KeyValue::DataType::BOOLEAN: + case CFX_Value::DataType::BOOLEAN: m_pGlobalData->SetGlobalVariableBoolean(name, pData->bData); m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); break; - case CFX_KeyValue::DataType::STRING: + case CFX_Value::DataType::STRING: m_pGlobalData->SetGlobalVariableString(name, pData->sData); m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); break; - case CFX_KeyValue::DataType::OBJECT: { + case CFX_Value::DataType::OBJECT: { CFX_GlobalArray array; v8::Local<v8::Object> obj = v8::Local<v8::Object>::New(GetIsolate(), pData->pData); @@ -403,7 +395,7 @@ m_pGlobalData->SetGlobalVariableObject(name, std::move(array)); m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); } break; - case CFX_KeyValue::DataType::NULLOBJ: + case CFX_Value::DataType::NULLOBJ: m_pGlobalData->SetGlobalVariableNull(name); m_pGlobalData->SetGlobalVariablePersistent(name, pData->bPersistent); break; @@ -420,7 +412,7 @@ v8::Local<v8::Value> v = pRuntime->GetObjectProperty(pObj, ws); if (v->IsNumber()) { auto pObjElement = pdfium::MakeUnique<CFX_KeyValue>(); - pObjElement->nType = CFX_KeyValue::DataType::NUMBER; + pObjElement->nType = CFX_Value::DataType::NUMBER; pObjElement->sKey = sKey; pObjElement->dData = pRuntime->ToDouble(v); pArray->Add(std::move(pObjElement)); @@ -428,7 +420,7 @@ } if (v->IsBoolean()) { auto pObjElement = pdfium::MakeUnique<CFX_KeyValue>(); - pObjElement->nType = CFX_KeyValue::DataType::BOOLEAN; + pObjElement->nType = CFX_Value::DataType::BOOLEAN; pObjElement->sKey = sKey; pObjElement->dData = pRuntime->ToBoolean(v); pArray->Add(std::move(pObjElement)); @@ -437,7 +429,7 @@ if (v->IsString()) { ByteString sValue = pRuntime->ToWideString(v).ToDefANSI(); auto pObjElement = pdfium::MakeUnique<CFX_KeyValue>(); - pObjElement->nType = CFX_KeyValue::DataType::STRING; + pObjElement->nType = CFX_Value::DataType::STRING; pObjElement->sKey = sKey; pObjElement->sData = sValue; pArray->Add(std::move(pObjElement)); @@ -445,7 +437,7 @@ } if (v->IsObject()) { auto pObjElement = pdfium::MakeUnique<CFX_KeyValue>(); - pObjElement->nType = CFX_KeyValue::DataType::OBJECT; + pObjElement->nType = CFX_Value::DataType::OBJECT; pObjElement->sKey = sKey; ObjectToArray(pRuntime, pRuntime->ToObject(v), &pObjElement->objData); pArray->Add(std::move(pObjElement)); @@ -453,7 +445,7 @@ } if (v->IsNull()) { auto pObjElement = pdfium::MakeUnique<CFX_KeyValue>(); - pObjElement->nType = CFX_KeyValue::DataType::NULLOBJ; + pObjElement->nType = CFX_Value::DataType::NULLOBJ; pObjElement->sKey = sKey; pArray->Add(std::move(pObjElement)); } @@ -469,20 +461,20 @@ for (int i = 0, sz = pData->objData.Count(); i < sz; i++) { CFX_KeyValue* pObjData = pData->objData.GetAt(i); switch (pObjData->nType) { - case CFX_KeyValue::DataType::NUMBER: + case CFX_Value::DataType::NUMBER: pRuntime->PutObjectProperty(pObj, pObjData->sKey.UTF8Decode(), pRuntime->NewNumber(pObjData->dData)); break; - case CFX_KeyValue::DataType::BOOLEAN: + case CFX_Value::DataType::BOOLEAN: pRuntime->PutObjectProperty(pObj, pObjData->sKey.UTF8Decode(), pRuntime->NewBoolean(pObjData->bData == 1)); break; - case CFX_KeyValue::DataType::STRING: + case CFX_Value::DataType::STRING: pRuntime->PutObjectProperty( pObj, pObjData->sKey.UTF8Decode(), pRuntime->NewString(pObjData->sData.UTF8Decode().AsStringView())); break; - case CFX_KeyValue::DataType::OBJECT: { + case CFX_Value::DataType::OBJECT: { v8::Local<v8::Object> pNewObj = pRuntime->NewObject(); if (!pNewObj.IsEmpty()) { PutObjectProperty(pNewObj, pObjData); @@ -490,7 +482,7 @@ pNewObj); } } break; - case CFX_KeyValue::DataType::NULLOBJ: + case CFX_Value::DataType::NULLOBJ: pRuntime->PutObjectProperty(pObj, pObjData->sKey.UTF8Decode(), pRuntime->NewNull()); break; @@ -503,7 +495,7 @@ } CJS_Result CJS_Global::SetGlobalVariables(const ByteString& propname, - CFX_KeyValue::DataType nType, + CFX_Value::DataType nType, double dData, bool bData, const ByteString& sData, @@ -523,19 +515,19 @@ } pTemp->bDeleted = false; switch (nType) { - case CFX_KeyValue::DataType::NUMBER: + case CFX_Value::DataType::NUMBER: pTemp->dData = dData; break; - case CFX_KeyValue::DataType::BOOLEAN: + case CFX_Value::DataType::BOOLEAN: pTemp->bData = bData; break; - case CFX_KeyValue::DataType::STRING: + case CFX_Value::DataType::STRING: pTemp->sData = sData; break; - case CFX_KeyValue::DataType::OBJECT: + case CFX_Value::DataType::OBJECT: pTemp->pData.Reset(pData->GetIsolate(), pData); break; - case CFX_KeyValue::DataType::NULLOBJ: + case CFX_Value::DataType::NULLOBJ: break; default: return CJS_Result::Failure(JSMessage::kObjectTypeError); @@ -545,28 +537,28 @@ auto pNewData = pdfium::MakeUnique<JSGlobalData>(); switch (nType) { - case CFX_KeyValue::DataType::NUMBER: - pNewData->nType = CFX_KeyValue::DataType::NUMBER; + case CFX_Value::DataType::NUMBER: + pNewData->nType = CFX_Value::DataType::NUMBER; pNewData->dData = dData; pNewData->bPersistent = bDefaultPersistent; break; - case CFX_KeyValue::DataType::BOOLEAN: - pNewData->nType = CFX_KeyValue::DataType::BOOLEAN; + case CFX_Value::DataType::BOOLEAN: + pNewData->nType = CFX_Value::DataType::BOOLEAN; pNewData->bData = bData; pNewData->bPersistent = bDefaultPersistent; break; - case CFX_KeyValue::DataType::STRING: - pNewData->nType = CFX_KeyValue::DataType::STRING; + case CFX_Value::DataType::STRING: + pNewData->nType = CFX_Value::DataType::STRING; pNewData->sData = sData; pNewData->bPersistent = bDefaultPersistent; break; - case CFX_KeyValue::DataType::OBJECT: - pNewData->nType = CFX_KeyValue::DataType::OBJECT; + case CFX_Value::DataType::OBJECT: + pNewData->nType = CFX_Value::DataType::OBJECT; pNewData->pData.Reset(pData->GetIsolate(), pData); pNewData->bPersistent = bDefaultPersistent; break; - case CFX_KeyValue::DataType::NULLOBJ: - pNewData->nType = CFX_KeyValue::DataType::NULLOBJ; + case CFX_Value::DataType::NULLOBJ: + pNewData->nType = CFX_Value::DataType::NULLOBJ; pNewData->bPersistent = bDefaultPersistent; break; default:
diff --git a/fxjs/cjs_global.h b/fxjs/cjs_global.h index bc73153..6491bbf 100644 --- a/fxjs/cjs_global.h +++ b/fxjs/cjs_global.h
@@ -51,17 +51,14 @@ v8::Local<v8::Value> vp); private: - struct JSGlobalData { + struct JSGlobalData : public CFX_Value { + public: JSGlobalData(); ~JSGlobalData(); - CFX_KeyValue::DataType nType; - double dData; - bool bData; - ByteString sData; v8::Global<v8::Object> pData; - bool bPersistent; - bool bDeleted; + bool bPersistent = false; + bool bDeleted = false; }; static int ObjDefnID; @@ -71,7 +68,7 @@ void CommitGlobalPersisitentVariables(CJS_Runtime* pRuntime); void DestroyGlobalPersisitentVariables(); CJS_Result SetGlobalVariables(const ByteString& propname, - CFX_KeyValue::DataType nType, + CFX_Value::DataType nType, double dData, bool bData, const ByteString& sData,