static JSBool InitAndSealCTypesClass(JSContext* cx, JSObject* global) { // Init the ctypes object. if (!JS_InitCTypesClass(cx, global)) return false; // Set callbacks for charset conversion and such. jsval ctypes; if (!JS_GetProperty(cx, global, "ctypes", &ctypes)) return false; JS_SetCTypesCallbacks(JSVAL_TO_OBJECT(ctypes), &sCallbacks); // Seal up Object, Function, Array and Error and their prototypes. (This // single object instance is shared amongst everyone who imports the ctypes // module.) if (!SealObjectAndPrototype(cx, global, "Object") || !SealObjectAndPrototype(cx, global, "Function") || !SealObjectAndPrototype(cx, global, "Array") || !SealObjectAndPrototype(cx, global, "Error")) return false; // Finally, seal the global object, for good measure. (But not recursively; // this breaks things.) return JS_FreezeObject(cx, global); }
static bool InitAndSealCTypesClass(JSContext* cx, JS::Handle<JSObject*> global) { // Init the ctypes object. if (!JS_InitCTypesClass(cx, global)) return false; // Set callbacks for charset conversion and such. JS::Rooted<JS::Value> ctypes(cx); if (!JS_GetProperty(cx, global, "ctypes", &ctypes)) return false; JS_SetCTypesCallbacks(ctypes.toObjectOrNull(), &sCallbacks); // Seal up Object, Function, Array and Error and their prototypes. (This // single object instance is shared amongst everyone who imports the ctypes // module.) if (!SealObjectAndPrototype(cx, global, "Object") || !SealObjectAndPrototype(cx, global, "Function") || !SealObjectAndPrototype(cx, global, "Array") || !SealObjectAndPrototype(cx, global, "Error")) return false; return true; }
bool DefineChromeWorkerFunctions(JSContext* aCx, JSObject* aGlobal) { #ifdef BUILD_CTYPES jsval ctypes; if (!JS_InitCTypesClass(aCx, aGlobal) || !JS_GetProperty(aCx, aGlobal, "ctypes", &ctypes) || !JS_SetCTypesCallbacks(aCx, JSVAL_TO_OBJECT(ctypes), &gCTypesCallbacks)) { return false; } #endif return true; }
bool JetpackChild::Init(base::ProcessHandle aParentProcessHandle, MessageLoop* aIOLoop, IPC::Channel* aChannel) { if (!Open(aChannel, aParentProcessHandle, aIOLoop)) return false; if (!(mRuntime = JS_NewRuntime(32L * 1024L * 1024L)) || !(mCx = JS_NewContext(mRuntime, 8192))) return false; JS_SetVersion(mCx, JSVERSION_LATEST); JS_SetOptions(mCx, JS_GetOptions(mCx) | JSOPTION_DONT_REPORT_UNCAUGHT | JSOPTION_ATLINE | JSOPTION_JIT); JS_SetErrorReporter(mCx, ReportError); { JSAutoRequest request(mCx); JS_SetContextPrivate(mCx, this); JSObject* implGlobal = JS_NewCompartmentAndGlobalObject(mCx, const_cast<JSClass*>(&sGlobalClass), NULL); if (!implGlobal) return false; JSAutoEnterCompartment ac; if (!ac.enter(mCx, implGlobal)) return false; jsval ctypes; if (!JS_InitStandardClasses(mCx, implGlobal) || #ifdef BUILD_CTYPES !JS_InitCTypesClass(mCx, implGlobal) || !JS_GetProperty(mCx, implGlobal, "ctypes", &ctypes) || !JS_SetCTypesCallbacks(mCx, JSVAL_TO_OBJECT(ctypes), &sCallbacks) || #endif !JS_DefineFunctions(mCx, implGlobal, const_cast<JSFunctionSpec*>(sImplMethods))) return false; } return true; }
int ExecShellScript(const char * file, int argc, char** argv, JSContext * context, JSObject * env, jsval * vp) { register FILE * filep; register int c; filep = fopen(file, "rb"); if (!filep) { JS_ReportError(context, "%s: %s", file, "No such file or directory"); return 0; } if (getc(filep) == '#' && getc(filep) == '!') { c = 1; while (c != EOF && c != '\n') c = getc(filep); ungetc(c, filep); } else { fclose(filep); JS_ReportError(context, "%s: %s", file, "is not a shell script"); return 0; } JSObject* argsObj = JS_NewArrayObject(context, 0, NULL); JS_DefineProperty(context, env, "parameter", OBJECT_TO_JSVAL(argsObj), NULL, NULL, 0); JSString* str = JS_NewStringCopyZ(context, file); JS_DefineElement(context, argsObj, 0, STRING_TO_JSVAL(str), NULL, NULL, JSPROP_ENUMERATE); int i; for (i = 0; i < argc; i++) { str = JS_NewStringCopyZ(context, argv[i]); JS_DefineElement(context, argsObj, i + 1, STRING_TO_JSVAL(str), NULL, NULL, JSPROP_ENUMERATE); } setenv(SMASH_RESOURCE_PATH_ENV_ID, GET_STRING_DEF(SMASH_RESOURCE_PATH), 0); JS_InitCTypesClass(context, env); JS_DefineFunctions(context, env, shell_functions); JS_DefineProperties(context, env, shell_properties); jsval fun; JS_GetProperty(context, env, "system", &fun); JS_DefineFunction(context, JSVAL_TO_OBJECT(fun), "read", ShellSystemRead, 1, JSPROP_ENUMERATE); JS_DefineFunction(context, JSVAL_TO_OBJECT(fun), "write", ShellSystemWrite, 2, JSPROP_ENUMERATE); jsval fun2; JS_GetProperty(context, env, "echo", &fun2); JS_DefineFunction(context, JSVAL_TO_OBJECT(fun2), "error", ShellEchoError, 1, JSPROP_ENUMERATE); jsval fun3; JS_GetProperty(context, env, "setFileContent", &fun3); JS_DefineFunction(context, JSVAL_TO_OBJECT(fun3), "append", ShellSetFileContentAppend, 2, JSPROP_ENUMERATE); #ifdef SMASH_MAIN_LOADER //ExecScriptFile(context, env, GET_STRING_DEF(SMASH_MAIN_LOADER), NULL); #endif #ifdef SMASH_SHELL_LOADER ExecScriptFile(context, env, GET_STRING_DEF(SMASH_SHELL_LOADER), NULL); #endif JSObject * jsTemp = JS_CompileFileHandle(context, env, file, filep); fclose(filep); if (jsTemp) { return JS_ExecuteScript(context, env, jsTemp, vp); } else { JS_ReportPendingException(context); return 1; } }