diff --git a/fxjs/xfa/cfxjse_class.cpp b/fxjs/xfa/cfxjse_class.cpp
index d3a83be..ae6d8cb 100644
--- a/fxjs/xfa/cfxjse_class.cpp
+++ b/fxjs/xfa/cfxjse_class.cpp
@@ -38,12 +38,10 @@
   if (!lpFunctionInfo)
     return;
 
-  ByteStringView szFunctionName(lpFunctionInfo->name);
-  auto lpThisValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate());
-  lpThisValue->ForceSetValue(info.Holder());
+  auto lpThisValue =
+      pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate(), info.Holder());
   auto lpRetValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate());
-  lpFunctionInfo->callbackProc(lpThisValue.get(), szFunctionName, info,
-                               lpRetValue.get());
+  lpFunctionInfo->callbackProc(lpThisValue.get(), info, lpRetValue.get());
   if (!lpRetValue->DirectGetValue().IsEmpty())
     info.GetReturnValue().Set(lpRetValue->DirectGetValue());
 }
diff --git a/fxjs/xfa/cfxjse_formcalc_context.cpp b/fxjs/xfa/cfxjse_formcalc_context.cpp
index f436c9a..1a4df5d 100644
--- a/fxjs/xfa/cfxjse_formcalc_context.cpp
+++ b/fxjs/xfa/cfxjse_formcalc_context.cpp
@@ -1361,7 +1361,6 @@
 // static
 void CFXJSE_FormCalcContext::Abs(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 1) {
@@ -1385,7 +1384,6 @@
 // static
 void CFXJSE_FormCalcContext::Avg(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -1455,7 +1453,6 @@
 // static
 void CFXJSE_FormCalcContext::Ceil(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 1) {
@@ -1475,7 +1472,6 @@
 // static
 void CFXJSE_FormCalcContext::Count(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -1532,7 +1528,6 @@
 // static
 void CFXJSE_FormCalcContext::Floor(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 1) {
@@ -1552,7 +1547,6 @@
 // static
 void CFXJSE_FormCalcContext::Max(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -1629,7 +1623,6 @@
 // static
 void CFXJSE_FormCalcContext::Min(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -1706,7 +1699,6 @@
 // static
 void CFXJSE_FormCalcContext::Mod(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -1742,7 +1734,6 @@
 // static
 void CFXJSE_FormCalcContext::Round(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -1790,7 +1781,6 @@
 // static
 void CFXJSE_FormCalcContext::Sum(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -1868,7 +1858,6 @@
 // static
 void CFXJSE_FormCalcContext::Date(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 0) {
@@ -1889,7 +1878,6 @@
 // static
 void CFXJSE_FormCalcContext::Date2Num(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -1934,7 +1922,6 @@
 // static
 void CFXJSE_FormCalcContext::DateFmt(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -1974,7 +1961,6 @@
 // static
 void CFXJSE_FormCalcContext::IsoDate2Num(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 1) {
@@ -1993,7 +1979,6 @@
 // static
 void CFXJSE_FormCalcContext::IsoTime2Num(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -2049,7 +2034,6 @@
 // static
 void CFXJSE_FormCalcContext::LocalDateFmt(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -2088,7 +2072,6 @@
 // static
 void CFXJSE_FormCalcContext::LocalTimeFmt(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -2127,7 +2110,6 @@
 // static
 void CFXJSE_FormCalcContext::Num2Date(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -2269,7 +2251,6 @@
 // static
 void CFXJSE_FormCalcContext::Num2GMTime(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -2317,7 +2298,6 @@
 // static
 void CFXJSE_FormCalcContext::Num2Time(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -2366,7 +2346,6 @@
 // static
 void CFXJSE_FormCalcContext::Time(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 0) {
@@ -2384,7 +2363,6 @@
 // static
 void CFXJSE_FormCalcContext::Time2Num(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -2470,7 +2448,6 @@
 // static
 void CFXJSE_FormCalcContext::TimeFmt(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -2647,7 +2624,6 @@
 // static
 void CFXJSE_FormCalcContext::Apr(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -2702,7 +2678,6 @@
 // static
 void CFXJSE_FormCalcContext::CTerm(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -2734,7 +2709,6 @@
 
 // static
 void CFXJSE_FormCalcContext::FV(CFXJSE_Value* pThis,
-                                ByteStringView bsFuncName,
                                 const v8::FunctionCallbackInfo<v8::Value>& info,
                                 CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -2777,7 +2751,6 @@
 // static
 void CFXJSE_FormCalcContext::IPmt(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -2836,7 +2809,6 @@
 // static
 void CFXJSE_FormCalcContext::NPV(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -2881,7 +2853,6 @@
 // static
 void CFXJSE_FormCalcContext::Pmt(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -2918,7 +2889,6 @@
 // static
 void CFXJSE_FormCalcContext::PPmt(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -2977,7 +2947,6 @@
 
 // static
 void CFXJSE_FormCalcContext::PV(CFXJSE_Value* pThis,
-                                ByteStringView bsFuncName,
                                 const v8::FunctionCallbackInfo<v8::Value>& info,
                                 CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -3014,7 +2983,6 @@
 // static
 void CFXJSE_FormCalcContext::Rate(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -3047,7 +3015,6 @@
 // static
 void CFXJSE_FormCalcContext::Term(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -3080,7 +3047,6 @@
 // static
 void CFXJSE_FormCalcContext::Choose(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -3152,7 +3118,6 @@
 // static
 void CFXJSE_FormCalcContext::Exists(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 1) {
@@ -3166,7 +3131,6 @@
 // static
 void CFXJSE_FormCalcContext::HasValue(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 1) {
@@ -3188,7 +3152,6 @@
 // static
 void CFXJSE_FormCalcContext::Oneof(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() < 2) {
@@ -3211,7 +3174,6 @@
 // static
 void CFXJSE_FormCalcContext::Within(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 3) {
@@ -3245,7 +3207,6 @@
 
 // static
 void CFXJSE_FormCalcContext::If(CFXJSE_Value* pThis,
-                                ByteStringView bsFuncName,
                                 const v8::FunctionCallbackInfo<v8::Value>& info,
                                 CFXJSE_Value* pRetValue) {
   if (info.Length() != 3) {
@@ -3261,7 +3222,6 @@
 // static
 void CFXJSE_FormCalcContext::Eval(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -3300,7 +3260,6 @@
 // static
 void CFXJSE_FormCalcContext::Ref(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -3360,7 +3319,6 @@
 // static
 void CFXJSE_FormCalcContext::UnitType(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 1) {
@@ -3469,7 +3427,6 @@
 // static
 void CFXJSE_FormCalcContext::UnitValue(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -3609,7 +3566,6 @@
 
 // static
 void CFXJSE_FormCalcContext::At(CFXJSE_Value* pThis,
-                                ByteStringView bsFuncName,
                                 const v8::FunctionCallbackInfo<v8::Value>& info,
                                 CFXJSE_Value* pRetValue) {
   if (info.Length() != 2) {
@@ -3638,7 +3594,6 @@
 // static
 void CFXJSE_FormCalcContext::Concat(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -3669,7 +3624,6 @@
 // static
 void CFXJSE_FormCalcContext::Decode(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -3718,7 +3672,6 @@
 // static
 void CFXJSE_FormCalcContext::Encode(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -3762,7 +3715,6 @@
 // static
 void CFXJSE_FormCalcContext::Format(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -3844,7 +3796,6 @@
 // static
 void CFXJSE_FormCalcContext::Left(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 2) {
@@ -3868,7 +3819,6 @@
 // static
 void CFXJSE_FormCalcContext::Len(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 1) {
@@ -3889,7 +3839,6 @@
 // static
 void CFXJSE_FormCalcContext::Lower(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -3922,7 +3871,6 @@
 // static
 void CFXJSE_FormCalcContext::Ltrim(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 1) {
@@ -3944,7 +3892,6 @@
 // static
 void CFXJSE_FormCalcContext::Parse(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -4078,7 +4025,6 @@
 // static
 void CFXJSE_FormCalcContext::Replace(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -4139,7 +4085,6 @@
 // static
 void CFXJSE_FormCalcContext::Right(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 2) {
@@ -4163,7 +4108,6 @@
 // static
 void CFXJSE_FormCalcContext::Rtrim(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 1) {
@@ -4185,7 +4129,6 @@
 // static
 void CFXJSE_FormCalcContext::Space(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 1) {
@@ -4213,7 +4156,6 @@
 // static
 void CFXJSE_FormCalcContext::Str(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -4330,7 +4272,6 @@
 // static
 void CFXJSE_FormCalcContext::Stuff(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -4383,7 +4324,6 @@
 // static
 void CFXJSE_FormCalcContext::Substr(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 3) {
@@ -4425,7 +4365,6 @@
 // static
 void CFXJSE_FormCalcContext::Uuid(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -4445,7 +4384,6 @@
 // static
 void CFXJSE_FormCalcContext::Upper(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -4484,7 +4422,6 @@
 // static
 void CFXJSE_FormCalcContext::WordNum(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   int32_t argc = info.Length();
@@ -4535,7 +4472,6 @@
 // static
 void CFXJSE_FormCalcContext::Get(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -4568,7 +4504,6 @@
 // static
 void CFXJSE_FormCalcContext::Post(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -4626,7 +4561,6 @@
 // static
 void CFXJSE_FormCalcContext::Put(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -4670,7 +4604,6 @@
 // static
 void CFXJSE_FormCalcContext::assign_value_operator(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -4678,7 +4611,7 @@
     pContext->ThrowCompilerErrorException();
     return;
   }
-
+  ByteStringView bsFuncName("asgn_val_op");
   auto lValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate(), info[0]);
   std::unique_ptr<CFXJSE_Value> rValue = GetSimpleValue(pThis, info, 1);
   if (lValue->IsArray()) {
@@ -4716,7 +4649,6 @@
 // static
 void CFXJSE_FormCalcContext::logical_or_operator(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 2) {
@@ -4739,7 +4671,6 @@
 // static
 void CFXJSE_FormCalcContext::logical_and_operator(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 2) {
@@ -4762,7 +4693,6 @@
 // static
 void CFXJSE_FormCalcContext::equality_operator(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 2) {
@@ -4795,7 +4725,6 @@
 // static
 void CFXJSE_FormCalcContext::notequality_operator(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 2) {
@@ -4855,7 +4784,6 @@
 // static
 void CFXJSE_FormCalcContext::less_operator(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 2) {
@@ -4885,7 +4813,6 @@
 // static
 void CFXJSE_FormCalcContext::lessequal_operator(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 2) {
@@ -4915,7 +4842,6 @@
 // static
 void CFXJSE_FormCalcContext::greater_operator(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 2) {
@@ -4945,7 +4871,6 @@
 // static
 void CFXJSE_FormCalcContext::greaterequal_operator(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 2) {
@@ -4975,7 +4900,6 @@
 // static
 void CFXJSE_FormCalcContext::plus_operator(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 2) {
@@ -4999,7 +4923,6 @@
 // static
 void CFXJSE_FormCalcContext::minus_operator(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 2) {
@@ -5022,7 +4945,6 @@
 // static
 void CFXJSE_FormCalcContext::multiple_operator(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 2) {
@@ -5045,7 +4967,6 @@
 // static
 void CFXJSE_FormCalcContext::divide_operator(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -5074,7 +4995,6 @@
 // static
 void CFXJSE_FormCalcContext::positive_operator(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 1) {
@@ -5093,7 +5013,6 @@
 // static
 void CFXJSE_FormCalcContext::negative_operator(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 1) {
@@ -5112,7 +5031,6 @@
 // static
 void CFXJSE_FormCalcContext::logical_not_operator(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 1) {
@@ -5133,25 +5051,22 @@
 // static
 void CFXJSE_FormCalcContext::dot_accessor(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
-  DotAccessorCommon(pThis, bsFuncName, info, pRetValue, /*bDotAccessor=*/true);
+  DotAccessorCommon(pThis, info, pRetValue, /*bDotAccessor=*/true);
 }
 
 // static
 void CFXJSE_FormCalcContext::dotdot_accessor(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
-  DotAccessorCommon(pThis, bsFuncName, info, pRetValue, /*bDotAccessor=*/false);
+  DotAccessorCommon(pThis, info, pRetValue, /*bDotAccessor=*/false);
 }
 
 // static
 void CFXJSE_FormCalcContext::eval_translation(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -5182,7 +5097,6 @@
 // static
 void CFXJSE_FormCalcContext::is_fm_object(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 1) {
@@ -5197,7 +5111,6 @@
 // static
 void CFXJSE_FormCalcContext::is_fm_array(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 1) {
@@ -5212,7 +5125,6 @@
 // static
 void CFXJSE_FormCalcContext::get_fm_value(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -5249,7 +5161,6 @@
 // static
 void CFXJSE_FormCalcContext::get_fm_jsobj(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   if (info.Length() != 1) {
@@ -5277,7 +5188,6 @@
 // static
 void CFXJSE_FormCalcContext::fm_var_filter(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   CFXJSE_FormCalcContext* pContext = ToFormCalcContext(pThis);
@@ -5333,7 +5243,6 @@
 // static
 void CFXJSE_FormCalcContext::concat_fm_object(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue) {
   v8::Isolate* pIsolate = ToFormCalcContext(pThis)->GetScriptRuntime();
@@ -5848,7 +5757,6 @@
 // static
 void CFXJSE_FormCalcContext::DotAccessorCommon(
     CFXJSE_Value* pThis,
-    ByteStringView bsFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue,
     bool bDotAccessor) {
diff --git a/fxjs/xfa/cfxjse_formcalc_context.h b/fxjs/xfa/cfxjse_formcalc_context.h
index 6d92b75..d88b6e5 100644
--- a/fxjs/xfa/cfxjse_formcalc_context.h
+++ b/fxjs/xfa/cfxjse_formcalc_context.h
@@ -29,95 +29,72 @@
   CFXJSE_FormCalcContext* AsFormCalcContext() override;
 
   static void Abs(CFXJSE_Value* pThis,
-                  ByteStringView bsFuncName,
                   const v8::FunctionCallbackInfo<v8::Value>& info,
                   CFXJSE_Value* pRetValue);
   static void Avg(CFXJSE_Value* pThis,
-                  ByteStringView bsFuncName,
                   const v8::FunctionCallbackInfo<v8::Value>& info,
                   CFXJSE_Value* pRetValue);
   static void Ceil(CFXJSE_Value* pThis,
-                   ByteStringView bsFuncName,
                    const v8::FunctionCallbackInfo<v8::Value>& info,
                    CFXJSE_Value* pRetValue);
   static void Count(CFXJSE_Value* pThis,
-                    ByteStringView bsFuncName,
                     const v8::FunctionCallbackInfo<v8::Value>& info,
                     CFXJSE_Value* pRetValue);
   static void Floor(CFXJSE_Value* pThis,
-                    ByteStringView bsFuncName,
                     const v8::FunctionCallbackInfo<v8::Value>& info,
                     CFXJSE_Value* pRetValue);
   static void Max(CFXJSE_Value* pThis,
-                  ByteStringView bsFuncName,
                   const v8::FunctionCallbackInfo<v8::Value>& info,
                   CFXJSE_Value* pRetValue);
   static void Min(CFXJSE_Value* pThis,
-                  ByteStringView bsFuncName,
                   const v8::FunctionCallbackInfo<v8::Value>& info,
                   CFXJSE_Value* pRetValue);
   static void Mod(CFXJSE_Value* pThis,
-                  ByteStringView bsFuncName,
                   const v8::FunctionCallbackInfo<v8::Value>& info,
                   CFXJSE_Value* pRetValue);
   static void Round(CFXJSE_Value* pThis,
-                    ByteStringView bsFuncName,
                     const v8::FunctionCallbackInfo<v8::Value>& info,
                     CFXJSE_Value* pRetValue);
   static void Sum(CFXJSE_Value* pThis,
-                  ByteStringView bsFuncName,
                   const v8::FunctionCallbackInfo<v8::Value>& info,
                   CFXJSE_Value* pRetValue);
   static void Date(CFXJSE_Value* pThis,
-                   ByteStringView bsFuncName,
                    const v8::FunctionCallbackInfo<v8::Value>& info,
                    CFXJSE_Value* pRetValue);
   static void Date2Num(CFXJSE_Value* pThis,
-                       ByteStringView bsFuncName,
                        const v8::FunctionCallbackInfo<v8::Value>& info,
                        CFXJSE_Value* pRetValue);
   static void DateFmt(CFXJSE_Value* pThis,
-                      ByteStringView bsFuncName,
                       const v8::FunctionCallbackInfo<v8::Value>& info,
                       CFXJSE_Value* pRetValue);
   static void IsoDate2Num(CFXJSE_Value* pThis,
-                          ByteStringView bsFuncName,
                           const v8::FunctionCallbackInfo<v8::Value>& info,
                           CFXJSE_Value* pRetValue);
   static void IsoTime2Num(CFXJSE_Value* pThis,
-                          ByteStringView bsFuncName,
                           const v8::FunctionCallbackInfo<v8::Value>& info,
                           CFXJSE_Value* pRetValue);
   static void LocalDateFmt(CFXJSE_Value* pThis,
-                           ByteStringView bsFuncName,
                            const v8::FunctionCallbackInfo<v8::Value>& info,
                            CFXJSE_Value* pRetValue);
   static void LocalTimeFmt(CFXJSE_Value* pThis,
-                           ByteStringView bsFuncName,
                            const v8::FunctionCallbackInfo<v8::Value>& info,
                            CFXJSE_Value* pRetValue);
   static void Num2Date(CFXJSE_Value* pThis,
-                       ByteStringView bsFuncName,
                        const v8::FunctionCallbackInfo<v8::Value>& info,
                        CFXJSE_Value* pRetValue);
   static void Num2GMTime(CFXJSE_Value* pThis,
-                         ByteStringView bsFuncName,
                          const v8::FunctionCallbackInfo<v8::Value>& info,
                          CFXJSE_Value* pRetValue);
   static void Num2Time(CFXJSE_Value* pThis,
-                       ByteStringView bsFuncName,
                        const v8::FunctionCallbackInfo<v8::Value>& info,
                        CFXJSE_Value* pRetValue);
   static void Time(CFXJSE_Value* pThis,
-                   ByteStringView bsFuncName,
                    const v8::FunctionCallbackInfo<v8::Value>& info,
                    CFXJSE_Value* pRetValue);
   static void Time2Num(CFXJSE_Value* pThis,
-                       ByteStringView bsFuncName,
                        const v8::FunctionCallbackInfo<v8::Value>& info,
                        CFXJSE_Value* pRetValue);
   static void TimeFmt(CFXJSE_Value* pThis,
-                      ByteStringView bsFuncName,
                       const v8::FunctionCallbackInfo<v8::Value>& info,
                       CFXJSE_Value* pRetValue);
 
@@ -154,286 +131,218 @@
                                 bool bGM);
 
   static void Apr(CFXJSE_Value* pThis,
-                  ByteStringView bsFuncName,
                   const v8::FunctionCallbackInfo<v8::Value>& info,
                   CFXJSE_Value* pRetValue);
   static void CTerm(CFXJSE_Value* pThis,
-                    ByteStringView bsFuncName,
                     const v8::FunctionCallbackInfo<v8::Value>& info,
                     CFXJSE_Value* pRetValue);
   static void FV(CFXJSE_Value* pThis,
-                 ByteStringView bsFuncName,
                  const v8::FunctionCallbackInfo<v8::Value>& info,
                  CFXJSE_Value* pRetValue);
   static void IPmt(CFXJSE_Value* pThis,
-                   ByteStringView bsFuncName,
                    const v8::FunctionCallbackInfo<v8::Value>& info,
                    CFXJSE_Value* pRetValue);
   static void NPV(CFXJSE_Value* pThis,
-                  ByteStringView bsFuncName,
                   const v8::FunctionCallbackInfo<v8::Value>& info,
                   CFXJSE_Value* pRetValue);
   static void Pmt(CFXJSE_Value* pThis,
-                  ByteStringView bsFuncName,
                   const v8::FunctionCallbackInfo<v8::Value>& info,
                   CFXJSE_Value* pRetValue);
   static void PPmt(CFXJSE_Value* pThis,
-                   ByteStringView bsFuncName,
                    const v8::FunctionCallbackInfo<v8::Value>& info,
                    CFXJSE_Value* pRetValue);
   static void PV(CFXJSE_Value* pThis,
-                 ByteStringView bsFuncName,
                  const v8::FunctionCallbackInfo<v8::Value>& info,
                  CFXJSE_Value* pRetValue);
   static void Rate(CFXJSE_Value* pThis,
-                   ByteStringView bsFuncName,
                    const v8::FunctionCallbackInfo<v8::Value>& info,
                    CFXJSE_Value* pRetValue);
   static void Term(CFXJSE_Value* pThis,
-                   ByteStringView bsFuncName,
                    const v8::FunctionCallbackInfo<v8::Value>& info,
                    CFXJSE_Value* pRetValue);
   static void Choose(CFXJSE_Value* pThis,
-                     ByteStringView bsFuncName,
                      const v8::FunctionCallbackInfo<v8::Value>& info,
                      CFXJSE_Value* pRetValue);
   static void Exists(CFXJSE_Value* pThis,
-                     ByteStringView bsFuncName,
                      const v8::FunctionCallbackInfo<v8::Value>& info,
                      CFXJSE_Value* pRetValue);
   static void HasValue(CFXJSE_Value* pThis,
-                       ByteStringView bsFuncName,
                        const v8::FunctionCallbackInfo<v8::Value>& info,
                        CFXJSE_Value* pRetValue);
   static void Oneof(CFXJSE_Value* pThis,
-                    ByteStringView bsFuncName,
                     const v8::FunctionCallbackInfo<v8::Value>& info,
                     CFXJSE_Value* pRetValue);
   static void Within(CFXJSE_Value* pThis,
-                     ByteStringView bsFuncName,
                      const v8::FunctionCallbackInfo<v8::Value>& info,
                      CFXJSE_Value* pRetValue);
   static void If(CFXJSE_Value* pThis,
-                 ByteStringView bsFuncName,
                  const v8::FunctionCallbackInfo<v8::Value>& info,
                  CFXJSE_Value* pRetValue);
   static void Eval(CFXJSE_Value* pThis,
-                   ByteStringView bsFuncName,
                    const v8::FunctionCallbackInfo<v8::Value>& info,
                    CFXJSE_Value* pRetValue);
   static void Ref(CFXJSE_Value* pThis,
-                  ByteStringView bsFuncName,
                   const v8::FunctionCallbackInfo<v8::Value>& info,
                   CFXJSE_Value* pRetValue);
   static void UnitType(CFXJSE_Value* pThis,
-                       ByteStringView bsFuncName,
                        const v8::FunctionCallbackInfo<v8::Value>& info,
                        CFXJSE_Value* pRetValue);
   static void UnitValue(CFXJSE_Value* pThis,
-                        ByteStringView bsFuncName,
                         const v8::FunctionCallbackInfo<v8::Value>& info,
                         CFXJSE_Value* pRetValue);
 
   static void At(CFXJSE_Value* pThis,
-                 ByteStringView bsFuncName,
                  const v8::FunctionCallbackInfo<v8::Value>& info,
                  CFXJSE_Value* pRetValue);
   static void Concat(CFXJSE_Value* pThis,
-                     ByteStringView bsFuncName,
                      const v8::FunctionCallbackInfo<v8::Value>& info,
                      CFXJSE_Value* pRetValue);
   static void Decode(CFXJSE_Value* pThis,
-                     ByteStringView bsFuncName,
                      const v8::FunctionCallbackInfo<v8::Value>& info,
                      CFXJSE_Value* pRetValue);
   static void Encode(CFXJSE_Value* pThis,
-                     ByteStringView bsFuncName,
                      const v8::FunctionCallbackInfo<v8::Value>& info,
                      CFXJSE_Value* pRetValue);
   static void Format(CFXJSE_Value* pThis,
-                     ByteStringView bsFuncName,
                      const v8::FunctionCallbackInfo<v8::Value>& info,
                      CFXJSE_Value* pRetValue);
   static void Left(CFXJSE_Value* pThis,
-                   ByteStringView bsFuncName,
                    const v8::FunctionCallbackInfo<v8::Value>& info,
                    CFXJSE_Value* pRetValue);
   static void Len(CFXJSE_Value* pThis,
-                  ByteStringView bsFuncName,
                   const v8::FunctionCallbackInfo<v8::Value>& info,
                   CFXJSE_Value* pRetValue);
   static void Lower(CFXJSE_Value* pThis,
-                    ByteStringView bsFuncName,
                     const v8::FunctionCallbackInfo<v8::Value>& info,
                     CFXJSE_Value* pRetValue);
   static void Ltrim(CFXJSE_Value* pThis,
-                    ByteStringView bsFuncName,
                     const v8::FunctionCallbackInfo<v8::Value>& info,
                     CFXJSE_Value* pRetValue);
   static void Parse(CFXJSE_Value* pThis,
-                    ByteStringView bsFuncName,
                     const v8::FunctionCallbackInfo<v8::Value>& info,
                     CFXJSE_Value* pRetValue);
   static void Replace(CFXJSE_Value* pThis,
-                      ByteStringView bsFuncName,
                       const v8::FunctionCallbackInfo<v8::Value>& info,
                       CFXJSE_Value* pRetValue);
   static void Right(CFXJSE_Value* pThis,
-                    ByteStringView bsFuncName,
                     const v8::FunctionCallbackInfo<v8::Value>& info,
                     CFXJSE_Value* pRetValue);
   static void Rtrim(CFXJSE_Value* pThis,
-                    ByteStringView bsFuncName,
                     const v8::FunctionCallbackInfo<v8::Value>& info,
                     CFXJSE_Value* pRetValue);
   static void Space(CFXJSE_Value* pThis,
-                    ByteStringView bsFuncName,
                     const v8::FunctionCallbackInfo<v8::Value>& info,
                     CFXJSE_Value* pRetValue);
   static void Str(CFXJSE_Value* pThis,
-                  ByteStringView bsFuncName,
                   const v8::FunctionCallbackInfo<v8::Value>& info,
                   CFXJSE_Value* pRetValue);
   static void Stuff(CFXJSE_Value* pThis,
-                    ByteStringView bsFuncName,
                     const v8::FunctionCallbackInfo<v8::Value>& info,
                     CFXJSE_Value* pRetValue);
   static void Substr(CFXJSE_Value* pThis,
-                     ByteStringView bsFuncName,
                      const v8::FunctionCallbackInfo<v8::Value>& info,
                      CFXJSE_Value* pRetValue);
   static void Uuid(CFXJSE_Value* pThis,
-                   ByteStringView bsFuncName,
                    const v8::FunctionCallbackInfo<v8::Value>& info,
                    CFXJSE_Value* pRetValue);
   static void Upper(CFXJSE_Value* pThis,
-                    ByteStringView bsFuncName,
                     const v8::FunctionCallbackInfo<v8::Value>& info,
                     CFXJSE_Value* pRetValue);
   static void WordNum(CFXJSE_Value* pThis,
-                      ByteStringView bsFuncName,
                       const v8::FunctionCallbackInfo<v8::Value>& info,
                       CFXJSE_Value* pRetValue);
 
   static void Get(CFXJSE_Value* pThis,
-                  ByteStringView bsFuncName,
                   const v8::FunctionCallbackInfo<v8::Value>& info,
                   CFXJSE_Value* pRetValue);
   static void Post(CFXJSE_Value* pThis,
-                   ByteStringView bsFuncName,
                    const v8::FunctionCallbackInfo<v8::Value>& info,
                    CFXJSE_Value* pRetValue);
   static void Put(CFXJSE_Value* pThis,
-                  ByteStringView bsFuncName,
                   const v8::FunctionCallbackInfo<v8::Value>& info,
                   CFXJSE_Value* pRetValue);
   static void assign_value_operator(
       CFXJSE_Value* pThis,
-      ByteStringView bsFuncName,
       const v8::FunctionCallbackInfo<v8::Value>& info,
       CFXJSE_Value* pRetValue);
   static void logical_or_operator(
       CFXJSE_Value* pThis,
-      ByteStringView bsFuncName,
       const v8::FunctionCallbackInfo<v8::Value>& info,
       CFXJSE_Value* pRetValue);
   static void logical_and_operator(
       CFXJSE_Value* pThis,
-      ByteStringView bsFuncName,
       const v8::FunctionCallbackInfo<v8::Value>& info,
       CFXJSE_Value* pRetValue);
   static void equality_operator(CFXJSE_Value* pThis,
-                                ByteStringView bsFuncName,
                                 const v8::FunctionCallbackInfo<v8::Value>& info,
                                 CFXJSE_Value* pRetValue);
   static void notequality_operator(
       CFXJSE_Value* pThis,
-      ByteStringView bsFuncName,
       const v8::FunctionCallbackInfo<v8::Value>& info,
       CFXJSE_Value* pRetValue);
   static bool fm_ref_equal(CFXJSE_Value* pThis,
                            const v8::FunctionCallbackInfo<v8::Value>& info);
   static void less_operator(CFXJSE_Value* pThis,
-                            ByteStringView bsFuncName,
                             const v8::FunctionCallbackInfo<v8::Value>& info,
                             CFXJSE_Value* pRetValue);
   static void lessequal_operator(
       CFXJSE_Value* pThis,
-      ByteStringView bsFuncName,
       const v8::FunctionCallbackInfo<v8::Value>& info,
       CFXJSE_Value* pRetValue);
   static void greater_operator(CFXJSE_Value* pThis,
-                               ByteStringView bsFuncName,
                                const v8::FunctionCallbackInfo<v8::Value>& info,
                                CFXJSE_Value* pRetValue);
   static void greaterequal_operator(
       CFXJSE_Value* pThis,
-      ByteStringView bsFuncName,
       const v8::FunctionCallbackInfo<v8::Value>& info,
       CFXJSE_Value* pRetValue);
   static void plus_operator(CFXJSE_Value* pThis,
-                            ByteStringView bsFuncName,
                             const v8::FunctionCallbackInfo<v8::Value>& info,
                             CFXJSE_Value* pRetValue);
   static void minus_operator(CFXJSE_Value* pThis,
-                             ByteStringView bsFuncName,
                              const v8::FunctionCallbackInfo<v8::Value>& info,
                              CFXJSE_Value* pRetValue);
   static void multiple_operator(CFXJSE_Value* pThis,
-                                ByteStringView bsFuncName,
                                 const v8::FunctionCallbackInfo<v8::Value>& info,
                                 CFXJSE_Value* pRetValue);
   static void divide_operator(CFXJSE_Value* pThis,
-                              ByteStringView bsFuncName,
                               const v8::FunctionCallbackInfo<v8::Value>& info,
                               CFXJSE_Value* pRetValue);
   static void positive_operator(CFXJSE_Value* pThis,
-                                ByteStringView bsFuncName,
                                 const v8::FunctionCallbackInfo<v8::Value>& info,
                                 CFXJSE_Value* pRetValue);
   static void negative_operator(CFXJSE_Value* pThis,
-                                ByteStringView bsFuncName,
                                 const v8::FunctionCallbackInfo<v8::Value>& info,
                                 CFXJSE_Value* pRetValue);
   static void logical_not_operator(
       CFXJSE_Value* pThis,
-      ByteStringView bsFuncName,
       const v8::FunctionCallbackInfo<v8::Value>& info,
       CFXJSE_Value* pRetValue);
   static void dot_accessor(CFXJSE_Value* pThis,
-                           ByteStringView bsFuncName,
                            const v8::FunctionCallbackInfo<v8::Value>& info,
                            CFXJSE_Value* pRetValue);
   static void dotdot_accessor(CFXJSE_Value* pThis,
-                              ByteStringView bsFuncName,
                               const v8::FunctionCallbackInfo<v8::Value>& info,
                               CFXJSE_Value* pRetValue);
   static void eval_translation(CFXJSE_Value* pThis,
-                               ByteStringView bsFuncName,
                                const v8::FunctionCallbackInfo<v8::Value>& info,
                                CFXJSE_Value* pRetValue);
   static void is_fm_object(CFXJSE_Value* pThis,
-                           ByteStringView bsFuncName,
                            const v8::FunctionCallbackInfo<v8::Value>& info,
                            CFXJSE_Value* pRetValue);
   static void is_fm_array(CFXJSE_Value* pThis,
-                          ByteStringView bsFuncName,
                           const v8::FunctionCallbackInfo<v8::Value>& info,
                           CFXJSE_Value* pRetValue);
   static void get_fm_value(CFXJSE_Value* pThis,
-                           ByteStringView bsFuncName,
                            const v8::FunctionCallbackInfo<v8::Value>& info,
                            CFXJSE_Value* pRetValue);
   static void get_fm_jsobj(CFXJSE_Value* pThis,
-                           ByteStringView bsFuncName,
                            const v8::FunctionCallbackInfo<v8::Value>& info,
                            CFXJSE_Value* pRetValue);
   static void fm_var_filter(CFXJSE_Value* pThis,
-                            ByteStringView bsFuncName,
                             const v8::FunctionCallbackInfo<v8::Value>& info,
                             CFXJSE_Value* pRetValue);
   static void concat_fm_object(CFXJSE_Value* pThis,
-                               ByteStringView bsFuncName,
                                const v8::FunctionCallbackInfo<v8::Value>& info,
                                CFXJSE_Value* pRetValue);
 
@@ -485,7 +394,6 @@
 
  private:
   static void DotAccessorCommon(CFXJSE_Value* pThis,
-                                ByteStringView bsFuncName,
                                 const v8::FunctionCallbackInfo<v8::Value>& info,
                                 CFXJSE_Value* pRetValue,
                                 bool bDotAccessor);
diff --git a/fxjs/xfa/fxjse.h b/fxjs/xfa/fxjse.h
index b9ba73a..ca6fea8 100644
--- a/fxjs/xfa/fxjse.h
+++ b/fxjs/xfa/fxjse.h
@@ -43,7 +43,6 @@
     const WideString& functionName);
 typedef void (*FXJSE_FuncCallback)(
     CFXJSE_Value* pThis,
-    ByteStringView szFuncName,
     const v8::FunctionCallbackInfo<v8::Value>& info,
     CFXJSE_Value* pRetValue);
 typedef void (*FXJSE_PropAccessor)(CFXJSE_Value* pObject,
