OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "../../foxitlib.h" | 7 #include "../../foxitlib.h" |
8 #include "fxv8.h" | 8 #include "fxv8.h" |
9 #include "value.h" | 9 #include "value.h" |
10 #include "class.h" | 10 #include "class.h" |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); | 77 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); |
78 ASSERT(lpValue); | 78 ASSERT(lpValue); |
79 return lpValue->ToDouble(); | 79 return lpValue->ToDouble(); |
80 } | 80 } |
81 void FXJSE_Value_ToUTF8String (FXJSE_HVALUE hValue, CFX_ByteSt
ring& szStrOutput) | 81 void FXJSE_Value_ToUTF8String (FXJSE_HVALUE hValue, CFX_ByteSt
ring& szStrOutput) |
82 { | 82 { |
83 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); | 83 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); |
84 ASSERT(lpValue); | 84 ASSERT(lpValue); |
85 return lpValue->ToString(szStrOutput); | 85 return lpValue->ToString(szStrOutput); |
86 } | 86 } |
87 FX_INT32» FXJSE_Value_ToInteger» » (FXJSE_HVALUE hValue) | 87 int32_t»FXJSE_Value_ToInteger» » (FXJSE_HVALUE hValue) |
88 { | 88 { |
89 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); | 89 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); |
90 ASSERT(lpValue); | 90 ASSERT(lpValue); |
91 return lpValue->ToInteger(); | 91 return lpValue->ToInteger(); |
92 } | 92 } |
93 FX_LPVOID FXJSE_Value_ToObject (FXJSE_HVALUE hValue, FXJSE_HCLA
SS hClass) | 93 FX_LPVOID FXJSE_Value_ToObject (FXJSE_HVALUE hValue, FXJSE_HCLA
SS hClass) |
94 { | 94 { |
95 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); | 95 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); |
96 CFXJSE_Class* lpClass = reinterpret_cast<CFXJSE_Class*>(hClass); | 96 CFXJSE_Class* lpClass = reinterpret_cast<CFXJSE_Class*>(hClass); |
97 ASSERT(lpValue); | 97 ASSERT(lpValue); |
(...skipping 16 matching lines...) Expand all Loading... |
114 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); | 114 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); |
115 ASSERT(lpValue); | 115 ASSERT(lpValue); |
116 return lpValue->SetBoolean(bBoolean); | 116 return lpValue->SetBoolean(bBoolean); |
117 } | 117 } |
118 void FXJSE_Value_SetUTF8String (FXJSE_HVALUE hValue, FX_BSTR
szString) | 118 void FXJSE_Value_SetUTF8String (FXJSE_HVALUE hValue, FX_BSTR
szString) |
119 { | 119 { |
120 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); | 120 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); |
121 ASSERT(lpValue); | 121 ASSERT(lpValue); |
122 return lpValue->SetString(szString); | 122 return lpValue->SetString(szString); |
123 } | 123 } |
124 void» » FXJSE_Value_SetInteger» » (FXJSE_HVALUE hValue, FX_INT32
nInteger) | 124 void» » FXJSE_Value_SetInteger» » (FXJSE_HVALUE hValue, int32_t n
Integer) |
125 { | 125 { |
126 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); | 126 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); |
127 ASSERT(lpValue); | 127 ASSERT(lpValue); |
128 return lpValue->SetInteger(nInteger); | 128 return lpValue->SetInteger(nInteger); |
129 } | 129 } |
130 void FXJSE_Value_SetFloat (FXJSE_HVALUE hValue, FX_FLOAT
fFloat) | 130 void FXJSE_Value_SetFloat (FXJSE_HVALUE hValue, FX_FLOAT
fFloat) |
131 { | 131 { |
132 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); | 132 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); |
133 ASSERT(lpValue); | 133 ASSERT(lpValue); |
134 return lpValue->SetFloat(fFloat); | 134 return lpValue->SetFloat(fFloat); |
135 } | 135 } |
136 void FXJSE_Value_SetDouble (FXJSE_HVALUE hValue, FXJSE_DOUB
LE dDouble) | 136 void FXJSE_Value_SetDouble (FXJSE_HVALUE hValue, FXJSE_DOUB
LE dDouble) |
137 { | 137 { |
138 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); | 138 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); |
139 ASSERT(lpValue); | 139 ASSERT(lpValue); |
140 return lpValue->SetDouble(dDouble); | 140 return lpValue->SetDouble(dDouble); |
141 } | 141 } |
142 void FXJSE_Value_SetObject (FXJSE_HVALUE hValue, FX_LPVOID
lpObject, FXJSE_HCLASS hClass) | 142 void FXJSE_Value_SetObject (FXJSE_HVALUE hValue, FX_LPVOID
lpObject, FXJSE_HCLASS hClass) |
143 { | 143 { |
144 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); | 144 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); |
145 CFXJSE_Class* lpClass = reinterpret_cast<CFXJSE_Class*>(hClass); | 145 CFXJSE_Class* lpClass = reinterpret_cast<CFXJSE_Class*>(hClass); |
146 if(lpClass == NULL) { | 146 if(lpClass == NULL) { |
147 ASSERT(lpObject == NULL); | 147 ASSERT(lpObject == NULL); |
148 lpValue->SetJSObject(); | 148 lpValue->SetJSObject(); |
149 } else if(lpClass != NULL) { | 149 } else if(lpClass != NULL) { |
150 lpValue->SetHostObject(lpObject, lpClass); | 150 lpValue->SetHostObject(lpObject, lpClass); |
151 } | 151 } |
152 } | 152 } |
153 void» » FXJSE_Value_SetArray» » (FXJSE_HVALUE hValue, FX_UINT32
uValueCount, FXJSE_HVALUE* rgValues) | 153 void» » FXJSE_Value_SetArray» » (FXJSE_HVALUE hValue, uint32_t u
ValueCount, FXJSE_HVALUE* rgValues) |
154 { | 154 { |
155 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); | 155 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); |
156 return lpValue->SetArray(uValueCount, reinterpret_cast<CFXJSE_Value**>(rgVal
ues)); | 156 return lpValue->SetArray(uValueCount, reinterpret_cast<CFXJSE_Value**>(rgVal
ues)); |
157 } | 157 } |
158 void FXJSE_Value_SetDate (FXJSE_HVALUE hValue, FX
JSE_DOUBLE dDouble) | 158 void FXJSE_Value_SetDate (FXJSE_HVALUE hValue, FX
JSE_DOUBLE dDouble) |
159 { | 159 { |
160 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); | 160 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); |
161 return lpValue->SetDate(dDouble); | 161 return lpValue->SetDate(dDouble); |
162 } | 162 } |
163 void FXJSE_Value_Set (FXJSE_HVALUE hValue, FX
JSE_HVALUE hOriginalValue) | 163 void FXJSE_Value_Set (FXJSE_HVALUE hValue, FX
JSE_HVALUE hOriginalValue) |
(...skipping 10 matching lines...) Expand all Loading... |
174 ASSERT(lpValue && lpPropValue); | 174 ASSERT(lpValue && lpPropValue); |
175 return lpValue->GetObjectProperty(szPropName, lpPropValue); | 175 return lpValue->GetObjectProperty(szPropName, lpPropValue); |
176 } | 176 } |
177 FX_BOOL FXJSE_Value_SetObjectProp (FXJSE_HVALUE hValue, FX
_BSTR szPropName, FXJSE_HVALUE hPropValue) | 177 FX_BOOL FXJSE_Value_SetObjectProp (FXJSE_HVALUE hValue, FX
_BSTR szPropName, FXJSE_HVALUE hPropValue) |
178 { | 178 { |
179 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); | 179 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); |
180 CFXJSE_Value* lpPropValue = reinterpret_cast<CFXJSE_Value*>(hPropValue); | 180 CFXJSE_Value* lpPropValue = reinterpret_cast<CFXJSE_Value*>(hPropValue); |
181 ASSERT(lpValue && lpPropValue); | 181 ASSERT(lpValue && lpPropValue); |
182 return lpValue->SetObjectProperty(szPropName, lpPropValue); | 182 return lpValue->SetObjectProperty(szPropName, lpPropValue); |
183 } | 183 } |
184 FX_BOOL»» FXJSE_Value_GetObjectPropByIdx» (FXJSE_HVALUE hValue, FX_UINT32»
uPropIdx,» FXJSE_HVALUE hPropValue) | 184 FX_BOOL»» FXJSE_Value_GetObjectPropByIdx» (FXJSE_HVALUE hValue, uint32_t»
uPropIdx,» FXJSE_HVALUE hPropValue) |
185 { | 185 { |
186 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); | 186 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); |
187 CFXJSE_Value* lpPropValue = reinterpret_cast<CFXJSE_Value*>(hPropValue); | 187 CFXJSE_Value* lpPropValue = reinterpret_cast<CFXJSE_Value*>(hPropValue); |
188 ASSERT(lpValue && lpPropValue); | 188 ASSERT(lpValue && lpPropValue); |
189 return lpValue->GetObjectProperty(uPropIdx, lpPropValue); | 189 return lpValue->GetObjectProperty(uPropIdx, lpPropValue); |
190 } | 190 } |
191 FX_BOOL»» FXJSE_Value_SetObjectPropByIdx» (FXJSE_HVALUE hValue, FX_UINT32»
uPropIdx,» FXJSE_HVALUE hPropValue) | 191 FX_BOOL»» FXJSE_Value_SetObjectPropByIdx» (FXJSE_HVALUE hValue, uint32_t»
uPropIdx,» FXJSE_HVALUE hPropValue) |
192 { | 192 { |
193 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); | 193 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); |
194 CFXJSE_Value* lpPropValue = reinterpret_cast<CFXJSE_Value*>(hPropValue); | 194 CFXJSE_Value* lpPropValue = reinterpret_cast<CFXJSE_Value*>(hPropValue); |
195 ASSERT(lpValue && lpPropValue); | 195 ASSERT(lpValue && lpPropValue); |
196 return lpValue->SetObjectProperty(uPropIdx, lpPropValue); | 196 return lpValue->SetObjectProperty(uPropIdx, lpPropValue); |
197 } | 197 } |
198 FX_BOOL FXJSE_Value_DeleteObjectProp (FXJSE_HVALUE hValue, FX_BSTR sz
PropName) | 198 FX_BOOL FXJSE_Value_DeleteObjectProp (FXJSE_HVALUE hValue, FX_BSTR sz
PropName) |
199 { | 199 { |
200 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); | 200 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); |
201 ASSERT(lpValue); | 201 ASSERT(lpValue); |
(...skipping 13 matching lines...) Expand all Loading... |
215 return lpValue->SetObjectOwnProperty(szPropName, lpPropValue); | 215 return lpValue->SetObjectOwnProperty(szPropName, lpPropValue); |
216 } | 216 } |
217 FX_BOOL FXJSE_Value_SetFunctionBind (FXJSE_HVALUE hValue, FXJSE_HVAL
UE hOldFunction, FXJSE_HVALUE hNewThis) | 217 FX_BOOL FXJSE_Value_SetFunctionBind (FXJSE_HVALUE hValue, FXJSE_HVAL
UE hOldFunction, FXJSE_HVALUE hNewThis) |
218 { | 218 { |
219 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); | 219 CFXJSE_Value* lpValue = reinterpret_cast<CFXJSE_Value*>(hValue); |
220 CFXJSE_Value* lpOldFunction = reinterpret_cast<CFXJSE_Value*>(hOldFunction); | 220 CFXJSE_Value* lpOldFunction = reinterpret_cast<CFXJSE_Value*>(hOldFunction); |
221 CFXJSE_Value* lpNewThis = reinterpret_cast<CFXJSE_Value*>(hNewThis); | 221 CFXJSE_Value* lpNewThis = reinterpret_cast<CFXJSE_Value*>(hNewThis); |
222 ASSERT(lpValue && lpOldFunction && lpNewThis); | 222 ASSERT(lpValue && lpOldFunction && lpNewThis); |
223 return lpValue->SetFunctionBind(lpOldFunction, lpNewThis); | 223 return lpValue->SetFunctionBind(lpOldFunction, lpNewThis); |
224 } | 224 } |
225 FX_BOOL»FXJSE_Value_CallFunction(FXJSE_HVALUE hFunction, FXJSE_HVALUE hThis, FXJ
SE_HVALUE hRetValue, FX_UINT32 nArgCount, FXJSE_HVALUE* lpArgs) | 225 FX_BOOL»FXJSE_Value_CallFunction(FXJSE_HVALUE hFunction, FXJSE_HVALUE hThis, FXJ
SE_HVALUE hRetValue, uint32_t nArgCount, FXJSE_HVALUE* lpArgs) |
226 { | 226 { |
227 CFXJSE_Value* lpFunction = reinterpret_cast<CFXJSE_Value*>(hFunction); | 227 CFXJSE_Value* lpFunction = reinterpret_cast<CFXJSE_Value*>(hFunction); |
228 CFXJSE_Value* lpThis = reinterpret_cast<CFXJSE_Value*>(hThis); | 228 CFXJSE_Value* lpThis = reinterpret_cast<CFXJSE_Value*>(hThis); |
229 CFXJSE_Value* lpRetValue = reinterpret_cast<CFXJSE_Value*>(hRetValue); | 229 CFXJSE_Value* lpRetValue = reinterpret_cast<CFXJSE_Value*>(hRetValue); |
230 ASSERT(lpFunction); | 230 ASSERT(lpFunction); |
231 return lpFunction->Call(lpThis, lpRetValue, nArgCount, lpArgs); | 231 return lpFunction->Call(lpThis, lpRetValue, nArgCount, lpArgs); |
232 } | 232 } |
233 FXJSE_HVALUE FXJSE_Value_Create (FXJSE_HRUNTIME hRuntime) | 233 FXJSE_HVALUE FXJSE_Value_Create (FXJSE_HRUNTIME hRuntime) |
234 { | 234 { |
235 CFXJSE_Value* lpValue = CFXJSE_Value::Create(reinterpret_cast<v8::Isolate*>(
hRuntime)); | 235 CFXJSE_Value* lpValue = CFXJSE_Value::Create(reinterpret_cast<v8::Isolate*>(
hRuntime)); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 return NULL; | 286 return NULL; |
287 } | 287 } |
288 return FXJSE_RetrieveObjectBinding(hValue.As<v8::Object>(), lpClass); | 288 return FXJSE_RetrieveObjectBinding(hValue.As<v8::Object>(), lpClass); |
289 } | 289 } |
290 V8_INLINE static double FXJSE_ftod(FX_FLOAT fNumber) | 290 V8_INLINE static double FXJSE_ftod(FX_FLOAT fNumber) |
291 { | 291 { |
292 if(sizeof(FX_FLOAT) != 4) { | 292 if(sizeof(FX_FLOAT) != 4) { |
293 ASSERT(FALSE); | 293 ASSERT(FALSE); |
294 return fNumber; | 294 return fNumber; |
295 } | 295 } |
296 FX_UINT32 nFloatBits = (FX_UINT32&)fNumber; | 296 uint32_t nFloatBits = (uint32_t&)fNumber; |
297 FX_UINT8 nExponent = (FX_UINT8)(nFloatBits >> 16 >> 7 ); | 297 uint8_t nExponent = (uint8_t)(nFloatBits >> 16 >> 7 ); |
298 if(nExponent == 0 || nExponent == 255) { | 298 if(nExponent == 0 || nExponent == 255) { |
299 return fNumber; | 299 return fNumber; |
300 } | 300 } |
301 FX_INT8 nErrExp = nExponent - 127 - 23; | 301 int8_t nErrExp = nExponent - 127 - 23; |
302 if(nErrExp >= 0) { | 302 if(nErrExp >= 0) { |
303 return fNumber; | 303 return fNumber; |
304 } | 304 } |
305 double dwError = pow(2.0, nErrExp), dwErrorHalf = dwError / 2; | 305 double dwError = pow(2.0, nErrExp), dwErrorHalf = dwError / 2; |
306 double dNumber = fNumber, dNumberAbs = fabs(fNumber); | 306 double dNumber = fNumber, dNumberAbs = fabs(fNumber); |
307 double dNumberAbsMin = dNumberAbs - dwErrorHalf, dNumberAbsMax = dNumberAbs
+ dwErrorHalf; | 307 double dNumberAbsMin = dNumberAbs - dwErrorHalf, dNumberAbsMax = dNumberAbs
+ dwErrorHalf; |
308 FX_INT32 iErrPos = 0; | 308 int32_t iErrPos = 0; |
309 if(floor(dNumberAbsMin) == floor(dNumberAbsMax)) { | 309 if(floor(dNumberAbsMin) == floor(dNumberAbsMax)) { |
310 dNumberAbsMin = fmod(dNumberAbsMin, 1.0); | 310 dNumberAbsMin = fmod(dNumberAbsMin, 1.0); |
311 dNumberAbsMax = fmod(dNumberAbsMax, 1.0); | 311 dNumberAbsMax = fmod(dNumberAbsMax, 1.0); |
312 FX_INT32 iErrPosMin = 1, iErrPosMax = 38; | 312 int32_t iErrPosMin = 1, iErrPosMax = 38; |
313 do { | 313 do { |
314 FX_INT32 iMid = (iErrPosMin + iErrPosMax) / 2; | 314 int32_t iMid = (iErrPosMin + iErrPosMax) / 2; |
315 double dPow = pow(10.0, iMid); | 315 double dPow = pow(10.0, iMid); |
316 if(floor(dNumberAbsMin * dPow) == floor(dNumberAbsMax * dPow)) { | 316 if(floor(dNumberAbsMin * dPow) == floor(dNumberAbsMax * dPow)) { |
317 iErrPosMin = iMid + 1; | 317 iErrPosMin = iMid + 1; |
318 } else { | 318 } else { |
319 iErrPosMax = iMid; | 319 iErrPosMax = iMid; |
320 } | 320 } |
321 } while (iErrPosMin < iErrPosMax); | 321 } while (iErrPosMin < iErrPosMax); |
322 iErrPos = iErrPosMax; | 322 iErrPos = iErrPosMax; |
323 } | 323 } |
324 double dPow = pow(10.0, iErrPos); | 324 double dPow = pow(10.0, iErrPos); |
325 return fNumber < 0 ? ceil(dNumber * dPow - 0.5) / dPow : floor(dNumber * dPo
w + 0.5) / dPow; | 325 return fNumber < 0 ? ceil(dNumber * dPow - 0.5) / dPow : floor(dNumber * dPo
w + 0.5) / dPow; |
326 } | 326 } |
327 void CFXJSE_Value::SetFloat(FX_FLOAT fFloat) | 327 void CFXJSE_Value::SetFloat(FX_FLOAT fFloat) |
328 { | 328 { |
329 CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); | 329 CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate); |
330 v8::Local<v8::Value> hValue = v8::Number::New(m_pIsolate, FXJSE_ftod(fFloat)
); | 330 v8::Local<v8::Value> hValue = v8::Number::New(m_pIsolate, FXJSE_ftod(fFloat)
); |
331 m_hValue.Reset(m_pIsolate, hValue); | 331 m_hValue.Reset(m_pIsolate, hValue); |
332 } | 332 } |
333 void CFXJSE_Value::SetHostObject(FX_LPVOID lpObject, CFXJSE_Class* lpClass) | 333 void CFXJSE_Value::SetHostObject(FX_LPVOID lpObject, CFXJSE_Class* lpClass) |
334 { | 334 { |
335 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); | 335 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); |
336 ASSERT(lpClass); | 336 ASSERT(lpClass); |
337 v8::Local<v8::FunctionTemplate> hClass = v8::Local<v8::FunctionTemplate>::Ne
w(m_pIsolate, lpClass->m_hTemplate); | 337 v8::Local<v8::FunctionTemplate> hClass = v8::Local<v8::FunctionTemplate>::Ne
w(m_pIsolate, lpClass->m_hTemplate); |
338 v8::Local<v8::Object> hObject = hClass->InstanceTemplate()->NewInstance(); | 338 v8::Local<v8::Object> hObject = hClass->InstanceTemplate()->NewInstance(); |
339 FXJSE_UpdateObjectBinding(hObject, lpObject); | 339 FXJSE_UpdateObjectBinding(hObject, lpObject); |
340 m_hValue.Reset(m_pIsolate, hObject); | 340 m_hValue.Reset(m_pIsolate, hObject); |
341 } | 341 } |
342 void CFXJSE_Value::SetArray(FX_UINT32 uValueCount, CFXJSE_Value** rgValues) | 342 void CFXJSE_Value::SetArray(uint32_t uValueCount, CFXJSE_Value** rgValues) |
343 { | 343 { |
344 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); | 344 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); |
345 v8::Local<v8::Array> hArrayObject = v8::Array::New(m_pIsolate, uValueCount); | 345 v8::Local<v8::Array> hArrayObject = v8::Array::New(m_pIsolate, uValueCount); |
346 if (rgValues) { | 346 if (rgValues) { |
347 for(FX_UINT32 i = 0; i < uValueCount; i++) { | 347 for(uint32_t i = 0; i < uValueCount; i++) { |
348 if(rgValues[i]) { | 348 if(rgValues[i]) { |
349 hArrayObject->Set(i, v8::Local<v8::Value>::New(m_pIsolate, rgVal
ues[i]->DirectGetValue())); | 349 hArrayObject->Set(i, v8::Local<v8::Value>::New(m_pIsolate, rgVal
ues[i]->DirectGetValue())); |
350 } | 350 } |
351 } | 351 } |
352 } | 352 } |
353 m_hValue.Reset(m_pIsolate, hArrayObject); | 353 m_hValue.Reset(m_pIsolate, hArrayObject); |
354 } | 354 } |
355 void CFXJSE_Value::SetDate(FXJSE_DOUBLE dDouble) | 355 void CFXJSE_Value::SetDate(FXJSE_DOUBLE dDouble) |
356 { | 356 { |
357 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); | 357 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); |
(...skipping 14 matching lines...) Expand all Loading... |
372 { | 372 { |
373 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); | 373 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); |
374 v8::Local<v8::Value> hObject = v8::Local<v8::Value>::New(m_pIsolate, m_hValu
e); | 374 v8::Local<v8::Value> hObject = v8::Local<v8::Value>::New(m_pIsolate, m_hValu
e); |
375 if(!hObject->IsObject()) { | 375 if(!hObject->IsObject()) { |
376 return FALSE; | 376 return FALSE; |
377 } | 377 } |
378 v8::Local<v8::Value> hPropValue = hObject.As<v8::Object>()->Get(v8::String::
NewFromUtf8(m_pIsolate, szPropName.GetCStr(), v8::String::kNormalString, szPropN
ame.GetLength())); | 378 v8::Local<v8::Value> hPropValue = hObject.As<v8::Object>()->Get(v8::String::
NewFromUtf8(m_pIsolate, szPropName.GetCStr(), v8::String::kNormalString, szPropN
ame.GetLength())); |
379 lpPropValue->ForceSetValue(hPropValue); | 379 lpPropValue->ForceSetValue(hPropValue); |
380 return TRUE; | 380 return TRUE; |
381 } | 381 } |
382 FX_BOOL CFXJSE_Value::SetObjectProperty(FX_UINT32 uPropIdx, CFXJSE_Value* lpProp
Value) | 382 FX_BOOL CFXJSE_Value::SetObjectProperty(uint32_t uPropIdx, CFXJSE_Value* lpPropV
alue) |
383 { | 383 { |
384 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); | 384 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); |
385 v8::Local<v8::Value> hObject = v8::Local<v8::Value>::New(m_pIsolate, m_hValu
e); | 385 v8::Local<v8::Value> hObject = v8::Local<v8::Value>::New(m_pIsolate, m_hValu
e); |
386 if(!hObject->IsObject()) { | 386 if(!hObject->IsObject()) { |
387 return FALSE; | 387 return FALSE; |
388 } | 388 } |
389 v8::Local<v8::Value> hPropValue = v8::Local<v8::Value>::New(m_pIsolate, lpPr
opValue->DirectGetValue()); | 389 v8::Local<v8::Value> hPropValue = v8::Local<v8::Value>::New(m_pIsolate, lpPr
opValue->DirectGetValue()); |
390 return (FX_BOOL)hObject.As<v8::Object>()->Set(uPropIdx, hPropValue); | 390 return (FX_BOOL)hObject.As<v8::Object>()->Set(uPropIdx, hPropValue); |
391 } | 391 } |
392 FX_BOOL CFXJSE_Value::GetObjectProperty(FX_UINT32 uPropIdx, CFXJSE_Value* lpProp
Value) | 392 FX_BOOL CFXJSE_Value::GetObjectProperty(uint32_t uPropIdx, CFXJSE_Value* lpPropV
alue) |
393 { | 393 { |
394 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); | 394 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); |
395 v8::Local<v8::Value> hObject = v8::Local<v8::Value>::New(m_pIsolate, m_hValu
e); | 395 v8::Local<v8::Value> hObject = v8::Local<v8::Value>::New(m_pIsolate, m_hValu
e); |
396 if(!hObject->IsObject()) { | 396 if(!hObject->IsObject()) { |
397 return FALSE; | 397 return FALSE; |
398 } | 398 } |
399 v8::Local<v8::Value> hPropValue = hObject.As<v8::Object>()->Get(uPropIdx); | 399 v8::Local<v8::Value> hPropValue = hObject.As<v8::Object>()->Get(uPropIdx); |
400 lpPropValue->ForceSetValue(hPropValue); | 400 lpPropValue->ForceSetValue(hPropValue); |
401 return TRUE; | 401 return TRUE; |
402 } | 402 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
446 rgArgs[1] = hNewThis; | 446 rgArgs[1] = hNewThis; |
447 v8::Local<v8::String> hBinderFuncSource = v8::String::NewFromUtf8(m_pIsolate
, "(function (oldfunction, newthis) { return oldfunction.bind(newthis); })"); | 447 v8::Local<v8::String> hBinderFuncSource = v8::String::NewFromUtf8(m_pIsolate
, "(function (oldfunction, newthis) { return oldfunction.bind(newthis); })"); |
448 v8::Local<v8::Function> hBinderFunc = v8::Script::Compile(hBinderFuncSource)
->Run().As<v8::Function>(); | 448 v8::Local<v8::Function> hBinderFunc = v8::Script::Compile(hBinderFuncSource)
->Run().As<v8::Function>(); |
449 v8::Local<v8::Value> hBoundFunction = hBinderFunc->Call(m_pIsolate->GetCurre
ntContext()->Global(), 2, rgArgs); | 449 v8::Local<v8::Value> hBoundFunction = hBinderFunc->Call(m_pIsolate->GetCurre
ntContext()->Global(), 2, rgArgs); |
450 if(hBoundFunction.IsEmpty() || !hBoundFunction->IsFunction()) { | 450 if(hBoundFunction.IsEmpty() || !hBoundFunction->IsFunction()) { |
451 return FALSE; | 451 return FALSE; |
452 } | 452 } |
453 m_hValue.Reset(m_pIsolate, hBoundFunction); | 453 m_hValue.Reset(m_pIsolate, hBoundFunction); |
454 return TRUE; | 454 return TRUE; |
455 } | 455 } |
456 #define FXJSE_INVALID_PTR ((FX_LPVOID)(FX_INTPTR)-1) | 456 #define FXJSE_INVALID_PTR ((FX_LPVOID)(intptr_t)-1) |
457 FX_BOOL CFXJSE_Value::Call(CFXJSE_Value* lpReceiver, CFXJSE_Value* lpRetValue, F
X_UINT32 nArgCount, FXJSE_HVALUE* lpArgs) | 457 FX_BOOL CFXJSE_Value::Call(CFXJSE_Value* lpReceiver, CFXJSE_Value* lpRetValue, u
int32_t nArgCount, FXJSE_HVALUE* lpArgs) |
458 { | 458 { |
459 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); | 459 CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate); |
460 v8::Local<v8::Value> hFunctionValue = v8::Local<v8::Value>::New(m_pIsolate,
DirectGetValue()); | 460 v8::Local<v8::Value> hFunctionValue = v8::Local<v8::Value>::New(m_pIsolate,
DirectGetValue()); |
461 v8::Local<v8::Object> hFunctionObject = !hFunctionValue.IsEmpty() && hFuncti
onValue->IsObject() ? hFunctionValue.As<v8::Object>() : v8::Local<v8::Object>(); | 461 v8::Local<v8::Object> hFunctionObject = !hFunctionValue.IsEmpty() && hFuncti
onValue->IsObject() ? hFunctionValue.As<v8::Object>() : v8::Local<v8::Object>(); |
462 v8::TryCatch trycatch; | 462 v8::TryCatch trycatch; |
463 if (hFunctionObject.IsEmpty() || !hFunctionObject->IsCallable()) { | 463 if (hFunctionObject.IsEmpty() || !hFunctionObject->IsCallable()) { |
464 if(lpRetValue) { | 464 if(lpRetValue) { |
465 lpRetValue->ForceSetValue(FXJSE_CreateReturnValue(m_pIsolate, trycat
ch)); | 465 lpRetValue->ForceSetValue(FXJSE_CreateReturnValue(m_pIsolate, trycat
ch)); |
466 } | 466 } |
467 return FALSE; | 467 return FALSE; |
468 } | 468 } |
469 v8::Local<v8::Value> hReturnValue; | 469 v8::Local<v8::Value> hReturnValue; |
470 v8::Local<v8::Value>* lpLocalArgs = NULL; | 470 v8::Local<v8::Value>* lpLocalArgs = NULL; |
471 if(nArgCount) { | 471 if(nArgCount) { |
472 lpLocalArgs = FX_Alloc(v8::Local<v8::Value>, nArgCount); | 472 lpLocalArgs = FX_Alloc(v8::Local<v8::Value>, nArgCount); |
473 if (!lpLocalArgs) { | 473 if (!lpLocalArgs) { |
474 return FALSE; | 474 return FALSE; |
475 } | 475 } |
476 for (FX_UINT32 i = 0; i < nArgCount; i++) { | 476 for (uint32_t i = 0; i < nArgCount; i++) { |
477 new (lpLocalArgs + i) v8::Local<v8::Value>; | 477 new (lpLocalArgs + i) v8::Local<v8::Value>; |
478 CFXJSE_Value* lpArg = (CFXJSE_Value*)lpArgs[i]; | 478 CFXJSE_Value* lpArg = (CFXJSE_Value*)lpArgs[i]; |
479 if(lpArg) { | 479 if(lpArg) { |
480 lpLocalArgs[i] = v8::Local<v8::Value>::New(m_pIsolate, lpArg->Di
rectGetValue()); | 480 lpLocalArgs[i] = v8::Local<v8::Value>::New(m_pIsolate, lpArg->Di
rectGetValue()); |
481 } | 481 } |
482 if (lpLocalArgs[i].IsEmpty()) { | 482 if (lpLocalArgs[i].IsEmpty()) { |
483 lpLocalArgs[i] = v8::Undefined(m_pIsolate); | 483 lpLocalArgs[i] = v8::Undefined(m_pIsolate); |
484 } | 484 } |
485 } | 485 } |
486 } | 486 } |
(...skipping 11 matching lines...) Expand all Loading... |
498 hReturnValue = hFunctionObject->CallAsFunction(hReceiver, nArgCount, lpL
ocalArgs); | 498 hReturnValue = hFunctionObject->CallAsFunction(hReceiver, nArgCount, lpL
ocalArgs); |
499 } | 499 } |
500 if(trycatch.HasCaught()) { | 500 if(trycatch.HasCaught()) { |
501 hReturnValue = FXJSE_CreateReturnValue(m_pIsolate, trycatch); | 501 hReturnValue = FXJSE_CreateReturnValue(m_pIsolate, trycatch); |
502 bRetValue = FALSE; | 502 bRetValue = FALSE; |
503 } | 503 } |
504 if(lpRetValue) { | 504 if(lpRetValue) { |
505 lpRetValue->ForceSetValue(hReturnValue); | 505 lpRetValue->ForceSetValue(hReturnValue); |
506 } | 506 } |
507 if(lpLocalArgs) { | 507 if(lpLocalArgs) { |
508 for (FX_UINT32 i = 0; i < nArgCount; i++) { | 508 for (uint32_t i = 0; i < nArgCount; i++) { |
509 lpLocalArgs[i].~Local(); | 509 lpLocalArgs[i].~Local(); |
510 } | 510 } |
511 FX_Free(lpLocalArgs); | 511 FX_Free(lpLocalArgs); |
512 } | 512 } |
513 return bRetValue; | 513 return bRetValue; |
514 } | 514 } |
OLD | NEW |