bool js_cocos2dx_custom_BinaryReadUtil_readBytes(JSContext *cx, uint32_t argc, jsval *vp) { JS::CallArgs args = JS::CallArgsFromVp(argc, vp); bool ok = true; JS::RootedObject obj(cx, args.thisv().toObjectOrNull()); js_proxy_t *proxy = jsb_get_js_proxy(obj); BinaryReadUtil* cobj = (BinaryReadUtil *)(proxy ? proxy->ptr : NULL); JSB_PRECONDITION2( cobj, cx, false, "js_cocos2dx_custom_BinaryReadUtil_readBytes : Invalid Native Object"); if (argc == 2) { unsigned char* arg0; int arg1; #pragma warning NO CONVERSION TO NATIVE FOR unsigned char* ok = false; ok &= jsval_to_int32(cx, args.get(1), (int32_t *)&arg1); JSB_PRECONDITION2(ok, cx, false, "js_cocos2dx_custom_BinaryReadUtil_readBytes : Error processing arguments"); cobj->readBytes(arg0, arg1); args.rval().setUndefined(); return true; } JS_ReportError(cx, "js_cocos2dx_custom_BinaryReadUtil_readBytes : wrong number of arguments: %d, was expecting %d", argc, 2); return false; }
bool js_PluginAdColonyJS_PluginAdColony_notifyIAPComplete(JSContext *cx, uint32_t argc, jsval *vp) { JS::CallArgs args = JS::CallArgsFromVp(argc, vp); bool ok = true; if (argc == 5) { std::string arg0; std::string arg1; int arg2; double arg3; std::string arg4; ok &= jsval_to_std_string(cx, args.get(0), &arg0); ok &= jsval_to_std_string(cx, args.get(1), &arg1); ok &= jsval_to_int32(cx, args.get(2), (int32_t *)&arg2); ok &= sdkbox::js_to_number(cx, args.get(3), &arg3); ok &= jsval_to_std_string(cx, args.get(4), &arg4); JSB_PRECONDITION2(ok, cx, false, "js_PluginAdColonyJS_PluginAdColony_notifyIAPComplete : Error processing arguments"); sdkbox::PluginAdColony::notifyIAPComplete(arg0, arg1, arg2, arg3, arg4); args.rval().setUndefined(); return true; } JS_ReportError(cx, "js_PluginAdColonyJS_PluginAdColony_notifyIAPComplete : wrong number of arguments"); return false; }
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 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; }
bool Base64Decode(JSContext* cx, HandleValue val, MutableHandleValue out) { MOZ_ASSERT(cx); nsAutoCString encodedString; if (!ConvertJSValueToByteString(cx, val, false, encodedString)) { return false; } nsAutoCString result; if (NS_FAILED(mozilla::Base64Decode(encodedString, result))) { JS_ReportError(cx, "Failed to decode base64 string!"); return false; } JSString* str = JS_NewStringCopyN(cx, result.get(), result.Length()); if (!str) return false; out.setString(str); return true; }
static JSBool equality(JSContext *cx, JSObject *obj, jsval v, JSBool *bp) { if (resolverHasMethod(cx, obj, "equality")) { jsval rval; jsval args[1]; args[0] = v; if (!delegateToResolver(cx, obj, "equality", 1, args, &rval)) return JS_FALSE; if (!JSVAL_IS_BOOLEAN(rval)) { JS_ReportError(cx, "equality must return a boolean"); return JS_FALSE; } *bp = JSVAL_TO_BOOLEAN(rval); return JS_TRUE; } if (JSVAL_IS_OBJECT(v) && JSVAL_TO_OBJECT(v) == obj) *bp = JS_TRUE; else *bp = JS_FALSE; return JS_TRUE; }
JSBool mongo_update(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ uassert( "mongo_find needs at elast 3 args" , argc >= 3 ); uassert( "2nd param to update has to be an object" , JSVAL_IS_OBJECT( argv[1] ) ); uassert( "3rd param to update has to be an object" , JSVAL_IS_OBJECT( argv[2] ) ); DBClientBase * conn = getConnection( cx, obj ); uassert( "no connection!" , conn ); Convertor c( cx ); string ns = c.toString( argv[0] ); bool upsert = argc > 3 && c.toBoolean( argv[3] ); try { conn->update( ns , c.toObject( argv[1] ) , c.toObject( argv[2] ) , upsert ); return JS_TRUE; } catch ( ... ){ JS_ReportError( cx , "error doing update" ); return JS_FALSE; } }
JSBool mongo_insert(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ uassert( "mongo_insert needs 2 args" , argc == 2 ); uassert( "2nd param to insert has to be an object" , JSVAL_IS_OBJECT( argv[1] ) ); DBClientBase * conn = getConnection( cx, obj ); uassert( "no connection!" , conn ); Convertor c( cx ); string ns = c.toString( argv[0] ); BSONObj o = c.toObject( argv[1] ); // TODO: add _id try { conn->insert( ns , o ); return JS_TRUE; } catch ( ... ){ JS_ReportError( cx , "error doing insert" ); return JS_FALSE; } }
JSBool mongo_external_constructor( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ){ Convertor c( cx ); uassert( "0 or 1 args to Mongo" , argc <= 1 ); shared_ptr< DBClientConnection > conn( new DBClientConnection( true ) ); string host = "127.0.0.1"; if ( argc > 0 ) host = c.toString( argv[0] ); string errmsg; if ( ! conn->connect( host , errmsg ) ){ JS_ReportError( cx , ((string)"couldn't connect: " + errmsg).c_str() ); return JS_FALSE; } assert( JS_SetPrivate( cx , obj , (void*)( new shared_ptr< DBClientConnection >( conn ) ) ) ); jsval host_val = c.toval( host.c_str() ); assert( JS_SetProperty( cx , obj , "host" , &host_val ) ); return JS_TRUE; }
JSBool CheckFilename(JSContext *cx, jsid id, JSStackFrame *fp) { const char *filename; if (fp && (filename = fp->getScript()->filename) && !strncmp(filename, prefix, NS_ARRAY_LENGTH(prefix) - 1)) { return JS_TRUE; } if (JSID_IS_VOID(id)) { ThrowException(NS_ERROR_XPC_SECURITY_MANAGER_VETO, cx); } else { jsval idval; JSString *str; if (JS_IdToValue(cx, id, &idval) && (str = JS_ValueToString(cx, idval))) { JS_ReportError(cx, "Permission denied to access property '%hs' from a non-chrome context", JS_GetStringChars(str)); } } return JS_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 void getUTF8StringArgument(JSContext *cx, JSObject *obj, PRUint16 argNum, uintN argc, jsval *argv, nsCString& aRetval) { if (argc <= argNum || !JSVAL_IS_STRING(argv[argNum])) { JS_ReportError(cx, "String argument expected"); aRetval.Truncate(); return; } /* * We don't want to use JS_ValueToString because we want to be able * to have an object to represent a target in subsequent versions. */ JSString *str = JSVAL_TO_STRING(argv[argNum]); if (!str) { aRetval.Truncate(); return; } PRUnichar *data = (PRUnichar*)JS_GetStringChars(str); CopyUTF16toUTF8(data, aRetval); }
static JSBool perlarray_proplen_set( JSContext *cx, JSObject *obj, jsval id, jsval *vp ) { dTHX; SV *ref = (SV *)JS_GetPrivate(cx, obj); AV *av = (AV *)SvRV(ref); int nlen = JSVAL_TO_INT(*vp); PJS_ARRAY_CHECK if(nlen < 0) { JS_ReportError(cx, "Illegal value for 'length'"); return JS_FALSE; } av_fill(av, nlen - 1); 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); }
// return default json bool js_FlatUtil_default4js(JSContext *cx, uint32_t argc, jsval *vp) { JS::CallArgs args = JS::CallArgsFromVp(argc, vp); bool ok = true; if (2 == argc) { std::string arg0; ok &= jsval_to_std_string(cx, args.get(0), &arg0); JSB_PRECONDITION2(ok, cx, false, "js_FlatUtil_default4js : Error processing arguments"); std::string arg1; ok &= jsval_to_std_string(cx, args.get(1), &arg1); JSB_PRECONDITION2(ok, cx, false, "js_FlatUtil_default4js : Error processing arguments"); auto ret = FlatUtil::default4js(arg0, arg1); jsval jsret = JSVAL_NULL; jsret = std_string_to_jsval(cx, ret); args.rval().set(jsret); return true; } JS_ReportError(cx, "js_FlatUtil_default4js : wrong number of arguments"); return false; }
static JSBool jsReadln( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) { *rval = JSVAL_FALSE ; jsPort_t *port = (jsPort_t *)JS_GetInstancePrivate( cx, obj, &jsSerialPortClass_, NULL ); if( port ) { std::string s ; if( port->readln( s ) ) { JSString *const sData = JS_NewStringCopyN( cx, s.c_str(), s.size() ); if( sData ) { *rval = STRING_TO_JSVAL( sData ); } else JS_ReportError( cx, "allocating serialPort line" ); } } return JS_TRUE ; }
JSBool Core_sleep (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { jsdouble time; JS_BeginRequest(cx); if (argc != 1 || !JS_ConvertArguments(cx, argc, argv, "d", &time)) { JS_ReportError(cx, "Not enough parameters."); return JS_FALSE; } JS_EndRequest(cx); if (time < 1) { usleep(time * 1000000); } else { sleep(time); } return JS_TRUE; }
static JSBool js_json_stringify(JSContext *cx, JSObject* pThis, uintN argc, jsval *vp, jsval* rval) { JSObject *obj; jsval *argv = vp; // Must throw an Error if there isn't a first arg if (!JS_ConvertArguments(cx, argc, argv, "o", &obj)) return JS_FALSE; // Only use objects and arrays as the root for now jsval v = OBJECT_TO_JSVAL(obj); JSBool ok = js_TryJSON(cx, &v); JSType type; if (!(ok && !JSVAL_IS_PRIMITIVE(v) && (type = JS_TypeOfValue(cx, v)) != JSTYPE_FUNCTION && type != JSTYPE_XML)) { JS_ReportError(cx, "Invalid argument."); return JS_FALSE; } JSString *s = JS_NewStringCopyN(cx, "", 0); if (!s) ok = JS_FALSE; if (ok) { jsval sv = STRING_TO_JSVAL(s); StringifyClosure sc; sc.cx = cx; sc.s = &sv; JSAutoTempValueRooter tvr(cx, 1, sc.s); ok = js_Stringify(cx, &v, NULL, &WriteCallback, &sc, 0); *rval = *sc.s; } return ok; }
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_wait_for_value(JSContext *cx, prop_t *root, const char *subname, jsval value, jsval *rval) { prop_courier_t *pc = prop_courier_create_waitable(); prop_sub_t *s; wfv_t wfv; wfv.value = value; wfv.done = 0; s = prop_subscribe(0, PROP_TAG_ROOT, root, PROP_TAG_COURIER, pc, PROP_TAG_CALLBACK, vfw_setval, &wfv, PROP_TAG_NAMESTR, subname, NULL); if(s == NULL) { JS_ReportError(cx, "Unable to subscribe to %s", subname); return JS_FALSE; } *rval = JSVAL_TRUE; while(!wfv.done) { struct prop_notify_queue exp, nor; jsrefcount s = JS_SuspendRequest(cx); prop_courier_wait(pc, &nor, &exp); JS_ResumeRequest(cx, s); prop_notify_dispatch(&exp); prop_notify_dispatch(&nor); } prop_unsubscribe(s); prop_courier_destroy(pc); return JS_TRUE; }
static JSBool rpmseq_call(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; } /* XXX obj is the global object so lookup "this" object. */ JSObject * o = JSVAL_TO_OBJECT(argv[-2]); void * ptr = JS_GetInstancePrivate(cx, o, &rpmseqClass, NULL); #ifdef NOTYET DB_SEQUENCE * seq = ptr; const char *_fn = NULL; const char * _con = NULL; #endif JSBool ok = JS_FALSE; #ifdef NOTYET if (!(ok = JS_ConvertArguments(cx, argc, argv, "s", &_fn))) goto exit; *rval = (seq && _fn && (_con = rpmseqLgetfilecon(seq, _fn)) != NULL) ? STRING_TO_JSVAL(JS_NewStringCopyZ(cx, _con)) : JSVAL_VOID; _con = _free(_con); ok = JS_TRUE; exit: #endif if (_debug) fprintf(stderr, "<== %s(%p,%p,%p[%u],%p) o %p ptr %p\n", __FUNCTION__, cx, obj, argv, (unsigned)argc, &JS_RVAL(cx, vp), o, ptr); return ok; }
bool js_autogentestbindings_SimpleNativeClass_func(JSContext *cx, uint32_t argc, jsval *vp) { jsval *argv = JS_ARGV(cx, vp); bool ok = true; do { if (argc == 1) { int arg0; ok &= jsval_to_int32(cx, argv[0], (int32_t *)&arg0); if (!ok) { ok = true; break; } SimpleNativeClass::func(arg0); return true; } } while (0); do { if (argc == 0) { SimpleNativeClass::func(); return true; } } while (0); do { if (argc == 2) { int arg0; ok &= jsval_to_int32(cx, argv[0], (int32_t *)&arg0); if (!ok) { ok = true; break; } double arg1; ok &= JS::ToNumber( cx, JS::RootedValue(cx, argv[1]), &arg1); if (!ok) { ok = true; break; } SimpleNativeClass::func(arg0, arg1); return true; } } while (0); JS_ReportError(cx, "js_autogentestbindings_SimpleNativeClass_func : wrong number of arguments"); return 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; }
JSBool set_prop(JSContext* jscx, JSObject* jsobj, jsval key, jsval* rval) { Context* pycx = NULL; PyObject* pykey = NULL; PyObject* pyval = NULL; JSBool ret = JS_FALSE; pycx = (Context*) JS_GetContextPrivate(jscx); if(pycx == NULL) { JS_ReportError(jscx, "Failed to get Python context."); goto done; } // Bail if there's no registered global handler. if(pycx->global == NULL) { ret = JS_TRUE; goto done; } pykey = js2py(pycx, key); if(pykey == NULL) goto done; pyval = js2py(pycx, *rval); if(pyval == NULL) goto done; if(PyObject_SetItem(pycx->global, pykey, pyval) < 0) goto done; ret = JS_TRUE; done: Py_XDECREF(pykey); Py_XDECREF(pyval); return ret; }
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; }
static bool js_cocos2dx_CCTableView_setDelegate(JSContext *cx, uint32_t argc, jsval *vp) { JS::CallArgs args = JS::CallArgsFromVp(argc, vp); JS::RootedObject obj(cx, args.thisv().toObjectOrNull()); js_proxy_t *proxy = jsb_get_js_proxy(obj); cocos2d::extension::TableView* cobj = (cocos2d::extension::TableView *)(proxy ? proxy->ptr : NULL); JSB_PRECONDITION2( cobj, cx, false, "Invalid Native Object"); if (argc == 1) { // save the delegate JS::RootedObject jsDelegate(cx, args.get(0).toObjectOrNull()); JSB_TableViewDelegate* nativeDelegate = new (std::nothrow) JSB_TableViewDelegate(); nativeDelegate->setJSDelegate(jsDelegate); JS_SetProperty(cx, obj, "_delegate", args.get(0)); __Dictionary* userDict = static_cast<__Dictionary*>(cobj->getUserObject()); if (NULL == userDict) { userDict = new (std::nothrow) __Dictionary(); cobj->setUserObject(userDict); userDict->release(); } userDict->setObject(nativeDelegate, KEY_TABLEVIEW_DELEGATE); cobj->setDelegate(nativeDelegate); nativeDelegate->release(); args.rval().setUndefined(); return true; } JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 1); return false; }
JSBool GetLastNetErrorMessage(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval) { DWORD dwLastError = NERR_Success; HANDLE hModule = GetModuleHandle(NULL); if(argc < 1 || !JSVAL_IS_NUMBER(*argv)) { JS_ReportError(cx, "Must provide valid error code to GetLastNetErrorMessage"); return JS_FALSE; } JS_BeginRequest(cx); JS_ValueToECMAUint32(cx, *argv, &dwLastError); DWORD dwFormatFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM ; if(dwLastError >= NERR_BASE && dwLastError <= MAX_NERR) { hModule = LoadLibraryEx(TEXT("netmsg.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE); if(hModule != NULL) dwFormatFlags |= FORMAT_MESSAGE_FROM_HMODULE; } LPWSTR buffer = NULL; DWORD size = FormatMessage(dwFormatFlags, hModule, dwLastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&buffer, 0, NULL); if(size == 0) { *rval = JSVAL_FALSE; return JS_TRUE; } JSString * rString = JS_NewUCStringCopyN(cx, (jschar*)buffer, size); *rval = STRING_TO_JSVAL(rString); JS_EndRequest(cx); LocalFree(buffer); return JS_TRUE; }
bool js_cocos2dx_custom_BinaryReadUtil_readUtf(JSContext *cx, uint32_t argc, jsval *vp) { JS::CallArgs args = JS::CallArgsFromVp(argc, vp); bool ok = true; JS::RootedObject obj(cx); BinaryReadUtil* cobj = NULL; obj = args.thisv().toObjectOrNull(); js_proxy_t *proxy = jsb_get_js_proxy(obj); cobj = (BinaryReadUtil *)(proxy ? proxy->ptr : NULL); JSB_PRECONDITION2( cobj, cx, false, "js_cocos2dx_custom_BinaryReadUtil_readUtf : Invalid Native Object"); do { if (argc == 0) { std::string ret = cobj->readUtf(); jsval jsret = JSVAL_NULL; jsret = std_string_to_jsval(cx, ret); args.rval().set(jsret); return true; } } while(0); do { if (argc == 1) { std::string arg0; ok &= jsval_to_std_string(cx, args.get(0), &arg0); if (!ok) { ok = true; break; } bool ret = cobj->readUtf(arg0); jsval jsret = JSVAL_NULL; jsret = BOOLEAN_TO_JSVAL(ret); args.rval().set(jsret); return true; } } while(0); JS_ReportError(cx, "js_cocos2dx_custom_BinaryReadUtil_readUtf : wrong number of arguments"); return false; }
JSBool replaceChild(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval) { JSObject * newChildObj, *refChildObj; nsCOMPtr<nsIDOMNode> newChild, refChild, mNode, outNode; JS_BeginRequest(cx); if(!JS_ConvertArguments(cx, argc, argv, "o o", &newChildObj, &refChildObj)) { JS_ReportError(cx, "Error converting arguments in replaceChild"); JS_EndRequest(cx); return JS_FALSE; } if(!JS_InstanceOf(cx, newChildObj, &lDOMNodeClass, NULL) || !JS_InstanceOf(cx, refChildObj, &lDOMNodeClass, NULL)) { JS_ReportWarning(cx, "Arguments to replaceChild must both be DOMNode objects."); JS_EndRequest(cx); return JS_TRUE; } newChild = (nsIDOMNode*)JS_GetPrivate(cx, newChildObj); refChild = (nsIDOMNode*)JS_GetPrivate(cx, refChildObj); mNode = (nsIDOMNode*)JS_GetPrivate(cx, obj); EnterCriticalSection(&domStateLock); domState = 1; if(mNode->ReplaceChild(newChild, refChild, getter_AddRefs(outNode)) == NS_OK) { JSObject * retObj = JS_NewObject(cx, &lDOMNodeClass, lDOMNodeProto, obj); *rval = OBJECT_TO_JSVAL(retObj); JS_SetPrivate(cx, retObj, outNode); } else *rval = JSVAL_FALSE; LeaveCriticalSection(&domStateLock); JS_EndRequest(cx); return JS_TRUE; }
JSBool js_json_stringify(JSContext *cx, uintN argc, jsval *vp) { JSObject *obj; jsval *argv = vp + 2; // Must throw an Error if there isn't a first arg if (!JS_ConvertArguments(cx, argc, argv, "o", &obj)) return JS_FALSE; // Only use objects and arrays as the root for now *vp = OBJECT_TO_JSVAL(obj); JSBool ok = js_TryJSON(cx, vp); JSType type; if (!ok || JSVAL_IS_PRIMITIVE(*vp) || ((type = JS_TypeOfValue(cx, *vp)) == JSTYPE_FUNCTION || type == JSTYPE_XML)) { JS_ReportError(cx, "Invalid argument"); return JS_FALSE; } JSString *s = JS_NewStringCopyN(cx, "", 0); if (!s) ok = JS_FALSE; if (ok) { jsval vec[2] = {STRING_TO_JSVAL(s), JSVAL_VOID}; StringifyClosure sc(cx, 2, vec); JSAutoTempValueRooter resultTvr(cx, 1, sc.s); ok = js_Stringify(cx, vp, NULL, &WriteCallback, &sc, 0); *vp = *sc.s; } return ok; }