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]

Reply via email to