diff --git a/xfa/fxfa/cxfa_ffnotify.cpp b/xfa/fxfa/cxfa_ffnotify.cpp
index 91f1ec0..390ade7 100644
--- a/xfa/fxfa/cxfa_ffnotify.cpp
+++ b/xfa/fxfa/cxfa_ffnotify.cpp
@@ -220,10 +220,10 @@
   EventParam.m_eType = XFA_EVENT_Unknown;
   EventParam.m_bTargeted = false;
 
-  XFA_EventError iRet;
-  bool bRet;
-  std::tie(iRet, bRet) = item->ExecuteBoolScript(pDocView, script, &EventParam);
-  return iRet == XFA_EventError::kSuccess && bRet;
+  CXFA_Node::BoolScriptResult result =
+      item->ExecuteBoolScript(pDocView, script, &EventParam);
+  return result.xfa_event_result == XFA_EventError::kSuccess &&
+         result.script_result;
 }
 
 XFA_EventError CXFA_FFNotify::ExecEventByDeepFirst(CXFA_Node* pFormNode,
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index 54537fa..2f0297b 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -2676,14 +2676,13 @@
       pDocView->GetLayoutStatus() != CXFA_FFDocView::LayoutStatus::kEnd;
 
   XFA_EventError iFormat = XFA_EventError::kNotExist;
-  XFA_EventError iRet = XFA_EventError::kNotExist;
   CXFA_Script* script = validate->GetScriptIfExists();
-  bool bRet = false;
   bool hasBoolResult = (bInitDoc || bStatus) && GetRawValue().IsEmpty();
+  CXFA_Node::BoolScriptResult result = {XFA_EventError::kNotExist, false};
   if (script) {
     CXFA_EventParam eParam;
     eParam.m_eType = XFA_EVENT_Validate;
-    std::tie(iRet, bRet) = ExecuteBoolScript(pDocView, script, &eParam);
+    result = ExecuteBoolScript(pDocView, script, &eParam);
   }
 
   XFA_VERSION version = pDocView->GetDoc()->GetXFADoc()->GetCurVersionMode();
@@ -2696,15 +2695,16 @@
     if (!bVersionFlag)
       bVersionFlag = pDocView->GetDoc()->GetXFADoc()->is_scripting();
     XFA_EventErrorAccumulate(
-        &iRet,
+        &result.xfa_event_result,
         ProcessNullTestValidate(pDocView, validate, iFlags, bVersionFlag));
   }
-  if (iRet == XFA_EventError::kSuccess && iFormat != XFA_EventError::kSuccess &&
-      hasBoolResult && !bRet) {
+  if (result.xfa_event_result == XFA_EventError::kSuccess &&
+      iFormat != XFA_EventError::kSuccess && hasBoolResult &&
+      !result.script_result) {
     ProcessScriptTestValidate(pDocView, validate, bVersionFlag);
   }
-  XFA_EventErrorAccumulate(&iRet, iFormat);
-  return iRet;
+  XFA_EventErrorAccumulate(&result.xfa_event_result, iFormat);
+  return result.xfa_event_result;
 }
 
 WideString CXFA_Node::GetValidateCaptionName(bool bVersionFlag) {
@@ -2742,10 +2742,10 @@
 XFA_EventError CXFA_Node::ExecuteScript(CXFA_FFDocView* pDocView,
                                         CXFA_Script* script,
                                         CXFA_EventParam* pEventParam) {
-  return ExecuteBoolScript(pDocView, script, pEventParam).first;
+  return ExecuteBoolScript(pDocView, script, pEventParam).xfa_event_result;
 }
 
-std::pair<XFA_EventError, bool> CXFA_Node::ExecuteBoolScript(
+CXFA_Node::BoolScriptResult CXFA_Node::ExecuteBoolScript(
     CXFA_FFDocView* pDocView,
     CXFA_Script* script,
     CXFA_EventParam* pEventParam) {
diff --git a/xfa/fxfa/parser/cxfa_node.h b/xfa/fxfa/parser/cxfa_node.h
index 6156b03..d0c6798 100644
--- a/xfa/fxfa/parser/cxfa_node.h
+++ b/xfa/fxfa/parser/cxfa_node.h
@@ -112,6 +112,11 @@
     UNOWNED_PTR_EXCLUSION void* default_value;  // POD type.
   };
 
+  struct BoolScriptResult {
+    XFA_EventError xfa_event_result;
+    bool script_result;
+  };
+
   // Node is created from cppgc heap.
   static CXFA_Node* Create(CXFA_Document* doc,
                            XFA_Element element,
@@ -301,10 +306,9 @@
   XFA_EventError ExecuteScript(CXFA_FFDocView* pDocView,
                                CXFA_Script* script,
                                CXFA_EventParam* pEventParam);
-  std::pair<XFA_EventError, bool> ExecuteBoolScript(
-      CXFA_FFDocView* pDocView,
-      CXFA_Script* script,
-      CXFA_EventParam* pEventParam);
+  BoolScriptResult ExecuteBoolScript(CXFA_FFDocView* pDocView,
+                                     CXFA_Script* script,
+                                     CXFA_EventParam* pEventParam);
 
   CXFA_Node* GetUIChildNode();
 
