summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordsinclair <dsinclair@chromium.org>2016-06-09 11:47:51 -0700
committerCommit bot <commit-bot@chromium.org>2016-06-09 11:47:51 -0700
commitbd136fb1ad8faa377bee0982ee9ef09d150ce6ca (patch)
treea96dfadd131b6b5555d7503a0d8cecb42b427481
parent20d6b76d82a762e75e8c2a89976f93acd9af7467 (diff)
downloadpdfium-bd136fb1ad8faa377bee0982ee9ef09d150ce6ca.tar.xz
xfa_fm2jscontext method cleanup - pt IX of IX
Clean up ::ExtractDouble, ::ValueToDouble, ::ValueToFloat, ::ValueToInteger, ::ParseResolveResult, ::ResolveObjects, ::GetObjectByName, ::unfoldArgs, ::simpleValueCompare, ::ValueIsNull, ::concat_fm_object, ::fm_var_filter, ::get_fm_value, ::is_fm_array, ::is_fm_object, ::eval_translation, ::dotdot_accessor and ::dot_accessor Review-Url: https://codereview.chromium.org/2053583003
-rw-r--r--xfa/fxfa/fm2js/xfa_fm2jscontext.cpp1117
-rw-r--r--xfa/fxfa/fm2js/xfa_fm2jscontext.h2
2 files changed, 565 insertions, 554 deletions
diff --git a/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp b/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp
index 53ccf0b5da..fded5eed85 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
diff --git a/xfa/fxfa/fm2js/xfa_fm2jscontext.h b/xfa/fxfa/fm2js/xfa_fm2jscontext.h
index 92c819b16e..59137f0907 100644
--- a/xfa/fxfa/fm2js/xfa_fm2jscontext.h
+++ b/xfa/fxfa/fm2js/xfa_fm2jscontext.h
@@ -404,7 +404,7 @@ class CXFA_FM2JSContext : public CFXJSE_HostObject {
static void GenerateSomExpression(const CFX_ByteStringC& szName,
int32_t iIndexFlags,
int32_t iIndexValue,
- FX_BOOL bIsStar,
+ bool bIsStar,
CFX_ByteString& szSomExp);
static FX_BOOL GetObjectByName(CFXJSE_Value* pThis,
CFXJSE_Value* accessorValue,