static JSBool executeFile(JSContext *cx, unsigned argc, jsval *vp) { JSString* str; JSObject* obj; if (!JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "So", &str, &obj)) { return JS_FALSE; } char *filename = JS_EncodeString(cx, str); JSScript* script = JS_CompileUTF8File(cx, JS_THIS_OBJECT(cx, vp), filename); JS_free(cx, filename); if (!script) { return JS_FALSE; } jsval result; if (!JS_ExecuteScript(cx, obj, script, &result)) { return JS_FALSE; } JS_SET_RVAL(cx, vp, result); return JS_TRUE; }
static JSBool body_applyDirectionalImpulse(JSContext* cx, uintN argc, jsval* vp) { jsdouble amt; if (!JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "d", &amt)) { /* Throw a JavaScript exception. */ JS_ReportError(cx, "body_applyDirectionalImpulse: couldn't parse out amt"); return JS_FALSE; } JSObject* bodyObj = JS_THIS_OBJECT(cx, vp); cpBody* body = (cpBody*)JS_GetPrivate(cx, bodyObj); cpFloat angle = cpBodyGetAngle(body); double xAmt = -sin(angle) * amt; double yAmt = cos(angle) * amt; cpVect j = {xAmt, yAmt}; cpBodyApplyImpulse(body, j, cpvzero); jsval rVal = JSVAL_VOID; JS_SET_RVAL(cx, vp, rVal); return JS_TRUE; }
JSBool Library::Close(JSContext* cx, unsigned argc, jsval* vp) { JSObject* obj = JS_THIS_OBJECT(cx, vp); if (!obj) return JS_FALSE; if (!IsLibrary(obj)) { JS_ReportError(cx, "not a library"); return JS_FALSE; } if (argc != 0) { JS_ReportError(cx, "close doesn't take any arguments"); return JS_FALSE; } // delete our internal objects UnloadLibrary(obj); JS_SetReservedSlot(obj, SLOT_LIBRARY, PRIVATE_TO_JSVAL(NULL)); JS_SET_RVAL(cx, vp, JSVAL_VOID); return JS_TRUE; }
JSBool Library::Open(JSContext* cx, unsigned argc, jsval *vp) { JSObject* ctypesObj = JS_THIS_OBJECT(cx, vp); if (!ctypesObj) return JS_FALSE; if (!IsCTypesGlobal(ctypesObj)) { JS_ReportError(cx, "not a ctypes object"); return JS_FALSE; } if (argc != 1 || JSVAL_IS_VOID(JS_ARGV(cx, vp)[0])) { JS_ReportError(cx, "open requires a single argument"); return JS_FALSE; } JSObject* library = Create(cx, JS_ARGV(cx, vp)[0], GetCallbacks(ctypesObj)); if (!library) return JS_FALSE; JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(library)); return JS_TRUE; }
JSBool JetpackChild::CreateSandbox(JSContext* cx, uintN argc, jsval* vp) { if (argc > 0) { JS_ReportError(cx, "createSandbox takes zero arguments"); return JS_FALSE; } JSObject* obj = JS_NewCompartmentAndGlobalObject(cx, const_cast<JSClass*>(&sGlobalClass), NULL); if (!obj) return JS_FALSE; jsval rval = OBJECT_TO_JSVAL(obj); if (!JS_WrapValue(cx, &rval)) return JS_FALSE; JSAutoEnterCompartment ac; if (!ac.enter(cx, obj)) return JS_FALSE; JS_SET_RVAL(cx, vp, rval); return JS_InitStandardClasses(cx, obj); }
static bool dummy_constructor(JSContext *cx, uint32_t argc, jsval *vp) { JS::RootedValue initializing(cx); bool isNewValid = true; JSObject* global = ScriptingCore::getInstance()->getGlobalObject(); isNewValid = JS_GetProperty(cx, global, "initializing", &initializing) && JSVAL_TO_BOOLEAN(initializing); if (isNewValid) { TypeTest<T> t; js_type_class_t *typeClass = nullptr; std::string typeName = t.s_name(); auto typeMapIter = _js_global_type_map.find(typeName); CCASSERT(typeMapIter != _js_global_type_map.end(), "Can't find the class type!"); typeClass = typeMapIter->second; CCASSERT(typeClass, "The value is null."); JSObject *_tmp = JS_NewObject(cx, typeClass->jsclass, typeClass->proto, typeClass->parentProto); JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(_tmp)); return true; } JS_ReportError(cx, "Don't use `new cc.XXX`, please use `cc.XXX.create` instead! "); return false; }
static JSBool getType_func(JSContext *context, uintN argc, jsval *vp) { JSObject *obj = JS_THIS_OBJECT(context, vp); cairo_surface_t *surface; cairo_surface_type_t type; if (argc > 1) { gjs_throw(context, "Surface.getType() takes no arguments"); return JS_FALSE; } surface = gjs_cairo_surface_get_surface(context, obj); type = cairo_surface_get_type(surface); if (!gjs_cairo_check_status(context, cairo_surface_status(surface), "surface")) return JS_FALSE; JS_SET_RVAL(context, vp, INT_TO_JSVAL(type)); return JS_TRUE; }
static JSBool rpmhdr_fi(JSContext *cx, uintN argc, jsval *vp) { jsval *argv = JS_ARGV(cx , vp); JSObject *obj = JS_NewObjectForConstructor(cx , vp); if(!obj) { JS_ReportError(cx , "Failed to create 'this' object"); return JS_FALSE; } void * ptr = JS_GetInstancePrivate(cx, obj, &rpmhdrClass, NULL); Header h = ptr; rpmTag tagN = RPMTAG_BASENAMES; JSBool ok = JS_FALSE; _METHOD_DEBUG_ENTRY(_debug); if (!(ok = JS_ConvertArguments(cx, argc, argv, "/u", &tagN))) goto exit; JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(rpmjs_NewFiObject(cx, h, tagN))); ok = JS_TRUE; exit: return ok; }
static JSBool js_conio_getpass(JSContext *cx, uintN argc, jsval *arglist) { jsval *argv=JS_ARGV(cx, arglist); char * str; char * pwd; jsrefcount rc; if(argc==1) { JSVALUE_TO_MSTRING(cx, argv[0], str, NULL); HANDLE_PENDING(cx); if(str != NULL) { rc=JS_SUSPENDREQUEST(cx); pwd=getpass(str); free(str); JS_RESUMEREQUEST(cx, rc); JS_SET_RVAL(cx, arglist,STRING_TO_JSVAL(JS_NewStringCopyZ(cx,pwd))); return(JS_TRUE); } } return(JS_FALSE); }
static JSBool gjs_format_int_alternative_output(JSContext *context, uintN argc, jsval *vp) { jsval *argv = JS_ARGV(cx, vp); char *str; jsval rval; int intval; JSBool ret; if (!gjs_parse_args(context, "format_int_alternative_output", "i", argc, argv, "intval", &intval)) return JS_FALSE; str = g_strdup_printf("%Id", intval); ret = gjs_string_from_utf8(context, str, -1, &rval); if (ret) JS_SET_RVAL(context, vp, rval); g_free (str); return ret; }
static JSBool getType_func(JSContext *context, unsigned argc, jsval *vp) { JSObject *obj = JS_THIS_OBJECT(context, vp); cairo_pattern_t *pattern; cairo_pattern_type_t type; if (argc > 1) { gjs_throw(context, "Pattern.getType() takes no arguments"); return JS_FALSE; } pattern = gjs_cairo_pattern_get_pattern(context, obj); type = cairo_pattern_get_type(pattern); if (!gjs_cairo_check_status(context, cairo_pattern_status(pattern), "pattern")) return JS_FALSE; JS_SET_RVAL(context, vp, INT_TO_JSVAL(type)); return JS_TRUE; }
JSBool Construct(JSContext* cx, uintN argc, jsval* vp) { UNUSED2(argc); JSObject *newObj = JS_NewObject(cx, &Class, NULL, NULL); JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(newObj)); int flags=JSPROP_ENUMERATE|JSPROP_READONLY|JSPROP_PERMANENT; #define cfg_ns(_propname, _enum) STMT (\ JSObject *nsobj=g_ScriptingHost.CreateCustomObject("ConfigNamespace"); \ ENSURE(nsobj); \ ConfigNamespace_JS::SetNamespace(cx, nsobj, _enum); \ ENSURE(JS_DefineProperty(cx, newObj, _propname, OBJECT_TO_JSVAL(nsobj), NULL, NULL, flags)); ) cfg_ns("default", CFG_DEFAULT); cfg_ns("system", CFG_SYSTEM); cfg_ns("user", CFG_USER); cfg_ns("mod", CFG_MOD); #undef cfg_ns return JS_TRUE; }
static JSBool dummy_constructor(JSContext *cx, uint32_t argc, jsval *vp) { TypeTest<T> t; T* cobj = new T(); #if not $script_control_cpp cocos2d::CCObject *_ccobj = dynamic_cast<cocos2d::CCObject *>(cobj); if (_ccobj) { _ccobj->autorelease(); } #end if js_type_class_t *p; uint32_t typeId = t.s_id(); HASH_FIND_INT(_js_global_type_ht, &typeId, p); assert(p); JSObject *_tmp = JS_NewObject(cx, p->jsclass, p->proto, p->parentProto); js_proxy_t *pp; JS_NEW_PROXY(pp, cobj, _tmp); #if not $script_control_cpp JS_AddObjectRoot(cx, &pp->obj); #end if JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(_tmp)); return JS_TRUE; }
static bool dummy_constructor(JSContext *cx, uint32_t argc, jsval *vp) { JS::RootedValue initializing(cx); bool isNewValid = true; if (isNewValid) { TypeTest<T> t; js_type_class_t *typeClass = nullptr; std::string typeName = t.s_name(); auto typeMapIter = _js_global_type_map.find(typeName); CCASSERT(typeMapIter != _js_global_type_map.end(), "Can't find the class type!"); typeClass = typeMapIter->second; CCASSERT(typeClass, "The value is null."); JSObject *_tmp = JS_NewObject(cx, typeClass->jsclass, typeClass->proto, typeClass->parentProto); T* cobj = new T(); js_proxy_t *pp = jsb_new_proxy(cobj, _tmp); JS_AddObjectRoot(cx, &pp->obj); JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(_tmp)); return true; } return false; }
JSBool js_PluginAdColonyJS_PluginAdColony_notifyIAPComplete(JSContext *cx, uint32_t argc, jsval *vp) { jsval *argv = JS_ARGV(cx, vp); JSBool ok = JS_TRUE; if (argc == 5) { std::string arg0; std::string arg1; int arg2; double arg3; std::string arg4; ok &= jsval_to_std_string(cx, argv[0], &arg0); ok &= jsval_to_std_string(cx, argv[1], &arg1); ok &= jsval_to_int32(cx, argv[2], (int32_t *)&arg2); ok &= sdkbox::js_to_number(cx, argv[3], &arg3); ok &= jsval_to_std_string(cx, argv[4], &arg4); JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); sdkbox::PluginAdColony::notifyIAPComplete(arg0, arg1, arg2, arg3, arg4); JS_SET_RVAL(cx, vp, JSVAL_VOID); return JS_TRUE; } JS_ReportError(cx, "wrong number of arguments"); return JS_FALSE; }
static JSBool setExtend_func(JSContext *context, unsigned argc, jsval *vp) { jsval *argv = JS_ARGV(context, vp); JSObject *obj = JS_THIS_OBJECT(context, vp); cairo_extend_t extend; cairo_pattern_t *pattern; if (!gjs_parse_args(context, "setExtend", "i", argc, argv, "extend", &extend)) return JS_FALSE; pattern = gjs_cairo_pattern_get_pattern(context, obj); cairo_pattern_set_extend(pattern, extend); if (!gjs_cairo_check_status(context, cairo_pattern_status(pattern), "pattern")) return JS_FALSE; JS_SET_RVAL(context, vp, JSVAL_VOID); return JS_TRUE; }
bool js_EventListenerTouchOneByOne_create(JSContext *cx, uint32_t argc, jsval *vp) { if (argc == 0) { auto ret = EventListenerTouchOneByOne::create(); ret->onTouchBegan = [ret](Touch* touch, Event* event) -> bool { jsval jsret = JSVAL_NULL; bool ok = ScriptingCore::getInstance()->handleTouchEvent(ret, EventTouch::EventCode::BEGAN, touch, event, &jsret); // Not found the method, just return false. if (!ok) return false; CCASSERT(JSVAL_IS_BOOLEAN(jsret), "the return value of onTouchBegan isn't boolean"); return JSVAL_TO_BOOLEAN(jsret); }; ret->onTouchMoved = [ret](Touch* touch, Event* event) { ScriptingCore::getInstance()->handleTouchEvent(ret, EventTouch::EventCode::MOVED, touch, event); }; ret->onTouchEnded = [ret](Touch* touch, Event* event) { ScriptingCore::getInstance()->handleTouchEvent(ret, EventTouch::EventCode::ENDED, touch, event); }; ret->onTouchCancelled = [ret](Touch* touch, Event* event) { ScriptingCore::getInstance()->handleTouchEvent(ret, EventTouch::EventCode::CANCELLED, touch, event); }; jsval jsret = getJSObject(cx, ret); JS_SET_RVAL(cx, vp, jsret); return true; } JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 0); return false; }
JSBool js_cocos2dx_CCSpawn_create(JSContext *cx, uint32_t argc, jsval *vp) { jsval *argv = JS_ARGV(cx, vp); if (argc > 0) { cocos2d::CCArray* array = cocos2d::CCArray::create(); int i = 0; while (i < argc) { js_proxy_t *proxy; JSObject *tmpObj = JSVAL_TO_OBJECT(argv[i]); JS_GET_NATIVE_PROXY(proxy, tmpObj); cocos2d::CCObject *item = (cocos2d::CCObject*)(proxy ? proxy->ptr : NULL); TEST_NATIVE_OBJECT(cx, item) array->addObject(item); i++; } cocos2d::CCFiniteTimeAction* ret = cocos2d::CCSpawn::create(array); jsval jsret; do { if (ret) { js_proxy_t *p; JS_GET_PROXY(p, ret); if (p) { jsret = OBJECT_TO_JSVAL(p->obj); } else { // create a new js obj of that class js_proxy_t *proxy = js_get_or_create_proxy<cocos2d::CCFiniteTimeAction>(cx, ret); jsret = OBJECT_TO_JSVAL(proxy->obj); } } else { jsret = JSVAL_NULL; } } while (0); JS_SET_RVAL(cx, vp, jsret); return JS_TRUE; } return JS_FALSE; }
JSBool js_cocos2dx_extension_HttpRequest_open(JSContext *cx, uint32_t argc, jsval *vp){ jsval *argv = JS_ARGV(cx, vp); JSObject *obj = JS_THIS_OBJECT(cx, vp); js_proxy_t *proxy; JS_GET_NATIVE_PROXY(proxy, obj); HttpRequest* cobj = (HttpRequest *)(proxy ? proxy->ptr : NULL); JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object"); if(argc == 2){ std::string* method = new std::string(); do { JSBool ok = jsval_to_std_string(cx, argv[0], method); JSB_PRECONDITION2( ok, cx, JS_FALSE, "Error processing arguments"); } while (0); std::string* url = new std::string(); do { JSBool ok = jsval_to_std_string(cx, argv[1], url); JSB_PRECONDITION2( ok, cx, JS_FALSE, "Error processing arguments"); } while (0); if(*method == "POST"){ cobj->open(CCHttpRequest::kHttpPost, url->c_str()); }else{ cobj->open(CCHttpRequest::kHttpGet, url->c_str()); } JS_SET_RVAL(cx, vp, JSVAL_VOID); CC_SAFE_DELETE(url); CC_SAFE_DELETE(method); return JS_TRUE; } JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 1); return JS_FALSE; }
JSBool js_skeleton_constructor(JSContext *cx, uint32_t argc, jsval *vp) { cocos2d::CCLog("js skeletonanimation constructor .."); if (argc == 2) { jsval *argvp = JS_ARGV(cx,vp); JSBool ok = JS_TRUE; const char* arg1; const char* arg2; ok &= jsval_to_charptr(cx, *argvp++, &arg1); ok &= jsval_to_charptr(cx, *argvp++, &arg2); JSB_PRECONDITION(ok, "Error processing arguments"); // 调用 C++ 构造函数 cocos2d::extension::CCSkeletonAnimation* cobj = new cocos2d::extension::CCSkeletonAnimation(arg1, arg2); cocos2d::CCObject* _ccobj = dynamic_cast<cocos2d::CCObject*>(cobj); // 默认使用原有的内存管理方式 if (_ccobj){ _ccobj->autorelease(); } TypeTest<cocos2d::extension::CCSkeletonAnimation> t; js_type_class_t *typeClass; uint32_t typeId = t.s_id(); HASH_FIND_INT(_js_global_type_ht, &typeId, typeClass); assert(typeClass); JSObject *obj = JS_NewObject(cx, typeClass->jsclass, typeClass->proto, typeClass->parentProto); JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj)); // 构造 js 端对象,将 cobj 实际对象存入 js_proxy_t* p = jsb_new_proxy(cobj, obj); JS_AddNamedObjectRoot(cx, &p->obj, "cocos2d::extension::CCSkeletonAnimation"); return JS_TRUE; } JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 0); return JS_FALSE; }
static JSBool js_user_constructor(JSContext *cx, uintN argc, jsval *arglist) { JSObject *obj; jsval *argv=JS_ARGV(cx, arglist); int i; int32 val=0; user_t user; private_t* p; scfg_t* scfg; scfg=JS_GetRuntimePrivate(JS_GetRuntime(cx)); obj=JS_NewObject(cx, &js_user_class, NULL, NULL); JS_SET_RVAL(cx, arglist, OBJECT_TO_JSVAL(obj)); if(argc && (!JS_ValueToInt32(cx,argv[0],&val))) return JS_FALSE; user.number=(ushort)val; if(user.number!=0 && (i=getuserdat(scfg,&user))!=0) { JS_ReportError(cx,"Error %d reading user number %d",i,val); return(JS_FALSE); } if((p=(private_t*)malloc(sizeof(private_t)))==NULL) return(JS_FALSE); memset(p,0,sizeof(private_t)); p->storage = user; p->user = &p->storage; p->cached = (user.number==0 ? FALSE : TRUE); JS_SetPrivate(cx, obj, p); return(JS_TRUE); }
static JSBool error_constructor_value_of(JSContext *context, uintN argc, jsval *vp) { jsval v_self, v_prototype; Error *priv; jsval v_out; v_self = JS_THIS(context, vp); if (!JSVAL_IS_OBJECT(v_self)) { /* Lie a bit here... */ gjs_throw(context, "GLib.Error.valueOf() called on a non object"); return JS_FALSE; } if (!gjs_object_require_property(context, JSVAL_TO_OBJECT(v_self), "constructor", "prototype", &v_prototype)) return JS_FALSE; if (!JSVAL_IS_OBJECT(v_prototype)) { gjs_throw(context, "GLib.Error.valueOf() called on something that is not" " a constructor"); return JS_FALSE; } priv = priv_from_js(context, JSVAL_TO_OBJECT(v_prototype)); if (priv == NULL) return JS_FALSE; v_out = INT_TO_JSVAL(priv->domain); JS_SET_RVAL(context, vp, v_out); return TRUE; }
static JSBool elixir_size_evas_object_params(void (*func)(const Evas_Object *obj, int *w, int *h), const elixir_parameter_t *params[], JSContext *cx, uintN argc, jsval *vp) { Evas_Object *know; JSObject *ret; int w; int h; elixir_value_t val[1]; if (!elixir_params_check(cx, params, val, argc, JS_ARGV(cx, vp))) return JS_FALSE; GET_PRIVATE(cx, val[0].v.obj, know); func(know, &w, &h); ret = elixir_new_size(cx, w, h); if (!ret) return JS_FALSE; JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(ret)); return JS_TRUE; }
// interface WebGLActiveInfo { // readonly attribute GLint size; // readonly attribute GLenum type; // readonly attribute DOMString name; // }; // WebGLActiveInfo? getActiveUniform(WebGLProgram? program, GLuint index); JSBool JSB_glGetActiveUniform(JSContext *cx, uint32_t argc, jsval *vp) { JSB_PRECONDITION2( argc == 2, cx, JS_FALSE, "Invalid number of arguments" ); jsval *argvp = JS_ARGV(cx,vp); JSBool ok = JS_TRUE; uint32_t arg0, arg1; ok &= jsval_to_uint( cx, *argvp++, &arg0 ); ok &= jsval_to_uint( cx, *argvp++, &arg1 ); JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments"); GLsizei length; glGetProgramiv(arg0, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &length); GLchar* buffer = new GLchar[length]; GLint size = -1; GLenum type = -1; glGetActiveUniform(arg0, arg1, length, NULL, &size, &type, buffer); jsval retval = JSVAL_VOID; JSObject *object = JS_NewObject(cx, NULL, NULL, NULL ); JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error creating JS Object"); if (!JS_DefineProperty(cx, object, "size", INT_TO_JSVAL(size), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) || !JS_DefineProperty(cx, object, "type", INT_TO_JSVAL(type), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) || !JS_DefineProperty(cx, object, "name", charptr_to_jsval(cx, buffer), NULL, NULL, JSPROP_ENUMERATE | JSPROP_PERMANENT) ) return JS_FALSE; retval = OBJECT_TO_JSVAL(object); JS_SET_RVAL(cx, vp, retval); CC_SAFE_DELETE_ARRAY(buffer); return JS_TRUE; }
static JSBool gjs_address_of(JSContext *context, unsigned argc, jsval *vp) { jsval *argv = JS_ARGV(cx, vp); JSObject *target_obj; JSBool ret; char *pointer_string; jsval retval; if (!gjs_parse_args(context, "addressOf", "o", argc, argv, "object", &target_obj)) return JS_FALSE; pointer_string = g_strdup_printf("%p", target_obj); ret = gjs_string_from_utf8(context, pointer_string, -1, &retval); g_free(pointer_string); if (ret) JS_SET_RVAL(context, vp, retval); return ret; }
JSBool js_cocos2dx_CCMenuItemSprite_create(JSContext *cx, uint32_t argc, jsval *vp) { if (argc >= 2) { jsval *argv = JS_ARGV(cx, vp); js_proxy_t *proxy; JSObject *tmpObj; tmpObj = JSVAL_TO_OBJECT(argv[0]); JS_GET_NATIVE_PROXY(proxy, tmpObj); cocos2d::CCNode* arg0 = (cocos2d::CCNode*)(proxy ? proxy->ptr : NULL); TEST_NATIVE_OBJECT(cx, arg0); tmpObj = JSVAL_TO_OBJECT(argv[1]); JS_GET_NATIVE_PROXY(proxy, tmpObj); cocos2d::CCNode* arg1 = (cocos2d::CCNode*)(proxy ? proxy->ptr : NULL); TEST_NATIVE_OBJECT(cx, arg1); int last = 2; cocos2d::CCNode* arg2 = NULL; if (argc == 5 || argc == 3) { tmpObj = JSVAL_TO_OBJECT(argv[2]); JS_GET_NATIVE_PROXY(proxy, tmpObj); arg2 = (cocos2d::CCNode*)(proxy ? proxy->ptr : NULL); TEST_NATIVE_OBJECT(cx, arg2); last = 3; } cocos2d::CCMenuItemSprite* ret = cocos2d::CCMenuItemSprite::create(arg0, arg1, arg2); jsval thisObj = argv[last++]; jsval callback = argv[last]; JSObject *obj = bind_menu_item<cocos2d::CCMenuItemSprite>(cx, ret, callback, thisObj); JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj)); return JS_TRUE; } return JS_FALSE; }
JSBool js_jsb_iOSiapWrapper_iOSiapWrapperCallBackClass_onPurchaseCallback(JSContext *cx, uint32_t argc, jsval *vp) { jsval *argv = JS_ARGV(cx, vp); JSBool ok = JS_TRUE; JSObject *obj = JS_THIS_OBJECT(cx, vp); js_proxy_t *proxy = jsb_get_js_proxy(obj); iOSiapWrapperCallBackClass* cobj = (iOSiapWrapperCallBackClass *)(proxy ? proxy->ptr : NULL); JSB_PRECONDITION2( cobj, cx, JS_FALSE, "js_jsb_iOSiapWrapper_iOSiapWrapperCallBackClass_onPurchaseCallback : Invalid Native Object"); if (argc == 3) { std::string arg0; std::string arg1; std::string arg2; ok &= jsval_to_std_string(cx, argv[0], &arg0); ok &= jsval_to_std_string(cx, argv[1], &arg1); ok &= jsval_to_std_string(cx, argv[2], &arg2); JSB_PRECONDITION2(ok, cx, JS_FALSE, "js_jsb_iOSiapWrapper_iOSiapWrapperCallBackClass_onPurchaseCallback : Error processing arguments"); cobj->onPurchaseCallback(arg0, arg1, arg2); JS_SET_RVAL(cx, vp, JSVAL_VOID); return JS_TRUE; } JS_ReportError(cx, "js_jsb_iOSiapWrapper_iOSiapWrapperCallBackClass_onPurchaseCallback : wrong number of arguments: %d, was expecting %d", argc, 3); return JS_FALSE; }
JSBool js_jsb_iOSiapWrapper_iOSiapWrapper_getPurchaseCallbackTarget(JSContext *cx, uint32_t argc, jsval *vp) { JSObject *obj = JS_THIS_OBJECT(cx, vp); js_proxy_t *proxy = jsb_get_js_proxy(obj); iOSiapWrapper* cobj = (iOSiapWrapper *)(proxy ? proxy->ptr : NULL); JSB_PRECONDITION2( cobj, cx, JS_FALSE, "js_jsb_iOSiapWrapper_iOSiapWrapper_getPurchaseCallbackTarget : Invalid Native Object"); if (argc == 0) { iOSiapWrapperCallBackClass* ret = cobj->getPurchaseCallbackTarget(); jsval jsret; do { if (ret) { js_proxy_t *proxy = js_get_or_create_proxy<iOSiapWrapperCallBackClass>(cx, ret); jsret = OBJECT_TO_JSVAL(proxy->obj); } else { jsret = JSVAL_NULL; } } while (0); JS_SET_RVAL(cx, vp, jsret); return JS_TRUE; } JS_ReportError(cx, "js_jsb_iOSiapWrapper_iOSiapWrapper_getPurchaseCallbackTarget : wrong number of arguments: %d, was expecting %d", argc, 0); return JS_FALSE; }
JSBool js_callFunc(JSContext *cx, uint32_t argc, jsval *vp) { if (argc >= 1) { jsval *argv = JS_ARGV(cx, vp); JSCallFunc *tmpCobj = new JSCallFunc(); tmpCobj->setJSCallbackThis(argv[0]); if(argc >= 2) { tmpCobj->setJSCallbackFunc(argv[1]); } if(argc == 3) { tmpCobj->setExtraDataField(argv[2]); } CCCallFunc *ret = (CCCallFunc *)CCCallFuncN::create((CCObject *)tmpCobj, callfuncN_selector(JSCallFunc::callbackFunc)); js_proxy_t *proxy = js_get_or_create_proxy<cocos2d::CCCallFunc>(cx, ret); JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(proxy->obj)); // test->execute(); } return JS_TRUE; }
JSBool js_cocos2dx_CCSet_constructor(JSContext *cx, uint32_t argc, jsval *vp) { JSObject *obj; cocos2d::CCSet* cobj; if (argc == 0) { cobj = new cocos2d::CCSet(); cobj->autorelease(); TypeTest<cocos2d::CCSet> t; js_type_class_t *typeClass; uint32_t typeId = t.s_id(); HASH_FIND_INT(_js_global_type_ht, &typeId, typeClass); assert(typeClass); obj = JS_NewObject(cx, typeClass->jsclass, typeClass->proto, typeClass->parentProto); js_proxy_t *proxy; JS_NEW_PROXY(proxy, cobj, obj); JS_AddNamedObjectRoot(cx, &proxy->obj, typeid(cobj).name()); } if (cobj) { JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(obj)); return JS_TRUE; } return JS_FALSE; }