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