Stop casting struct CFXJSE_ArgumentsImpl to unrelated class CFXJSE_Arguments

Remove the 'Impl entirely, and put the details into the class itself.

Review-Url: https://codereview.chromium.org/2036513002
diff --git a/xfa/fxjse/cfxjse_arguments.h b/xfa/fxjse/cfxjse_arguments.h
index 48a3bff..3028d39 100644
--- a/xfa/fxjse/cfxjse_arguments.h
+++ b/xfa/fxjse/cfxjse_arguments.h
@@ -11,6 +11,10 @@
 
 class CFXJSE_Arguments {
  public:
+  CFXJSE_Arguments(const v8::FunctionCallbackInfo<v8::Value>* pInfo,
+                   CFXJSE_Value* pRetValue)
+      : m_pInfo(pInfo), m_pRetValue(pRetValue) {}
+
   v8::Isolate* GetRuntime() const;
   int32_t GetLength() const;
   std::unique_ptr<CFXJSE_Value> GetValue(int32_t index) const;
@@ -20,6 +24,10 @@
   CFX_ByteString GetUTF8String(int32_t index) const;
   void* GetObject(int32_t index, CFXJSE_Class* pClass = nullptr) const;
   CFXJSE_Value* GetReturnValue();
+
+ private:
+  const v8::FunctionCallbackInfo<v8::Value>* m_pInfo;
+  CFXJSE_Value* m_pRetValue;
 };
 
 #endif  // XFA_FXJSE_CFXJSE_ARGUMENTS_H_
diff --git a/xfa/fxjse/class.cpp b/xfa/fxjse/class.cpp
index bb6f0e1..e7e061b 100644
--- a/xfa/fxjse/class.cpp
+++ b/xfa/fxjse/class.cpp
@@ -42,9 +42,8 @@
       new CFXJSE_Value(info.GetIsolate()));
   lpThisValue->ForceSetValue(info.This());
   std::unique_ptr<CFXJSE_Value> lpRetValue(new CFXJSE_Value(info.GetIsolate()));
-  CFXJSE_ArgumentsImpl impl = {&info, lpRetValue.get()};
-  lpFunctionInfo->callbackProc(lpThisValue.get(), szFunctionName,
-                               reinterpret_cast<CFXJSE_Arguments&>(impl));
+  CFXJSE_Arguments impl(&info, lpRetValue.get());
+  lpFunctionInfo->callbackProc(lpThisValue.get(), szFunctionName, impl);
   if (!lpRetValue->DirectGetValue().IsEmpty()) {
     info.GetReturnValue().Set(lpRetValue->DirectGetValue());
   }
@@ -63,9 +62,8 @@
       new CFXJSE_Value(info.GetIsolate()));
   lpThisValue->ForceSetValue(info.This());
   std::unique_ptr<CFXJSE_Value> lpRetValue(new CFXJSE_Value(info.GetIsolate()));
-  CFXJSE_ArgumentsImpl impl = {&info, lpRetValue.get()};
-  lpClassDefinition->constructor(lpThisValue.get(), szFunctionName,
-                                 reinterpret_cast<CFXJSE_Arguments&>(impl));
+  CFXJSE_Arguments impl(&info, lpRetValue.get());
+  lpClassDefinition->constructor(lpThisValue.get(), szFunctionName, impl);
   if (!lpRetValue->DirectGetValue().IsEmpty()) {
     info.GetReturnValue().Set(lpRetValue->DirectGetValue());
   }
@@ -123,68 +121,50 @@
 }
 
 v8::Isolate* CFXJSE_Arguments::GetRuntime() const {
-  const CFXJSE_ArgumentsImpl* lpArguments =
-      reinterpret_cast<const CFXJSE_ArgumentsImpl* const>(this);
-  return lpArguments->m_pRetValue->GetIsolate();
+  return m_pRetValue->GetIsolate();
 }
 
 int32_t CFXJSE_Arguments::GetLength() const {
-  const CFXJSE_ArgumentsImpl* lpArguments =
-      reinterpret_cast<const CFXJSE_ArgumentsImpl* const>(this);
-  return lpArguments->m_pInfo->Length();
+  return m_pInfo->Length();
 }
 
 std::unique_ptr<CFXJSE_Value> CFXJSE_Arguments::GetValue(int32_t index) const {
-  const CFXJSE_ArgumentsImpl* lpArguments =
-      reinterpret_cast<const CFXJSE_ArgumentsImpl* const>(this);
   std::unique_ptr<CFXJSE_Value> lpArgValue(
       new CFXJSE_Value(v8::Isolate::GetCurrent()));
-  lpArgValue->ForceSetValue((*lpArguments->m_pInfo)[index]);
+  lpArgValue->ForceSetValue((*m_pInfo)[index]);
   return lpArgValue;
 }
 
 FX_BOOL CFXJSE_Arguments::GetBoolean(int32_t index) const {
-  const CFXJSE_ArgumentsImpl* lpArguments =
-      reinterpret_cast<const CFXJSE_ArgumentsImpl* const>(this);
-  return (*lpArguments->m_pInfo)[index]->BooleanValue();
+  return (*m_pInfo)[index]->BooleanValue();
 }
 
 int32_t CFXJSE_Arguments::GetInt32(int32_t index) const {
-  const CFXJSE_ArgumentsImpl* lpArguments =
-      reinterpret_cast<const CFXJSE_ArgumentsImpl* const>(this);
-  return static_cast<int32_t>((*lpArguments->m_pInfo)[index]->NumberValue());
+  return static_cast<int32_t>((*m_pInfo)[index]->NumberValue());
 }
 
 FX_FLOAT CFXJSE_Arguments::GetFloat(int32_t index) const {
-  const CFXJSE_ArgumentsImpl* lpArguments =
-      reinterpret_cast<const CFXJSE_ArgumentsImpl* const>(this);
-  return static_cast<FX_FLOAT>((*lpArguments->m_pInfo)[index]->NumberValue());
+  return static_cast<FX_FLOAT>((*m_pInfo)[index]->NumberValue());
 }
 
 CFX_ByteString CFXJSE_Arguments::GetUTF8String(int32_t index) const {
-  const CFXJSE_ArgumentsImpl* lpArguments =
-      reinterpret_cast<const CFXJSE_ArgumentsImpl* const>(this);
-  v8::Local<v8::String> hString = (*lpArguments->m_pInfo)[index]->ToString();
+  v8::Local<v8::String> hString = (*m_pInfo)[index]->ToString();
   v8::String::Utf8Value szStringVal(hString);
   return CFX_ByteString(*szStringVal);
 }
 
 void* CFXJSE_Arguments::GetObject(int32_t index, CFXJSE_Class* pClass) const {
-  const CFXJSE_ArgumentsImpl* lpArguments =
-      reinterpret_cast<const CFXJSE_ArgumentsImpl* const>(this);
-  v8::Local<v8::Value> hValue = (*lpArguments->m_pInfo)[index];
+  v8::Local<v8::Value> hValue = (*m_pInfo)[index];
   ASSERT(!hValue.IsEmpty());
-  if (!hValue->IsObject()) {
-    return NULL;
-  }
+  if (!hValue->IsObject())
+    return nullptr;
   return FXJSE_RetrieveObjectBinding(hValue.As<v8::Object>(), pClass);
 }
 
 CFXJSE_Value* CFXJSE_Arguments::GetReturnValue() {
-  const CFXJSE_ArgumentsImpl* lpArguments =
-      reinterpret_cast<const CFXJSE_ArgumentsImpl* const>(this);
-  return lpArguments->m_pRetValue;
+  return m_pRetValue;
 }
+
 static void FXJSE_Context_GlobalObjToString(
     const v8::FunctionCallbackInfo<v8::Value>& info) {
   const FXJSE_CLASS_DESCRIPTOR* lpClass = static_cast<FXJSE_CLASS_DESCRIPTOR*>(
diff --git a/xfa/fxjse/class.h b/xfa/fxjse/class.h
index 344adf4..a28d368 100644
--- a/xfa/fxjse/class.h
+++ b/xfa/fxjse/class.h
@@ -15,14 +15,6 @@
 class CFXJSE_Value;
 
 class CFXJSE_Class {
- protected:
-  CFXJSE_Class(CFXJSE_Context* lpContext)
-      : m_lpClassDefinition(nullptr), m_pContext(lpContext) {}
-
- public:
-  inline CFXJSE_Context* GetContext() { return m_pContext; }
-  inline v8::Global<v8::FunctionTemplate>& GetTemplate() { return m_hTemplate; }
-
  public:
   static CFXJSE_Class* Create(CFXJSE_Context* pContext,
                               const FXJSE_CLASS_DESCRIPTOR* lpClassDefintion,
@@ -34,7 +26,13 @@
       v8::Local<v8::ObjectTemplate>& hObjectTemplate,
       const FXJSE_CLASS_DESCRIPTOR* lpClassDefinition);
 
+  CFXJSE_Context* GetContext() { return m_pContext; }
+  v8::Global<v8::FunctionTemplate>& GetTemplate() { return m_hTemplate; }
+
  protected:
+  explicit CFXJSE_Class(CFXJSE_Context* lpContext)
+      : m_lpClassDefinition(nullptr), m_pContext(lpContext) {}
+
   CFX_ByteString m_szClassName;
   const FXJSE_CLASS_DESCRIPTOR* m_lpClassDefinition;
   CFXJSE_Context* m_pContext;
@@ -42,9 +40,5 @@
   friend class CFXJSE_Context;
   friend class CFXJSE_Value;
 };
-struct CFXJSE_ArgumentsImpl {
-  const v8::FunctionCallbackInfo<v8::Value>* m_pInfo;
-  CFXJSE_Value* m_pRetValue;
-};
 
 #endif  // XFA_FXJSE_CLASS_H_
diff --git a/xfa/fxjse/dynprop.cpp b/xfa/fxjse/dynprop.cpp
index 6e98d82..946fe42 100644
--- a/xfa/fxjse/dynprop.cpp
+++ b/xfa/fxjse/dynprop.cpp
@@ -22,9 +22,8 @@
       new CFXJSE_Value(info.GetIsolate()));
   lpThisValue->ForceSetValue(info.This());
   std::unique_ptr<CFXJSE_Value> lpRetValue(new CFXJSE_Value(info.GetIsolate()));
-  CFXJSE_ArgumentsImpl impl = {&info, lpRetValue.get()};
-  lpClass->dynMethodCall(lpThisValue.get(), szFxPropName,
-                         reinterpret_cast<CFXJSE_Arguments&>(impl));
+  CFXJSE_Arguments impl(&info, lpRetValue.get());
+  lpClass->dynMethodCall(lpThisValue.get(), szFxPropName, impl);
   if (!lpRetValue->DirectGetValue().IsEmpty()) {
     info.GetReturnValue().Set(lpRetValue->DirectGetValue());
   }