Index: xfa/fxfa/fm2js/xfa_fm2jscontext.cpp |
diff --git a/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp b/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp |
index 53ccf0b5da92628015a88d964ec9547e87367db9..fded5eed857223edcdc6a3ee8fa1bc7b28f69d50 100644 |
--- a/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp |
+++ b/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp |
@@ -5518,143 +5518,142 @@ void CXFA_FM2JSContext::dot_accessor(CFXJSE_Value* pThis, |
CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
int32_t argc = args.GetLength(); |
- if ((argc == 4) || (argc == 5)) { |
- FX_BOOL bIsStar = TRUE; |
- std::unique_ptr<CFXJSE_Value> argAccessor = args.GetValue(0); |
- CFX_ByteString bsAccessorName = args.GetUTF8String(1); |
- CFX_ByteString szName = args.GetUTF8String(2); |
- int32_t iIndexFlags = args.GetInt32(3); |
- int32_t iIndexValue = 0; |
- if (argc > 4) { |
- bIsStar = FALSE; |
- std::unique_ptr<CFXJSE_Value> argIndex = args.GetValue(4); |
- iIndexValue = ValueToInteger(pThis, argIndex.get()); |
- } |
- CFX_ByteString szSomExp; |
- GenerateSomExpression(szName.AsStringC(), iIndexFlags, iIndexValue, bIsStar, |
- szSomExp); |
- if (argAccessor->IsArray()) { |
- std::unique_ptr<CFXJSE_Value> pLengthValue(new CFXJSE_Value(pIsolate)); |
- argAccessor->GetObjectProperty("length", pLengthValue.get()); |
- int32_t iLength = pLengthValue->ToInteger(); |
- int32_t iCounter = 0; |
- CFXJSE_Value*** hResolveValues = FX_Alloc(CFXJSE_Value**, iLength - 2); |
- int32_t* iSizes = FX_Alloc(int32_t, iLength - 2); |
- for (int32_t i = 0; i < (iLength - 2); i++) { |
- iSizes[i] = 0; |
- } |
- std::unique_ptr<CFXJSE_Value> hJSObjValue(new CFXJSE_Value(pIsolate)); |
- FX_BOOL bAttribute = FALSE; |
- for (int32_t i = 2; i < iLength; i++) { |
- argAccessor->GetObjectPropertyByIdx(i, hJSObjValue.get()); |
- XFA_RESOLVENODE_RS resoveNodeRS; |
- int32_t iRet = |
- ResolveObjects(pThis, hJSObjValue.get(), szSomExp.AsStringC(), |
- resoveNodeRS, TRUE, szName.IsEmpty()); |
- if (iRet > 0) { |
- ParseResolveResult(pThis, resoveNodeRS, hJSObjValue.get(), |
- hResolveValues[i - 2], iSizes[i - 2], bAttribute); |
- iCounter += iSizes[i - 2]; |
- } |
- } |
- if (iCounter > 0) { |
- CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iCounter + 2); |
- for (int32_t i = 0; i < (iCounter + 2); i++) |
- rgValues[i] = new CFXJSE_Value(pIsolate); |
- |
- rgValues[0]->SetInteger(1); |
- if (bAttribute) { |
- rgValues[1]->SetString(szName.AsStringC()); |
- } else { |
- rgValues[1]->SetNull(); |
- } |
- int32_t iIndex = 2; |
- for (int32_t i = 0; i < iLength - 2; i++) { |
- for (int32_t j = 0; j < iSizes[i]; j++) { |
- rgValues[iIndex]->Assign(hResolveValues[i][j]); |
- iIndex++; |
- } |
- } |
- args.GetReturnValue()->SetArray(iCounter + 2, rgValues); |
- for (int32_t i = 0; i < (iCounter + 2); i++) |
- delete rgValues[i]; |
+ if (argc < 4 || argc > 5) { |
+ pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
+ return; |
+ } |
- FX_Free(rgValues); |
- } else { |
- CFX_WideString wsPropertyName = |
- CFX_WideString::FromUTF8(szName.AsStringC()); |
- CFX_WideString wsSomExpression = |
- CFX_WideString::FromUTF8(szSomExp.AsStringC()); |
- pContext->ThrowException(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, |
- wsPropertyName.c_str(), |
- wsSomExpression.c_str()); |
- } |
- for (int32_t i = 0; i < iLength - 2; i++) { |
- for (int32_t j = 0; j < iSizes[i]; j++) |
- delete hResolveValues[i][j]; |
+ bool bIsStar = true; |
+ int32_t iIndexValue = 0; |
+ if (argc > 4) { |
+ bIsStar = false; |
+ iIndexValue = ValueToInteger(pThis, args.GetValue(4).get()); |
+ } |
+ |
+ CFX_ByteString szName = args.GetUTF8String(2); |
+ CFX_ByteString szSomExp; |
+ GenerateSomExpression(szName.AsStringC(), args.GetInt32(3), iIndexValue, |
+ bIsStar, szSomExp); |
+ |
+ std::unique_ptr<CFXJSE_Value> argAccessor = args.GetValue(0); |
+ if (argAccessor->IsArray()) { |
+ std::unique_ptr<CFXJSE_Value> pLengthValue(new CFXJSE_Value(pIsolate)); |
+ argAccessor->GetObjectProperty("length", pLengthValue.get()); |
+ int32_t iLength = pLengthValue->ToInteger(); |
+ CFXJSE_Value*** hResolveValues = FX_Alloc(CFXJSE_Value**, iLength - 2); |
+ int32_t* iSizes = FX_Alloc(int32_t, iLength - 2); |
+ for (int32_t i = 0; i < (iLength - 2); i++) |
+ iSizes[i] = 0; |
+ |
+ std::unique_ptr<CFXJSE_Value> hJSObjValue(new CFXJSE_Value(pIsolate)); |
+ FX_BOOL bAttribute = FALSE; |
+ int32_t iCounter = 0; |
+ for (int32_t i = 2; i < iLength; i++) { |
+ argAccessor->GetObjectPropertyByIdx(i, hJSObjValue.get()); |
- if (iSizes[i] > 0) { |
- FX_Free(hResolveValues[i]); |
- } |
- } |
- FX_Free(hResolveValues); |
- FX_Free(iSizes); |
- } else { |
XFA_RESOLVENODE_RS resoveNodeRS; |
- int32_t iRet = 0; |
- if (argAccessor->IsObject() || |
- (argAccessor->IsNull() && bsAccessorName.IsEmpty())) { |
- iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(), |
- resoveNodeRS, TRUE, szName.IsEmpty()); |
- } else if (!argAccessor->IsObject() && !bsAccessorName.IsEmpty()) { |
- FX_BOOL bGetObject = GetObjectByName(pThis, argAccessor.get(), |
- bsAccessorName.AsStringC()); |
- if (bGetObject) { |
- iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(), |
- resoveNodeRS, TRUE, szName.IsEmpty()); |
- } |
+ if (ResolveObjects(pThis, hJSObjValue.get(), szSomExp.AsStringC(), |
+ resoveNodeRS, TRUE, szName.IsEmpty()) > 0) { |
+ ParseResolveResult(pThis, resoveNodeRS, hJSObjValue.get(), |
+ hResolveValues[i - 2], iSizes[i - 2], bAttribute); |
+ iCounter += iSizes[i - 2]; |
} |
- if (iRet > 0) { |
- CFXJSE_Value** hResolveValues; |
- int32_t iSize = 0; |
- FX_BOOL bAttribute = FALSE; |
- ParseResolveResult(pThis, resoveNodeRS, argAccessor.get(), |
- hResolveValues, iSize, bAttribute); |
- CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iSize + 2); |
- for (int32_t i = 0; i < (iSize + 2); i++) |
- rgValues[i] = new CFXJSE_Value(pIsolate); |
- |
- rgValues[0]->SetInteger(1); |
- if (bAttribute) { |
- rgValues[1]->SetString(szName.AsStringC()); |
- } else { |
- rgValues[1]->SetNull(); |
- } |
- for (int32_t i = 0; i < iSize; i++) { |
- rgValues[i + 2]->Assign(hResolveValues[i]); |
- } |
- args.GetReturnValue()->SetArray(iSize + 2, rgValues); |
- for (int32_t i = 0; i < (iSize + 2); i++) |
- delete rgValues[i]; |
+ } |
+ if (iCounter < 1) { |
+ CFX_WideString wsPropertyName = |
+ CFX_WideString::FromUTF8(szName.AsStringC()); |
+ CFX_WideString wsSomExpression = |
+ CFX_WideString::FromUTF8(szSomExp.AsStringC()); |
+ pContext->ThrowException(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, |
+ wsPropertyName.c_str(), wsSomExpression.c_str()); |
+ return; |
+ } |
- FX_Free(rgValues); |
- for (int32_t i = 0; i < iSize; i++) |
- delete hResolveValues[i]; |
+ CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iCounter + 2); |
+ for (int32_t i = 0; i < (iCounter + 2); i++) |
+ rgValues[i] = new CFXJSE_Value(pIsolate); |
- FX_Free(hResolveValues); |
- } else { |
- CFX_WideString wsPropertyName = |
- CFX_WideString::FromUTF8(szName.AsStringC()); |
- CFX_WideString wsSomExpression = |
- CFX_WideString::FromUTF8(szSomExp.AsStringC()); |
- pContext->ThrowException(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, |
- wsPropertyName.c_str(), |
- wsSomExpression.c_str()); |
+ rgValues[0]->SetInteger(1); |
+ if (bAttribute) |
+ rgValues[1]->SetString(szName.AsStringC()); |
+ else |
+ rgValues[1]->SetNull(); |
+ |
+ int32_t iIndex = 2; |
+ for (int32_t i = 0; i < iLength - 2; i++) { |
+ for (int32_t j = 0; j < iSizes[i]; j++) { |
+ rgValues[iIndex]->Assign(hResolveValues[i][j]); |
+ iIndex++; |
} |
} |
- } else { |
- pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
+ args.GetReturnValue()->SetArray(iCounter + 2, rgValues); |
+ |
+ for (int32_t i = 0; i < (iCounter + 2); i++) |
+ delete rgValues[i]; |
+ FX_Free(rgValues); |
+ |
+ for (int32_t i = 0; i < iLength - 2; i++) { |
+ for (int32_t j = 0; j < iSizes[i]; j++) |
+ delete hResolveValues[i][j]; |
+ |
+ if (iSizes[i] > 0) |
+ FX_Free(hResolveValues[i]); |
+ } |
+ FX_Free(hResolveValues); |
+ FX_Free(iSizes); |
+ |
+ return; |
} |
+ |
+ XFA_RESOLVENODE_RS resoveNodeRS; |
+ int32_t iRet = 0; |
+ CFX_ByteString bsAccessorName = args.GetUTF8String(1); |
+ if (argAccessor->IsObject() || |
+ (argAccessor->IsNull() && bsAccessorName.IsEmpty())) { |
+ iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(), |
+ resoveNodeRS, TRUE, szName.IsEmpty()); |
+ } else if (!argAccessor->IsObject() && !bsAccessorName.IsEmpty() && |
+ GetObjectByName(pThis, argAccessor.get(), |
+ bsAccessorName.AsStringC())) { |
+ iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(), |
+ resoveNodeRS, TRUE, szName.IsEmpty()); |
+ } |
+ if (iRet < 1) { |
+ CFX_WideString wsPropertyName = |
+ CFX_WideString::FromUTF8(szName.AsStringC()); |
+ CFX_WideString wsSomExpression = |
+ CFX_WideString::FromUTF8(szSomExp.AsStringC()); |
+ pContext->ThrowException(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, |
+ wsPropertyName.c_str(), wsSomExpression.c_str()); |
+ return; |
+ } |
+ |
+ CFXJSE_Value** hResolveValues; |
+ int32_t iSize = 0; |
+ FX_BOOL bAttribute = FALSE; |
+ ParseResolveResult(pThis, resoveNodeRS, argAccessor.get(), hResolveValues, |
+ iSize, bAttribute); |
+ CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iSize + 2); |
+ for (int32_t i = 0; i < (iSize + 2); i++) |
+ rgValues[i] = new CFXJSE_Value(pIsolate); |
+ |
+ rgValues[0]->SetInteger(1); |
+ if (bAttribute) |
+ rgValues[1]->SetString(szName.AsStringC()); |
+ else |
+ rgValues[1]->SetNull(); |
+ |
+ for (int32_t i = 0; i < iSize; i++) |
+ rgValues[i + 2]->Assign(hResolveValues[i]); |
+ |
+ args.GetReturnValue()->SetArray(iSize + 2, rgValues); |
+ for (int32_t i = 0; i < (iSize + 2); i++) |
+ delete rgValues[i]; |
+ FX_Free(rgValues); |
+ |
+ for (int32_t i = 0; i < iSize; i++) |
+ delete hResolveValues[i]; |
+ FX_Free(hResolveValues); |
} |
// static |
@@ -5664,138 +5663,136 @@ void CXFA_FM2JSContext::dotdot_accessor(CFXJSE_Value* pThis, |
CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
int32_t argc = args.GetLength(); |
- if ((argc == 4) || (argc == 5)) { |
- FX_BOOL bIsStar = TRUE; |
- std::unique_ptr<CFXJSE_Value> argAccessor = args.GetValue(0); |
- CFX_ByteString bsAccessorName = args.GetUTF8String(1); |
- CFX_ByteString szName = args.GetUTF8String(2); |
- int32_t iIndexFlags = args.GetInt32(3); |
- int32_t iIndexValue = 0; |
- if (argc > 4) { |
- bIsStar = FALSE; |
- std::unique_ptr<CFXJSE_Value> argIndex = args.GetValue(4); |
- iIndexValue = ValueToInteger(pThis, argIndex.get()); |
- } |
- CFX_ByteString szSomExp; |
- GenerateSomExpression(szName.AsStringC(), iIndexFlags, iIndexValue, bIsStar, |
- szSomExp); |
- if (argAccessor->IsArray()) { |
- std::unique_ptr<CFXJSE_Value> pLengthValue(new CFXJSE_Value(pIsolate)); |
- argAccessor->GetObjectProperty("length", pLengthValue.get()); |
- int32_t iLength = pLengthValue->ToInteger(); |
- int32_t iCounter = 0; |
- CFXJSE_Value*** hResolveValues = FX_Alloc(CFXJSE_Value**, iLength - 2); |
- int32_t* iSizes = FX_Alloc(int32_t, iLength - 2); |
- std::unique_ptr<CFXJSE_Value> hJSObjValue(new CFXJSE_Value(pIsolate)); |
- FX_BOOL bAttribute = FALSE; |
- for (int32_t i = 2; i < iLength; i++) { |
- argAccessor->GetObjectPropertyByIdx(i, hJSObjValue.get()); |
- XFA_RESOLVENODE_RS resoveNodeRS; |
- int32_t iRet = |
- ResolveObjects(pThis, hJSObjValue.get(), szSomExp.AsStringC(), |
- resoveNodeRS, FALSE); |
- if (iRet > 0) { |
- ParseResolveResult(pThis, resoveNodeRS, hJSObjValue.get(), |
- hResolveValues[i - 2], iSizes[i - 2], bAttribute); |
- iCounter += iSizes[i - 2]; |
- } |
- } |
- if (iCounter > 0) { |
- CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iCounter + 2); |
- for (int32_t i = 0; i < (iCounter + 2); i++) |
- rgValues[i] = new CFXJSE_Value(pIsolate); |
- |
- rgValues[0]->SetInteger(1); |
- if (bAttribute) { |
- rgValues[1]->SetString(szName.AsStringC()); |
- } else { |
- rgValues[1]->SetNull(); |
- } |
- int32_t iIndex = 2; |
- for (int32_t i = 0; i < iLength - 2; i++) { |
- for (int32_t j = 0; j < iSizes[i]; j++) { |
- rgValues[iIndex]->Assign(hResolveValues[i][j]); |
- iIndex++; |
- } |
- } |
- args.GetReturnValue()->SetArray(iCounter + 2, rgValues); |
- for (int32_t i = 0; i < (iCounter + 2); i++) |
- delete rgValues[i]; |
- |
- FX_Free(rgValues); |
- } else { |
- CFX_WideString wsPropertyName = |
- CFX_WideString::FromUTF8(szName.AsStringC()); |
- CFX_WideString wsSomExpression = |
- CFX_WideString::FromUTF8(szSomExp.AsStringC()); |
- pContext->ThrowException(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, |
- wsPropertyName.c_str(), |
- wsSomExpression.c_str()); |
- } |
- for (int32_t i = 0; i < iLength - 2; i++) { |
- for (int32_t j = 0; j < iSizes[i]; j++) |
- delete hResolveValues[i][j]; |
+ if (argc < 4 || argc > 5) { |
+ pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
+ return; |
+ } |
- FX_Free(hResolveValues[i]); |
- } |
- FX_Free(hResolveValues); |
- FX_Free(iSizes); |
- } else { |
+ bool bIsStar = true; |
+ int32_t iIndexValue = 0; |
+ if (argc > 4) { |
+ bIsStar = false; |
+ iIndexValue = ValueToInteger(pThis, args.GetValue(4).get()); |
+ } |
+ |
+ CFX_ByteString szSomExp; |
+ CFX_ByteString szName = args.GetUTF8String(2); |
+ GenerateSomExpression(szName.AsStringC(), args.GetInt32(3), iIndexValue, |
+ bIsStar, szSomExp); |
+ |
+ std::unique_ptr<CFXJSE_Value> argAccessor = args.GetValue(0); |
+ if (argAccessor->IsArray()) { |
+ std::unique_ptr<CFXJSE_Value> pLengthValue(new CFXJSE_Value(pIsolate)); |
+ argAccessor->GetObjectProperty("length", pLengthValue.get()); |
+ int32_t iLength = pLengthValue->ToInteger(); |
+ int32_t iCounter = 0; |
+ |
+ CFXJSE_Value*** hResolveValues = FX_Alloc(CFXJSE_Value**, iLength - 2); |
+ int32_t* iSizes = FX_Alloc(int32_t, iLength - 2); |
+ std::unique_ptr<CFXJSE_Value> hJSObjValue(new CFXJSE_Value(pIsolate)); |
+ FX_BOOL bAttribute = FALSE; |
+ for (int32_t i = 2; i < iLength; i++) { |
+ argAccessor->GetObjectPropertyByIdx(i, hJSObjValue.get()); |
XFA_RESOLVENODE_RS resoveNodeRS; |
- int32_t iRet = 0; |
- if (argAccessor->IsObject() || |
- (argAccessor->IsNull() && bsAccessorName.IsEmpty())) { |
- iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(), |
- resoveNodeRS, FALSE); |
- } else if (!argAccessor->IsObject() && !bsAccessorName.IsEmpty()) { |
- FX_BOOL bGetObject = GetObjectByName(pThis, argAccessor.get(), |
- bsAccessorName.AsStringC()); |
- if (bGetObject) { |
- iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(), |
- resoveNodeRS, FALSE); |
- } |
+ if (ResolveObjects(pThis, hJSObjValue.get(), szSomExp.AsStringC(), |
+ resoveNodeRS, FALSE) > 0) { |
+ ParseResolveResult(pThis, resoveNodeRS, hJSObjValue.get(), |
+ hResolveValues[i - 2], iSizes[i - 2], bAttribute); |
+ iCounter += iSizes[i - 2]; |
} |
- if (iRet > 0) { |
- CFXJSE_Value** hResolveValues; |
- int32_t iSize = 0; |
- FX_BOOL bAttribute = FALSE; |
- ParseResolveResult(pThis, resoveNodeRS, argAccessor.get(), |
- hResolveValues, iSize, bAttribute); |
- CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iSize + 2); |
- for (int32_t i = 0; i < (iSize + 2); i++) |
- rgValues[i] = new CFXJSE_Value(pIsolate); |
- |
- rgValues[0]->SetInteger(1); |
- if (bAttribute) { |
- rgValues[1]->SetString(szName.AsStringC()); |
- } else { |
- rgValues[1]->SetNull(); |
- } |
- for (int32_t i = 0; i < iSize; i++) { |
- rgValues[i + 2]->Assign(hResolveValues[i]); |
- } |
- args.GetReturnValue()->SetArray(iSize + 2, rgValues); |
- for (int32_t i = 0; i < (iSize + 2); i++) |
- delete rgValues[i]; |
+ } |
+ if (iCounter < 1) { |
+ CFX_WideString wsPropertyName = |
+ CFX_WideString::FromUTF8(szName.AsStringC()); |
+ CFX_WideString wsSomExpression = |
+ CFX_WideString::FromUTF8(szSomExp.AsStringC()); |
+ pContext->ThrowException(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, |
+ wsPropertyName.c_str(), wsSomExpression.c_str()); |
+ return; |
+ } |
- FX_Free(rgValues); |
- for (int32_t i = 0; i < iSize; i++) |
- delete hResolveValues[i]; |
+ CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iCounter + 2); |
+ for (int32_t i = 0; i < (iCounter + 2); i++) |
+ rgValues[i] = new CFXJSE_Value(pIsolate); |
- FX_Free(hResolveValues); |
- } else { |
- CFX_WideString wsPropertyName = |
- CFX_WideString::FromUTF8(szName.AsStringC()); |
- CFX_WideString wsSomExpression = |
- CFX_WideString::FromUTF8(szSomExp.AsStringC()); |
- pContext->ThrowException(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, |
- wsPropertyName.c_str(), |
- wsSomExpression.c_str()); |
+ rgValues[0]->SetInteger(1); |
+ if (bAttribute) |
+ rgValues[1]->SetString(szName.AsStringC()); |
+ else |
+ rgValues[1]->SetNull(); |
+ |
+ int32_t iIndex = 2; |
+ for (int32_t i = 0; i < iLength - 2; i++) { |
+ for (int32_t j = 0; j < iSizes[i]; j++) { |
+ rgValues[iIndex]->Assign(hResolveValues[i][j]); |
+ iIndex++; |
} |
} |
- } else { |
- pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
+ args.GetReturnValue()->SetArray(iCounter + 2, rgValues); |
+ for (int32_t i = 0; i < (iCounter + 2); i++) |
+ delete rgValues[i]; |
+ FX_Free(rgValues); |
+ |
+ for (int32_t i = 0; i < iLength - 2; i++) { |
+ for (int32_t j = 0; j < iSizes[i]; j++) |
+ delete hResolveValues[i][j]; |
+ FX_Free(hResolveValues[i]); |
+ } |
+ FX_Free(hResolveValues); |
+ FX_Free(iSizes); |
+ return; |
} |
+ |
+ XFA_RESOLVENODE_RS resoveNodeRS; |
+ int32_t iRet = 0; |
+ CFX_ByteString bsAccessorName = args.GetUTF8String(1); |
+ if (argAccessor->IsObject() || |
+ (argAccessor->IsNull() && bsAccessorName.IsEmpty())) { |
+ iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(), |
+ resoveNodeRS, FALSE); |
+ } else if (!argAccessor->IsObject() && !bsAccessorName.IsEmpty() && |
+ GetObjectByName(pThis, argAccessor.get(), |
+ bsAccessorName.AsStringC())) { |
+ iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(), |
+ resoveNodeRS, FALSE); |
+ } |
+ if (iRet < 1) { |
+ CFX_WideString wsPropertyName = |
+ CFX_WideString::FromUTF8(szName.AsStringC()); |
+ CFX_WideString wsSomExpression = |
+ CFX_WideString::FromUTF8(szSomExp.AsStringC()); |
+ pContext->ThrowException(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, |
+ wsPropertyName.c_str(), wsSomExpression.c_str()); |
+ return; |
+ } |
+ |
+ CFXJSE_Value** hResolveValues; |
+ int32_t iSize = 0; |
+ FX_BOOL bAttribute = FALSE; |
+ ParseResolveResult(pThis, resoveNodeRS, argAccessor.get(), hResolveValues, |
+ iSize, bAttribute); |
+ CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iSize + 2); |
+ for (int32_t i = 0; i < (iSize + 2); i++) |
+ rgValues[i] = new CFXJSE_Value(pIsolate); |
+ |
+ rgValues[0]->SetInteger(1); |
+ if (bAttribute) |
+ rgValues[1]->SetString(szName.AsStringC()); |
+ else |
+ rgValues[1]->SetNull(); |
+ |
+ for (int32_t i = 0; i < iSize; i++) |
+ rgValues[i + 2]->Assign(hResolveValues[i]); |
+ |
+ args.GetReturnValue()->SetArray(iSize + 2, rgValues); |
+ |
+ for (int32_t i = 0; i < (iSize + 2); i++) |
+ delete rgValues[i]; |
+ FX_Free(rgValues); |
+ |
+ for (int32_t i = 0; i < iSize; i++) |
+ delete hResolveValues[i]; |
+ FX_Free(hResolveValues); |
} |
// static |
@@ -5803,55 +5800,58 @@ void CXFA_FM2JSContext::eval_translation(CFXJSE_Value* pThis, |
const CFX_ByteStringC& szFuncName, |
CFXJSE_Arguments& args) { |
CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
- if (args.GetLength() == 1) { |
- std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
- CFX_ByteString argString; |
- ValueToUTF8String(argOne.get(), argString); |
- if (argString.IsEmpty()) { |
- pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
- } else { |
- CFX_WideString scriptString = |
- CFX_WideString::FromUTF8(argString.AsStringC()); |
- CFX_WideTextBuf wsJavaScriptBuf; |
- CFX_WideString wsError; |
- CXFA_FM2JSContext::Translate(scriptString.AsStringC(), wsJavaScriptBuf, |
- wsError); |
- if (wsError.IsEmpty()) { |
- CFX_WideString javaScript = wsJavaScriptBuf.MakeString(); |
- args.GetReturnValue()->SetString( |
- FX_UTF8Encode(javaScript.c_str(), javaScript.GetLength()) |
- .AsStringC()); |
- } else { |
- pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
- } |
- } |
- } else { |
+ if (args.GetLength() != 1) { |
pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Eval"); |
+ return; |
+ } |
+ |
+ std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
+ CFX_ByteString argString; |
+ ValueToUTF8String(argOne.get(), argString); |
+ if (argString.IsEmpty()) { |
+ pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
+ return; |
} |
+ |
+ CFX_WideString scriptString = CFX_WideString::FromUTF8(argString.AsStringC()); |
+ CFX_WideTextBuf wsJavaScriptBuf; |
+ CFX_WideString wsError; |
+ CXFA_FM2JSContext::Translate(scriptString.AsStringC(), wsJavaScriptBuf, |
+ wsError); |
+ if (!wsError.IsEmpty()) { |
+ pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
+ return; |
+ } |
+ |
+ CFX_WideString javaScript = wsJavaScriptBuf.MakeString(); |
+ args.GetReturnValue()->SetString( |
+ FX_UTF8Encode(javaScript.c_str(), javaScript.GetLength()).AsStringC()); |
} |
// static |
void CXFA_FM2JSContext::is_fm_object(CFXJSE_Value* pThis, |
const CFX_ByteStringC& szFuncName, |
CFXJSE_Arguments& args) { |
- if (args.GetLength() == 1) { |
- std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
- args.GetReturnValue()->SetBoolean(argOne->IsObject()); |
- } else { |
+ if (args.GetLength() != 1) { |
args.GetReturnValue()->SetBoolean(FALSE); |
+ return; |
} |
+ |
+ std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
+ args.GetReturnValue()->SetBoolean(argOne->IsObject()); |
} |
// static |
void CXFA_FM2JSContext::is_fm_array(CFXJSE_Value* pThis, |
const CFX_ByteStringC& szFuncName, |
CFXJSE_Arguments& args) { |
- if (args.GetLength() == 1) { |
- std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
- args.GetReturnValue()->SetBoolean(argOne->IsArray()); |
- } else { |
+ if (args.GetLength() != 1) { |
args.GetReturnValue()->SetBoolean(FALSE); |
+ return; |
} |
+ |
+ std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
+ args.GetReturnValue()->SetBoolean(argOne->IsArray()); |
} |
// static |
@@ -5859,54 +5859,62 @@ void CXFA_FM2JSContext::get_fm_value(CFXJSE_Value* pThis, |
const CFX_ByteStringC& szFuncName, |
CFXJSE_Arguments& args) { |
CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
- v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
- if (args.GetLength() == 1) { |
- std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
- if (argOne->IsArray()) { |
- std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
- std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
- argOne->GetObjectPropertyByIdx(1, propertyValue.get()); |
- argOne->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
- if (propertyValue->IsNull()) { |
- GetObjectDefaultValue(jsObjectValue.get(), args.GetReturnValue()); |
- } else { |
- CFX_ByteString propertyStr; |
- propertyValue->ToString(propertyStr); |
- jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
- args.GetReturnValue()); |
- } |
- } else if (argOne->IsObject()) { |
- GetObjectDefaultValue(argOne.get(), args.GetReturnValue()); |
- } else { |
- args.GetReturnValue()->Assign(argOne.get()); |
- } |
- } else { |
+ if (args.GetLength() != 1) { |
pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
+ return; |
+ } |
+ |
+ std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
+ if (argOne->IsArray()) { |
+ v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
+ std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
+ std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
+ argOne->GetObjectPropertyByIdx(1, propertyValue.get()); |
+ argOne->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
+ if (propertyValue->IsNull()) { |
+ GetObjectDefaultValue(jsObjectValue.get(), args.GetReturnValue()); |
+ return; |
+ } |
+ |
+ CFX_ByteString propertyStr; |
+ propertyValue->ToString(propertyStr); |
+ jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
+ args.GetReturnValue()); |
+ return; |
+ } |
+ |
+ if (argOne->IsObject()) { |
+ GetObjectDefaultValue(argOne.get(), args.GetReturnValue()); |
+ return; |
} |
+ |
+ args.GetReturnValue()->Assign(argOne.get()); |
} |
// static |
void CXFA_FM2JSContext::get_fm_jsobj(CFXJSE_Value* pThis, |
const CFX_ByteStringC& szFuncName, |
CFXJSE_Arguments& args) { |
- if (args.GetLength() == 1) { |
- std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
- if (argOne->IsArray()) { |
+ if (args.GetLength() != 1) { |
+ ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); |
+ return; |
+ } |
+ |
+ std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
+ if (!argOne->IsArray()) { |
+ args.GetReturnValue()->Assign(argOne.get()); |
+ return; |
+ } |
+ |
#ifndef NDEBUG |
- CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
- v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
- std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
- argOne->GetObjectProperty("length", lengthValue.get()); |
- ASSERT(lengthValue->ToInteger() >= 3); |
+ CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
+ v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
+ std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
+ argOne->GetObjectProperty("length", lengthValue.get()); |
+ ASSERT(lengthValue->ToInteger() >= 3); |
#endif |
- argOne->GetObjectPropertyByIdx(2, args.GetReturnValue()); |
- } else { |
- args.GetReturnValue()->Assign(argOne.get()); |
- } |
- } else { |
- CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
- pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
- } |
+ |
+ argOne->GetObjectPropertyByIdx(2, args.GetReturnValue()); |
} |
// static |
@@ -5914,50 +5922,56 @@ void CXFA_FM2JSContext::fm_var_filter(CFXJSE_Value* pThis, |
const CFX_ByteStringC& szFuncName, |
CFXJSE_Arguments& args) { |
CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
+ if (args.GetLength() != 1) { |
+ pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
+ return; |
+ } |
+ |
v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
- if (args.GetLength() == 1) { |
- std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
- if (argOne->IsArray()) { |
+ std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
+ if (!argOne->IsArray()) { |
+ std::unique_ptr<CFXJSE_Value> simpleValue = GetSimpleValue(pThis, args, 0); |
+ args.GetReturnValue()->Assign(simpleValue.get()); |
+ return; |
+ } |
+ |
#ifndef NDEBUG |
- std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
- argOne->GetObjectProperty("length", lengthValue.get()); |
- ASSERT(lengthValue->ToInteger() >= 3); |
+ std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
+ argOne->GetObjectProperty("length", lengthValue.get()); |
+ ASSERT(lengthValue->ToInteger() >= 3); |
#endif |
- std::unique_ptr<CFXJSE_Value> flagsValue(new CFXJSE_Value(pIsolate)); |
- argOne->GetObjectPropertyByIdx(0, flagsValue.get()); |
- int32_t iFlags = flagsValue->ToInteger(); |
- if (iFlags == 4) { |
- CFXJSE_Value* rgValues[3]; |
- for (int32_t i = 0; i < 3; i++) |
- rgValues[i] = new CFXJSE_Value(pIsolate); |
- |
- rgValues[0]->SetInteger(3); |
- rgValues[1]->SetNull(); |
- rgValues[2]->SetNull(); |
- args.GetReturnValue()->SetArray(3, rgValues); |
- for (int32_t i = 0; i < 3; i++) |
- delete rgValues[i]; |
- } else if (iFlags == 3) { |
- std::unique_ptr<CFXJSE_Value> objectValue(new CFXJSE_Value(pIsolate)); |
- argOne->GetObjectPropertyByIdx(2, objectValue.get()); |
- if (!objectValue->IsNull()) { |
- args.GetReturnValue()->Assign(argOne.get()); |
- } else { |
- pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
- } |
- } else { |
- std::unique_ptr<CFXJSE_Value> simpleValue = |
- GetSimpleValue(pThis, args, 0); |
- args.GetReturnValue()->Assign(simpleValue.get()); |
- } |
- } else { |
- std::unique_ptr<CFXJSE_Value> simpleValue = |
- GetSimpleValue(pThis, args, 0); |
- args.GetReturnValue()->Assign(simpleValue.get()); |
- } |
- } else { |
+ |
+ std::unique_ptr<CFXJSE_Value> flagsValue(new CFXJSE_Value(pIsolate)); |
+ argOne->GetObjectPropertyByIdx(0, flagsValue.get()); |
+ int32_t iFlags = flagsValue->ToInteger(); |
+ if (iFlags != 3 && iFlags != 4) { |
+ std::unique_ptr<CFXJSE_Value> simpleValue = GetSimpleValue(pThis, args, 0); |
+ args.GetReturnValue()->Assign(simpleValue.get()); |
+ return; |
+ } |
+ |
+ if (iFlags == 4) { |
+ CFXJSE_Value* rgValues[3]; |
+ for (int32_t i = 0; i < 3; i++) |
+ rgValues[i] = new CFXJSE_Value(pIsolate); |
+ |
+ rgValues[0]->SetInteger(3); |
+ rgValues[1]->SetNull(); |
+ rgValues[2]->SetNull(); |
+ args.GetReturnValue()->SetArray(3, rgValues); |
+ for (int32_t i = 0; i < 3; i++) |
+ delete rgValues[i]; |
+ |
+ return; |
+ } |
+ |
+ std::unique_ptr<CFXJSE_Value> objectValue(new CFXJSE_Value(pIsolate)); |
+ argOne->GetObjectPropertyByIdx(2, objectValue.get()); |
+ if (objectValue->IsNull()) { |
pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
+ return; |
} |
+ args.GetReturnValue()->Assign(argOne.get()); |
} |
// static |
@@ -5978,6 +5992,7 @@ void CXFA_FM2JSContext::concat_fm_object(CFXJSE_Value* pThis, |
} |
iLength += 1; |
} |
+ |
CFXJSE_Value** returnValues = FX_Alloc(CFXJSE_Value*, iLength); |
for (int32_t i = 0; i < (int32_t)iLength; i++) |
returnValues[i] = new CFXJSE_Value(pIsolate); |
@@ -6010,79 +6025,77 @@ std::unique_ptr<CFXJSE_Value> CXFA_FM2JSContext::GetSimpleValue( |
uint32_t index) { |
v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
ASSERT(index < (uint32_t)args.GetLength()); |
+ |
std::unique_ptr<CFXJSE_Value> argIndex = args.GetValue(index); |
+ if (!argIndex->IsArray() && !argIndex->IsObject()) |
+ return argIndex; |
+ |
if (argIndex->IsArray()) { |
std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
argIndex->GetObjectProperty("length", lengthValue.get()); |
int32_t iLength = lengthValue->ToInteger(); |
std::unique_ptr<CFXJSE_Value> simpleValue(new CFXJSE_Value(pIsolate)); |
- if (iLength > 2) { |
- std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
- std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
- argIndex->GetObjectPropertyByIdx(1, propertyValue.get()); |
- argIndex->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
- if (propertyValue->IsNull()) { |
- GetObjectDefaultValue(jsObjectValue.get(), simpleValue.get()); |
- } else { |
- CFX_ByteString propertyStr; |
- propertyValue->ToString(propertyStr); |
- jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
- simpleValue.get()); |
- } |
- } else { |
+ if (iLength < 3) { |
simpleValue.get()->SetUndefined(); |
+ return simpleValue; |
} |
+ |
+ std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
+ std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
+ argIndex->GetObjectPropertyByIdx(1, propertyValue.get()); |
+ argIndex->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
+ if (propertyValue->IsNull()) { |
+ GetObjectDefaultValue(jsObjectValue.get(), simpleValue.get()); |
+ return simpleValue; |
+ } |
+ |
+ CFX_ByteString propertyStr; |
+ propertyValue->ToString(propertyStr); |
+ jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
+ simpleValue.get()); |
return simpleValue; |
- } else if (argIndex->IsObject()) { |
- std::unique_ptr<CFXJSE_Value> defaultValue(new CFXJSE_Value(pIsolate)); |
- GetObjectDefaultValue(argIndex.get(), defaultValue.get()); |
- return defaultValue; |
- } else { |
- return argIndex; |
} |
+ |
+ std::unique_ptr<CFXJSE_Value> defaultValue(new CFXJSE_Value(pIsolate)); |
+ GetObjectDefaultValue(argIndex.get(), defaultValue.get()); |
+ return defaultValue; |
} |
// static |
FX_BOOL CXFA_FM2JSContext::ValueIsNull(CFXJSE_Value* pThis, CFXJSE_Value* arg) { |
+ if (!arg || arg->IsNull()) |
+ return TRUE; |
+ |
+ if (!arg->IsArray() && !arg->IsObject()) |
+ return FALSE; |
+ |
v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
- FX_BOOL isNull = FALSE; |
- if (!arg || arg->IsNull()) { |
- isNull = TRUE; |
- } else if (arg->IsArray()) { |
+ if (arg->IsArray()) { |
int32_t iLength = hvalue_get_array_length(pThis, arg); |
- if (iLength > 2) { |
- std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
- std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
- arg->GetObjectPropertyByIdx(1, propertyValue.get()); |
- arg->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
- if (propertyValue->IsNull()) { |
- std::unique_ptr<CFXJSE_Value> defaultValue(new CFXJSE_Value(pIsolate)); |
- GetObjectDefaultValue(jsObjectValue.get(), defaultValue.get()); |
- if (defaultValue->IsNull()) { |
- isNull = TRUE; |
- } |
- } else { |
- CFX_ByteString propertyStr; |
- propertyValue->ToString(propertyStr); |
- std::unique_ptr<CFXJSE_Value> newPropertyValue( |
- new CFXJSE_Value(pIsolate)); |
- jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
- newPropertyValue.get()); |
- if (newPropertyValue->IsNull()) { |
- isNull = TRUE; |
- } |
- } |
- } else { |
- isNull = TRUE; |
- } |
- } else if (arg->IsObject()) { |
- std::unique_ptr<CFXJSE_Value> defaultValue(new CFXJSE_Value(pIsolate)); |
- GetObjectDefaultValue(arg, defaultValue.get()); |
- if (defaultValue->IsNull()) { |
- isNull = TRUE; |
+ if (iLength < 3) |
+ return TRUE; |
+ |
+ std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
+ std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
+ arg->GetObjectPropertyByIdx(1, propertyValue.get()); |
+ arg->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
+ if (propertyValue->IsNull()) { |
+ std::unique_ptr<CFXJSE_Value> defaultValue(new CFXJSE_Value(pIsolate)); |
+ GetObjectDefaultValue(jsObjectValue.get(), defaultValue.get()); |
+ return defaultValue->IsNull(); |
} |
+ |
+ CFX_ByteString propertyStr; |
+ propertyValue->ToString(propertyStr); |
+ std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); |
+ jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
+ newPropertyValue.get()); |
+ return newPropertyValue->IsNull(); |
} |
- return isNull; |
+ |
+ std::unique_ptr<CFXJSE_Value> defaultValue(new CFXJSE_Value(pIsolate)); |
+ GetObjectDefaultValue(arg, defaultValue.get()); |
+ return defaultValue->IsNull(); |
} |
// static |
@@ -6104,22 +6117,21 @@ FX_BOOL CXFA_FM2JSContext::simpleValueCompare(CFXJSE_Value* pThis, |
if (!firstValue) |
return FALSE; |
- FX_BOOL bReturn = FALSE; |
if (firstValue->IsString()) { |
CFX_ByteString firstString, secondString; |
ValueToUTF8String(firstValue, firstString); |
ValueToUTF8String(secondValue, secondString); |
- bReturn = firstString == secondString; |
- } else if (firstValue->IsNumber()) { |
+ return firstString == secondString; |
+ } |
+ if (firstValue->IsNumber()) { |
FX_FLOAT first = ValueToFloat(pThis, firstValue); |
FX_FLOAT second = ValueToFloat(pThis, secondValue); |
- bReturn = (first == second); |
- } else if (firstValue->IsBoolean()) { |
- bReturn = (firstValue->ToBoolean() == secondValue->ToBoolean()); |
- } else if (firstValue->IsNull() && secondValue && secondValue->IsNull()) { |
- bReturn = TRUE; |
+ return (first == second); |
} |
- return bReturn; |
+ if (firstValue->IsBoolean()) |
+ return (firstValue->ToBoolean() == secondValue->ToBoolean()); |
+ |
+ return firstValue->IsNull() && secondValue && secondValue->IsNull(); |
} |
// static |
@@ -6128,8 +6140,9 @@ void CXFA_FM2JSContext::unfoldArgs(CFXJSE_Value* pThis, |
CFXJSE_Value**& resultValues, |
int32_t& iCount, |
int32_t iStart) { |
- v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
iCount = 0; |
+ |
+ v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
int32_t argc = args.GetLength(); |
std::vector<std::unique_ptr<CFXJSE_Value>> argsValue; |
for (int32_t i = 0; i < argc - iStart; i++) { |
@@ -6153,25 +6166,26 @@ void CXFA_FM2JSContext::unfoldArgs(CFXJSE_Value* pThis, |
std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
argsValue[i]->GetObjectProperty("length", lengthValue.get()); |
int32_t iLength = lengthValue->ToInteger(); |
- if (iLength > 2) { |
- std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
- std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
- argsValue[i]->GetObjectPropertyByIdx(1, propertyValue.get()); |
- if (propertyValue->IsNull()) { |
- for (int32_t j = 2; j < iLength; j++) { |
- argsValue[i]->GetObjectPropertyByIdx(j, jsObjectValue.get()); |
- GetObjectDefaultValue(jsObjectValue.get(), resultValues[index]); |
- index++; |
- } |
- } else { |
- CFX_ByteString propertyString; |
- propertyValue->ToString(propertyString); |
- for (int32_t j = 2; j < iLength; j++) { |
- argsValue[i]->GetObjectPropertyByIdx(j, jsObjectValue.get()); |
- jsObjectValue->GetObjectProperty(propertyString.AsStringC(), |
- resultValues[index]); |
- index++; |
- } |
+ if (iLength < 3) |
+ continue; |
+ |
+ std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
+ std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
+ argsValue[i]->GetObjectPropertyByIdx(1, propertyValue.get()); |
+ if (propertyValue->IsNull()) { |
+ for (int32_t j = 2; j < iLength; j++) { |
+ argsValue[i]->GetObjectPropertyByIdx(j, jsObjectValue.get()); |
+ GetObjectDefaultValue(jsObjectValue.get(), resultValues[index]); |
+ index++; |
+ } |
+ } else { |
+ CFX_ByteString propertyString; |
+ propertyValue->ToString(propertyString); |
+ for (int32_t j = 2; j < iLength; j++) { |
+ argsValue[i]->GetObjectPropertyByIdx(j, jsObjectValue.get()); |
+ jsObjectValue->GetObjectProperty(propertyString.AsStringC(), |
+ resultValues[index]); |
+ index++; |
} |
} |
} else if (argsValue[i]->IsObject()) { |
@@ -6210,7 +6224,7 @@ FX_BOOL CXFA_FM2JSContext::SetObjectDefaultValue(CFXJSE_Value* pValue, |
void CXFA_FM2JSContext::GenerateSomExpression(const CFX_ByteStringC& szName, |
int32_t iIndexFlags, |
int32_t iIndexValue, |
- FX_BOOL bIsStar, |
+ bool bIsStar, |
CFX_ByteString& szSomExp) { |
if (bIsStar) { |
szSomExp = szName + "[*]"; |
@@ -6242,11 +6256,10 @@ FX_BOOL CXFA_FM2JSContext::GetObjectByName( |
CFXJSE_Value* pThis, |
CFXJSE_Value* accessorValue, |
const CFX_ByteStringC& szAccessorName) { |
- FX_BOOL bFlags = FALSE; |
CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); |
- if (!pDoc) { |
- return bFlags; |
- } |
+ if (!pDoc) |
+ return FALSE; |
+ |
CXFA_ScriptContext* pScriptContext = pDoc->GetScriptContext(); |
XFA_RESOLVENODE_RS resoveNodeRS; |
uint32_t dwFlags = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | |
@@ -6258,9 +6271,9 @@ FX_BOOL CXFA_FM2JSContext::GetObjectByName( |
if (iRet >= 1 && resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { |
accessorValue->Assign( |
pScriptContext->GetJSValueFromMap(resoveNodeRS.nodes.GetAt(0))); |
- bFlags = TRUE; |
+ return TRUE; |
} |
- return bFlags; |
+ return FALSE; |
} |
// static |
@@ -6270,12 +6283,11 @@ int32_t CXFA_FM2JSContext::ResolveObjects(CFXJSE_Value* pThis, |
XFA_RESOLVENODE_RS& resoveNodeRS, |
FX_BOOL bdotAccessor, |
FX_BOOL bHasNoResolveName) { |
- CFX_WideString wsSomExpression = CFX_WideString::FromUTF8(bsSomExp); |
- int32_t iRet = -1; |
CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); |
- if (!pDoc) { |
- return iRet; |
- } |
+ if (!pDoc) |
+ return -1; |
+ |
+ CFX_WideString wsSomExpression = CFX_WideString::FromUTF8(bsSomExp); |
CXFA_ScriptContext* pScriptContext = pDoc->GetScriptContext(); |
CXFA_Object* pNode = nullptr; |
uint32_t dFlags = 0UL; |
@@ -6288,9 +6300,9 @@ int32_t CXFA_FM2JSContext::ResolveObjects(CFXJSE_Value* pThis, |
ASSERT(pNode); |
if (bHasNoResolveName) { |
CFX_WideString wsName; |
- if (CXFA_Node* pXFANode = pNode->AsNode()) { |
+ if (CXFA_Node* pXFANode = pNode->AsNode()) |
pXFANode->GetAttribute(XFA_ATTRIBUTE_Name, wsName, FALSE); |
- } |
+ |
if (wsName.IsEmpty()) { |
CFX_WideStringC className; |
pNode->GetClassName(className); |
@@ -6309,9 +6321,8 @@ int32_t CXFA_FM2JSContext::ResolveObjects(CFXJSE_Value* pThis, |
pNode = CXFA_ScriptContext::ToObject(pRefValue, nullptr); |
dFlags = XFA_RESOLVENODE_AnyChild; |
} |
- iRet = pScriptContext->ResolveObjects(pNode, wsSomExpression.AsStringC(), |
+ return pScriptContext->ResolveObjects(pNode, wsSomExpression.AsStringC(), |
resoveNodeRS, dFlags); |
- return iRet; |
} |
// static |
@@ -6322,10 +6333,11 @@ void CXFA_FM2JSContext::ParseResolveResult( |
CFXJSE_Value**& resultValues, |
int32_t& iSize, |
FX_BOOL& bAttribute) { |
- CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
- v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
iSize = 0; |
resultValues = nullptr; |
+ |
+ CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
+ v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { |
bAttribute = FALSE; |
iSize = resoveNodeRS.nodes.GetSize(); |
@@ -6336,26 +6348,29 @@ void CXFA_FM2JSContext::ParseResolveResult( |
pContext->GetDocument()->GetScriptContext()->GetJSValueFromMap( |
resoveNodeRS.nodes.GetAt(i))); |
} |
- } else { |
- CXFA_ValueArray objectProperties(pIsolate); |
- int32_t iRet = resoveNodeRS.GetAttributeResult(objectProperties); |
- bAttribute = (iRet == 0); |
- if (bAttribute) { |
- if (pParentValue && pParentValue->IsObject()) { |
- iSize = 1; |
- resultValues = FX_Alloc(CFXJSE_Value*, 1); |
- resultValues[0] = new CFXJSE_Value(pIsolate); |
- resultValues[0]->Assign(pParentValue); |
- } |
- } else { |
- iSize = iRet; |
- resultValues = FX_Alloc(CFXJSE_Value*, iSize); |
- for (int32_t i = 0; i < iSize; i++) { |
- resultValues[i] = new CFXJSE_Value(pIsolate); |
- resultValues[i]->Assign(objectProperties[i]); |
- } |
+ return; |
+ } |
+ |
+ CXFA_ValueArray objectProperties(pIsolate); |
+ int32_t iRet = resoveNodeRS.GetAttributeResult(objectProperties); |
+ bAttribute = (iRet == 0); |
+ if (!bAttribute) { |
+ iSize = iRet; |
+ resultValues = FX_Alloc(CFXJSE_Value*, iSize); |
+ for (int32_t i = 0; i < iSize; i++) { |
+ resultValues[i] = new CFXJSE_Value(pIsolate); |
+ resultValues[i]->Assign(objectProperties[i]); |
} |
+ return; |
} |
+ |
+ if (!pParentValue || !pParentValue->IsObject()) |
+ return; |
+ |
+ iSize = 1; |
+ resultValues = FX_Alloc(CFXJSE_Value*, 1); |
+ resultValues[0] = new CFXJSE_Value(pIsolate); |
+ resultValues[0]->Assign(pParentValue); |
} |
// static |
@@ -6365,7 +6380,6 @@ int32_t CXFA_FM2JSContext::ValueToInteger(CFXJSE_Value* pThis, |
return 0; |
v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
- int32_t iValue = 0; |
if (pValue->IsArray()) { |
std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
@@ -6374,27 +6388,26 @@ int32_t CXFA_FM2JSContext::ValueToInteger(CFXJSE_Value* pThis, |
pValue->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
if (propertyValue->IsNull()) { |
GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); |
- } else { |
- CFX_ByteString propertyStr; |
- propertyValue->ToString(propertyStr); |
- jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
- newPropertyValue.get()); |
+ return ValueToInteger(pThis, newPropertyValue.get()); |
} |
- iValue = ValueToInteger(pThis, newPropertyValue.get()); |
- return iValue; |
- } else if (pValue->IsObject()) { |
+ |
+ CFX_ByteString propertyStr; |
+ propertyValue->ToString(propertyStr); |
+ jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
+ newPropertyValue.get()); |
+ return ValueToInteger(pThis, newPropertyValue.get()); |
+ } |
+ if (pValue->IsObject()) { |
std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); |
GetObjectDefaultValue(pValue, newPropertyValue.get()); |
- iValue = ValueToInteger(pThis, newPropertyValue.get()); |
- return iValue; |
- } else if (pValue->IsString()) { |
+ return ValueToInteger(pThis, newPropertyValue.get()); |
+ } |
+ if (pValue->IsString()) { |
CFX_ByteString szValue; |
pValue->ToString(szValue); |
- iValue = FXSYS_atoi(szValue.c_str()); |
- } else { |
- iValue = pValue->ToInteger(); |
+ return FXSYS_atoi(szValue.c_str()); |
} |
- return iValue; |
+ return pValue->ToInteger(); |
} |
// static |
@@ -6404,7 +6417,6 @@ FX_FLOAT CXFA_FM2JSContext::ValueToFloat(CFXJSE_Value* pThis, |
return 0.0f; |
v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
- FX_FLOAT fRet = 0.0f; |
if (arg->IsArray()) { |
std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
@@ -6413,27 +6425,28 @@ FX_FLOAT CXFA_FM2JSContext::ValueToFloat(CFXJSE_Value* pThis, |
arg->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
if (propertyValue->IsNull()) { |
GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); |
- } else { |
- CFX_ByteString propertyStr; |
- propertyValue->ToString(propertyStr); |
- jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
- newPropertyValue.get()); |
+ return ValueToFloat(pThis, newPropertyValue.get()); |
} |
- fRet = ValueToFloat(pThis, newPropertyValue.get()); |
- } else if (arg->IsObject()) { |
+ CFX_ByteString propertyStr; |
+ propertyValue->ToString(propertyStr); |
+ jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
+ newPropertyValue.get()); |
+ return ValueToFloat(pThis, newPropertyValue.get()); |
+ } |
+ if (arg->IsObject()) { |
std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); |
GetObjectDefaultValue(arg, newPropertyValue.get()); |
- fRet = ValueToFloat(pThis, newPropertyValue.get()); |
- } else if (arg->IsString()) { |
+ return ValueToFloat(pThis, newPropertyValue.get()); |
+ } |
+ if (arg->IsString()) { |
CFX_ByteString bsOutput; |
arg->ToString(bsOutput); |
- fRet = (FX_FLOAT)XFA_ByteStringToDouble(bsOutput.AsStringC()); |
- } else if (arg->IsUndefined()) { |
- fRet = 0; |
- } else { |
- fRet = arg->ToFloat(); |
+ return (FX_FLOAT)XFA_ByteStringToDouble(bsOutput.AsStringC()); |
} |
- return fRet; |
+ if (arg->IsUndefined()) |
+ return 0; |
+ |
+ return arg->ToFloat(); |
} |
// static |
@@ -6443,7 +6456,6 @@ FX_DOUBLE CXFA_FM2JSContext::ValueToDouble(CFXJSE_Value* pThis, |
return 0; |
v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
- FX_DOUBLE dRet = 0; |
if (arg->IsArray()) { |
std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
@@ -6452,27 +6464,27 @@ FX_DOUBLE CXFA_FM2JSContext::ValueToDouble(CFXJSE_Value* pThis, |
arg->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
if (propertyValue->IsNull()) { |
GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); |
- } else { |
- CFX_ByteString propertyStr; |
- propertyValue->ToString(propertyStr); |
- jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
- newPropertyValue.get()); |
+ return ValueToDouble(pThis, newPropertyValue.get()); |
} |
- dRet = ValueToDouble(pThis, newPropertyValue.get()); |
- } else if (arg->IsObject()) { |
+ CFX_ByteString propertyStr; |
+ propertyValue->ToString(propertyStr); |
+ jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
+ newPropertyValue.get()); |
+ return ValueToDouble(pThis, newPropertyValue.get()); |
+ } |
+ if (arg->IsObject()) { |
std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); |
GetObjectDefaultValue(arg, newPropertyValue.get()); |
- dRet = ValueToDouble(pThis, newPropertyValue.get()); |
- } else if (arg->IsString()) { |
+ return ValueToDouble(pThis, newPropertyValue.get()); |
+ } |
+ if (arg->IsString()) { |
CFX_ByteString bsOutput; |
arg->ToString(bsOutput); |
- dRet = XFA_ByteStringToDouble(bsOutput.AsStringC()); |
- } else if (arg->IsUndefined()) { |
- dRet = 0; |
- } else { |
- dRet = arg->ToDouble(); |
+ return XFA_ByteStringToDouble(bsOutput.AsStringC()); |
} |
- return dRet; |
+ if (arg->IsUndefined()) |
+ return 0; |
+ return arg->ToDouble(); |
} |
// static. |
@@ -6480,37 +6492,36 @@ double CXFA_FM2JSContext::ExtractDouble(CFXJSE_Value* pThis, |
CFXJSE_Value* src, |
bool* ret) { |
ASSERT(ret); |
- |
- v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
*ret = true; |
if (!src) |
return 0; |
- if (src->IsArray()) { |
- std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
- src->GetObjectProperty("length", lengthValue.get()); |
- int32_t iLength = lengthValue->ToInteger(); |
- if (iLength <= 2) { |
- *ret = false; |
- return 0.0; |
- } |
+ if (!src->IsArray()) |
+ return ValueToDouble(pThis, src); |
- std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
- std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
- src->GetObjectPropertyByIdx(1, propertyValue.get()); |
- src->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
- if (propertyValue->IsNull()) |
- return ValueToDouble(pThis, jsObjectValue.get()); |
- |
- CFX_ByteString propertyStr; |
- propertyValue->ToString(propertyStr); |
- std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); |
- jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
- newPropertyValue.get()); |
- return ValueToDouble(pThis, newPropertyValue.get()); |
- } |
- return ValueToDouble(pThis, src); |
+ v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
+ std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
+ src->GetObjectProperty("length", lengthValue.get()); |
+ int32_t iLength = lengthValue->ToInteger(); |
+ if (iLength <= 2) { |
+ *ret = false; |
+ return 0.0; |
+ } |
+ |
+ std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
+ std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
+ src->GetObjectPropertyByIdx(1, propertyValue.get()); |
+ src->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
+ if (propertyValue->IsNull()) |
+ return ValueToDouble(pThis, jsObjectValue.get()); |
+ |
+ CFX_ByteString propertyStr; |
+ propertyValue->ToString(propertyStr); |
+ std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); |
+ jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
+ newPropertyValue.get()); |
+ return ValueToDouble(pThis, newPropertyValue.get()); |
} |
// static |