summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fxjs/cjs_app.cpp5
-rw-r--r--fxjs/cjs_app.h1
-rw-r--r--fxjs/cjs_color.cpp5
-rw-r--r--fxjs/cjs_color.h1
-rw-r--r--fxjs/cjs_console.cpp5
-rw-r--r--fxjs/cjs_console.h1
-rw-r--r--fxjs/cjs_event.cpp5
-rw-r--r--fxjs/cjs_event.h1
-rw-r--r--fxjs/cjs_global.cpp5
-rw-r--r--fxjs/cjs_global.h1
-rw-r--r--fxjs/cjs_report.cpp5
-rw-r--r--fxjs/cjs_report.h1
-rw-r--r--fxjs/cjs_util.cpp5
-rw-r--r--fxjs/cjs_util.h1
-rw-r--r--fxjs/js_define.h33
15 files changed, 63 insertions, 12 deletions
diff --git a/fxjs/cjs_app.cpp b/fxjs/cjs_app.cpp
index f52d7e9230..4648f462b4 100644
--- a/fxjs/cjs_app.cpp
+++ b/fxjs/cjs_app.cpp
@@ -84,6 +84,11 @@ int CJS_App::ObjDefnID = -1;
const char CJS_App::kName[] = "app";
// static
+int CJS_App::GetObjDefnID() {
+ return ObjDefnID;
+}
+
+// static
void CJS_App::DefineJSObjects(CFXJS_Engine* pEngine) {
ObjDefnID = pEngine->DefineObj(CJS_App::kName, FXJSOBJTYPE_STATIC,
JSConstructor<CJS_App>, JSDestructor);
diff --git a/fxjs/cjs_app.h b/fxjs/cjs_app.h
index f1701ae883..e962b34d49 100644
--- a/fxjs/cjs_app.h
+++ b/fxjs/cjs_app.h
@@ -18,6 +18,7 @@ class GlobalTimer;
class CJS_App : public CJS_Object {
public:
+ static int GetObjDefnID();
static void DefineJSObjects(CFXJS_Engine* pEngine);
CJS_App(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
diff --git a/fxjs/cjs_color.cpp b/fxjs/cjs_color.cpp
index a730b2cebf..1568687365 100644
--- a/fxjs/cjs_color.cpp
+++ b/fxjs/cjs_color.cpp
@@ -35,6 +35,11 @@ int CJS_Color::ObjDefnID = -1;
const char CJS_Color::kName[] = "color";
// static
+int CJS_Color::GetObjDefnID() {
+ return ObjDefnID;
+}
+
+// static
void CJS_Color::DefineJSObjects(CFXJS_Engine* pEngine) {
ObjDefnID = pEngine->DefineObj(CJS_Color::kName, FXJSOBJTYPE_STATIC,
JSConstructor<CJS_Color>, JSDestructor);
diff --git a/fxjs/cjs_color.h b/fxjs/cjs_color.h
index 581fea0427..e1b7caa78a 100644
--- a/fxjs/cjs_color.h
+++ b/fxjs/cjs_color.h
@@ -14,6 +14,7 @@
class CJS_Color : public CJS_Object {
public:
+ static int GetObjDefnID();
static void DefineJSObjects(CFXJS_Engine* pEngine);
static v8::Local<v8::Array> ConvertPWLColorToArray(CJS_Runtime* pRuntime,
const CFX_Color& color);
diff --git a/fxjs/cjs_console.cpp b/fxjs/cjs_console.cpp
index 1ccf72feea..d2cbb243b7 100644
--- a/fxjs/cjs_console.cpp
+++ b/fxjs/cjs_console.cpp
@@ -22,6 +22,11 @@ int CJS_Console::ObjDefnID = -1;
const char CJS_Console::kName[] = "console";
// static
+int CJS_Console::GetObjDefnID() {
+ return ObjDefnID;
+}
+
+// static
void CJS_Console::DefineJSObjects(CFXJS_Engine* pEngine) {
ObjDefnID = pEngine->DefineObj(CJS_Console::kName, FXJSOBJTYPE_STATIC,
JSConstructor<CJS_Console>, JSDestructor);
diff --git a/fxjs/cjs_console.h b/fxjs/cjs_console.h
index 7ed39bbed9..236ad47cf3 100644
--- a/fxjs/cjs_console.h
+++ b/fxjs/cjs_console.h
@@ -13,6 +13,7 @@
class CJS_Console : public CJS_Object {
public:
+ static int GetObjDefnID();
static void DefineJSObjects(CFXJS_Engine* pEngine);
CJS_Console(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
diff --git a/fxjs/cjs_event.cpp b/fxjs/cjs_event.cpp
index c10f8858a9..9594f13477 100644
--- a/fxjs/cjs_event.cpp
+++ b/fxjs/cjs_event.cpp
@@ -38,6 +38,11 @@ int CJS_Event::ObjDefnID = -1;
const char CJS_Event::kName[] = "event";
// static
+int CJS_Event::GetObjDefnID() {
+ return ObjDefnID;
+}
+
+// static
void CJS_Event::DefineJSObjects(CFXJS_Engine* pEngine) {
ObjDefnID = pEngine->DefineObj(CJS_Event::kName, FXJSOBJTYPE_STATIC,
JSConstructor<CJS_Event>, JSDestructor);
diff --git a/fxjs/cjs_event.h b/fxjs/cjs_event.h
index 39d9cdba87..804c6f6c7d 100644
--- a/fxjs/cjs_event.h
+++ b/fxjs/cjs_event.h
@@ -11,6 +11,7 @@
class CJS_Event : public CJS_Object {
public:
+ static int GetObjDefnID();
static void DefineJSObjects(CFXJS_Engine* pEngine);
CJS_Event(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
diff --git a/fxjs/cjs_global.cpp b/fxjs/cjs_global.cpp
index 7a319dd4cb..e3c347ef58 100644
--- a/fxjs/cjs_global.cpp
+++ b/fxjs/cjs_global.cpp
@@ -192,6 +192,11 @@ void CJS_Global::DefineAllProperties(CFXJS_Engine* pEngine) {
}
// static
+int CJS_Global::GetObjDefnID() {
+ return ObjDefnID;
+}
+
+// static
void CJS_Global::DefineJSObjects(CFXJS_Engine* pEngine) {
ObjDefnID = pEngine->DefineObj("global", FXJSOBJTYPE_STATIC,
JSConstructor<CJS_Global>, JSDestructor);
diff --git a/fxjs/cjs_global.h b/fxjs/cjs_global.h
index ba5d57cd07..51f872a782 100644
--- a/fxjs/cjs_global.h
+++ b/fxjs/cjs_global.h
@@ -18,6 +18,7 @@ class CJS_GlobalData;
class CJS_Global : public CJS_Object {
public:
+ static int GetObjDefnID();
static void DefineJSObjects(CFXJS_Engine* pEngine);
static void DefineAllProperties(CFXJS_Engine* pEngine);
diff --git a/fxjs/cjs_report.cpp b/fxjs/cjs_report.cpp
index 868e9c3279..6e205ef7e7 100644
--- a/fxjs/cjs_report.cpp
+++ b/fxjs/cjs_report.cpp
@@ -19,6 +19,11 @@ int CJS_Report::ObjDefnID = -1;
const char CJS_Report::kName[] = "Report";
// static
+int CJS_Report::GetObjDefnID() {
+ return ObjDefnID;
+}
+
+// static
void CJS_Report::DefineJSObjects(CFXJS_Engine* pEngine, FXJSOBJTYPE eObjType) {
ObjDefnID = pEngine->DefineObj(CJS_Report::kName, eObjType,
JSConstructor<CJS_Report>, JSDestructor);
diff --git a/fxjs/cjs_report.h b/fxjs/cjs_report.h
index 36a00ce9f5..f9d1dc8ce4 100644
--- a/fxjs/cjs_report.h
+++ b/fxjs/cjs_report.h
@@ -13,6 +13,7 @@
class CJS_Report : public CJS_Object {
public:
+ static int GetObjDefnID();
static void DefineJSObjects(CFXJS_Engine* pEngine, FXJSOBJTYPE eObjType);
CJS_Report(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
diff --git a/fxjs/cjs_util.cpp b/fxjs/cjs_util.cpp
index 3889f5ab63..eee9db3fb9 100644
--- a/fxjs/cjs_util.cpp
+++ b/fxjs/cjs_util.cpp
@@ -68,6 +68,11 @@ int CJS_Util::ObjDefnID = -1;
const char CJS_Util::kName[] = "util";
// static
+int CJS_Util::GetObjDefnID() {
+ return ObjDefnID;
+}
+
+// static
void CJS_Util::DefineJSObjects(CFXJS_Engine* pEngine) {
ObjDefnID = pEngine->DefineObj(CJS_Util::kName, FXJSOBJTYPE_STATIC,
JSConstructor<CJS_Util>, JSDestructor);
diff --git a/fxjs/cjs_util.h b/fxjs/cjs_util.h
index a601d82225..611443c330 100644
--- a/fxjs/cjs_util.h
+++ b/fxjs/cjs_util.h
@@ -19,6 +19,7 @@
class CJS_Util : public CJS_Object {
public:
+ static int GetObjDefnID();
static void DefineJSObjects(CFXJS_Engine* pEngine);
CJS_Util(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
diff --git a/fxjs/js_define.h b/fxjs/js_define.h
index 01dfb15e2d..629cf1a02b 100644
--- a/fxjs/js_define.h
+++ b/fxjs/js_define.h
@@ -57,20 +57,31 @@ static void JSConstructor(CFXJS_Engine* pEngine, v8::Local<v8::Object> obj) {
// CJS_Object has virtual dtor, template not required.
void JSDestructor(v8::Local<v8::Object> obj);
+template <class C>
+C* JSGetObject(v8::Local<v8::Object> obj) {
+ if (CFXJS_Engine::GetObjDefnID(obj) != C::GetObjDefnID())
+ return nullptr;
+
+ CJS_Object* pJSObj = CFXJS_Engine::GetObjectPrivate(obj);
+ if (!pJSObj)
+ return nullptr;
+
+ return static_cast<C*>(pJSObj);
+}
+
template <class C, CJS_Return (C::*M)(CJS_Runtime*)>
void JSPropGetter(const char* prop_name_string,
const char* class_name_string,
v8::Local<v8::String> property,
const v8::PropertyCallbackInfo<v8::Value>& info) {
- CJS_Object* pJSObj = CFXJS_Engine::GetObjectPrivate(info.Holder());
- if (!pJSObj)
+ C* pObj = JSGetObject<C>(info.Holder());
+ if (!pObj)
return;
- CJS_Runtime* pRuntime = pJSObj->GetRuntime();
+ CJS_Runtime* pRuntime = pObj->GetRuntime();
if (!pRuntime)
return;
- C* pObj = static_cast<C*>(pJSObj);
CJS_Return result = (pObj->*M)(pRuntime);
if (result.HasError()) {
pRuntime->Error(JSFormatErrorString(class_name_string, prop_name_string,
@@ -88,15 +99,14 @@ void JSPropSetter(const char* prop_name_string,
v8::Local<v8::String> property,
v8::Local<v8::Value> value,
const v8::PropertyCallbackInfo<void>& info) {
- CJS_Object* pJSObj = CFXJS_Engine::GetObjectPrivate(info.Holder());
- if (!pJSObj)
+ C* pObj = JSGetObject<C>(info.Holder());
+ if (!pObj)
return;
- CJS_Runtime* pRuntime = pJSObj->GetRuntime();
+ CJS_Runtime* pRuntime = pObj->GetRuntime();
if (!pRuntime)
return;
- C* pObj = static_cast<C*>(pJSObj);
CJS_Return result = (pObj->*M)(pRuntime, value);
if (result.HasError()) {
pRuntime->Error(JSFormatErrorString(class_name_string, prop_name_string,
@@ -110,11 +120,11 @@ template <class C,
void JSMethod(const char* method_name_string,
const char* class_name_string,
const v8::FunctionCallbackInfo<v8::Value>& info) {
- CJS_Object* pJSObj = CFXJS_Engine::GetObjectPrivate(info.Holder());
- if (!pJSObj)
+ C* pObj = JSGetObject<C>(info.Holder());
+ if (!pObj)
return;
- CJS_Runtime* pRuntime = pJSObj->GetRuntime();
+ CJS_Runtime* pRuntime = pObj->GetRuntime();
if (!pRuntime)
return;
@@ -122,7 +132,6 @@ void JSMethod(const char* method_name_string,
for (unsigned int i = 0; i < (unsigned int)info.Length(); i++)
parameters.push_back(info[i]);
- C* pObj = static_cast<C*>(pJSObj);
CJS_Return result = (pObj->*M)(pRuntime, parameters);
if (result.HasError()) {
pRuntime->Error(JSFormatErrorString(class_name_string, method_name_string,