RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: [email protected] Module: rpm Date: 12-Jul-2017 21:47:19 Branch: rpm-5_4 Handle: 2017071219471900 Modified files: (Branch: rpm-5_4) rpm/js rpmjs45.cpp Log: - rpmjs: create rpmNewGlobalObject(). Summary: Revision Changes Path 1.1.2.11 +106 -5 rpm/js/rpmjs45.cpp ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/js/rpmjs45.cpp ============================================================================ $ cvs diff -u -r1.1.2.10 -r1.1.2.11 rpmjs45.cpp --- rpm/js/rpmjs45.cpp 10 Jul 2017 20:11:22 -0000 1.1.2.10 +++ rpm/js/rpmjs45.cpp 12 Jul 2017 19:47:19 -0000 1.1.2.11 @@ -10,8 +10,10 @@ /*==============================================================*/ #include "shell/OSObject.cpp" /*==============================================================*/ -#define main mozMain +#define main mozMain +#define NewGlobalObject mozNewGlobalObject #include "shell/js.cpp" +#undef NewGlobalObject #undef main /*==============================================================*/ #include "shell/jsoptparse.cpp" @@ -23,7 +25,7 @@ static int rpmjss_nopens; -static int _rpmjss45_debug; +static int _rpmjss45_debug = -1; #define SPEW(_fmt, ...) \ if (_rpmjss45_debug) \ fprintf(stderr, _fmt, __VA_ARGS__) @@ -39,6 +41,104 @@ rpmjss jss = &_jss; /*==============================================================*/ +#include "rpmbf-js.c" + +static JSObject* +rpmNewGlobalObject(JSContext* cx, JS::CompartmentOptions& options, + JSPrincipals* principals) +{ + RootedObject glob(cx, JS_NewGlobalObject(cx, &global_class, principals, + JS::DontFireOnNewGlobalHook, options)); + if (!glob) + return nullptr; + + { + JSAutoCompartment ac(cx, glob); + +#ifndef LAZY_STANDARD_CLASSES + if (!JS_InitStandardClasses(cx, glob)) + return nullptr; +#endif + + bool succeeded; + if (!JS_SetImmutablePrototype(cx, glob, &succeeded)) + return nullptr; + MOZ_ASSERT(succeeded, + "a fresh, unexposed global object is always capable of " + "having its [[Prototype]] be immutable"); + +#ifdef JS_HAS_CTYPES + if (!JS_InitCTypesClass(cx, glob)) + return nullptr; +#endif + + if (!rpmjs_InitBfClass(cx, glob)) + return nullptr; + + if (!JS_InitReflectParse(cx, glob)) + return nullptr; + if (!JS_DefineDebuggerObject(cx, glob)) + return nullptr; + if (!JS::RegisterPerfMeasurement(cx, glob)) + return nullptr; + if (!JS_DefineFunctionsWithHelp(cx, glob, shell_functions) || + !JS_DefineProfilingFunctions(cx, glob)) + { + return nullptr; + } + if (!js::DefineTestingFunctions(cx, glob, fuzzingSafe, disableOOMFunctions)) + return nullptr; + + if (!fuzzingSafe) { + if (!JS_DefineFunctionsWithHelp(cx, glob, fuzzing_unsafe_functions)) + return nullptr; + if (!DefineConsole(cx, glob)) + return nullptr; + } + + if (!DefineOS(cx, glob, fuzzingSafe)) + return nullptr; + + RootedObject performanceObj(cx, JS_NewObject(cx, nullptr)); + if (!performanceObj) + return nullptr; + RootedObject mozMemoryObj(cx, JS_NewObject(cx, nullptr)); + if (!mozMemoryObj) + return nullptr; + RootedObject gcObj(cx, gc::NewMemoryInfoObject(cx)); + if (!gcObj) + return nullptr; + if (!JS_DefineProperty(cx, glob, "performance", performanceObj, JSPROP_ENUMERATE)) + return nullptr; + if (!JS_DefineProperty(cx, performanceObj, "mozMemory", mozMemoryObj, JSPROP_ENUMERATE)) + return nullptr; + if (!JS_DefineProperty(cx, mozMemoryObj, "gc", gcObj, JSPROP_ENUMERATE)) + return nullptr; + + /* Initialize FakeDOMObject. */ + static const js::DOMCallbacks DOMcallbacks = { + InstanceClassHasProtoAtDepth + }; + SetDOMCallbacks(cx->runtime(), &DOMcallbacks); + + RootedObject domProto(cx, JS_InitClass(cx, glob, nullptr, &dom_class, dom_constructor, + 0, dom_props, dom_methods, nullptr, nullptr)); + if (!domProto) + return nullptr; + + /* Initialize FakeDOMObject.prototype */ + InitDOMObject(domProto); + + if (!js::InitModuleClasses(cx, glob)) + return nullptr; + } + + JS_FireOnNewGlobalObject(cx, glob); + + return glob; +} + +/*==============================================================*/ static bool rpmSetRuntimeOptions(JSRuntime* rt, const rpmjss jss) { @@ -462,7 +562,7 @@ RootedObject glob(cx); JS::CompartmentOptions options; options.setVersion(JSVERSION_DEFAULT); - glob = NewGlobalObject(cx, options, _principals); + glob = rpmNewGlobalObject(cx, options, _principals); assert(glob); I->global = glob; @@ -1157,10 +1257,11 @@ rc = mozRun(jss, &result, code, _fn, i); fprintf(stderr, "<== rc(%d): |%s| from |%s|\n", rc, result, code); result = _free(result); - if (!strcasecmp(code, "quit")) + if (!strncasecmp(code, "quit", sizeof("quit")-1)) { + rc = 0; break; + } } - rc = 0; // XXX mozFini(jss); @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository [email protected]
