Bug 1451658 - Remove JS_STATIC_CLASS in favour of MOZ_STATIC_CLASS. r=mystor
authorNicholas Nethercote <nnethercote@mozilla.com>
Tue, 10 Apr 2018 17:31:55 +1000
changeset 466310 8c6cf2dab2ae40186b897b75f87ec0d5a9118626
parent 466309 4ce7bb67eab97e5061d4b3bc84927de859f15bd5
child 466311 67758cf8ae6ff6413f1d24923f5db8b2d5fb369c
push id9165
push userasasaki@mozilla.com
push dateThu, 26 Apr 2018 21:04:54 +0000
treeherdermozilla-beta@064c3804de2e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmystor
bugs1451658
milestone61.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1451658 - Remove JS_STATIC_CLASS in favour of MOZ_STATIC_CLASS. r=mystor MozReview-Commit-ID: B2fynvjOSG7
js/public/Class.h
--- a/js/public/Class.h
+++ b/js/public/Class.h
@@ -4,16 +4,18 @@
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /* JSClass definition and its component types, plus related interfaces. */
 
 #ifndef js_Class_h
 #define js_Class_h
 
+#include "mozilla/Attributes.h"
+
 #include "jstypes.h"
 
 #include "js/CallArgs.h"
 #include "js/Id.h"
 #include "js/TypeDecls.h"
 
 /*
  * A JSClass acts as a vtable for JS objects that allows JSAPI clients to
@@ -606,22 +608,17 @@ typedef void
         MOZ_ASSERT(cOps && cOps->finalize); \
         cOps->finalize(fop, obj); \
     } \
     void doTrace(JSTracer* trc, JSObject* obj) const { \
         MOZ_ASSERT(cOps && cOps->trace); \
         cOps->trace(trc, obj); \
     }
 
-// XXX: MOZ_NONHEAP_CLASS allows objects to be created statically or on the
-// stack. We actually want to ban stack objects too, but that's currently not
-// possible. So we define JS_STATIC_CLASS to make the intention clearer.
-#define JS_STATIC_CLASS MOZ_NONHEAP_CLASS
-
-struct JS_STATIC_CLASS ClassOps
+struct MOZ_STATIC_CLASS ClassOps
 {
     /* Function pointer members (may be null). */
     JSAddPropertyOp     addProperty;
     JSDeletePropertyOp  delProperty;
     JSEnumerateOp       enumerate;
     JSNewEnumerateOp    newEnumerate;
     JSResolveOp         resolve;
     JSMayResolveOp      mayResolve;
@@ -636,17 +633,17 @@ struct JS_STATIC_CLASS ClassOps
 typedef JSObject* (*ClassObjectCreationOp)(JSContext* cx, JSProtoKey key);
 
 /** Callback for custom post-processing after class initialization via ClassSpec. */
 typedef bool (*FinishClassInitOp)(JSContext* cx, JS::HandleObject ctor,
                                   JS::HandleObject proto);
 
 const size_t JSCLASS_CACHED_PROTO_WIDTH = 6;
 
-struct JS_STATIC_CLASS ClassSpec
+struct MOZ_STATIC_CLASS ClassSpec
 {
     ClassObjectCreationOp createConstructor;
     ClassObjectCreationOp createPrototype;
     const JSFunctionSpec* constructorFunctions;
     const JSPropertySpec* constructorProperties;
     const JSFunctionSpec* prototypeFunctions;
     const JSPropertySpec* prototypeProperties;
     FinishClassInitOp finishInit;
@@ -672,17 +669,17 @@ struct JS_STATIC_CLASS ClassSpec
     }
 
     bool shouldDefineConstructor() const {
         MOZ_ASSERT(defined());
         return !(flags & DontDefineConstructor);
     }
 };
 
-struct JS_STATIC_CLASS ClassExtension
+struct MOZ_STATIC_CLASS ClassExtension
 {
     /**
      * If an object is used as a key in a weakmap, it may be desirable for the
      * garbage collector to keep that object around longer than it otherwise
      * would. A common case is when the key is a wrapper around an object in
      * another compartment, and we want to avoid collecting the wrapper (and
      * removing the weakmap entry) as long as the wrapped object is alive. In
      * that case, the wrapped object is returned by the wrapper's
@@ -711,17 +708,17 @@ struct JS_STATIC_CLASS ClassExtension
      * This is used to compute the nursery promotion rate.
      */
     JSObjectMovedOp objectMovedOp;
 };
 
 #define JS_NULL_CLASS_SPEC  nullptr
 #define JS_NULL_CLASS_EXT   nullptr
 
-struct JS_STATIC_CLASS ObjectOps
+struct MOZ_STATIC_CLASS ObjectOps
 {
     LookupPropertyOp lookupProperty;
     DefinePropertyOp defineProperty;
     HasPropertyOp    hasProperty;
     GetPropertyOp    getProperty;
     SetPropertyOp    setProperty;
     GetOwnPropertyOp getOwnPropertyDescriptor;
     DeletePropertyOp deleteProperty;
@@ -732,17 +729,17 @@ struct JS_STATIC_CLASS ObjectOps
 #define JS_NULL_OBJECT_OPS nullptr
 
 } // namespace js
 
 // Classes, objects, and properties.
 
 typedef void (*JSClassInternal)();
 
-struct JS_STATIC_CLASS JSClassOps
+struct MOZ_STATIC_CLASS JSClassOps
 {
     /* Function pointer members (may be null). */
     JSAddPropertyOp     addProperty;
     JSDeletePropertyOp  delProperty;
     JSEnumerateOp       enumerate;
     JSNewEnumerateOp    newEnumerate;
     JSResolveOp         resolve;
     JSMayResolveOp      mayResolve;
@@ -862,17 +859,17 @@ static const uint32_t JSCLASS_CACHED_PRO
                                           & JSCLASS_CACHED_PROTO_MASK))
 
 // Initializer for unused members of statically initialized JSClass structs.
 #define JSCLASS_NO_INTERNAL_MEMBERS     {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}
 #define JSCLASS_NO_OPTIONAL_MEMBERS     0,0,0,0,0,JSCLASS_NO_INTERNAL_MEMBERS
 
 namespace js {
 
-struct JS_STATIC_CLASS Class
+struct MOZ_STATIC_CLASS Class
 {
     JS_CLASS_MEMBERS(js::ClassOps, FreeOp);
     const ClassSpec* spec;
     const ClassExtension* ext;
     const ObjectOps* oOps;
 
     /*
      * Objects of this class aren't native objects. They don't have Shapes that