diff options
author | Dan Sinclair <dsinclair@chromium.org> | 2017-10-26 15:04:17 -0400 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-10-26 19:29:57 +0000 |
commit | d808dfd5ad8c4eae1f2ea58b9b54a7d4e45a649e (patch) | |
tree | 26b829d19be342d45fa47accd4a599fb2d5aa711 /fpdfsdk/javascript/JS_Define.h | |
parent | 977c2a048e02dd3a9563be0c2c6ee62435e134c1 (diff) | |
download | pdfium-d808dfd5ad8c4eae1f2ea58b9b54a7d4e45a649e.tar.xz |
Cleanup JS define methods
This CL moves DefineProps, DefineMethods and DefineConsts to the
CJS_Object and removes from the subclasses. The JSConstructor and
JSDestructor are moved to be templated static methods in JS_Defines.
Change-Id: Ibe5ee063a32ae2332b8affc843d97ee6da21f4ee
Reviewed-on: https://pdfium-review.googlesource.com/16930
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'fpdfsdk/javascript/JS_Define.h')
-rw-r--r-- | fpdfsdk/javascript/JS_Define.h | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/fpdfsdk/javascript/JS_Define.h b/fpdfsdk/javascript/JS_Define.h index 7d089aa4b8..e0535fa6fc 100644 --- a/fpdfsdk/javascript/JS_Define.h +++ b/fpdfsdk/javascript/JS_Define.h @@ -21,25 +21,18 @@ // Rich JS classes provide constants, methods, properties, and the ability // to construct native object state. -struct JSConstSpec { - enum Type { Number = 0, String = 1 }; - - const char* pName; - Type eType; - double number; - const char* pStr; -}; - -struct JSPropertySpec { - const char* pName; - v8::AccessorGetterCallback pPropGet; - v8::AccessorSetterCallback pPropPut; -}; - -struct JSMethodSpec { - const char* pName; - v8::FunctionCallback pMethodCall; -}; +template <class T, class A> +static void JSConstructor(CFXJS_Engine* pEngine, v8::Local<v8::Object> obj) { + CJS_Object* pObj = new T(obj); + pObj->SetEmbedObject(new A(pObj)); + pEngine->SetObjectPrivate(obj, pObj); + pObj->InitInstance(static_cast<CJS_Runtime*>(pEngine)); +} + +template <class T> +static void JSDestructor(CFXJS_Engine* pEngine, v8::Local<v8::Object> obj) { + delete static_cast<T*>(pEngine->GetObjectPrivate(obj)); +} template <class C, CJS_Return (C::*M)(CJS_Runtime*)> void JSPropGetter(const char* prop_name_string, |