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 #ifndef FPDFSDK_INCLUDE_JAVASCRIPT_JS_DEFINE_H_ | 7 #ifndef FPDFSDK_INCLUDE_JAVASCRIPT_JS_DEFINE_H_ |
8 #define FPDFSDK_INCLUDE_JAVASCRIPT_JS_DEFINE_H_ | 8 #define FPDFSDK_INCLUDE_JAVASCRIPT_JS_DEFINE_H_ |
9 | 9 |
10 #include "../jsapi/fxjs_v8.h" | 10 #include "../jsapi/fxjs_v8.h" |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 #define JS_SPECIAL_STATIC_METHOD(method_name, class_alternate, class_name) \ | 169 #define JS_SPECIAL_STATIC_METHOD(method_name, class_alternate, class_name) \ |
170 static void method_name##_static( \ | 170 static void method_name##_static( \ |
171 const v8::FunctionCallbackInfo<v8::Value>& info) { \ | 171 const v8::FunctionCallbackInfo<v8::Value>& info) { \ |
172 JSMethod<class_alternate, &class_alternate::method_name>( \ | 172 JSMethod<class_alternate, &class_alternate::method_name>( \ |
173 #method_name, #class_name, info); \ | 173 #method_name, #class_name, info); \ |
174 } | 174 } |
175 | 175 |
176 /* ===================================== JS CLASS | 176 /* ===================================== JS CLASS |
177 * =============================================== */ | 177 * =============================================== */ |
178 | 178 |
179 #define DECLARE_JS_CLASS(js_class_name) \ | 179 #define DECLARE_JS_CLASS(js_class_name) \ |
180 static void JSConstructor(IFXJS_Context* cc, v8::Local<v8::Object> obj, \ | 180 static void JSConstructor(IFXJS_Context* cc, v8::Local<v8::Object> obj, \ |
181 v8::Local<v8::Object> global); \ | 181 v8::Local<v8::Object> global); \ |
182 static void JSDestructor(v8::Local<v8::Object> obj); \ | 182 static void JSDestructor(v8::Local<v8::Object> obj); \ |
183 static int DefineJSObjects(v8::Isolate* pIsolate, FXJSOBJTYPE eObjType); \ | 183 static void DefineJSObjects(v8::Isolate* pIsolate, FXJSOBJTYPE eObjType); \ |
184 static JSConstSpec JS_Class_Consts[]; \ | 184 static JSConstSpec JS_Class_Consts[]; \ |
185 static JSPropertySpec JS_Class_Properties[]; \ | 185 static JSPropertySpec JS_Class_Properties[]; \ |
186 static JSMethodSpec JS_Class_Methods[]; \ | 186 static JSMethodSpec JS_Class_Methods[]; \ |
187 static const wchar_t* m_pClassName | 187 static const wchar_t* m_pClassName |
188 | 188 |
189 #define IMPLEMENT_JS_CLASS_RICH(js_class_name, class_alternate, class_name) \ | 189 #define IMPLEMENT_JS_CLASS_RICH(js_class_name, class_alternate, class_name) \ |
190 const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \ | 190 const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \ |
191 void js_class_name::JSConstructor(IFXJS_Context* cc, \ | 191 void js_class_name::JSConstructor(IFXJS_Context* cc, \ |
192 v8::Local<v8::Object> obj, \ | 192 v8::Local<v8::Object> obj, \ |
193 v8::Local<v8::Object> global) { \ | 193 v8::Local<v8::Object> global) { \ |
194 CJS_Object* pObj = new js_class_name(obj); \ | 194 CJS_Object* pObj = new js_class_name(obj); \ |
195 pObj->SetEmbedObject(new class_alternate(pObj)); \ | 195 pObj->SetEmbedObject(new class_alternate(pObj)); \ |
196 JS_SetPrivate(NULL, obj, (void*)pObj); \ | 196 JS_SetPrivate(NULL, obj, (void*)pObj); \ |
197 pObj->InitInstance(cc); \ | 197 pObj->InitInstance(cc); \ |
198 } \ | 198 } \ |
199 \ | 199 \ |
200 void js_class_name::JSDestructor(v8::Local<v8::Object> obj) { \ | 200 void js_class_name::JSDestructor(v8::Local<v8::Object> obj) { \ |
201 js_class_name* pObj = (js_class_name*)JS_GetPrivate(NULL, obj); \ | 201 js_class_name* pObj = (js_class_name*)JS_GetPrivate(NULL, obj); \ |
202 pObj->ExitInstance(); \ | 202 pObj->ExitInstance(); \ |
203 delete pObj; \ | 203 delete pObj; \ |
204 } \ | 204 } \ |
205 \ | 205 \ |
206 int js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \ | 206 void js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \ |
207 FXJSOBJTYPE eObjType) { \ | 207 FXJSOBJTYPE eObjType) { \ |
208 int nObjDefnID = JS_DefineObj(pIsolate, js_class_name::m_pClassName, \ | 208 int nObjDefnID = JS_DefineObj(pIsolate, js_class_name::m_pClassName, \ |
209 eObjType, JSConstructor, JSDestructor); \ | 209 eObjType, JSConstructor, JSDestructor); \ |
210 if (nObjDefnID < 0) \ | 210 for (int i = 0; i < FX_ArraySize(JS_Class_Properties) - 1; ++i) { \ |
211 return -1; \ | 211 JS_DefineObjProperty(pIsolate, nObjDefnID, JS_Class_Properties[i].pName, \ |
212 for (int i = 0; i < FX_ArraySize(JS_Class_Properties) - 1; ++i) { \ | 212 JS_Class_Properties[i].pPropGet, \ |
213 if (JS_DefineObjProperty(pIsolate, nObjDefnID, \ | 213 JS_Class_Properties[i].pPropPut); \ |
214 JS_Class_Properties[i].pName, \ | 214 } \ |
215 JS_Class_Properties[i].pPropGet, \ | 215 for (int i = 0; i < FX_ArraySize(JS_Class_Methods) - 1; ++i) { \ |
216 JS_Class_Properties[i].pPropPut) < 0) \ | 216 JS_DefineObjMethod(pIsolate, nObjDefnID, JS_Class_Methods[i].pName, \ |
217 return -1; \ | 217 JS_Class_Methods[i].pMethodCall); \ |
218 } \ | 218 } \ |
219 for (int i = 0; i < FX_ArraySize(JS_Class_Methods) - 1; ++i) { \ | |
220 if (JS_DefineObjMethod(pIsolate, nObjDefnID, JS_Class_Methods[i].pName, \ | |
221 JS_Class_Methods[i].pMethodCall) < 0) \ | |
222 return -1; \ | |
223 } \ | |
224 return nObjDefnID; \ | |
225 } | 219 } |
226 | 220 |
227 #define IMPLEMENT_JS_CLASS(js_class_name, class_name) \ | 221 #define IMPLEMENT_JS_CLASS(js_class_name, class_name) \ |
228 IMPLEMENT_JS_CLASS_RICH(js_class_name, class_name, class_name) | 222 IMPLEMENT_JS_CLASS_RICH(js_class_name, class_name, class_name) |
229 | 223 |
230 /* ======================================== CONST CLASS | 224 /* ======================================== CONST CLASS |
231 * ============================================ */ | 225 * ============================================ */ |
232 | 226 |
233 #define DECLARE_JS_CLASS_CONST() \ | 227 #define DECLARE_JS_CLASS_CONST() \ |
234 static int DefineJSObjects(v8::Isolate* pIsolate, FXJSOBJTYPE eObjType); \ | 228 static void DefineJSObjects(v8::Isolate* pIsolate, FXJSOBJTYPE eObjType); \ |
235 static JSConstSpec JS_Class_Consts[]; \ | 229 static JSConstSpec JS_Class_Consts[]; \ |
236 static const wchar_t* m_pClassName | 230 static const wchar_t* m_pClassName |
237 | 231 |
238 #define IMPLEMENT_JS_CLASS_CONST(js_class_name, class_name) \ | 232 #define IMPLEMENT_JS_CLASS_CONST(js_class_name, class_name) \ |
239 const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \ | 233 const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \ |
240 int js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \ | 234 void js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \ |
241 FXJSOBJTYPE eObjType) { \ | 235 FXJSOBJTYPE eObjType) { \ |
242 int nObjDefnID = JS_DefineObj(pIsolate, js_class_name::m_pClassName, \ | 236 int nObjDefnID = JS_DefineObj(pIsolate, js_class_name::m_pClassName, \ |
243 eObjType, NULL, NULL); \ | 237 eObjType, NULL, NULL); \ |
244 if (nObjDefnID >= 0) { \ | 238 for (int i = 0; i < FX_ArraySize(JS_Class_Consts) - 1; ++i) { \ |
245 for (int i = 0, sz = sizeof(JS_Class_Consts) / sizeof(JSConstSpec) - 1; \ | 239 JS_DefineObjConst( \ |
246 i < sz; i++) { \ | 240 pIsolate, nObjDefnID, JS_Class_Consts[i].pName, \ |
247 if (JS_Class_Consts[i].t == 0) { \ | 241 JS_Class_Consts[i].t == 0 \ |
248 if (JS_DefineObjConst( \ | 242 ? JS_NewNumber(pIsolate, JS_Class_Consts[i].number) \ |
249 pIsolate, nObjDefnID, JS_Class_Consts[i].pName, \ | 243 : JS_NewString(pIsolate, JS_Class_Consts[i].string)); \ |
250 JS_NewNumber(pIsolate, JS_Class_Consts[i].number)) < 0) \ | 244 } \ |
251 return -1; \ | |
252 } else { \ | |
253 if (JS_DefineObjConst( \ | |
254 pIsolate, nObjDefnID, JS_Class_Consts[i].pName, \ | |
255 JS_NewString(pIsolate, JS_Class_Consts[i].string)) < 0) \ | |
256 return -1; \ | |
257 } \ | |
258 } \ | |
259 return nObjDefnID; \ | |
260 } \ | |
261 return -1; \ | |
262 } | 245 } |
263 | 246 |
264 /* ===================================== SPECIAL JS CLASS | 247 /* ===================================== SPECIAL JS CLASS |
265 * =============================================== */ | 248 * =============================================== */ |
266 | 249 |
267 template <class Alt> | 250 template <class Alt> |
268 void JSSpecialPropQuery(const char*, | 251 void JSSpecialPropQuery(const char*, |
269 v8::Local<v8::String> property, | 252 v8::Local<v8::String> property, |
270 const v8::PropertyCallbackInfo<v8::Integer>& info) { | 253 const v8::PropertyCallbackInfo<v8::Integer>& info) { |
271 v8::Isolate* isolate = info.GetIsolate(); | 254 v8::Isolate* isolate = info.GetIsolate(); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 CFX_WideString propname = | 324 CFX_WideString propname = |
342 CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); | 325 CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); |
343 CFX_WideString sError; | 326 CFX_WideString sError; |
344 if (!pObj->DelProperty(pRuntimeContext, propname.c_str(), sError)) { | 327 if (!pObj->DelProperty(pRuntimeContext, propname.c_str(), sError)) { |
345 CFX_ByteString cbName; | 328 CFX_ByteString cbName; |
346 cbName.Format("%s.%s", class_name, "DelProperty"); | 329 cbName.Format("%s.%s", class_name, "DelProperty"); |
347 // Probably a missing call to JS_Error(). | 330 // Probably a missing call to JS_Error(). |
348 } | 331 } |
349 } | 332 } |
350 | 333 |
351 #define DECLARE_SPECIAL_JS_CLASS(js_class_name) \ | 334 #define DECLARE_SPECIAL_JS_CLASS(js_class_name) \ |
352 static void JSConstructor(IFXJS_Context* cc, v8::Local<v8::Object> obj, \ | 335 static void JSConstructor(IFXJS_Context* cc, v8::Local<v8::Object> obj, \ |
353 v8::Local<v8::Object> global); \ | 336 v8::Local<v8::Object> global); \ |
354 static void JSDestructor(v8::Local<v8::Object> obj); \ | 337 static void JSDestructor(v8::Local<v8::Object> obj); \ |
355 static JSConstSpec JS_Class_Consts[]; \ | 338 static JSConstSpec JS_Class_Consts[]; \ |
356 static JSPropertySpec JS_Class_Properties[]; \ | 339 static JSPropertySpec JS_Class_Properties[]; \ |
357 static JSMethodSpec JS_Class_Methods[]; \ | 340 static JSMethodSpec JS_Class_Methods[]; \ |
358 static int DefineJSObjects(v8::Isolate* pIsolate, FXJSOBJTYPE eObjType); \ | 341 static void DefineJSObjects(v8::Isolate* pIsolate, FXJSOBJTYPE eObjType); \ |
359 static const wchar_t* m_pClassName; \ | 342 static const wchar_t* m_pClassName; \ |
360 static void queryprop_##js_class_name##_static( \ | 343 static void queryprop_##js_class_name##_static( \ |
361 v8::Local<v8::String> property, \ | 344 v8::Local<v8::String> property, \ |
362 const v8::PropertyCallbackInfo<v8::Integer>& info); \ | 345 const v8::PropertyCallbackInfo<v8::Integer>& info); \ |
363 static void getprop_##js_class_name##_static( \ | 346 static void getprop_##js_class_name##_static( \ |
364 v8::Local<v8::String> property, \ | 347 v8::Local<v8::String> property, \ |
365 const v8::PropertyCallbackInfo<v8::Value>& info); \ | 348 const v8::PropertyCallbackInfo<v8::Value>& info); \ |
366 static void putprop_##js_class_name##_static( \ | 349 static void putprop_##js_class_name##_static( \ |
367 v8::Local<v8::String> property, v8::Local<v8::Value> value, \ | 350 v8::Local<v8::String> property, v8::Local<v8::Value> value, \ |
368 const v8::PropertyCallbackInfo<v8::Value>& info); \ | 351 const v8::PropertyCallbackInfo<v8::Value>& info); \ |
369 static void delprop_##js_class_name##_static( \ | 352 static void delprop_##js_class_name##_static( \ |
370 v8::Local<v8::String> property, \ | 353 v8::Local<v8::String> property, \ |
371 const v8::PropertyCallbackInfo<v8::Boolean>& info) | 354 const v8::PropertyCallbackInfo<v8::Boolean>& info) |
372 | 355 |
373 #define IMPLEMENT_SPECIAL_JS_CLASS(js_class_name, class_alternate, class_name) \ | 356 #define IMPLEMENT_SPECIAL_JS_CLASS(js_class_name, class_alternate, class_name) \ |
374 const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \ | 357 const wchar_t* js_class_name::m_pClassName = JS_WIDESTRING(class_name); \ |
375 void js_class_name::queryprop_##js_class_name##_static( \ | 358 void js_class_name::queryprop_##js_class_name##_static( \ |
376 v8::Local<v8::String> property, \ | 359 v8::Local<v8::String> property, \ |
377 const v8::PropertyCallbackInfo<v8::Integer>& info) { \ | 360 const v8::PropertyCallbackInfo<v8::Integer>& info) { \ |
378 JSSpecialPropQuery<class_alternate>(#class_name, property, info); \ | 361 JSSpecialPropQuery<class_alternate>(#class_name, property, info); \ |
379 } \ | 362 } \ |
380 void js_class_name::getprop_##js_class_name##_static( \ | 363 void js_class_name::getprop_##js_class_name##_static( \ |
(...skipping 20 matching lines...) Expand all Loading... |
401 pObj->InitInstance(cc); \ | 384 pObj->InitInstance(cc); \ |
402 } \ | 385 } \ |
403 \ | 386 \ |
404 void js_class_name::JSDestructor(v8::Local<v8::Object> obj) { \ | 387 void js_class_name::JSDestructor(v8::Local<v8::Object> obj) { \ |
405 js_class_name* pObj = (js_class_name*)JS_GetPrivate(NULL, obj); \ | 388 js_class_name* pObj = (js_class_name*)JS_GetPrivate(NULL, obj); \ |
406 ASSERT(pObj != NULL); \ | 389 ASSERT(pObj != NULL); \ |
407 pObj->ExitInstance(); \ | 390 pObj->ExitInstance(); \ |
408 delete pObj; \ | 391 delete pObj; \ |
409 } \ | 392 } \ |
410 \ | 393 \ |
411 int js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \ | 394 void js_class_name::DefineJSObjects(v8::Isolate* pIsolate, \ |
412 FXJSOBJTYPE eObjType) { \ | 395 FXJSOBJTYPE eObjType) { \ |
413 int nObjDefnID = JS_DefineObj(pIsolate, js_class_name::m_pClassName, \ | 396 int nObjDefnID = JS_DefineObj(pIsolate, js_class_name::m_pClassName, \ |
414 eObjType, JSConstructor, JSDestructor); \ | 397 eObjType, JSConstructor, JSDestructor); \ |
415 \ | |
416 if (nObjDefnID < 0) \ | |
417 return -1; \ | |
418 for (int i = 0; i < FX_ArraySize(JS_Class_Properties) - 1; ++i) { \ | 398 for (int i = 0; i < FX_ArraySize(JS_Class_Properties) - 1; ++i) { \ |
419 if (JS_DefineObjProperty(pIsolate, nObjDefnID, \ | 399 JS_DefineObjProperty(pIsolate, nObjDefnID, JS_Class_Properties[i].pName, \ |
420 JS_Class_Properties[i].pName, \ | 400 JS_Class_Properties[i].pPropGet, \ |
421 JS_Class_Properties[i].pPropGet, \ | 401 JS_Class_Properties[i].pPropPut); \ |
422 JS_Class_Properties[i].pPropPut) < 0) \ | |
423 return -1; \ | |
424 } \ | 402 } \ |
425 \ | 403 \ |
426 for (int i = 0; i < FX_ArraySize(JS_Class_Methods) - 1; ++i) { \ | 404 for (int i = 0; i < FX_ArraySize(JS_Class_Methods) - 1; ++i) { \ |
427 if (JS_DefineObjMethod(pIsolate, nObjDefnID, JS_Class_Methods[i].pName, \ | 405 JS_DefineObjMethod(pIsolate, nObjDefnID, JS_Class_Methods[i].pName, \ |
428 JS_Class_Methods[i].pMethodCall) < 0) \ | 406 JS_Class_Methods[i].pMethodCall); \ |
429 return -1; \ | |
430 } \ | 407 } \ |
431 if (JS_DefineObjAllProperties( \ | 408 JS_DefineObjAllProperties( \ |
432 pIsolate, nObjDefnID, \ | 409 pIsolate, nObjDefnID, \ |
433 js_class_name::queryprop_##js_class_name##_static, \ | 410 js_class_name::queryprop_##js_class_name##_static, \ |
434 js_class_name::getprop_##js_class_name##_static, \ | 411 js_class_name::getprop_##js_class_name##_static, \ |
435 js_class_name::putprop_##js_class_name##_static, \ | 412 js_class_name::putprop_##js_class_name##_static, \ |
436 js_class_name::delprop_##js_class_name##_static) < 0) \ | 413 js_class_name::delprop_##js_class_name##_static); \ |
437 return -1; \ | |
438 return nObjDefnID; \ | |
439 } | 414 } |
440 | 415 |
441 /* ======================================== GLOBAL METHODS | 416 /* ======================================== GLOBAL METHODS |
442 * ============================================ */ | 417 * ============================================ */ |
443 | 418 |
444 template <FX_BOOL ( | 419 template <FX_BOOL ( |
445 *F)(IFXJS_Context*, const CJS_Parameters&, CJS_Value&, CFX_WideString&)> | 420 *F)(IFXJS_Context*, const CJS_Parameters&, CJS_Value&, CFX_WideString&)> |
446 void JSGlobalFunc(const char* func_name_string, | 421 void JSGlobalFunc(const char* func_name_string, |
447 const v8::FunctionCallbackInfo<v8::Value>& info) { | 422 const v8::FunctionCallbackInfo<v8::Value>& info) { |
448 v8::Isolate* isolate = info.GetIsolate(); | 423 v8::Isolate* isolate = info.GetIsolate(); |
(...skipping 13 matching lines...) Expand all Loading... |
462 } | 437 } |
463 | 438 |
464 #define JS_STATIC_GLOBAL_FUN(fun_name) \ | 439 #define JS_STATIC_GLOBAL_FUN(fun_name) \ |
465 static void fun_name##_static( \ | 440 static void fun_name##_static( \ |
466 const v8::FunctionCallbackInfo<v8::Value>& info) { \ | 441 const v8::FunctionCallbackInfo<v8::Value>& info) { \ |
467 JSGlobalFunc<fun_name>(#fun_name, info); \ | 442 JSGlobalFunc<fun_name>(#fun_name, info); \ |
468 } | 443 } |
469 | 444 |
470 #define JS_STATIC_DECLARE_GLOBAL_FUN() \ | 445 #define JS_STATIC_DECLARE_GLOBAL_FUN() \ |
471 static JSMethodSpec global_methods[]; \ | 446 static JSMethodSpec global_methods[]; \ |
472 static int DefineJSObjects(v8::Isolate* pIsolate) | 447 static void DefineJSObjects(v8::Isolate* pIsolate) |
473 | 448 |
474 #define BEGIN_JS_STATIC_GLOBAL_FUN(js_class_name) \ | 449 #define BEGIN_JS_STATIC_GLOBAL_FUN(js_class_name) \ |
475 JSMethodSpec js_class_name::global_methods[] = { | 450 JSMethodSpec js_class_name::global_methods[] = { |
476 #define JS_STATIC_GLOBAL_FUN_ENTRY(method_name) \ | 451 #define JS_STATIC_GLOBAL_FUN_ENTRY(method_name) \ |
477 JS_STATIC_METHOD_ENTRY(method_name) | 452 JS_STATIC_METHOD_ENTRY(method_name) |
478 | 453 |
479 #define END_JS_STATIC_GLOBAL_FUN() END_JS_STATIC_METHOD() | 454 #define END_JS_STATIC_GLOBAL_FUN() END_JS_STATIC_METHOD() |
480 | 455 |
481 #define IMPLEMENT_JS_STATIC_GLOBAL_FUN(js_class_name) \ | 456 #define IMPLEMENT_JS_STATIC_GLOBAL_FUN(js_class_name) \ |
482 int js_class_name::DefineJSObjects(v8::Isolate* pIsolate) { \ | 457 void js_class_name::DefineJSObjects(v8::Isolate* pIsolate) { \ |
483 for (int i = 0; i < FX_ArraySize(global_methods) - 1; ++i) { \ | 458 for (int i = 0; i < FX_ArraySize(global_methods) - 1; ++i) { \ |
484 if (JS_DefineGlobalMethod( \ | 459 JS_DefineGlobalMethod(pIsolate, js_class_name::global_methods[i].pName, \ |
485 pIsolate, js_class_name::global_methods[i].pName, \ | 460 js_class_name::global_methods[i].pMethodCall); \ |
486 js_class_name::global_methods[i].pMethodCall) < 0) \ | 461 } \ |
487 return -1; \ | |
488 } \ | |
489 return 0; \ | |
490 } | 462 } |
491 | 463 |
492 /* ============================================================ */ | |
493 | |
494 #define VALUE_NAME_STRING L"string" | |
495 #define VALUE_NAME_NUMBER L"number" | |
496 #define VALUE_NAME_BOOLEAN L"boolean" | |
497 #define VALUE_NAME_DATE L"date" | |
498 #define VALUE_NAME_OBJECT L"object" | |
499 #define VALUE_NAME_FXOBJ L"fxobj" | |
500 #define VALUE_NAME_NULL L"null" | |
501 #define VALUE_NAME_UNDEFINED L"undefined" | |
502 | |
503 FXJSVALUETYPE GET_VALUE_TYPE(v8::Local<v8::Value> p); | 464 FXJSVALUETYPE GET_VALUE_TYPE(v8::Local<v8::Value> p); |
504 | 465 |
505 #endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_DEFINE_H_ | 466 #endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_DEFINE_H_ |
OLD | NEW |