Remove CFXJSE_Value from CFXJSE_FormCalcContext::oneOf()

pdfium:1610
Change-Id: I636d6194e361d065bde8eff4c34c1c0885cd13b1
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/76414
Reviewed-by: Daniel Hosseinian <dhoss@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fxjs/xfa/cfxjse_formcalc_context.cpp b/fxjs/xfa/cfxjse_formcalc_context.cpp
index c0193dd..becf069 100644
--- a/fxjs/xfa/cfxjse_formcalc_context.cpp
+++ b/fxjs/xfa/cfxjse_formcalc_context.cpp
@@ -1487,79 +1487,65 @@
   return fxv8::ReentrantToByteStringHelper(pIsolate, arg);
 }
 
-bool SimpleValueCompare(CFXJSE_HostObject* pHostObject,
-                        CFXJSE_Value* firstValue,
-                        CFXJSE_Value* secondValue) {
-  if (!firstValue)
+bool SimpleValueCompare(v8::Isolate* pIsolate,
+                        v8::Local<v8::Value> firstValue,
+                        v8::Local<v8::Value> secondValue) {
+  if (firstValue.IsEmpty())
     return false;
 
-  v8::Isolate* pIsolate = ToFormCalcContext(pHostObject)->GetIsolate();
-  if (firstValue->IsString(pIsolate)) {
-    const ByteString bsFirst =
-        ValueToUTF8String(pIsolate, firstValue->GetValue(pIsolate));
-    const ByteString bsSecond =
-        ValueToUTF8String(pIsolate, secondValue->GetValue(pIsolate));
-    return bsFirst == bsSecond;
-  }
-  if (firstValue->IsNumber(pIsolate)) {
-    const float first = ValueToFloat(pIsolate, firstValue->GetValue(pIsolate));
-    const float second =
-        ValueToFloat(pIsolate, secondValue->GetValue(pIsolate));
+  if (fxv8::IsString(firstValue)) {
+    const ByteString first = ValueToUTF8String(pIsolate, firstValue);
+    const ByteString second = ValueToUTF8String(pIsolate, secondValue);
     return first == second;
   }
-  if (firstValue->IsBoolean(pIsolate))
-    return firstValue->ToBoolean(pIsolate) == secondValue->ToBoolean(pIsolate);
-
-  return firstValue->IsNull(pIsolate) && secondValue &&
-         secondValue->IsNull(pIsolate);
+  if (fxv8::IsNumber(firstValue)) {
+    const float first = ValueToFloat(pIsolate, firstValue);
+    const float second = ValueToFloat(pIsolate, secondValue);
+    return first == second;
+  }
+  if (fxv8::IsBoolean(firstValue)) {
+    const bool first = fxv8::ReentrantToBooleanHelper(pIsolate, firstValue);
+    const bool second = fxv8::ReentrantToBooleanHelper(pIsolate, secondValue);
+    return first == second;
+  }
+  return fxv8::IsNull(firstValue) && fxv8::IsNull(secondValue);
 }
 
-std::vector<std::unique_ptr<CFXJSE_Value>> UnfoldArgs(
-    CFXJSE_HostObject* pHostObject,
+std::vector<v8::Local<v8::Value>> UnfoldArgs(
     const v8::FunctionCallbackInfo<v8::Value>& info) {
-  std::vector<std::unique_ptr<CFXJSE_Value>> results;
-  v8::Isolate* pIsolate = ToFormCalcContext(pHostObject)->GetIsolate();
-  for (int32_t i = 1; i < info.Length(); ++i) {
-    auto arg = std::make_unique<CFXJSE_Value>(pIsolate, info[i]);
-    if (arg->IsArray(pIsolate)) {
-      auto lengthValue = std::make_unique<CFXJSE_Value>();
-      arg->GetObjectProperty(pIsolate, "length", lengthValue.get());
-      int32_t iLength = lengthValue->ToInteger(pIsolate);
+  std::vector<v8::Local<v8::Value>> results;
+  v8::Isolate* pIsolate = info.GetIsolate();
+  for (int i = 1; i < info.Length(); ++i) {
+    v8::Local<v8::Value> arg = info[i];
+    if (fxv8::IsArray(arg)) {
+      v8::Local<v8::Array> arr = arg.As<v8::Array>();
+      uint32_t iLength = fxv8::GetArrayLengthHelper(arr);
       if (iLength < 3)
         continue;
 
-      auto propertyValue = std::make_unique<CFXJSE_Value>();
-      arg->GetObjectPropertyByIdx(pIsolate, 1, propertyValue.get());
+      v8::Local<v8::Value> propertyValue =
+          fxv8::ReentrantGetArrayElementHelper(pIsolate, arr, 1);
 
-      for (int32_t j = 2; j < iLength; j++) {
-        auto jsObjectValue = std::make_unique<CFXJSE_Value>();
-        arg->GetObjectPropertyByIdx(pIsolate, j, jsObjectValue.get());
-        if (!jsObjectValue->IsObject(pIsolate)) {
-          results.push_back(std::make_unique<CFXJSE_Value>(
-              pIsolate, fxv8::NewUndefinedHelper(pIsolate)));
-        } else if (propertyValue->IsNull(pIsolate)) {
-          results.push_back(std::make_unique<CFXJSE_Value>(
-              pIsolate,
-              GetObjectDefaultValue(
-                  pIsolate,
-                  jsObjectValue->GetValue(pIsolate).As<v8::Object>())));
+      for (uint32_t j = 2; j < iLength; j++) {
+        v8::Local<v8::Value> jsValue =
+            fxv8::ReentrantGetArrayElementHelper(pIsolate, arr, j);
+
+        if (!fxv8::IsObject(jsValue)) {
+          results.push_back(fxv8::NewUndefinedHelper(pIsolate));
+        } else if (fxv8::IsNull(propertyValue)) {
+          results.push_back(
+              GetObjectDefaultValue(pIsolate, jsValue.As<v8::Object>()));
         } else {
-          ByteString bsName = fxv8::ReentrantToByteStringHelper(
-              pIsolate, propertyValue->GetValue(pIsolate));
-          results.push_back(std::make_unique<CFXJSE_Value>(
-              pIsolate,
-              fxv8::ReentrantGetObjectPropertyHelper(
-                  pIsolate, jsObjectValue->GetValue(pIsolate).As<v8::Object>(),
-                  bsName.AsStringView())));
+          ByteString bsName =
+              fxv8::ReentrantToByteStringHelper(pIsolate, propertyValue);
+          results.push_back(fxv8::ReentrantGetObjectPropertyHelper(
+              pIsolate, jsValue.As<v8::Object>(), bsName.AsStringView()));
         }
       }
-    } else if (arg->IsObject(pIsolate)) {
-      results.push_back(std::make_unique<CFXJSE_Value>(
-          pIsolate, GetObjectDefaultValue(
-                        pIsolate, arg->GetValue(pIsolate).As<v8::Object>())));
+    } else if (fxv8::IsObject(arg)) {
+      results.push_back(GetObjectDefaultValue(pIsolate, arg.As<v8::Object>()));
     } else {
-      results.push_back(std::make_unique<CFXJSE_Value>());
-      results.back()->Assign(pIsolate, arg.get());
+      results.push_back(arg);
     }
   }
   return results;
@@ -3252,10 +3238,9 @@
     return;
   }
 
-  auto argOne = std::make_unique<CFXJSE_Value>(info.GetIsolate(),
-                                               GetSimpleValue(info, 0));
-  for (const auto& value : UnfoldArgs(pThis, info)) {
-    if (SimpleValueCompare(pThis, argOne.get(), value.get())) {
+  v8::Local<v8::Value> argOne = GetSimpleValue(info, 0);
+  for (const auto& value : UnfoldArgs(info)) {
+    if (SimpleValueCompare(info.GetIsolate(), argOne, value)) {
       info.GetReturnValue().Set(1);
       return;
     }