From 40faa79da0bc902d7f1f5cc43464b94e6dfa5d22 Mon Sep 17 00:00:00 2001 From: tsepez Date: Fri, 15 Jul 2016 17:58:02 -0700 Subject: Remove type info from CJS_Value, interrogate v8 instead Review-Url: https://codereview.chromium.org/2154503002 --- fpdfsdk/javascript/JS_Value.cpp | 68 +++++++++++------------------------------ 1 file changed, 18 insertions(+), 50 deletions(-) (limited to 'fpdfsdk/javascript/JS_Value.cpp') diff --git a/fpdfsdk/javascript/JS_Value.cpp b/fpdfsdk/javascript/JS_Value.cpp index 6bc45c555d..5c1ba2a432 100644 --- a/fpdfsdk/javascript/JS_Value.cpp +++ b/fpdfsdk/javascript/JS_Value.cpp @@ -22,11 +22,10 @@ static double GetNan() { return *(double*)g_nan; } -CJS_Value::CJS_Value(CJS_Runtime* pRuntime) - : m_eType(VT_unknown), m_pJSRuntime(pRuntime) {} +CJS_Value::CJS_Value(CJS_Runtime* pRuntime) : m_pJSRuntime(pRuntime) {} -CJS_Value::CJS_Value(CJS_Runtime* pRuntime, v8::Local pValue, Type t) - : m_eType(t), m_pValue(pValue), m_pJSRuntime(pRuntime) {} +CJS_Value::CJS_Value(CJS_Runtime* pRuntime, v8::Local pValue) + : m_pValue(pValue), m_pJSRuntime(pRuntime) {} CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const int& iValue) : m_pJSRuntime(pRuntime) { @@ -48,23 +47,11 @@ CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const double& dValue) operator=(dValue); } -CJS_Value::CJS_Value(CJS_Runtime* pRuntime, v8::Local pJsObj) - : m_pJSRuntime(pRuntime) { - operator=(pJsObj); -} - CJS_Value::CJS_Value(CJS_Runtime* pRuntime, CJS_Object* pJsObj) : m_pJSRuntime(pRuntime) { operator=(pJsObj); } -CJS_Value::CJS_Value(CJS_Runtime* pRuntime, CJS_Document* pJsDoc) - : m_pJSRuntime(pRuntime) { - m_eType = VT_object; - if (pJsDoc) - m_pValue = pJsDoc->ToV8Object(); -} - CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const FX_WCHAR* pWstr) : m_pJSRuntime(pRuntime) { operator=(pWstr); @@ -84,19 +71,17 @@ CJS_Value::~CJS_Value() {} CJS_Value::CJS_Value(const CJS_Value& other) = default; -void CJS_Value::Attach(v8::Local pValue, Type t) { +void CJS_Value::Attach(v8::Local pValue) { m_pValue = pValue; - m_eType = t; } void CJS_Value::Attach(CJS_Value* pValue) { if (pValue) - Attach(pValue->ToV8Value(), pValue->GetType()); + Attach(pValue->ToV8Value()); } void CJS_Value::Detach() { m_pValue = v8::Local(); - m_eType = VT_unknown; } int CJS_Value::ToInt() const { @@ -146,7 +131,7 @@ v8::Local CJS_Value::ToV8Array() const { void CJS_Value::MaybeCoerceToNumber() { bool bAllowNaN = false; - if (m_eType == VT_string) { + if (GetType() == VT_string) { CFX_ByteString bstr = ToCFXByteString(); if (bstr.GetLength() == 0) return; @@ -162,32 +147,26 @@ void CJS_Value::MaybeCoerceToNumber() { if (std::isnan(num->Value()) && !bAllowNaN) return; m_pValue = num; - m_eType = VT_number; } void CJS_Value::operator=(int iValue) { m_pValue = FXJS_NewNumber(m_pJSRuntime->GetIsolate(), iValue); - m_eType = VT_number; } void CJS_Value::operator=(bool bValue) { m_pValue = FXJS_NewBoolean(m_pJSRuntime->GetIsolate(), bValue); - m_eType = VT_boolean; } void CJS_Value::operator=(double dValue) { m_pValue = FXJS_NewNumber(m_pJSRuntime->GetIsolate(), dValue); - m_eType = VT_number; } void CJS_Value::operator=(float fValue) { m_pValue = FXJS_NewNumber(m_pJSRuntime->GetIsolate(), fValue); - m_eType = VT_number; } void CJS_Value::operator=(v8::Local pObj) { m_pValue = pObj; - m_eType = VT_fxobject; } void CJS_Value::operator=(CJS_Object* pObj) { @@ -195,21 +174,12 @@ void CJS_Value::operator=(CJS_Object* pObj) { operator=(pObj->ToV8Object()); } -void CJS_Value::operator=(CJS_Document* pJsDoc) { - m_eType = VT_object; - if (pJsDoc) { - m_pValue = pJsDoc->ToV8Object(); - } -} - void CJS_Value::operator=(const FX_WCHAR* pWstr) { m_pValue = FXJS_NewString(m_pJSRuntime->GetIsolate(), (wchar_t*)pWstr); - m_eType = VT_string; } void CJS_Value::SetNull() { m_pValue = FXJS_NewNull(m_pJSRuntime->GetIsolate()); - m_eType = VT_null; } void CJS_Value::operator=(const FX_CHAR* pStr) { @@ -218,36 +188,34 @@ void CJS_Value::operator=(const FX_CHAR* pStr) { void CJS_Value::operator=(CJS_Array& array) { m_pValue = static_cast>(array); - m_eType = VT_object; } void CJS_Value::operator=(CJS_Date& date) { m_pValue = FXJS_NewDate(m_pJSRuntime->GetIsolate(), (double)date); - m_eType = VT_date; } void CJS_Value::operator=(CJS_Value value) { m_pValue = value.ToV8Value(); - m_eType = value.m_eType; m_pJSRuntime = value.m_pJSRuntime; } -CJS_Value::Type CJS_Value::GetType() const { - if (m_pValue.IsEmpty()) +// static +CJS_Value::Type CJS_Value::GetValueType(v8::Local value) { + if (value.IsEmpty()) return VT_unknown; - if (m_pValue->IsString()) + if (value->IsString()) return VT_string; - if (m_pValue->IsNumber()) + if (value->IsNumber()) return VT_number; - if (m_pValue->IsBoolean()) + if (value->IsBoolean()) return VT_boolean; - if (m_pValue->IsDate()) + if (value->IsDate()) return VT_date; - if (m_pValue->IsObject()) + if (value->IsObject()) return VT_object; - if (m_pValue->IsNull()) + if (value->IsNull()) return VT_null; - if (m_pValue->IsUndefined()) + if (value->IsUndefined()) return VT_undefined; return VT_unknown; } @@ -426,7 +394,7 @@ void CJS_Array::GetElement(unsigned index, CJS_Value& value) { return; v8::Local p = FXJS_GetArrayElement(m_pJSRuntime->GetIsolate(), m_pArray, index); - value.Attach(p, CJS_Value::VT_object); + value.Attach(p); } void CJS_Array::SetElement(unsigned index, CJS_Value value) { @@ -898,7 +866,7 @@ std::vector JS_ExpandKeywordParams( v8::Local v8Value = FXJS_GetObjectElement(pRuntime->GetIsolate(), pObj, property); if (!v8Value->IsUndefined()) - result[i] = CJS_Value(pRuntime, v8Value, CJS_Value::VT_unknown); + result[i] = CJS_Value(pRuntime, v8Value); } va_end(ap); return result; -- cgit v1.2.3