Skip to content

Commit 240b80e

Browse files
singletons converted
1 parent 667d94b commit 240b80e

File tree

4 files changed

+86
-79
lines changed

4 files changed

+86
-79
lines changed

cocos/scripting/js-bindings/auto/jsb_cocos2dx_auto.cpp

+20-55
Original file line numberDiff line numberDiff line change
@@ -7720,17 +7720,10 @@ bool js_cocos2dx_Director_getInstance(JSContext *cx, uint32_t argc, jsval *vp)
77207720
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
77217721
if (argc == 0) {
77227722

7723-
cocos2d::Director* ret = cocos2d::Director::getInstance();
7724-
jsval jsret = JSVAL_NULL;
7725-
do {
7726-
if (ret) {
7727-
js_proxy_t *jsProxy = js_get_or_create_proxy<cocos2d::Director>(cx, (cocos2d::Director*)ret);
7728-
jsret = OBJECT_TO_JSVAL(jsProxy->obj);
7729-
} else {
7730-
jsret = JSVAL_NULL;
7731-
}
7732-
} while (0);
7733-
args.rval().set(jsret);
7723+
auto ret = cocos2d::Director::getInstance();
7724+
js_type_class_t *typeClass = js_get_type_from_native<cocos2d::Director>(ret);
7725+
JS::RootedObject jsret(cx, jsb_ref_singleton_get_or_create_jsobject(cx, ret, typeClass, "cocos2d::Director"));
7726+
args.rval().set(OBJECT_TO_JSVAL(jsret));
77347727
return true;
77357728
}
77367729
JS_ReportError(cx, "js_cocos2dx_Director_getInstance : wrong number of arguments");
@@ -16971,17 +16964,10 @@ bool js_cocos2dx_Configuration_getInstance(JSContext *cx, uint32_t argc, jsval *
1697116964
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
1697216965
if (argc == 0) {
1697316966

16974-
cocos2d::Configuration* ret = cocos2d::Configuration::getInstance();
16975-
jsval jsret = JSVAL_NULL;
16976-
do {
16977-
if (ret) {
16978-
js_proxy_t *jsProxy = js_get_or_create_proxy<cocos2d::Configuration>(cx, (cocos2d::Configuration*)ret);
16979-
jsret = OBJECT_TO_JSVAL(jsProxy->obj);
16980-
} else {
16981-
jsret = JSVAL_NULL;
16982-
}
16983-
} while (0);
16984-
args.rval().set(jsret);
16967+
auto ret = cocos2d::Configuration::getInstance();
16968+
js_type_class_t *typeClass = js_get_type_from_native<cocos2d::Configuration>(ret);
16969+
JS::RootedObject jsret(cx, jsb_ref_singleton_get_or_create_jsobject(cx, ret, typeClass, "cocos2d::Configuration"));
16970+
args.rval().set(OBJECT_TO_JSVAL(jsret));
1698516971
return true;
1698616972
}
1698716973
JS_ReportError(cx, "js_cocos2dx_Configuration_getInstance : wrong number of arguments");
@@ -56616,17 +56602,10 @@ bool js_cocos2dx_GLProgramCache_getInstance(JSContext *cx, uint32_t argc, jsval
5661656602
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
5661756603
if (argc == 0) {
5661856604

56619-
cocos2d::GLProgramCache* ret = cocos2d::GLProgramCache::getInstance();
56620-
jsval jsret = JSVAL_NULL;
56621-
do {
56622-
if (ret) {
56623-
js_proxy_t *jsProxy = js_get_or_create_proxy<cocos2d::GLProgramCache>(cx, (cocos2d::GLProgramCache*)ret);
56624-
jsret = OBJECT_TO_JSVAL(jsProxy->obj);
56625-
} else {
56626-
jsret = JSVAL_NULL;
56627-
}
56628-
} while (0);
56629-
args.rval().set(jsret);
56605+
auto ret = cocos2d::GLProgramCache::getInstance();
56606+
js_type_class_t *typeClass = js_get_type_from_native<cocos2d::GLProgramCache>(ret);
56607+
JS::RootedObject jsret(cx, jsb_ref_singleton_get_or_create_jsobject(cx, ret, typeClass, "cocos2d::GLProgramCache"));
56608+
args.rval().set(OBJECT_TO_JSVAL(jsret));
5663056609
return true;
5663156610
}
5663256611
JS_ReportError(cx, "js_cocos2dx_GLProgramCache_getInstance : wrong number of arguments");
@@ -58884,17 +58863,10 @@ bool js_cocos2dx_AnimationCache_getInstance(JSContext *cx, uint32_t argc, jsval
5888458863
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
5888558864
if (argc == 0) {
5888658865

58887-
cocos2d::AnimationCache* ret = cocos2d::AnimationCache::getInstance();
58888-
jsval jsret = JSVAL_NULL;
58889-
do {
58890-
if (ret) {
58891-
js_proxy_t *jsProxy = js_get_or_create_proxy<cocos2d::AnimationCache>(cx, (cocos2d::AnimationCache*)ret);
58892-
jsret = OBJECT_TO_JSVAL(jsProxy->obj);
58893-
} else {
58894-
jsret = JSVAL_NULL;
58895-
}
58896-
} while (0);
58897-
args.rval().set(jsret);
58866+
auto ret = cocos2d::AnimationCache::getInstance();
58867+
js_type_class_t *typeClass = js_get_type_from_native<cocos2d::AnimationCache>(ret);
58868+
JS::RootedObject jsret(cx, jsb_ref_singleton_get_or_create_jsobject(cx, ret, typeClass, "cocos2d::AnimationCache"));
58869+
args.rval().set(OBJECT_TO_JSVAL(jsret));
5889858870
return true;
5889958871
}
5890058872
JS_ReportError(cx, "js_cocos2dx_AnimationCache_getInstance : wrong number of arguments");
@@ -60053,17 +60025,10 @@ bool js_cocos2dx_SpriteFrameCache_getInstance(JSContext *cx, uint32_t argc, jsva
6005360025
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
6005460026
if (argc == 0) {
6005560027

60056-
cocos2d::SpriteFrameCache* ret = cocos2d::SpriteFrameCache::getInstance();
60057-
jsval jsret = JSVAL_NULL;
60058-
do {
60059-
if (ret) {
60060-
js_proxy_t *jsProxy = js_get_or_create_proxy<cocos2d::SpriteFrameCache>(cx, (cocos2d::SpriteFrameCache*)ret);
60061-
jsret = OBJECT_TO_JSVAL(jsProxy->obj);
60062-
} else {
60063-
jsret = JSVAL_NULL;
60064-
}
60065-
} while (0);
60066-
args.rval().set(jsret);
60028+
auto ret = cocos2d::SpriteFrameCache::getInstance();
60029+
js_type_class_t *typeClass = js_get_type_from_native<cocos2d::SpriteFrameCache>(ret);
60030+
JS::RootedObject jsret(cx, jsb_ref_singleton_get_or_create_jsobject(cx, ret, typeClass, "cocos2d::SpriteFrameCache"));
60031+
args.rval().set(OBJECT_TO_JSVAL(jsret));
6006760032
return true;
6006860033
}
6006960034
JS_ReportError(cx, "js_cocos2dx_SpriteFrameCache_getInstance : wrong number of arguments");

cocos/scripting/js-bindings/auto/jsb_cocos2dx_studio_auto.cpp

+8-22
Original file line numberDiff line numberDiff line change
@@ -708,17 +708,10 @@ bool js_cocos2dx_studio_ActionManagerEx_getInstance(JSContext *cx, uint32_t argc
708708
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
709709
if (argc == 0) {
710710

711-
cocostudio::ActionManagerEx* ret = cocostudio::ActionManagerEx::getInstance();
712-
jsval jsret = JSVAL_NULL;
713-
do {
714-
if (ret) {
715-
js_proxy_t *jsProxy = js_get_or_create_proxy<cocostudio::ActionManagerEx>(cx, (cocostudio::ActionManagerEx*)ret);
716-
jsret = OBJECT_TO_JSVAL(jsProxy->obj);
717-
} else {
718-
jsret = JSVAL_NULL;
719-
}
720-
} while (0);
721-
args.rval().set(jsret);
711+
auto ret = cocostudio::ActionManagerEx::getInstance();
712+
js_type_class_t *typeClass = js_get_type_from_native<cocostudio::ActionManagerEx>(ret);
713+
JS::RootedObject jsret(cx, jsb_ref_singleton_get_or_create_jsobject(cx, ret, typeClass, "cocostudio::ActionManagerEx"));
714+
args.rval().set(OBJECT_TO_JSVAL(jsret));
722715
return true;
723716
}
724717
JS_ReportError(cx, "js_cocos2dx_studio_ActionManagerEx_getInstance : wrong number of arguments");
@@ -5270,17 +5263,10 @@ bool js_cocos2dx_studio_ArmatureDataManager_getInstance(JSContext *cx, uint32_t
52705263
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
52715264
if (argc == 0) {
52725265

5273-
cocostudio::ArmatureDataManager* ret = cocostudio::ArmatureDataManager::getInstance();
5274-
jsval jsret = JSVAL_NULL;
5275-
do {
5276-
if (ret) {
5277-
js_proxy_t *jsProxy = js_get_or_create_proxy<cocostudio::ArmatureDataManager>(cx, (cocostudio::ArmatureDataManager*)ret);
5278-
jsret = OBJECT_TO_JSVAL(jsProxy->obj);
5279-
} else {
5280-
jsret = JSVAL_NULL;
5281-
}
5282-
} while (0);
5283-
args.rval().set(jsret);
5266+
auto ret = cocostudio::ArmatureDataManager::getInstance();
5267+
js_type_class_t *typeClass = js_get_type_from_native<cocostudio::ArmatureDataManager>(ret);
5268+
JS::RootedObject jsret(cx, jsb_ref_singleton_get_or_create_jsobject(cx, ret, typeClass, "cocostudio::ArmatureDataManager"));
5269+
args.rval().set(OBJECT_TO_JSVAL(jsret));
52845270
return true;
52855271
}
52865272
JS_ReportError(cx, "js_cocos2dx_studio_ArmatureDataManager_getInstance : wrong number of arguments");

cocos/scripting/js-bindings/manual/ScriptingCore.cpp

+41-2
Original file line numberDiff line numberDiff line change
@@ -1996,9 +1996,10 @@ void jsb_remove_proxy(js_proxy_t* nativeProxy, js_proxy_t* jsProxy)
19961996
//
19971997
// Ref functions
19981998
//
1999+
2000+
// ref_create
19992001
JSObject* jsb_ref_create_jsobject(JSContext *cx, cocos2d::Ref *ref, js_type_class_t *typeClass, const char* debug)
20002002
{
2001-
// JSB_AUTOCOMPARTMENT_WITH_GLOBAL_OBJCET
20022003
JS::RootedObject proto(cx, typeClass->proto.ref());
20032004
JS::RootedObject parent(cx, typeClass->parentProto.ref());
20042005
JS::RootedObject js_obj(cx, JS_NewObject(cx, typeClass->jsclass, proto, parent));
@@ -2009,7 +2010,6 @@ JSObject* jsb_ref_create_jsobject(JSContext *cx, cocos2d::Ref *ref, js_type_clas
20092010

20102011
JSObject* jsb_ref_autoreleased_create_jsobject(JSContext *cx, cocos2d::Ref *ref, js_type_class_t *typeClass, const char* debug)
20112012
{
2012-
// JSB_AUTOCOMPARTMENT_WITH_GLOBAL_OBJCET
20132013
JS::RootedObject proto(cx, typeClass->proto.ref());
20142014
JS::RootedObject parent(cx, typeClass->parentProto.ref());
20152015
JS::RootedObject js_obj(cx, JS_NewObject(cx, typeClass->jsclass, proto, parent));
@@ -2018,6 +2018,17 @@ JSObject* jsb_ref_autoreleased_create_jsobject(JSContext *cx, cocos2d::Ref *ref,
20182018
return js_obj;
20192019
}
20202020

2021+
JSObject* jsb_ref_singleton_create_jsobject(JSContext *cx, cocos2d::Ref *ref, js_type_class_t *typeClass, const char* debug)
2022+
{
2023+
JS::RootedObject proto(cx, typeClass->proto.ref());
2024+
JS::RootedObject parent(cx, typeClass->parentProto.ref());
2025+
JS::RootedObject js_obj(cx, JS_NewObject(cx, typeClass->jsclass, proto, parent));
2026+
js_proxy_t* newproxy = jsb_new_proxy(ref, js_obj);
2027+
jsb_ref_singleton_init(cx, &newproxy->obj, ref, debug);
2028+
return js_obj;
2029+
}
2030+
2031+
// get_or_create
20212032
JSObject* jsb_ref_get_or_create_jsobject(JSContext *cx, cocos2d::Ref *ref, js_type_class_t *typeClass, const char* debug)
20222033
{
20232034
auto proxy = jsb_get_native_proxy(ref);
@@ -2027,14 +2038,26 @@ JSObject* jsb_ref_get_or_create_jsobject(JSContext *cx, cocos2d::Ref *ref, js_ty
20272038
return jsb_ref_create_jsobject(cx, ref, typeClass, debug);
20282039
}
20292040

2041+
JSObject* jsb_ref_singleton_get_or_create_jsobject(JSContext *cx, cocos2d::Ref *ref, js_type_class_t *typeClass, const char* debug)
2042+
{
2043+
auto proxy = jsb_get_native_proxy(ref);
2044+
if (proxy)
2045+
return proxy->obj;
2046+
// else
2047+
return jsb_ref_singleton_create_jsobject(cx, ref, typeClass, debug);
2048+
}
2049+
2050+
// ref_init
20302051
void jsb_ref_init(JSContext* cx, JS::Heap<JSObject*> *obj, Ref* ref, const char* debug)
20312052
{
20322053
// CCLOG("jsb_ref_init: JSObject address = %p. %s", obj->get(), debug);
20332054
#if CC_ENABLE_GC_FOR_NATIVE_OBJECTS
20342055
(void)cx;
20352056
(void)obj;
20362057
ref->_scriptOwned = true;
2058+
// don't retain it.
20372059
#else
2060+
// autorelease it
20382061
ref->autorelease();
20392062
JS::AddNamedObjectRoot(cx, obj, debug);
20402063
#endif
@@ -2055,6 +2078,21 @@ void jsb_ref_autoreleased_init(JSContext* cx, JS::Heap<JSObject*> *obj, Ref* ref
20552078
#endif
20562079
}
20572080

2081+
void jsb_ref_singleton_init(JSContext* cx, JS::Heap<JSObject*> *obj, Ref* ref, const char* debug)
2082+
{
2083+
// CCLOG("jsb_ref_singleton_init: JSObject address = %p. %s", obj->get(), debug);
2084+
#if CC_ENABLE_GC_FOR_NATIVE_OBJECTS
2085+
(void)cx;
2086+
(void)obj;
2087+
ref->_scriptOwned = true;
2088+
// don't retain it: it is a singleton
2089+
#else
2090+
// don't autorelease it: it is a singleton
2091+
JS::AddNamedObjectRoot(cx, obj, debug);
2092+
#endif
2093+
}
2094+
2095+
// finalize
20582096
void jsb_ref_finalize(JSFreeOp* fop, JSObject* obj)
20592097
{
20602098
#if CC_ENABLE_GC_FOR_NATIVE_OBJECTS
@@ -2081,6 +2119,7 @@ void jsb_ref_finalize(JSFreeOp* fop, JSObject* obj)
20812119
#endif
20822120
}
20832121

2122+
// rebind
20842123
void jsb_ref_rebind(JSContext* cx, JS::HandleObject jsobj, js_proxy_t *js2native_proxy, cocos2d::Ref* oldRef, cocos2d::Ref* newRef, const char* debug)
20852124
{
20862125
#if not CC_ENABLE_GC_FOR_NATIVE_OBJECTS

cocos/scripting/js-bindings/manual/ScriptingCore.h

+17
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,12 @@ void jsb_ref_init(JSContext* cx, JS::Heap<JSObject*> *obj, cocos2d::Ref* ref, co
565565
*/
566566
void jsb_ref_autoreleased_init(JSContext* cx, JS::Heap<JSObject*> *obj, cocos2d::Ref* ref, const char* debug);
567567

568+
/**
569+
* Generic initialization function for Singletons
570+
* Similar to jsb_ref_init(), but call it to initialize singletons
571+
*/
572+
void jsb_ref_singleton_init(JSContext* cx, JS::Heap<JSObject*> *obj, cocos2d::Ref* ref, const char* debug);
573+
568574
/**
569575
* Generic finalize used by objects that are subclass of Ref
570576
*/
@@ -589,13 +595,24 @@ JSObject* jsb_ref_create_jsobject(JSContext *cx, cocos2d::Ref *ref, js_type_clas
589595
*/
590596
JSObject* jsb_ref_autoreleased_create_jsobject(JSContext *cx, cocos2d::Ref *ref, js_type_class_t *typeClass, const char* debug);
591597

598+
/**
599+
* Creates a new JSObject of a certain type (typeClass) and creates a proxy associated with and the Singleton (ref)
600+
* Similar to jsb_ref_create_jsobject(), but call it if you know that Ref is a Singleton
601+
*/
602+
JSObject* jsb_ref_singleton_create_jsobject(JSContext *cx, cocos2d::Ref *ref, js_type_class_t *typeClass, const char* debug);
592603

593604
/**
594605
It will try to get the associated JSObjct for ref.
595606
If it can't find it, it will create a new one associating it to Ref
596607
*/
597608
JSObject* jsb_ref_get_or_create_jsobject(JSContext *cx, cocos2d::Ref *ref, js_type_class_t *typeClass, const char* debug);
598609

610+
/**
611+
It will try to get the associated JSObjct for ref.
612+
If it can't find it, it will create a new one associating it to Ref
613+
*/
614+
JSObject* jsb_ref_singleton_get_or_create_jsobject(JSContext *cx, cocos2d::Ref *ref, js_type_class_t *typeClass, const char* debug);
615+
599616

600617
template <class T>
601618
jsval getJSObject(JSContext* cx, T* nativeObj)

0 commit comments

Comments
 (0)