Fix string passing coventions in xfa_fm2jscontext.h

Change-Id: Ibcb3a95a52ab67c4c9c397ff9c4eab483ef1fcc3
Reviewed-on: https://pdfium-review.googlesource.com/3954
Reviewed-by: dsinclair <dsinclair@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp b/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp
index 4ef819a..56a9915 100644
--- a/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp
+++ b/xfa/fxfa/fm2js/xfa_fm2jscontext.cpp
@@ -509,6 +509,40 @@
          c == 0x0D;
 }
 
+IFX_Locale* LocaleFromString(CXFA_Document* pDoc,
+                             CXFA_LocaleMgr* pMgr,
+                             const CFX_ByteStringC& szLocale) {
+  if (!szLocale.IsEmpty())
+    return pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale));
+
+  CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject());
+  ASSERT(pThisNode);
+  return CXFA_WidgetData(pThisNode).GetLocal();
+}
+
+CFX_WideString FormatFromString(IFX_Locale* pLocale,
+                                const CFX_ByteStringC& szFormat) {
+  if (!szFormat.IsEmpty())
+    return CFX_WideString::FromUTF8(szFormat);
+
+  return pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Default);
+}
+
+FX_LOCALEDATETIMESUBCATEGORY SubCategoryFromInt(int32_t iStyle) {
+  switch (iStyle) {
+    case 1:
+      return FX_LOCALEDATETIMESUBCATEGORY_Short;
+    case 3:
+      return FX_LOCALEDATETIMESUBCATEGORY_Long;
+    case 4:
+      return FX_LOCALEDATETIMESUBCATEGORY_Full;
+    case 0:
+    case 2:
+    default:
+      return FX_LOCALEDATETIMESUBCATEGORY_Medium;
+  }
+}
+
 }  // namespace
 
 // static
@@ -1035,9 +1069,7 @@
     return;
   }
 
-  CFX_ByteString dateString;
-  ValueToUTF8String(dateValue.get(), dateString);
-
+  CFX_ByteString dateString = ValueToUTF8String(dateValue.get());
   CFX_ByteString formatString;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, args, 1);
@@ -1045,7 +1077,7 @@
       args.GetReturnValue()->SetNull();
       return;
     }
-    ValueToUTF8String(formatValue.get(), formatString);
+    formatString = ValueToUTF8String(formatValue.get());
   }
 
   CFX_ByteString localString;
@@ -1055,16 +1087,12 @@
       args.GetReturnValue()->SetNull();
       return;
     }
-    ValueToUTF8String(localValue.get(), localString);
+    localString = ValueToUTF8String(localValue.get());
   }
 
-  CFX_ByteString szIsoDateString;
-  if (!Local2IsoDate(pThis, dateString.AsStringC(), formatString.AsStringC(),
-                     localString.AsStringC(), szIsoDateString)) {
-    args.GetReturnValue()->SetInteger(0);
-    return;
-  }
-
+  CFX_ByteString szIsoDateString =
+      Local2IsoDate(pThis, dateString.AsStringC(), formatString.AsStringC(),
+                    localString.AsStringC());
   args.GetReturnValue()->SetInteger(
       DateString2Num(szIsoDateString.AsStringC()));
 }
@@ -1099,11 +1127,11 @@
       args.GetReturnValue()->SetNull();
       return;
     }
-    ValueToUTF8String(argLocal.get(), szLocal);
+    szLocal = ValueToUTF8String(argLocal.get());
   }
 
-  CFX_ByteString formatStr;
-  GetStandardDateFormat(pThis, iStyle, szLocal.AsStringC(), formatStr);
+  CFX_ByteString formatStr =
+      GetStandardDateFormat(pThis, iStyle, szLocal.AsStringC());
   args.GetReturnValue()->SetString(formatStr.AsStringC());
 }
 
@@ -1116,15 +1144,12 @@
         ->ThrowParamCountMismatchException(L"IsoDate2Num");
     return;
   }
-
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0);
   if (argOne->IsNull()) {
     args.GetReturnValue()->SetNull();
     return;
   }
-
-  CFX_ByteString szArgString;
-  ValueToUTF8String(argOne.get(), szArgString);
+  CFX_ByteString szArgString = ValueToUTF8String(argOne.get());
   args.GetReturnValue()->SetInteger(DateString2Num(szArgString.AsStringC()));
 }
 
@@ -1146,9 +1171,7 @@
 
   CXFA_Document* pDoc = pContext->GetDocument();
   CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
-
-  CFX_ByteString szArgString;
-  ValueToUTF8String(argOne.get(), szArgString);
+  CFX_ByteString szArgString = ValueToUTF8String(argOne.get());
   szArgString = szArgString.Mid(szArgString.Find('T', 0) + 1);
   if (szArgString.IsEmpty()) {
     args.GetReturnValue()->SetInteger(0);
@@ -1213,11 +1236,11 @@
       args.GetReturnValue()->SetNull();
       return;
     }
-    ValueToUTF8String(argLocal.get(), szLocal);
+    szLocal = ValueToUTF8String(argLocal.get());
   }
 
-  CFX_ByteString formatStr;
-  GetLocalDateFormat(pThis, iStyle, szLocal.AsStringC(), formatStr, false);
+  CFX_ByteString formatStr =
+      GetLocalDateFormat(pThis, iStyle, szLocal.AsStringC(), false);
   args.GetReturnValue()->SetString(formatStr.AsStringC());
 }
 
@@ -1251,11 +1274,11 @@
       args.GetReturnValue()->SetNull();
       return;
     }
-    ValueToUTF8String(argLocal.get(), szLocal);
+    szLocal = ValueToUTF8String(argLocal.get());
   }
 
-  CFX_ByteString formatStr;
-  GetLocalTimeFormat(pThis, iStyle, szLocal.AsStringC(), formatStr, false);
+  CFX_ByteString formatStr =
+      GetLocalTimeFormat(pThis, iStyle, szLocal.AsStringC(), false);
   args.GetReturnValue()->SetString(formatStr.AsStringC());
 }
 
@@ -1287,7 +1310,7 @@
       args.GetReturnValue()->SetNull();
       return;
     }
-    ValueToUTF8String(formatValue.get(), formatString);
+    formatString = ValueToUTF8String(formatValue.get());
   }
 
   CFX_ByteString localString;
@@ -1297,7 +1320,7 @@
       args.GetReturnValue()->SetNull();
       return;
     }
-    ValueToUTF8String(localValue.get(), localString);
+    localString = ValueToUTF8String(localValue.get());
   }
 
   int32_t iYear = 1900;
@@ -1394,9 +1417,9 @@
 
   CFX_ByteString szIsoDateString;
   szIsoDateString.Format("%d%02d%02d", iYear + i, iMonth, iDay);
-  CFX_ByteString szLocalDateString;
-  IsoDate2Local(pThis, szIsoDateString.AsStringC(), formatString.AsStringC(),
-                localString.AsStringC(), szLocalDateString);
+  CFX_ByteString szLocalDateString =
+      IsoDate2Local(pThis, szIsoDateString.AsStringC(),
+                    formatString.AsStringC(), localString.AsStringC());
   args.GetReturnValue()->SetString(szLocalDateString.AsStringC());
 }
 
@@ -1429,7 +1452,7 @@
       args.GetReturnValue()->SetNull();
       return;
     }
-    ValueToUTF8String(formatValue.get(), formatString);
+    formatString = ValueToUTF8String(formatValue.get());
   }
 
   CFX_ByteString localString;
@@ -1439,12 +1462,11 @@
       args.GetReturnValue()->SetNull();
       return;
     }
-    ValueToUTF8String(localValue.get(), localString);
+    localString = ValueToUTF8String(localValue.get());
   }
 
-  CFX_ByteString szGMTTimeString;
-  Num2AllTime(pThis, iTime, formatString.AsStringC(), localString.AsStringC(),
-              true, szGMTTimeString);
+  CFX_ByteString szGMTTimeString = Num2AllTime(
+      pThis, iTime, formatString.AsStringC(), localString.AsStringC(), true);
   args.GetReturnValue()->SetString(szGMTTimeString.AsStringC());
 }
 
@@ -1476,7 +1498,7 @@
       args.GetReturnValue()->SetNull();
       return;
     }
-    ValueToUTF8String(formatValue.get(), formatString);
+    formatString = ValueToUTF8String(formatValue.get());
   }
 
   CFX_ByteString localString;
@@ -1486,12 +1508,12 @@
       args.GetReturnValue()->SetNull();
       return;
     }
-    ValueToUTF8String(localValue.get(), localString);
+    localString = ValueToUTF8String(localValue.get());
   }
 
-  CFX_ByteString szLocalTimeString;
-  Num2AllTime(pThis, (int32_t)fTime, formatString.AsStringC(),
-              localString.AsStringC(), false, szLocalTimeString);
+  CFX_ByteString szLocalTimeString =
+      Num2AllTime(pThis, static_cast<int32_t>(fTime), formatString.AsStringC(),
+                  localString.AsStringC(), false);
   args.GetReturnValue()->SetString(szLocalTimeString.AsStringC());
 }
 
@@ -1528,7 +1550,7 @@
     args.GetReturnValue()->SetNull();
     return;
   }
-  ValueToUTF8String(timeValue.get(), timeString);
+  timeString = ValueToUTF8String(timeValue.get());
 
   CFX_ByteString formatString;
   if (argc > 1) {
@@ -1537,7 +1559,7 @@
       args.GetReturnValue()->SetNull();
       return;
     }
-    ValueToUTF8String(formatValue.get(), formatString);
+    formatString = ValueToUTF8String(formatValue.get());
   }
 
   CFX_ByteString localString;
@@ -1547,7 +1569,7 @@
       args.GetReturnValue()->SetNull();
       return;
     }
-    ValueToUTF8String(localValue.get(), localString);
+    localString = ValueToUTF8String(localValue.get());
   }
 
   CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument();
@@ -1627,11 +1649,11 @@
       args.GetReturnValue()->SetNull();
       return;
     }
-    ValueToUTF8String(argLocal.get(), szLocal);
+    szLocal = ValueToUTF8String(argLocal.get());
   }
 
-  CFX_ByteString formatStr;
-  GetStandardTimeFormat(pThis, iStyle, szLocal.AsStringC(), formatStr);
+  CFX_ByteString formatStr =
+      GetStandardTimeFormat(pThis, iStyle, szLocal.AsStringC());
   args.GetReturnValue()->SetString(formatStr.AsStringC());
 }
 
@@ -1911,195 +1933,76 @@
 }
 
 // static
-bool CXFA_FM2JSContext::Local2IsoDate(CFXJSE_Value* pThis,
-                                      const CFX_ByteStringC& szDate,
-                                      const CFX_ByteStringC& szFormat,
-                                      const CFX_ByteStringC& szLocale,
-                                      CFX_ByteString& strIsoDate) {
+CFX_ByteString CXFA_FM2JSContext::Local2IsoDate(
+    CFXJSE_Value* pThis,
+    const CFX_ByteStringC& szDate,
+    const CFX_ByteStringC& szFormat,
+    const CFX_ByteStringC& szLocale) {
   CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument();
   if (!pDoc)
-    return false;
+    return CFX_ByteString();
 
   CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
-  IFX_Locale* pLocale = nullptr;
-  if (szLocale.IsEmpty()) {
-    CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject());
-    ASSERT(pThisNode);
-
-    CXFA_WidgetData widgetData(pThisNode);
-    pLocale = widgetData.GetLocal();
-  } else {
-    pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale));
-  }
+  IFX_Locale* pLocale = LocaleFromString(pDoc, pMgr, szLocale);
   if (!pLocale)
-    return false;
+    return CFX_ByteString();
 
-  CFX_WideString wsFormat;
-  if (szFormat.IsEmpty())
-    wsFormat = pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Default);
-  else
-    wsFormat = CFX_WideString::FromUTF8(szFormat);
+  CFX_WideString wsFormat = FormatFromString(pLocale, szFormat);
+  CFX_DateTime dt =
+      CXFA_LocaleValue(XFA_VT_DATE, CFX_WideString::FromUTF8(szDate), wsFormat,
+                       pLocale, pMgr)
+          .GetDate();
 
-  CXFA_LocaleValue widgetValue(XFA_VT_DATE, CFX_WideString::FromUTF8(szDate),
-                               wsFormat, pLocale, pMgr);
-  CFX_DateTime dt = widgetValue.GetDate();
+  CFX_ByteString strIsoDate;
   strIsoDate.Format("%4d-%02d-%02d", dt.GetYear(), dt.GetMonth(), dt.GetDay());
-  return true;
+  return strIsoDate;
 }
 
 // static
-bool CXFA_FM2JSContext::Local2IsoTime(CFXJSE_Value* pThis,
-                                      const CFX_ByteStringC& szTime,
-                                      const CFX_ByteStringC& szFormat,
-                                      const CFX_ByteStringC& szLocale,
-                                      CFX_ByteString& strIsoTime) {
+CFX_ByteString CXFA_FM2JSContext::IsoDate2Local(
+    CFXJSE_Value* pThis,
+    const CFX_ByteStringC& szDate,
+    const CFX_ByteStringC& szFormat,
+    const CFX_ByteStringC& szLocale) {
   CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument();
   if (!pDoc)
-    return false;
+    return CFX_ByteString();
 
   CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
-  IFX_Locale* pLocale = nullptr;
-  if (szLocale.IsEmpty()) {
-    CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject());
-    ASSERT(pThisNode);
-
-    CXFA_WidgetData widgetData(pThisNode);
-    pLocale = widgetData.GetLocal();
-  } else {
-    pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale));
-  }
+  IFX_Locale* pLocale = LocaleFromString(pDoc, pMgr, szLocale);
   if (!pLocale)
-    return false;
+    return CFX_ByteString();
 
-  CFX_WideString wsFormat;
-  if (szFormat.IsEmpty())
-    wsFormat = pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default);
-  else
-    wsFormat = CFX_WideString::FromUTF8(szFormat);
-
-  wsFormat = L"time{" + wsFormat + L"}";
-  CXFA_LocaleValue widgetValue(XFA_VT_TIME, CFX_WideString::FromUTF8(szTime),
-                               wsFormat, pLocale, pMgr);
-  CFX_DateTime utime = widgetValue.GetTime();
-  strIsoTime.Format("%02d:%02d:%02d.%03d", utime.GetHour(), utime.GetMinute(),
-                    utime.GetSecond(), utime.GetMillisecond());
-  return true;
-}
-
-// static
-bool CXFA_FM2JSContext::IsoDate2Local(CFXJSE_Value* pThis,
-                                      const CFX_ByteStringC& szDate,
-                                      const CFX_ByteStringC& szFormat,
-                                      const CFX_ByteStringC& szLocale,
-                                      CFX_ByteString& strLocalDate) {
-  CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument();
-  if (!pDoc)
-    return false;
-
-  CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
-  IFX_Locale* pLocale = nullptr;
-  if (szLocale.IsEmpty()) {
-    CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject());
-    ASSERT(pThisNode);
-    CXFA_WidgetData widgetData(pThisNode);
-    pLocale = widgetData.GetLocal();
-  } else {
-    pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale));
-  }
-  if (!pLocale)
-    return false;
-
-  CFX_WideString wsFormat;
-  if (szFormat.IsEmpty())
-    wsFormat = pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Default);
-  else
-    wsFormat = CFX_WideString::FromUTF8(szFormat);
-
-  CXFA_LocaleValue widgetValue(XFA_VT_DATE, CFX_WideString::FromUTF8(szDate),
-                               pMgr);
+  CFX_WideString wsFormat = FormatFromString(pLocale, szFormat);
   CFX_WideString wsRet;
-  widgetValue.FormatPatterns(wsRet, wsFormat, pLocale,
-                             XFA_VALUEPICTURE_Display);
-  strLocalDate = wsRet.UTF8Encode();
-  return true;
+  CXFA_LocaleValue(XFA_VT_DATE, CFX_WideString::FromUTF8(szDate), pMgr)
+      .FormatPatterns(wsRet, wsFormat, pLocale, XFA_VALUEPICTURE_Display);
+  return wsRet.UTF8Encode();
 }
 
 // static
-bool CXFA_FM2JSContext::IsoTime2Local(CFXJSE_Value* pThis,
-                                      const CFX_ByteStringC& szTime,
-                                      const CFX_ByteStringC& szFormat,
-                                      const CFX_ByteStringC& szLocale,
-                                      CFX_ByteString& strLocalTime) {
+CFX_ByteString CXFA_FM2JSContext::IsoTime2Local(
+    CFXJSE_Value* pThis,
+    const CFX_ByteStringC& szTime,
+    const CFX_ByteStringC& szFormat,
+    const CFX_ByteStringC& szLocale) {
   CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument();
   if (!pDoc)
-    return false;
+    return CFX_ByteString();
 
   CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
-  IFX_Locale* pLocale = nullptr;
-  if (szLocale.IsEmpty()) {
-    CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject());
-    ASSERT(pThisNode);
-    CXFA_WidgetData widgetData(pThisNode);
-    pLocale = widgetData.GetLocal();
-  } else {
-    pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale));
-  }
+  IFX_Locale* pLocale = LocaleFromString(pDoc, pMgr, szLocale);
   if (!pLocale)
-    return false;
+    return CFX_ByteString();
 
-  CFX_WideString wsFormat;
-  if (szFormat.IsEmpty())
-    wsFormat = pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default);
-  else
-    wsFormat = CFX_WideString::FromUTF8(szFormat);
-
-  wsFormat = L"time{" + wsFormat + L"}";
+  CFX_WideString wsFormat = {
+      L"time{", FormatFromString(pLocale, szFormat).AsStringC(), L"}"};
   CXFA_LocaleValue widgetValue(XFA_VT_TIME, CFX_WideString::FromUTF8(szTime),
                                pMgr);
   CFX_WideString wsRet;
   widgetValue.FormatPatterns(wsRet, wsFormat, pLocale,
                              XFA_VALUEPICTURE_Display);
-  strLocalTime = wsRet.UTF8Encode();
-  return true;
-}
-
-// static
-bool CXFA_FM2JSContext::GetGMTTime(CFXJSE_Value* pThis,
-                                   const CFX_ByteStringC& szTime,
-                                   const CFX_ByteStringC& szFormat,
-                                   const CFX_ByteStringC& szLocale,
-                                   CFX_ByteString& strGMTTime) {
-  CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument();
-  if (!pDoc)
-    return false;
-
-  CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
-  IFX_Locale* pLocale = nullptr;
-  if (szLocale.IsEmpty()) {
-    CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject());
-    ASSERT(pThisNode);
-    CXFA_WidgetData widgetData(pThisNode);
-    pLocale = widgetData.GetLocal();
-  } else {
-    pLocale = pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale));
-  }
-  if (!pLocale)
-    return false;
-
-  CFX_WideString wsFormat;
-  if (szFormat.IsEmpty())
-    wsFormat = pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default);
-  else
-    wsFormat = CFX_WideString::FromUTF8(szFormat);
-
-  wsFormat = L"time{" + wsFormat + L"}";
-  CXFA_LocaleValue widgetValue(XFA_VT_TIME, CFX_WideString::FromUTF8(szTime),
-                               pMgr);
-  CFX_WideString wsRet;
-  widgetValue.FormatPatterns(wsRet, wsFormat, pLocale,
-                             XFA_VALUEPICTURE_Display);
-  strGMTTime = wsRet.UTF8Encode();
-  return true;
+  return wsRet.UTF8Encode();
 }
 
 // static
@@ -2160,126 +2063,73 @@
 }
 
 // static
-void CXFA_FM2JSContext::GetLocalDateFormat(CFXJSE_Value* pThis,
-                                           int32_t iStyle,
-                                           const CFX_ByteStringC& szLocalStr,
-                                           CFX_ByteString& strFormat,
-                                           bool bStandard) {
-  FX_LOCALEDATETIMESUBCATEGORY strStyle;
-  switch (iStyle) {
-    case 1:
-      strStyle = FX_LOCALEDATETIMESUBCATEGORY_Short;
-      break;
-    case 3:
-      strStyle = FX_LOCALEDATETIMESUBCATEGORY_Long;
-      break;
-    case 4:
-      strStyle = FX_LOCALEDATETIMESUBCATEGORY_Full;
-      break;
-    case 0:
-    case 2:
-    default:
-      strStyle = FX_LOCALEDATETIMESUBCATEGORY_Medium;
-      break;
-  }
+CFX_ByteString CXFA_FM2JSContext::GetLocalDateFormat(
+    CFXJSE_Value* pThis,
+    int32_t iStyle,
+    const CFX_ByteStringC& szLocale,
+    bool bStandard) {
   CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument();
   if (!pDoc)
-    return;
+    return CFX_ByteString();
 
-  IFX_Locale* pLocale = nullptr;
-  if (szLocalStr.IsEmpty()) {
-    CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject());
-    ASSERT(pThisNode);
-
-    CXFA_WidgetData widgetData(pThisNode);
-    pLocale = widgetData.GetLocal();
-  } else {
-    pLocale = pDoc->GetLocalMgr()->GetLocaleByName(
-        CFX_WideString::FromUTF8(szLocalStr));
-  }
+  CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
+  IFX_Locale* pLocale = LocaleFromString(pDoc, pMgr, szLocale);
   if (!pLocale)
-    return;
+    return CFX_ByteString();
 
-  CFX_WideString strRet = pLocale->GetDatePattern(strStyle);
+  CFX_WideString strRet = pLocale->GetDatePattern(SubCategoryFromInt(iStyle));
   if (!bStandard) {
     AlternateDateTimeSymbols(strRet, pLocale->GetDateTimeSymbols(),
                              g_sAltTable_Date);
   }
-  strFormat = strRet.UTF8Encode();
+  return strRet.UTF8Encode();
 }
 
 // static
-void CXFA_FM2JSContext::GetLocalTimeFormat(CFXJSE_Value* pThis,
-                                           int32_t iStyle,
-                                           const CFX_ByteStringC& szLocalStr,
-                                           CFX_ByteString& strFormat,
-                                           bool bStandard) {
-  FX_LOCALEDATETIMESUBCATEGORY strStyle;
-  switch (iStyle) {
-    case 1:
-      strStyle = FX_LOCALEDATETIMESUBCATEGORY_Short;
-      break;
-    case 3:
-      strStyle = FX_LOCALEDATETIMESUBCATEGORY_Long;
-      break;
-    case 4:
-      strStyle = FX_LOCALEDATETIMESUBCATEGORY_Full;
-      break;
-    case 0:
-    case 2:
-    default:
-      strStyle = FX_LOCALEDATETIMESUBCATEGORY_Medium;
-      break;
-  }
+CFX_ByteString CXFA_FM2JSContext::GetLocalTimeFormat(
+    CFXJSE_Value* pThis,
+    int32_t iStyle,
+    const CFX_ByteStringC& szLocale,
+    bool bStandard) {
   CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument();
   if (!pDoc)
-    return;
+    return CFX_ByteString();
 
-  IFX_Locale* pLocale = nullptr;
-  if (szLocalStr.IsEmpty()) {
-    CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject());
-    ASSERT(pThisNode);
-
-    CXFA_WidgetData widgetData(pThisNode);
-    pLocale = widgetData.GetLocal();
-  } else {
-    pLocale = pDoc->GetLocalMgr()->GetLocaleByName(
-        CFX_WideString::FromUTF8(szLocalStr));
-  }
+  CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
+  IFX_Locale* pLocale = LocaleFromString(pDoc, pMgr, szLocale);
   if (!pLocale)
-    return;
+    return CFX_ByteString();
 
-  CFX_WideString strRet = pLocale->GetTimePattern(strStyle);
+  CFX_WideString strRet = pLocale->GetTimePattern(SubCategoryFromInt(iStyle));
   if (!bStandard) {
     AlternateDateTimeSymbols(strRet, pLocale->GetDateTimeSymbols(),
                              g_sAltTable_Time);
   }
-  strFormat = strRet.UTF8Encode();
+  return strRet.UTF8Encode();
 }
 
 // static
-void CXFA_FM2JSContext::GetStandardDateFormat(CFXJSE_Value* pThis,
-                                              int32_t iStyle,
-                                              const CFX_ByteStringC& szLocalStr,
-                                              CFX_ByteString& strFormat) {
-  GetLocalDateFormat(pThis, iStyle, szLocalStr, strFormat, true);
+CFX_ByteString CXFA_FM2JSContext::GetStandardDateFormat(
+    CFXJSE_Value* pThis,
+    int32_t iStyle,
+    const CFX_ByteStringC& szLocalStr) {
+  return GetLocalDateFormat(pThis, iStyle, szLocalStr, true);
 }
 
 // static
-void CXFA_FM2JSContext::GetStandardTimeFormat(CFXJSE_Value* pThis,
-                                              int32_t iStyle,
-                                              const CFX_ByteStringC& szLocalStr,
-                                              CFX_ByteString& strFormat) {
-  GetLocalTimeFormat(pThis, iStyle, szLocalStr, strFormat, true);
+CFX_ByteString CXFA_FM2JSContext::GetStandardTimeFormat(
+    CFXJSE_Value* pThis,
+    int32_t iStyle,
+    const CFX_ByteStringC& szLocalStr) {
+  return GetLocalTimeFormat(pThis, iStyle, szLocalStr, true);
 }
 
 // static
-void CXFA_FM2JSContext::Num2AllTime(CFXJSE_Value* pThis,
-                                    int32_t iTime,
-                                    const CFX_ByteStringC& szFormat,
-                                    const CFX_ByteStringC& szLocale,
-                                    bool bGM,
-                                    CFX_ByteString& strTime) {
+CFX_ByteString CXFA_FM2JSContext::Num2AllTime(CFXJSE_Value* pThis,
+                                              int32_t iTime,
+                                              const CFX_ByteStringC& szFormat,
+                                              const CFX_ByteStringC& szLocale,
+                                              bool bGM) {
   int32_t iHour = 0;
   int32_t iMin = 0;
   int32_t iSec = 0;
@@ -2297,18 +2147,9 @@
     iSec += iZoneSec;
   }
 
-  bool iRet = false;
   CFX_ByteString strIsoTime;
   strIsoTime.Format("%02d:%02d:%02d", iHour, iMin, iSec);
-  if (bGM) {
-    iRet =
-        GetGMTTime(pThis, strIsoTime.AsStringC(), szFormat, szLocale, strTime);
-  } else {
-    iRet = IsoTime2Local(pThis, strIsoTime.AsStringC(), szFormat, szLocale,
-                         strTime);
-  }
-  if (!iRet)
-    strTime = "";
+  return IsoTime2Local(pThis, strIsoTime.AsStringC(), szFormat, szLocale);
 }
 
 // static
@@ -2791,17 +2632,15 @@
           jsObjectValue->GetObjectProperty(
               propertyValue->ToString().AsStringC(), newPropertyValue.get());
         }
-        CFX_ByteString bsChoosed;
-        ValueToUTF8String(newPropertyValue.get(), bsChoosed);
-        args.GetReturnValue()->SetString(bsChoosed.AsStringC());
+        CFX_ByteString bsChosen = ValueToUTF8String(newPropertyValue.get());
+        args.GetReturnValue()->SetString(bsChosen.AsStringC());
         bFound = true;
       }
     } else {
       iValueIndex++;
       if (iValueIndex == iIndex) {
-        CFX_ByteString bsChoosed;
-        ValueToUTF8String(argIndexValue.get(), bsChoosed);
-        args.GetReturnValue()->SetString(bsChoosed.AsStringC());
+        CFX_ByteString bsChosen = ValueToUTF8String(argIndexValue.get());
+        args.GetReturnValue()->SetString(bsChosen.AsStringC());
         bFound = true;
       }
     }
@@ -2892,12 +2731,9 @@
     return;
   }
 
-  CFX_ByteString oneString;
-  CFX_ByteString lowString;
-  CFX_ByteString heightString;
-  ValueToUTF8String(argOne.get(), oneString);
-  ValueToUTF8String(argLow.get(), lowString);
-  ValueToUTF8String(argHigh.get(), heightString);
+  CFX_ByteString oneString = ValueToUTF8String(argOne.get());
+  CFX_ByteString lowString = ValueToUTF8String(argLow.get());
+  CFX_ByteString heightString = ValueToUTF8String(argHigh.get());
   args.GetReturnValue()->SetInteger(
       (oneString.Compare(lowString.AsStringC()) >= 0) &&
       (oneString.Compare(heightString.AsStringC()) <= 0));
@@ -2929,8 +2765,7 @@
 
   v8::Isolate* pIsolate = pContext->GetScriptRuntime();
   std::unique_ptr<CFXJSE_Value> scriptValue = GetSimpleValue(pThis, args, 0);
-  CFX_ByteString utf8ScriptString;
-  ValueToUTF8String(scriptValue.get(), utf8ScriptString);
+  CFX_ByteString utf8ScriptString = ValueToUTF8String(scriptValue.get());
   if (utf8ScriptString.IsEmpty()) {
     args.GetReturnValue()->SetNull();
     return;
@@ -3024,8 +2859,7 @@
     return;
   }
 
-  CFX_ByteString unitspanString;
-  ValueToUTF8String(unitspanValue.get(), unitspanString);
+  CFX_ByteString unitspanString = ValueToUTF8String(unitspanValue.get());
   if (unitspanString.IsEmpty()) {
     args.GetReturnValue()->SetString("in");
     return;
@@ -3137,8 +2971,7 @@
     return;
   }
 
-  CFX_ByteString unitspanString;
-  ValueToUTF8String(unitspanValue.get(), unitspanString);
+  CFX_ByteString unitspanString = ValueToUTF8String(unitspanValue.get());
   const char* pData = unitspanString.c_str();
   if (!pData) {
     args.GetReturnValue()->SetInteger(0);
@@ -3176,8 +3009,7 @@
   CFX_ByteString strUnit;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> unitValue = GetSimpleValue(pThis, args, 1);
-    CFX_ByteString unitTempString;
-    ValueToUTF8String(unitValue.get(), unitTempString);
+    CFX_ByteString unitTempString = ValueToUTF8String(unitValue.get());
     const char* pChar = unitTempString.c_str();
     int32_t uVal = 0;
     while (IsWhitespace(pChar[uVal]))
@@ -3281,15 +3113,13 @@
     return;
   }
 
-  CFX_ByteString stringTwo;
-  ValueToUTF8String(argTwo.get(), stringTwo);
+  CFX_ByteString stringTwo = ValueToUTF8String(argTwo.get());
   if (stringTwo.IsEmpty()) {
     args.GetReturnValue()->SetInteger(1);
     return;
   }
 
-  CFX_ByteString stringOne;
-  ValueToUTF8String(argOne.get(), stringOne);
+  CFX_ByteString stringOne = ValueToUTF8String(argOne.get());
   FX_STRSIZE iPosition = stringOne.Find(stringTwo.AsStringC());
   args.GetReturnValue()->SetInteger(iPosition + 1);
 }
@@ -3312,10 +3142,7 @@
       continue;
 
     bAllNull = false;
-
-    CFX_ByteString valueStr;
-    ValueToUTF8String(value.get(), valueStr);
-    resultString += valueStr;
+    resultString += ValueToUTF8String(value.get());
   }
 
   if (bAllNull) {
@@ -3343,8 +3170,7 @@
       return;
     }
 
-    CFX_ByteString toDecodeString;
-    ValueToUTF8String(argOne.get(), toDecodeString);
+    CFX_ByteString toDecodeString = ValueToUTF8String(argOne.get());
     CFX_ByteTextBuf resultBuf;
     DecodeURL(toDecodeString.AsStringC(), resultBuf);
     args.GetReturnValue()->SetString(resultBuf.AsStringC());
@@ -3358,12 +3184,8 @@
     return;
   }
 
-  CFX_ByteString toDecodeString;
-  ValueToUTF8String(argOne.get(), toDecodeString);
-
-  CFX_ByteString identifyString;
-  ValueToUTF8String(argTwo.get(), identifyString);
-
+  CFX_ByteString toDecodeString = ValueToUTF8String(argOne.get());
+  CFX_ByteString identifyString = ValueToUTF8String(argTwo.get());
   CFX_ByteTextBuf resultBuf;
   if (identifyString.EqualNoCase("html"))
     DecodeHTML(toDecodeString.AsStringC(), resultBuf);
@@ -3610,8 +3432,7 @@
       return;
     }
 
-    CFX_ByteString toEncodeString;
-    ValueToUTF8String(argOne.get(), toEncodeString);
+    CFX_ByteString toEncodeString = ValueToUTF8String(argOne.get());
     CFX_ByteTextBuf resultBuf;
     EncodeURL(toEncodeString.AsStringC(), resultBuf);
     args.GetReturnValue()->SetString(resultBuf.AsStringC());
@@ -3625,10 +3446,8 @@
     return;
   }
 
-  CFX_ByteString toEncodeString;
-  ValueToUTF8String(argOne.get(), toEncodeString);
-  CFX_ByteString identifyString;
-  ValueToUTF8String(argTwo.get(), identifyString);
+  CFX_ByteString toEncodeString = ValueToUTF8String(argOne.get());
+  CFX_ByteString identifyString = ValueToUTF8String(argTwo.get());
   CFX_ByteTextBuf resultBuf;
   if (identifyString.EqualNoCase("html"))
     EncodeHTML(toEncodeString.AsStringC(), resultBuf);
@@ -3916,12 +3735,10 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0);
-  CFX_ByteString szPattern;
-  ValueToUTF8String(argOne.get(), szPattern);
+  CFX_ByteString szPattern = ValueToUTF8String(argOne.get());
 
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1);
-  CFX_ByteString szValue;
-  ValueToUTF8String(argTwo.get(), szValue);
+  CFX_ByteString szValue = ValueToUTF8String(argTwo.get());
 
   CXFA_Document* pDoc = pContext->GetDocument();
   CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
@@ -4000,8 +3817,7 @@
     return;
   }
 
-  CFX_ByteString sourceString;
-  ValueToUTF8String(argOne.get(), sourceString);
+  CFX_ByteString sourceString = ValueToUTF8String(argOne.get());
   int32_t count = std::max(0, ValueToInteger(pThis, argTwo.get()));
   args.GetReturnValue()->SetString(sourceString.Left(count).AsStringC());
 }
@@ -4021,8 +3837,7 @@
     return;
   }
 
-  CFX_ByteString sourceString;
-  ValueToUTF8String(argOne.get(), sourceString);
+  CFX_ByteString sourceString = ValueToUTF8String(argOne.get());
   args.GetReturnValue()->SetInteger(sourceString.GetLength());
 }
 
@@ -4036,15 +3851,14 @@
     return;
   }
 
-  CFX_ByteString argString;
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0);
   if (ValueIsNull(pThis, argOne.get())) {
     args.GetReturnValue()->SetNull();
     return;
   }
 
-  ValueToUTF8String(argOne.get(), argString);
   CFX_WideTextBuf lowStringBuf;
+  CFX_ByteString argString = ValueToUTF8String(argOne.get());
   CFX_WideString wsArgString = CFX_WideString::FromUTF8(argString.AsStringC());
   const wchar_t* pData = wsArgString.c_str();
   int32_t i = 0;
@@ -4079,8 +3893,7 @@
     return;
   }
 
-  CFX_ByteString sourceString;
-  ValueToUTF8String(argOne.get(), sourceString);
+  CFX_ByteString sourceString = ValueToUTF8String(argOne.get());
   sourceString.TrimLeft();
   args.GetReturnValue()->SetString(sourceString.AsStringC());
 }
@@ -4102,11 +3915,8 @@
     return;
   }
 
-  CFX_ByteString szPattern;
-  ValueToUTF8String(argOne.get(), szPattern);
-  CFX_ByteString szValue;
-  ValueToUTF8String(argTwo.get(), szValue);
-
+  CFX_ByteString szPattern = ValueToUTF8String(argOne.get());
+  CFX_ByteString szValue = ValueToUTF8String(argTwo.get());
   CXFA_Document* pDoc = pContext->GetDocument();
   CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
   CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject());
@@ -4231,14 +4041,14 @@
   CFX_ByteString oneString;
   CFX_ByteString twoString;
   if (!ValueIsNull(pThis, argOne.get()) && !ValueIsNull(pThis, argTwo.get())) {
-    ValueToUTF8String(argOne.get(), oneString);
-    ValueToUTF8String(argTwo.get(), twoString);
+    oneString = ValueToUTF8String(argOne.get());
+    twoString = ValueToUTF8String(argTwo.get());
   }
 
   CFX_ByteString threeString;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2);
-    ValueToUTF8String(argThree.get(), threeString);
+    threeString = ValueToUTF8String(argThree.get());
   }
 
   int32_t iFindLen = twoString.GetLength();
@@ -4292,8 +4102,7 @@
     return;
   }
 
-  CFX_ByteString sourceString;
-  ValueToUTF8String(argOne.get(), sourceString);
+  CFX_ByteString sourceString = ValueToUTF8String(argOne.get());
   int32_t count = std::max(0, ValueToInteger(pThis, argTwo.get()));
   args.GetReturnValue()->SetString(sourceString.Right(count).AsStringC());
 }
@@ -4313,8 +4122,7 @@
     return;
   }
 
-  CFX_ByteString sourceString;
-  ValueToUTF8String(argOne.get(), sourceString);
+  CFX_ByteString sourceString = ValueToUTF8String(argOne.get());
   sourceString.TrimRight();
   args.GetReturnValue()->SetString(sourceString.AsStringC());
 }
@@ -4481,7 +4289,7 @@
   std::unique_ptr<CFXJSE_Value> deleteValue = GetSimpleValue(pThis, args, 2);
   if (!sourceValue->IsNull() && !startValue->IsNull() &&
       !deleteValue->IsNull()) {
-    ValueToUTF8String(sourceValue.get(), sourceString);
+    sourceString = ValueToUTF8String(sourceValue.get());
     iLength = sourceString.GetLength();
     iStart = pdfium::clamp(
         static_cast<int32_t>(ValueToFloat(pThis, startValue.get())), 1,
@@ -4492,7 +4300,7 @@
 
   if (argc > 3) {
     std::unique_ptr<CFXJSE_Value> insertValue = GetSimpleValue(pThis, args, 3);
-    ValueToUTF8String(insertValue.get(), insertString);
+    insertString = ValueToUTF8String(insertValue.get());
   }
 
   iStart -= 1;
@@ -4531,10 +4339,9 @@
     return;
   }
 
-  CFX_ByteString szSourceStr;
   int32_t iStart = 0;
   int32_t iCount = 0;
-  ValueToUTF8String(stringValue.get(), szSourceStr);
+  CFX_ByteString szSourceStr = ValueToUTF8String(stringValue.get());
   int32_t iLength = szSourceStr.GetLength();
   if (iLength == 0) {
     args.GetReturnValue()->SetString("");
@@ -4588,10 +4395,8 @@
     return;
   }
 
-  CFX_ByteString argString;
-  ValueToUTF8String(argOne.get(), argString);
-
   CFX_WideTextBuf upperStringBuf;
+  CFX_ByteString argString = ValueToUTF8String(argOne.get());
   CFX_WideString wsArgString = CFX_WideString::FromUTF8(argString.AsStringC());
   const wchar_t* pData = wsArgString.c_str();
   int32_t i = 0;
@@ -4647,7 +4452,7 @@
       args.GetReturnValue()->SetNull();
       return;
     }
-    ValueToUTF8String(localeValue.get(), localeString);
+    localeString = ValueToUTF8String(localeValue.get());
   }
 
   if (fNumber < 0.0f || fNumber > 922337203685477550.0f) {
@@ -4830,8 +4635,7 @@
     return;
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0);
-  CFX_ByteString urlString;
-  ValueToUTF8String(argOne.get(), urlString);
+  CFX_ByteString urlString = ValueToUTF8String(argOne.get());
   CFX_RetainPtr<IFX_SeekableReadStream> pFile = pAppProvider->DownloadURL(
       CFX_WideString::FromUTF8(urlString.AsStringC()));
   if (!pFile)
@@ -4862,30 +4666,28 @@
   if (!pAppProvider)
     return;
 
-  CFX_ByteString bsURL;
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0);
-  ValueToUTF8String(argOne.get(), bsURL);
+  CFX_ByteString bsURL = ValueToUTF8String(argOne.get());
 
-  CFX_ByteString bsData;
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1);
-  ValueToUTF8String(argTwo.get(), bsData);
+  CFX_ByteString bsData = ValueToUTF8String(argTwo.get());
 
   CFX_ByteString bsContentType;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2);
-    ValueToUTF8String(argThree.get(), bsContentType);
+    bsContentType = ValueToUTF8String(argThree.get());
   }
 
   CFX_ByteString bsEncode;
   if (argc > 3) {
     std::unique_ptr<CFXJSE_Value> argFour = GetSimpleValue(pThis, args, 3);
-    ValueToUTF8String(argFour.get(), bsEncode);
+    bsEncode = ValueToUTF8String(argFour.get());
   }
 
   CFX_ByteString bsHeader;
   if (argc > 4) {
     std::unique_ptr<CFXJSE_Value> argFive = GetSimpleValue(pThis, args, 4);
-    ValueToUTF8String(argFive.get(), bsHeader);
+    bsHeader = ValueToUTF8String(argFive.get());
   }
 
   CFX_WideString decodedResponse;
@@ -4920,18 +4722,16 @@
   if (!pAppProvider)
     return;
 
-  CFX_ByteString bsURL;
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0);
-  ValueToUTF8String(argOne.get(), bsURL);
+  CFX_ByteString bsURL = ValueToUTF8String(argOne.get());
 
-  CFX_ByteString bsData;
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1);
-  ValueToUTF8String(argTwo.get(), bsData);
+  CFX_ByteString bsData = ValueToUTF8String(argTwo.get());
 
   CFX_ByteString bsEncode;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2);
-    ValueToUTF8String(argThree.get(), bsEncode);
+    bsEncode = ValueToUTF8String(argThree.get());
   }
 
   if (!pAppProvider->PutRequestURL(
@@ -5398,9 +5198,8 @@
   }
 
   CFX_ByteString szName = args.GetUTF8String(2);
-  CFX_ByteString szSomExp;
-  GenerateSomExpression(szName.AsStringC(), args.GetInt32(3), iIndexValue,
-                        bIsStar, szSomExp);
+  CFX_ByteString szSomExp = GenerateSomExpression(
+      szName.AsStringC(), args.GetInt32(3), iIndexValue, bIsStar);
 
   std::unique_ptr<CFXJSE_Value> argAccessor = args.GetValue(0);
   if (argAccessor->IsArray()) {
@@ -5516,10 +5315,9 @@
     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);
+  CFX_ByteString szSomExp = GenerateSomExpression(
+      szName.AsStringC(), args.GetInt32(3), iIndexValue, bIsStar);
 
   std::unique_ptr<CFXJSE_Value> argAccessor = args.GetValue(0);
   if (argAccessor->IsArray()) {
@@ -5627,8 +5425,7 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0);
-  CFX_ByteString argString;
-  ValueToUTF8String(argOne.get(), argString);
+  CFX_ByteString argString = ValueToUTF8String(argOne.get());
   if (argString.IsEmpty()) {
     pContext->ThrowArgumentMismatchException();
     return;
@@ -5926,18 +5723,17 @@
     return false;
 
   if (firstValue->IsString()) {
-    CFX_ByteString firstString, secondString;
-    ValueToUTF8String(firstValue, firstString);
-    ValueToUTF8String(secondValue, secondString);
+    CFX_ByteString firstString = ValueToUTF8String(firstValue);
+    CFX_ByteString secondString = ValueToUTF8String(secondValue);
     return firstString == secondString;
   }
   if (firstValue->IsNumber()) {
     float first = ValueToFloat(pThis, firstValue);
     float second = ValueToFloat(pThis, secondValue);
-    return (first == second);
+    return first == second;
   }
   if (firstValue->IsBoolean())
-    return (firstValue->ToBoolean() == secondValue->ToBoolean());
+    return firstValue->ToBoolean() == secondValue->ToBoolean();
 
   return firstValue->IsNull() && secondValue && secondValue->IsNull();
 }
@@ -6030,24 +5826,23 @@
 }
 
 // static
-void CXFA_FM2JSContext::GenerateSomExpression(const CFX_ByteStringC& szName,
-                                              int32_t iIndexFlags,
-                                              int32_t iIndexValue,
-                                              bool bIsStar,
-                                              CFX_ByteString& szSomExp) {
-  if (bIsStar) {
-    szSomExp = szName + "[*]";
-    return;
-  }
-  if (iIndexFlags == 0) {
-    szSomExp = szName;
-    return;
-  }
+CFX_ByteString CXFA_FM2JSContext::GenerateSomExpression(
+    const CFX_ByteStringC& szName,
+    int32_t iIndexFlags,
+    int32_t iIndexValue,
+    bool bIsStar) {
+  if (bIsStar)
+    return CFX_ByteString(szName, "[*]");
+
+  if (iIndexFlags == 0)
+    return CFX_ByteString(szName);
+
   if (iIndexFlags == 1 || iIndexValue == 0) {
-    szSomExp = szName + "[" +
-               CFX_ByteString::FormatInteger(iIndexValue, FXFORMAT_SIGNED) +
-               "]";
-  } else if (iIndexFlags == 2) {
+    return CFX_ByteString(szName, "[") +
+           CFX_ByteString::FormatInteger(iIndexValue, FXFORMAT_SIGNED) + "]";
+  }
+  CFX_ByteString szSomExp;
+  if (iIndexFlags == 2) {
     szSomExp = (iIndexValue < 0) ? (szName + "[-") : (szName + "[+");
     iIndexValue = (iIndexValue < 0) ? (0 - iIndexValue) : iIndexValue;
     szSomExp += CFX_ByteString::FormatInteger(iIndexValue);
@@ -6058,6 +5853,7 @@
     szSomExp += CFX_ByteString::FormatInteger(iIndexValue);
     szSomExp += "]";
   }
+  return szSomExp;
 }
 
 // static
@@ -6309,17 +6105,12 @@
 }
 
 // static
-void CXFA_FM2JSContext::ValueToUTF8String(CFXJSE_Value* arg,
-                                          CFX_ByteString& szOutputString) {
-  if (!arg)
-    return;
-
-  if (arg->IsNull() || arg->IsUndefined())
-    szOutputString = "";
-  else if (arg->IsBoolean())
-    szOutputString = arg->ToBoolean() ? "1" : "0";
-  else
-    szOutputString = arg->ToString();
+CFX_ByteString CXFA_FM2JSContext::ValueToUTF8String(CFXJSE_Value* arg) {
+  if (!arg || arg->IsNull() || arg->IsUndefined())
+    return CFX_ByteString();
+  if (arg->IsBoolean())
+    return arg->ToBoolean() ? "1" : "0";
+  return arg->ToString();
 }
 
 // static.
diff --git a/xfa/fxfa/fm2js/xfa_fm2jscontext.h b/xfa/fxfa/fm2js/xfa_fm2jscontext.h
index d7f0009..33f739f 100644
--- a/xfa/fxfa/fm2js/xfa_fm2jscontext.h
+++ b/xfa/fxfa/fm2js/xfa_fm2jscontext.h
@@ -118,57 +118,40 @@
                                   int32_t& iMillionSecond,
                                   int32_t& iZoneHour,
                                   int32_t& iZoneMinute);
-  static bool Local2IsoDate(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szDate,
-                            const CFX_ByteStringC& szFormat,
-                            const CFX_ByteStringC& szLocale,
-                            CFX_ByteString& strIsoDate);
-  static bool Local2IsoTime(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szTime,
-                            const CFX_ByteStringC& szFormat,
-                            const CFX_ByteStringC& szLocale,
-                            CFX_ByteString& strIsoTime);
-  static bool IsoDate2Local(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szDate,
-                            const CFX_ByteStringC& szFormat,
-                            const CFX_ByteStringC& szLocale,
-                            CFX_ByteString& strLocalDate);
-  static bool IsoTime2Local(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szTime,
-                            const CFX_ByteStringC& szFormat,
-                            const CFX_ByteStringC& szLocale,
-                            CFX_ByteString& strLocalTime);
-  static bool GetGMTTime(CFXJSE_Value* pThis,
-                         const CFX_ByteStringC& szTime,
-                         const CFX_ByteStringC& szFormat,
-                         const CFX_ByteStringC& szLocale,
-                         CFX_ByteString& strGMTTime);
+  static CFX_ByteString Local2IsoDate(CFXJSE_Value* pThis,
+                                      const CFX_ByteStringC& szDate,
+                                      const CFX_ByteStringC& szFormat,
+                                      const CFX_ByteStringC& szLocale);
+  static CFX_ByteString IsoDate2Local(CFXJSE_Value* pThis,
+                                      const CFX_ByteStringC& szDate,
+                                      const CFX_ByteStringC& szFormat,
+                                      const CFX_ByteStringC& szLocale);
+  static CFX_ByteString IsoTime2Local(CFXJSE_Value* pThis,
+                                      const CFX_ByteStringC& szTime,
+                                      const CFX_ByteStringC& szFormat,
+                                      const CFX_ByteStringC& szLocale);
   static int32_t DateString2Num(const CFX_ByteStringC& szDateString);
-  static void GetLocalDateFormat(CFXJSE_Value* pThis,
-                                 int32_t iStyle,
-                                 const CFX_ByteStringC& szLocalStr,
-                                 CFX_ByteString& strFormat,
-                                 bool bStandard);
-  static void GetLocalTimeFormat(CFXJSE_Value* pThis,
-                                 int32_t iStyle,
-                                 const CFX_ByteStringC& szLocalStr,
-                                 CFX_ByteString& strFormat,
-                                 bool bStandard);
-  static void GetStandardDateFormat(CFXJSE_Value* pThis,
-                                    int32_t iStyle,
-                                    const CFX_ByteStringC& szLocalStr,
-                                    CFX_ByteString& strFormat);
-  static void GetStandardTimeFormat(CFXJSE_Value* pThis,
-                                    int32_t iStyle,
-                                    const CFX_ByteStringC& szLocalStr,
-                                    CFX_ByteString& strFormat);
-
-  static void Num2AllTime(CFXJSE_Value* pThis,
-                          int32_t iTime,
-                          const CFX_ByteStringC& szFormat,
-                          const CFX_ByteStringC& szLocale,
-                          bool bGM,
-                          CFX_ByteString& strTime);
+  static CFX_ByteString GetLocalDateFormat(CFXJSE_Value* pThis,
+                                           int32_t iStyle,
+                                           const CFX_ByteStringC& szLocalStr,
+                                           bool bStandard);
+  static CFX_ByteString GetLocalTimeFormat(CFXJSE_Value* pThis,
+                                           int32_t iStyle,
+                                           const CFX_ByteStringC& szLocalStr,
+                                           bool bStandard);
+  static CFX_ByteString GetStandardDateFormat(
+      CFXJSE_Value* pThis,
+      int32_t iStyle,
+      const CFX_ByteStringC& szLocalStr);
+  static CFX_ByteString GetStandardTimeFormat(
+      CFXJSE_Value* pThis,
+      int32_t iStyle,
+      const CFX_ByteStringC& szLocalStr);
+  static CFX_ByteString Num2AllTime(CFXJSE_Value* pThis,
+                                    int32_t iTime,
+                                    const CFX_ByteStringC& szFormat,
+                                    const CFX_ByteStringC& szLocale,
+                                    bool bGM);
   static void GetLocalTimeZone(int32_t& iHour, int32_t& iMin, int32_t& iSec);
 
   static void Apr(CFXJSE_Value* pThis,
@@ -412,11 +395,10 @@
                                     CFXJSE_Value* pDefaultValue);
   static bool SetObjectDefaultValue(CFXJSE_Value* pObjectValue,
                                     CFXJSE_Value* pNewValue);
-  static void GenerateSomExpression(const CFX_ByteStringC& szName,
-                                    int32_t iIndexFlags,
-                                    int32_t iIndexValue,
-                                    bool bIsStar,
-                                    CFX_ByteString& szSomExp);
+  static CFX_ByteString GenerateSomExpression(const CFX_ByteStringC& szName,
+                                              int32_t iIndexFlags,
+                                              int32_t iIndexValue,
+                                              bool bIsStar);
   static bool GetObjectForName(CFXJSE_Value* pThis,
                                CFXJSE_Value* accessorValue,
                                const CFX_ByteStringC& szAccessorName);
@@ -440,8 +422,7 @@
   static int32_t ValueToInteger(CFXJSE_Value* pThis, CFXJSE_Value* pValue);
   static float ValueToFloat(CFXJSE_Value* pThis, CFXJSE_Value* pValue);
   static double ValueToDouble(CFXJSE_Value* pThis, CFXJSE_Value* pValue);
-  static void ValueToUTF8String(CFXJSE_Value* pValue,
-                                CFX_ByteString& outputValue);
+  static CFX_ByteString ValueToUTF8String(CFXJSE_Value* pValue);
   static double ExtractDouble(CFXJSE_Value* pThis,
                               CFXJSE_Value* src,
                               bool* ret);