1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file. 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JavaScript.h" 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Define.h" 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Object.h" 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Value.h" 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------- CJS_Value ---------------------------- */ 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::CJS_Value(v8::Isolate* isolate) : m_isolate(isolate),m_eType(VT_unknown) 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::CJS_Value(v8::Isolate* isolate, v8::Handle<v8::Value> pValue,FXJSVALUETYPE t) :m_isolate(isolate), m_pValue(pValue) , m_eType(t) 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::CJS_Value(v8::Isolate* isolate, const int &iValue):m_isolate(isolate) 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov operator =(iValue); 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::CJS_Value(v8::Isolate* isolate, const bool &bValue):m_isolate(isolate) 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov operator =(bValue); 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::CJS_Value(v8::Isolate* isolate, const float &fValue):m_isolate(isolate) 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov operator =(fValue); 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::CJS_Value(v8::Isolate* isolate, const double &dValue):m_isolate(isolate) 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov operator =(dValue); 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::CJS_Value(v8::Isolate* isolate, JSFXObject pJsObj):m_isolate(isolate) 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov operator =(pJsObj); 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::CJS_Value(v8::Isolate* isolate, CJS_Object * pJsObj):m_isolate(isolate) 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov operator =(pJsObj); 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::CJS_Value(v8::Isolate* isolate, FX_LPCWSTR pWstr):m_isolate(isolate) 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov operator =(pWstr); 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::CJS_Value(v8::Isolate* isolate, FX_LPCSTR pStr):m_isolate(isolate) 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov operator = (pStr); 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::CJS_Value(v8::Isolate* isolate, CJS_Array& array):m_isolate(isolate) 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov operator = (array); 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::~CJS_Value() 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Value::Attach(v8::Handle<v8::Value> pValue,FXJSVALUETYPE t) 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pValue = pValue; 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_eType = t; 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Value::Attach(CJS_Value *pValue) 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pValue) 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Attach(pValue->ToJSValue(),pValue->GetType()); 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Value::Detach() 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pValue = v8::Handle<v8::Value>(); 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_eType = VT_unknown; 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------------------------------------------------------------------- */ 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::operator int() const 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return JS_ToInt32(m_pValue); 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::operator bool() const 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return JS_ToBoolean(m_pValue); 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::operator double() const 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return JS_ToNumber(m_pValue); 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::operator float() const 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (float)JS_ToNumber(m_pValue); 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::operator CJS_Object *() const 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov v8::Handle<v8::Object> pObj = JS_ToObject(m_pValue); 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return (CJS_Object*)JS_GetPrivate(m_isolate, pObj); 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::operator v8::Handle<v8::Object>() const 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return JS_ToObject(m_pValue); 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::operator CFX_WideString() const 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return JS_ToString(m_pValue); 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::operator CFX_ByteString() const 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return CFX_ByteString::FromUnicode(operator CFX_WideString()); 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovv8::Handle<v8::Value> CJS_Value::ToJSValue() 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pValue; 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Value::operator v8::Handle<v8::Array>() const 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (IsArrayObject()) 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return v8::Handle<v8::Array>::Cast(JS_ToObject(m_pValue)); 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return v8::Handle<v8::Array>(); 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------------------------------------------------------------------- */ 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Value::operator =(int iValue) 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pValue = JS_NewNumber(m_isolate, iValue); 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_eType = VT_number; 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Value::operator =(bool bValue) 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pValue = JS_NewBoolean(m_isolate, bValue); 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_eType = VT_boolean; 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Value::operator =(double dValue) 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pValue = JS_NewNumber(m_isolate,dValue); 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_eType = VT_number; 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Value::operator = (float fValue) 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pValue = JS_NewNumber(m_isolate,fValue); 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_eType = VT_number; 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Value::operator =(v8::Handle<v8::Object> pObj) 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pValue = JS_NewObject(m_isolate,pObj); 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_eType = VT_fxobject; 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Value::operator =(CJS_Object * pObj) 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (pObj) 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov operator = ((JSFXObject)*pObj); 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Value::operator =(FX_LPCWSTR pWstr) 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pValue = JS_NewString(m_isolate,(wchar_t *)pWstr); 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_eType = VT_string; 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Value::SetNull() 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pValue = JS_NewNull(); 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_eType = VT_null; 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Value::operator = (FX_LPCSTR pStr) 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov operator = (CFX_WideString::FromLocal(pStr)); 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Value::operator = (CJS_Array & array) 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pValue = JS_NewObject2(m_isolate,(v8::Handle<v8::Array>)array); 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_eType = VT_object; 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Value::operator = (CJS_Date & date) 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pValue = JS_NewDate(m_isolate, (double)date); 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_eType = VT_date; 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Value::operator = (CJS_Value value) 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pValue = value.ToJSValue(); 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_eType = value.m_eType; 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------------------------------------------------------------------- */ 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFXJSVALUETYPE CJS_Value::GetType() const 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(m_pValue.IsEmpty()) return VT_unknown; 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(m_pValue->IsString()) return VT_string; 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(m_pValue->IsNumber()) return VT_number; 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(m_pValue->IsBoolean()) return VT_boolean; 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(m_pValue->IsDate()) return VT_date; 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(m_pValue->IsObject()) return VT_object; 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(m_pValue->IsNull()) return VT_null; 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(m_pValue->IsUndefined()) return VT_undefined; 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return VT_unknown; 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CJS_Value::IsArrayObject() const 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(m_pValue.IsEmpty()) return FALSE; 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pValue->IsArray(); 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CJS_Value::IsDateObject() const 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(m_pValue.IsEmpty()) return FALSE; 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pValue->IsDate(); 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//CJS_Value::operator CJS_Array() 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CJS_Value::ConvertToArray(CJS_Array &array) const 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (IsArrayObject()) 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov array.Attach(JS_ToArray(m_pValue)); 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CJS_Value::ConvertToDate(CJS_Date &date) const 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// if (GetType() == VT_date) 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// { 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// date = (double)(*this); 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// return TRUE; 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// } 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (IsDateObject()) 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov date.Attach(m_pValue); 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------- CJS_PropValue ---------------------------- */ 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_PropValue::CJS_PropValue(const CJS_Value &value) : 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CJS_Value(value), 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bIsSetting(0) 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_PropValue::CJS_PropValue(v8::Isolate* isolate) : CJS_Value(isolate), 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bIsSetting(0) 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_PropValue::~CJS_PropValue() 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CJS_PropValue::IsSetting() 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_bIsSetting; 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CJS_PropValue::IsGetting() 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return !m_bIsSetting; 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator <<(int iValue) 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(!m_bIsSetting); 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CJS_Value::operator =(iValue); 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator >>(int & iValue) const 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_bIsSetting); 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov iValue = CJS_Value::operator int(); 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator <<(bool bValue) 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(!m_bIsSetting); 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CJS_Value::operator =(bValue); 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator >>(bool &bValue) const 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_bIsSetting); 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bValue = CJS_Value::operator bool(); 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator <<(double dValue) 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(!m_bIsSetting); 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CJS_Value::operator =(dValue); 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator >>(double &dValue) const 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_bIsSetting); 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov dValue = CJS_Value::operator double(); 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator <<(CJS_Object *pObj) 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(!m_bIsSetting); 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CJS_Value::operator = (pObj); 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator >>(CJS_Object *&ppObj) const 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_bIsSetting); 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ppObj = CJS_Value::operator CJS_Object *(); 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator<<(JSFXObject pObj) 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(!m_bIsSetting); 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CJS_Value::operator = (pObj); 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator>>(JSFXObject &ppObj) const 376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_bIsSetting); 378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ppObj = CJS_Value::operator JSFXObject (); 379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::StartSetting() 383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bIsSetting = 1; 385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::StartGetting() 388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_bIsSetting = 0; 390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator <<(CFX_ByteString string) 392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(!m_bIsSetting); 394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CJS_Value::operator =((FX_LPCSTR)string); 395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator >>(CFX_ByteString &string) const 398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_bIsSetting); 400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov string = CJS_Value::operator CFX_ByteString(); 401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator <<(FX_LPCWSTR c_string) 404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(!m_bIsSetting); 406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CJS_Value::operator =(c_string); 407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator >>(CFX_WideString &wide_string) const 410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_bIsSetting); 412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov wide_string = CJS_Value::operator CFX_WideString(); 413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator <<(CFX_WideString wide_string) 416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(!m_bIsSetting); 418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CJS_Value::operator = (wide_string); 419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator >>(CJS_Array &array) const 422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_bIsSetting); 424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ConvertToArray(array); 425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator <<(CJS_Array &array) 428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(!m_bIsSetting); 430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CJS_Value::operator=(array); 431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator>>(CJS_Date &date) const 434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(m_bIsSetting); 436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ConvertToDate(date); 437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_PropValue::operator<<(CJS_Date &date) 440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(!m_bIsSetting); 442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CJS_Value::operator=(date); 443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 445ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_PropValue::operator v8::Handle<v8::Value>() const 446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pValue; 448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ======================================== CJS_Array ========================================= */ 451ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Array::CJS_Array(v8::Isolate* isolate):m_isolate(isolate) 452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 455ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Array::~CJS_Array() 456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Array::Attach(v8::Handle<v8::Array> pArray) 460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pArray = pArray; 462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 464ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CJS_Array::IsAttached() 465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Array::GetElement(unsigned index,CJS_Value &value) 470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pArray.IsEmpty()) 472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return; 473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov v8::Handle<v8::Value> p = JS_GetArrayElemnet(m_pArray,index); 474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov value.Attach(p,VT_object); 475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Array::SetElement(unsigned index,CJS_Value value) 478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pArray.IsEmpty()) 480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pArray = JS_NewArray(m_isolate); 481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JS_PutArrayElement(m_pArray,index,value.ToJSValue(),value.GetType()); 483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint CJS_Array::GetLength() 486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pArray.IsEmpty()) 488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0; 489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return JS_GetArrayLength(m_pArray); 490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 492ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Array:: operator v8::Handle<v8::Array>() 493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pArray.IsEmpty()) 495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pArray = JS_NewArray(m_isolate); 496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pArray; 498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ======================================== CJS_Date ========================================= */ 501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 502ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Date::CJS_Date(v8::Isolate* isolate) :m_isolate(isolate) 503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 506ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Date::CJS_Date(v8::Isolate* isolate,double dMsec_time) 507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_isolate = isolate; 509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pDate = JS_NewDate(isolate,dMsec_time); 510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 512ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Date::CJS_Date(v8::Isolate* isolate,int year, int mon, int day,int hour, int min, int sec) 513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_isolate = isolate; 515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pDate = JS_NewDate(isolate,MakeDate(year,mon,day,hour,min,sec,0)); 516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovdouble CJS_Date::MakeDate(int year, int mon, int day,int hour, int min, int sec,int ms) 519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return JS_MakeDate(JS_MakeDay(year,mon,day), JS_MakeTime(hour,min,sec,ms)); 521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 523ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Date::~CJS_Date() 524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 527ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CJS_Date::IsValidDate() 528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(m_pDate.IsEmpty()) return FALSE; 530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return !JS_PortIsNan(JS_ToNumber(m_pDate)); 531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Date::Attach(v8::Handle<v8::Value> pDate) 534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pDate = pDate; 536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint CJS_Date::GetYear() 539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (IsValidDate()) 541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return JS_GetYearFromTime(JS_LocalTime(JS_ToNumber(m_pDate))); 542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0; 544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Date::SetYear(int iYear) 547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov double date = MakeDate(iYear,GetMonth(),GetDay(),GetHours(),GetMinutes(),GetSeconds(),0); 549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JS_ValueCopy(m_pDate, JS_NewDate(m_isolate,date)); 550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint CJS_Date::GetMonth() 553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (IsValidDate()) 555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return JS_GetMonthFromTime(JS_LocalTime(JS_ToNumber(m_pDate))); 556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0; 558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Date::SetMonth(int iMonth) 561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov double date = MakeDate(GetYear(),iMonth,GetDay(),GetHours(),GetMinutes(),GetSeconds(),0); 564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JS_ValueCopy(m_pDate, JS_NewDate(m_isolate,date)); 565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint CJS_Date::GetDay() 569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (IsValidDate()) 571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return JS_GetDayFromTime(JS_LocalTime(JS_ToNumber(m_pDate))); 572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0; 574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Date::SetDay(int iDay) 577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov double date = MakeDate(GetYear(),GetMonth(),iDay,GetHours(),GetMinutes(),GetSeconds(),0); 580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JS_ValueCopy(m_pDate,JS_NewDate(m_isolate,date)); 581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint CJS_Date::GetHours() 585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (IsValidDate()) 587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return JS_GetHourFromTime(JS_LocalTime(JS_ToNumber(m_pDate))); 588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0; 590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Date::SetHours(int iHours) 593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov double date = MakeDate(GetYear(),GetMonth(),GetDay(),iHours,GetMinutes(),GetSeconds(),0); 595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JS_ValueCopy(m_pDate,JS_NewDate(m_isolate,date)); 596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint CJS_Date::GetMinutes() 599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (IsValidDate()) 601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return JS_GetMinFromTime(JS_LocalTime(JS_ToNumber(m_pDate))); 602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0; 604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Date::SetMinutes(int minutes) 607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov double date = MakeDate(GetYear(),GetMonth(),GetDay(),GetHours(),minutes,GetSeconds(),0); 609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JS_ValueCopy(m_pDate,JS_NewDate(m_isolate,date)); 610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint CJS_Date::GetSeconds() 613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (IsValidDate()) 615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return JS_GetSecFromTime(JS_LocalTime(JS_ToNumber(m_pDate))); 616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0; 618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Date::SetSeconds(int seconds) 621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov double date = MakeDate(GetYear(),GetMonth(),GetDay(),GetHours(),GetMinutes(),seconds,0); 623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov JS_ValueCopy(m_pDate,JS_NewDate(m_isolate,date)); 624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 626ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Date::operator v8::Handle<v8::Value>() 627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pDate; 629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 631ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Date::operator double() const 632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(m_pDate.IsEmpty()) 634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0.0; 635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return JS_ToNumber(m_pDate); 636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 638ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString CJS_Date::ToString() const 639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(m_pDate.IsEmpty()) 641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return L""; 642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return JS_ToString(m_pDate); 643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 644