diff --git a/fxjs/xfa/cfxjse_formcalc_context.cpp b/fxjs/xfa/cfxjse_formcalc_context.cpp
index 547d978..55c9e4c 100644
--- a/fxjs/xfa/cfxjse_formcalc_context.cpp
+++ b/fxjs/xfa/cfxjse_formcalc_context.cpp
@@ -5050,19 +5050,19 @@
   }
 
   XFA_RESOLVENODE_RS resolveNodeRS;
-  bool iRet = false;
+  bool bRet = false;
   ByteString bsAccessorName = args.GetUTF8String(1);
   if (argAccessor->IsObject() ||
       (argAccessor->IsNull() && bsAccessorName.IsEmpty())) {
-    iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringView(),
+    bRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringView(),
                           &resolveNodeRS, true, szName.IsEmpty());
   } else if (!argAccessor->IsObject() && !bsAccessorName.IsEmpty() &&
              GetObjectForName(pThis, argAccessor.get(),
                               bsAccessorName.AsStringView())) {
-    iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringView(),
+    bRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringView(),
                           &resolveNodeRS, true, szName.IsEmpty());
   }
-  if (!iRet) {
+  if (!bRet) {
     pContext->ThrowPropertyNotInObjectException(
         WideString::FromUTF8(szName.AsStringView()),
         WideString::FromUTF8(szSomExp.AsStringView()));
@@ -5168,19 +5168,19 @@
   }
 
   XFA_RESOLVENODE_RS resolveNodeRS;
-  bool iRet = false;
+  bool bRet = false;
   ByteString bsAccessorName = args.GetUTF8String(1);
   if (argAccessor->IsObject() ||
       (argAccessor->IsNull() && bsAccessorName.IsEmpty())) {
-    iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringView(),
+    bRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringView(),
                           &resolveNodeRS, false, false);
   } else if (!argAccessor->IsObject() && !bsAccessorName.IsEmpty() &&
              GetObjectForName(pThis, argAccessor.get(),
                               bsAccessorName.AsStringView())) {
-    iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringView(),
+    bRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringView(),
                           &resolveNodeRS, false, false);
   }
-  if (!iRet) {
+  if (!bRet) {
     pContext->ThrowPropertyNotInObjectException(
         WideString::FromUTF8(szName.AsStringView()),
         WideString::FromUTF8(szSomExp.AsStringView()));
@@ -5661,11 +5661,11 @@
   XFA_RESOLVENODE_RS resolveNodeRS;
   uint32_t dwFlags = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties |
                      XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent;
-  bool iRet = pScriptContext->ResolveObjects(
+  bool bRet = pScriptContext->ResolveObjects(
       pScriptContext->GetThisObject(),
       WideString::FromUTF8(szAccessorName).AsStringView(), &resolveNodeRS,
       dwFlags, nullptr);
-  if (iRet && resolveNodeRS.dwFlags == XFA_ResolveNode_RSType_Nodes) {
+  if (bRet && resolveNodeRS.dwFlags == XFA_ResolveNode_RSType_Nodes) {
     accessorValue->Assign(
         pScriptContext->GetJSValueFromMap(resolveNodeRS.objects.front().Get()));
     return true;
diff --git a/fxjs/xfa/cjx_hostpseudomodel.cpp b/fxjs/xfa/cjx_hostpseudomodel.cpp
index a1ca853..2f5ffd8 100644
--- a/fxjs/xfa/cjx_hostpseudomodel.cpp
+++ b/fxjs/xfa/cjx_hostpseudomodel.cpp
@@ -289,10 +289,10 @@
     uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Parent |
                       XFA_RESOLVENODE_Siblings;
     XFA_RESOLVENODE_RS resolveNodeRS;
-    bool iRet = pScriptContext->ResolveObjects(
+    bool bRet = pScriptContext->ResolveObjects(
         pObject, runtime->ToWideString(params[0]).AsStringView(),
         &resolveNodeRS, dwFlag, nullptr);
-    if (!iRet || !resolveNodeRS.objects.front()->IsNode())
+    if (!bRet || !resolveNodeRS.objects.front()->IsNode())
       return CJS_Result::Success();
 
     pNode = resolveNodeRS.objects.front()->AsNode();
@@ -381,9 +381,9 @@
     uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Parent |
                       XFA_RESOLVENODE_Siblings;
     XFA_RESOLVENODE_RS resolveNodeRS;
-    bool iRet = pScriptContext->ResolveObjects(pObject, wsName.AsStringView(),
+    bool bRet = pScriptContext->ResolveObjects(pObject, wsName.AsStringView(),
                                                &resolveNodeRS, dwFlag, nullptr);
-    if (!iRet || !resolveNodeRS.objects.front()->IsNode())
+    if (!bRet || !resolveNodeRS.objects.front()->IsNode())
       continue;
 
     pNode = resolveNodeRS.objects.front()->AsNode();
@@ -443,10 +443,10 @@
       uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Parent |
                         XFA_RESOLVENODE_Siblings;
       XFA_RESOLVENODE_RS resolveNodeRS;
-      bool iRet = pScriptContext->ResolveObjects(
+      bool bRet = pScriptContext->ResolveObjects(
           pObject, runtime->ToWideString(params[0]).AsStringView(),
           &resolveNodeRS, dwFlag, nullptr);
-      if (!iRet || !resolveNodeRS.objects.front()->IsNode())
+      if (!bRet || !resolveNodeRS.objects.front()->IsNode())
         return CJS_Result::Success();
 
       pNode = resolveNodeRS.objects.front()->AsNode();
diff --git a/fxjs/xfa/cjx_object.cpp b/fxjs/xfa/cjx_object.cpp
index 3ae47cc..9be9172 100644
--- a/fxjs/xfa/cjx_object.cpp
+++ b/fxjs/xfa/cjx_object.cpp
@@ -1160,13 +1160,13 @@
   CXFA_Node* pProtoNode = nullptr;
   if (!wsSOM.IsEmpty()) {
     XFA_RESOLVENODE_RS resolveNodeRS;
-    bool iRet = GetDocument()->GetScriptContext()->ResolveObjects(
+    bool bRet = GetDocument()->GetScriptContext()->ResolveObjects(
         pProtoRoot, wsSOM.AsStringView(), &resolveNodeRS,
         XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes |
             XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent |
             XFA_RESOLVENODE_Siblings,
         nullptr);
-    if (iRet && resolveNodeRS.objects.front()->IsNode())
+    if (bRet && resolveNodeRS.objects.front()->IsNode())
       pProtoNode = resolveNodeRS.objects.front()->AsNode();
 
   } else if (!wsID.IsEmpty()) {
diff --git a/xfa/fgas/crt/cfgas_formatstring.cpp b/xfa/fgas/crt/cfgas_formatstring.cpp
index 45e0445..925598c 100644
--- a/xfa/fgas/crt/cfgas_formatstring.cpp
+++ b/xfa/fgas/crt/cfgas_formatstring.cpp
@@ -851,15 +851,15 @@
   const wchar_t* pStr = wsFormatString.c_str();
   const wchar_t* pToken = pStr;
   const wchar_t* pEnd = pStr + iStrLen;
-  bool iQuote = false;
+  bool bQuote = false;
   while (true) {
     if (pStr >= pEnd) {
       wsPatterns->push_back(WideString(pToken, pStr - pToken));
       return;
     }
     if (*pStr == '\'') {
-      iQuote = !iQuote;
-    } else if (*pStr == L'|' && !iQuote) {
+      bQuote = !bQuote;
+    } else if (*pStr == L'|' && !bQuote) {
       wsPatterns->push_back(WideString(pToken, pStr - pToken));
       pToken = pStr + 1;
     }
diff --git a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
index 472d8fc..901404a 100644
--- a/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
+++ b/xfa/fxfa/layout/cxfa_layoutpagemgr.cpp
@@ -190,13 +190,13 @@
         wsProcessedTarget = wsExpr.Mid(4, wsExpr.GetLength() - 5);
 
       XFA_RESOLVENODE_RS rs;
-      bool iRet = pDocument->GetScriptContext()->ResolveObjects(
+      bool bRet = pDocument->GetScriptContext()->ResolveObjects(
           pPageSetRoot, wsProcessedTarget.AsStringView(), &rs,
           XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties |
               XFA_RESOLVENODE_Attributes | XFA_RESOLVENODE_Siblings |
               XFA_RESOLVENODE_Parent,
           nullptr);
-      if (iRet && rs.objects.front()->IsNode())
+      if (bRet && rs.objects.front()->IsNode())
         return rs.objects.front()->AsNode();
     }
     iSplitIndex = iSplitNextIndex.value();
