static JSBool js_conio_gettext(JSContext *cx, uintN argc, jsval *arglist) { jsval *argv=JS_ARGV(cx, arglist); int32 args[4]; unsigned char *result; int i; int size; JSObject *array; jsval val; jsrefcount rc; JS_SET_RVAL(cx, arglist, JSVAL_VOID); /* default values: */ args[0]=1; args[1]=1; args[2]=cio_textinfo.screenwidth; args[3]=cio_textinfo.screenheight; if(argc > 4) return(JS_FALSE); for(i=0; i<(int)argc; i++) { if(!JSVAL_IS_NUMBER(argv[i])) return(JS_FALSE); if(!JS_ValueToInt32(cx, argv[i], &args[i])) return(JS_FALSE); } if(args[0] < 1 || args[1] < 1 || args[2] < 1 || args[3] < 1 || args[0] > args[2] || args[1] > args[3] || args[2] > cio_textinfo.screenwidth || args[3] > cio_textinfo.screenheight) { JS_SET_RVAL(cx, arglist,JSVAL_FALSE); return(JS_TRUE); } size=(args[2]-args[0]+1)*(args[3]-args[1]+1)*2; result=(unsigned char *)malloc(size); if(result==NULL) return(JS_FALSE); rc=JS_SUSPENDREQUEST(cx); if(gettext(args[0], args[1], args[2], args[3], result)) { JS_RESUMEREQUEST(cx, rc); array=JS_NewArrayObject(cx, 0, NULL); for(i=0; i<size; i++) { val=UINT_TO_JSVAL(result[i]); if(!JS_SetElement(cx, array, i, &val)) { free(result); return(JS_FALSE); } } JS_SET_RVAL(cx, arglist,OBJECT_TO_JSVAL(array)); } else { JS_RESUMEREQUEST(cx, rc); JS_SET_RVAL(cx, arglist,JSVAL_NULL); } free(result); return(JS_TRUE); }
bool TelemetryImpl::StatementReflector(SlowSQLEntryType *entry, JSContext *cx, JSObject *obj) { const nsACString &sql = entry->GetKey(); jsval hitCount = UINT_TO_JSVAL(entry->mData.hitCount); jsval totalTime = UINT_TO_JSVAL(entry->mData.totalTime); JSObject *arrayObj = JS_NewArrayObject(cx, 2, nsnull); return (arrayObj && JS_SetElement(cx, arrayObj, 0, &hitCount) && JS_SetElement(cx, arrayObj, 1, &totalTime) && JS_DefineProperty(cx, obj, sql.BeginReading(), OBJECT_TO_JSVAL(arrayObj), NULL, NULL, JSPROP_ENUMERATE)); }
bool TelemetryImpl::ReflectSql(SlowSQLEntryType *entry, JSContext *cx, JSObject *obj) { const nsACString &sql = entry->GetKey(); jsval hitCount = UINT_TO_JSVAL(entry->mData.hitCount); jsval totalTime = UINT_TO_JSVAL(entry->mData.totalTime); JSObject *arrayObj = JS_NewArrayObject(cx, 0, nullptr); if (!arrayObj) { return false; } JS::AutoObjectRooter root(cx, arrayObj); return (JS_SetElement(cx, arrayObj, 0, &hitCount) && JS_SetElement(cx, arrayObj, 1, &totalTime) && JS_DefineProperty(cx, obj, sql.BeginReading(), OBJECT_TO_JSVAL(arrayObj), NULL, NULL, JSPROP_ENUMERATE)); }
static JSBool js_server_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp) { jsval idval; char* ip; jsint tiny; struct in_addr in_addr; js_server_props_t* p; if((p=(js_server_props_t*)JS_GetPrivate(cx,obj))==NULL) return(JS_FALSE); JS_IdToValue(cx, id, &idval); tiny = JSVAL_TO_INT(idval); switch(tiny) { case SERVER_PROP_VER: if(p->version!=NULL) *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,p->version)); break; case SERVER_PROP_VER_DETAIL: if(p->version_detail!=NULL) *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,p->version_detail)); break; case SERVER_PROP_INTERFACE: if(p->interface_addr!=NULL) { in_addr.s_addr=*(p->interface_addr); in_addr.s_addr=htonl(in_addr.s_addr); if((ip=inet_ntoa(in_addr))!=NULL) *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx,ip)); } break; case SERVER_PROP_OPTIONS: if(p->options!=NULL) *vp=UINT_TO_JSVAL(*p->options); break; case SERVER_PROP_CLIENTS: if(p->clients!=NULL) *vp=UINT_TO_JSVAL(*p->clients); break; } return(JS_TRUE); }
PLDHashOperator StatementEnumerator(TelemetryImpl::SlowSQLEntryType *entry, void *arg) { EnumeratorArgs *args = static_cast<EnumeratorArgs *>(arg); const nsACString &sql = entry->GetKey(); jsval hitCount = UINT_TO_JSVAL(entry->mData.hitCount); jsval totalTime = UINT_TO_JSVAL(entry->mData.totalTime); JSObject *arrayObj = JS_NewArrayObject(args->cx, 2, nsnull); if (!arrayObj || !JS_SetElement(args->cx, arrayObj, 0, &hitCount) || !JS_SetElement(args->cx, arrayObj, 1, &totalTime)) return PL_DHASH_STOP; JSBool success = JS_DefineProperty(args->cx, args->statsObj, sql.BeginReading(), OBJECT_TO_JSVAL(arrayObj), NULL, NULL, JSPROP_ENUMERATE); if (!success) return PL_DHASH_STOP; return PL_DHASH_NEXT; }
void ls::Leafsoar::functionTest(){ cocos2d::CCLog("function Test"); js_proxy_t * p = jsb_get_native_proxy(this); jsval retval; JSContext* jc = ScriptingCore::getInstance()->getGlobalContext(); jsval v[] = { v[0] = int32_to_jsval(jc, 32), v[1] =UINT_TO_JSVAL(88) }; ScriptingCore::getInstance()->executeFunctionWithOwner(OBJECT_TO_JSVAL(p->obj), "callback", 2, v, &retval); }
PLDHashOperator StatementEnumerator(TelemetryImpl::SlowSQLEntryType *entry, void *arg) { EnumeratorArgs *args = static_cast<EnumeratorArgs *>(arg); const nsACString &statement = entry->GetKey(); jsval hitCount = UINT_TO_JSVAL(entry->mData.hitCount); jsval totalTime = UINT_TO_JSVAL(entry->mData.totalTime); args->statementIndex++; JSObject *hitsAndTimeObj = JS_NewArrayObject(args->cx, 2, nsnull); if (!hitsAndTimeObj || !JS_SetElement(args->cx, hitsAndTimeObj, 0, &hitCount) || !JS_SetElement(args->cx, hitsAndTimeObj, 1, &totalTime)) return PL_DHASH_STOP; jsid propertyId = INT_TO_JSID(args->statementIndex); JSBool success = JS_DefinePropertyById(args->cx, args->statsObj, INT_TO_JSID(args->statementIndex), OBJECT_TO_JSVAL(hitsAndTimeObj), NULL, NULL, JSPROP_ENUMERATE); if (!success) return PL_DHASH_STOP; JSString *string = JS_NewStringCopyN(args->cx, statement.BeginReading(), statement.Length()); if (!string) return PL_DHASH_STOP; success = JS_DefinePropertyById(args->cx, args->statementsObj, INT_TO_JSID(args->statementIndex), STRING_TO_JSVAL(string), NULL, NULL, JSPROP_ENUMERATE); if (!success) return PL_DHASH_STOP; return PL_DHASH_NEXT; }
jsval uint_to_jsval( JSContext *cx, unsigned int number ) { return UINT_TO_JSVAL(number); }
/** * Define OS-specific constants. * * This function creates or uses JS object |OS.Constants| to store * all its constants. */ bool DefineOSFileConstants(JSContext *cx, JS::Handle<JSObject*> global) { MOZ_ASSERT(gInitialized); if (gPaths == nullptr) { // If an initialization error was ignored, we may end up with // |gInitialized == true| but |gPaths == nullptr|. We cannot // |MOZ_ASSERT| this, as this would kill precompile_cache.js, // so we simply return an error. JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_CANT_OPEN, "OSFileConstants", "initialization has failed"); return false; } JS::Rooted<JSObject*> objOS(cx); if (!(objOS = GetOrCreateObjectProperty(cx, global, "OS"))) { return false; } JS::Rooted<JSObject*> objConstants(cx); if (!(objConstants = GetOrCreateObjectProperty(cx, objOS, "Constants"))) { return false; } // Build OS.Constants.libc JS::Rooted<JSObject*> objLibc(cx); if (!(objLibc = GetOrCreateObjectProperty(cx, objConstants, "libc"))) { return false; } if (!dom::DefineConstants(cx, objLibc, gLibcProperties)) { return false; } #if defined(XP_WIN) // Build OS.Constants.Win JS::Rooted<JSObject*> objWin(cx); if (!(objWin = GetOrCreateObjectProperty(cx, objConstants, "Win"))) { return false; } if (!dom::DefineConstants(cx, objWin, gWinProperties)) { return false; } #endif // defined(XP_WIN) // Build OS.Constants.Sys JS::Rooted<JSObject*> objSys(cx); if (!(objSys = GetOrCreateObjectProperty(cx, objConstants, "Sys"))) { return false; } nsCOMPtr<nsIXULRuntime> runtime = do_GetService(XULRUNTIME_SERVICE_CONTRACTID); if (runtime) { nsAutoCString os; DebugOnly<nsresult> rv = runtime->GetOS(os); MOZ_ASSERT(NS_SUCCEEDED(rv)); JSString* strVersion = JS_NewStringCopyZ(cx, os.get()); if (!strVersion) { return false; } JS::Rooted<JS::Value> valVersion(cx, STRING_TO_JSVAL(strVersion)); if (!JS_SetProperty(cx, objSys, "Name", valVersion)) { return false; } } #if defined(DEBUG) JS::Rooted<JS::Value> valDebug(cx, JSVAL_TRUE); if (!JS_SetProperty(cx, objSys, "DEBUG", valDebug)) { return false; } #endif dom::ConstantSpec umask_cs[] = { { "umask", UINT_TO_JSVAL(gUserUmask) }, PROP_END }; if (!dom::DefineConstants(cx, objSys, umask_cs)) { return false; } // Build OS.Constants.Path JS::Rooted<JSObject*> objPath(cx); if (!(objPath = GetOrCreateObjectProperty(cx, objConstants, "Path"))) { return false; } // Locate libxul // Note that we don't actually provide the full path, only the name of the // library, which is sufficient to link to the library using js-ctypes. #if defined(XP_MACOSX) // Under MacOS X, for some reason, libxul is called simply "XUL", // and we need to provide the full path. nsAutoString libxul; libxul.Append(gPaths->libDir); libxul.Append(NS_LITERAL_STRING("/XUL")); #else // On other platforms, libxul is a library "xul" with regular // library prefix/suffix. nsAutoString libxul; libxul.Append(NS_LITERAL_STRING(DLL_PREFIX)); libxul.Append(NS_LITERAL_STRING("xul")); libxul.Append(NS_LITERAL_STRING(DLL_SUFFIX)); #endif // defined(XP_MACOSX) if (!SetStringProperty(cx, objPath, "libxul", libxul)) { return false; } if (!SetStringProperty(cx, objPath, "libDir", gPaths->libDir)) { return false; } if (!SetStringProperty(cx, objPath, "tmpDir", gPaths->tmpDir)) { return false; } // Configure profileDir only if it is available at this stage if (!gPaths->profileDir.IsVoid() && !SetStringProperty(cx, objPath, "profileDir", gPaths->profileDir)) { return false; } // Configure localProfileDir only if it is available at this stage if (!gPaths->localProfileDir.IsVoid() && !SetStringProperty(cx, objPath, "localProfileDir", gPaths->localProfileDir)) { return false; } if (!SetStringProperty(cx, objPath, "homeDir", gPaths->homeDir)) { return false; } if (!SetStringProperty(cx, objPath, "desktopDir", gPaths->desktopDir)) { return false; } if (!SetStringProperty(cx, objPath, "userApplicationDataDir", gPaths->userApplicationDataDir)) { return false; } #if defined(XP_WIN) if (!SetStringProperty(cx, objPath, "winAppDataDir", gPaths->winAppDataDir)) { return false; } if (!SetStringProperty(cx, objPath, "winStartMenuProgsDir", gPaths->winStartMenuProgsDir)) { return false; } #endif // defined(XP_WIN) #if defined(XP_MACOSX) if (!SetStringProperty(cx, objPath, "macUserLibDir", gPaths->macUserLibDir)) { return false; } if (!SetStringProperty(cx, objPath, "macLocalApplicationsDir", gPaths->macLocalApplicationsDir)) { return false; } #endif // defined(XP_MACOSX) // sqlite3 is linked from different places depending on the platform nsAutoString libsqlite3; #if defined(ANDROID) // On Android, we use the system's libsqlite3 libsqlite3.Append(NS_LITERAL_STRING(DLL_PREFIX)); libsqlite3.Append(NS_LITERAL_STRING("sqlite3")); libsqlite3.Append(NS_LITERAL_STRING(DLL_SUFFIX)); #elif defined(XP_WIN) // On Windows, for some reason, this is part of nss3.dll libsqlite3.Append(NS_LITERAL_STRING(DLL_PREFIX)); libsqlite3.Append(NS_LITERAL_STRING("nss3")); libsqlite3.Append(NS_LITERAL_STRING(DLL_SUFFIX)); #else // On other platforms, we link sqlite3 into libxul libsqlite3 = libxul; #endif // defined(ANDROID) || defined(XP_WIN) if (!SetStringProperty(cx, objPath, "libsqlite3", libsqlite3)) { return false; } return true; }
static JSBool js_get(JSContext *cx, JSObject *obj, jsid id, jsval *vp) { jsval idval; jsint tiny; js_callback_t* cb; if((cb=(js_callback_t*)JS_GetPrivate(cx,obj))==NULL) return(JS_FALSE); JS_IdToValue(cx, id, &idval); tiny = JSVAL_TO_INT(idval); switch(tiny) { case PROP_VERSION: *vp=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,(char *)JS_GetImplementationVersion())); break; case PROP_TERMINATED: if(cb->terminated==NULL) *vp=JSVAL_FALSE; else *vp=BOOLEAN_TO_JSVAL(*cb->terminated); break; case PROP_AUTO_TERMINATE: *vp=BOOLEAN_TO_JSVAL(cb->auto_terminate); break; case PROP_COUNTER: *vp=DOUBLE_TO_JSVAL((double)cb->counter); break; case PROP_TIME_LIMIT: *vp=DOUBLE_TO_JSVAL(cb->limit); break; case PROP_YIELD_INTERVAL: *vp=DOUBLE_TO_JSVAL((double)cb->yield_interval); break; case PROP_GC_INTERVAL: *vp=DOUBLE_TO_JSVAL((double)cb->gc_interval); break; case PROP_GC_ATTEMPTS: *vp=DOUBLE_TO_JSVAL((double)cb->gc_attempts); break; #ifdef jscntxt_h___ case PROP_GC_COUNTER: *vp=UINT_TO_JSVAL(cx->runtime->gcNumber); break; case PROP_GC_LASTBYTES: *vp=DOUBLE_TO_JSVAL((double)cx->runtime->gcLastBytes); break; case PROP_BYTES: *vp=DOUBLE_TO_JSVAL((double)cx->runtime->gcBytes); break; case PROP_MAXBYTES: *vp=DOUBLE_TO_JSVAL((double)cx->runtime->gcMaxBytes); break; #endif case PROP_GLOBAL: *vp = OBJECT_TO_JSVAL(JS_GetGlobalObject(cx)); break; } return(JS_TRUE); }
jsval uint32_to_jsval( JSContext *cx, uint32_t number ) { return UINT_TO_JSVAL(number); }