Bug 752578 - Use mfbt's guard object implementation rather than using our own in all the easy cases. r=Ms2ger

--HG--
extra : rebase_source : ba7faa490cdc5c9b85b5617ff5bb17246b74868e
This commit is contained in:
Jeff Walden 2012-12-27 11:20:22 -06:00
parent ba6c1b8899
commit 99654cf0f4
17 changed files with 255 additions and 192 deletions

View File

@ -8,12 +8,13 @@
#ifndef MapObject_h__
#define MapObject_h__
#include "mozilla/FloatingPoint.h"
#include "mozilla/GuardObjects.h"
#include "jsapi.h"
#include "jscntxt.h"
#include "jsobj.h"
#include "mozilla/FloatingPoint.h"
namespace js {
/*
@ -48,10 +49,10 @@ class HashableValue {
{
public:
explicit AutoRooter(JSContext *cx, HashableValue *v_
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, HASHABLEVALUE), v(v_), skip(cx, v_)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
friend void AutoGCRooter::trace(JSTracer *trc);
@ -60,7 +61,7 @@ class HashableValue {
private:
HashableValue *v;
SkipRoot skip;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
};

View File

@ -10,6 +10,7 @@
#include "mozilla/Attributes.h"
#include "mozilla/DebugOnly.h"
#include "mozilla/GuardObjects.h"
/*
* This data structure supports stacky LIFO allocation (mark/release and
@ -349,13 +350,14 @@ class LifoAllocScope
LifoAlloc *lifoAlloc;
void *mark;
bool shouldRelease;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
public:
explicit LifoAllocScope(LifoAlloc *lifoAlloc
JS_GUARD_OBJECT_NOTIFIER_PARAM)
: lifoAlloc(lifoAlloc), shouldRelease(true) {
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: lifoAlloc(lifoAlloc), shouldRelease(true)
{
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
mark = lifoAlloc->mark();
}

View File

@ -8,10 +8,8 @@
#ifndef jsgc_root_h__
#define jsgc_root_h__
#ifdef __cplusplus
#include "mozilla/TypeTraits.h"
#include "mozilla/GuardObjects.h"
#include "mozilla/TypeTraits.h"
#include "js/Utility.h"
#include "js/TemplateLib.h"
@ -809,10 +807,10 @@ class SkipRoot
public:
template <typename T>
SkipRoot(JSContext *cx, const T *ptr, size_t count = 1
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
{
init(ContextFriendFields::get(cx), ptr, count);
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
~SkipRoot() {
@ -831,14 +829,14 @@ class SkipRoot
public:
template <typename T>
SkipRoot(JSContext *cx, const T *ptr, size_t count = 1
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
#endif /* DEBUG && JSGC_ROOT_ANALYSIS */
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
} /* namespace js */
@ -959,6 +957,4 @@ class CompilerRootNode
ForwardDeclareJS(Script);
ForwardDeclareJS(Function);
#endif /* __cplusplus */
#endif /* jsgc_root_h___ */

View File

@ -11,6 +11,7 @@
#include <string.h>
#include "mozilla/DebugOnly.h"
#include "mozilla/GuardObjects.h"
#include "jsfriendapi.h"
#include "jspubtd.h"
@ -172,39 +173,56 @@ struct Statistics {
double computeMMU(int64_t resolution);
};
struct AutoGCSlice {
struct AutoGCSlice
{
AutoGCSlice(Statistics &stats, int collectedCount, int compartmentCount, gcreason::Reason reason
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: stats(stats)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
stats.beginSlice(collectedCount, compartmentCount, reason);
}
~AutoGCSlice() { stats.endSlice(); }
Statistics &stats;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
struct AutoPhase {
AutoPhase(Statistics &stats, Phase phase JS_GUARD_OBJECT_NOTIFIER_PARAM)
: stats(stats), phase(phase) { JS_GUARD_OBJECT_NOTIFIER_INIT; stats.beginPhase(phase); }
~AutoPhase() { stats.endPhase(phase); }
struct AutoPhase
{
AutoPhase(Statistics &stats, Phase phase
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: stats(stats), phase(phase)
{
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
stats.beginPhase(phase);
}
~AutoPhase() {
stats.endPhase(phase);
}
Statistics &stats;
Phase phase;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
struct AutoSCC {
AutoSCC(Statistics &stats, unsigned scc JS_GUARD_OBJECT_NOTIFIER_PARAM)
: stats(stats), scc(scc) { JS_GUARD_OBJECT_NOTIFIER_INIT; start = stats.beginSCC(); }
~AutoSCC() { stats.endSCC(scc, start); }
struct AutoSCC
{
AutoSCC(Statistics &stats, unsigned scc
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: stats(stats), scc(scc)
{
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
start = stats.beginSCC();
}
~AutoSCC() {
stats.endSCC(scc, start);
}
Statistics &stats;
unsigned scc;
int64_t start;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
} /* namespace gcstats */

View File

@ -8,6 +8,8 @@
#ifndef jsion_ion_alloc_policy_h__
#define jsion_ion_alloc_policy_h__
#include "mozilla/GuardObjects.h"
#include "jscntxt.h"
#include "ds/LifoAlloc.h"
@ -74,10 +76,10 @@ class AutoTempAllocatorRooter : private AutoGCRooter
{
public:
explicit AutoTempAllocatorRooter(JSContext *cx, TempAllocator *temp
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, IONALLOC), temp(temp)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
friend void AutoGCRooter::trace(JSTracer *trc);
@ -85,7 +87,7 @@ class AutoTempAllocatorRooter : private AutoGCRooter
private:
TempAllocator *temp;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
class IonAllocPolicy

View File

@ -10,6 +10,7 @@
*/
#include "mozilla/FloatingPoint.h"
#include "mozilla/GuardObjects.h"
#include "mozilla/ThreadLocal.h"
#include <ctype.h>
@ -3370,19 +3371,21 @@ JS_GetObjectId(JSContext *cx, JSRawObject obj, jsid *idp)
class AutoHoldCompartment {
public:
explicit AutoHoldCompartment(JSCompartment *compartment JS_GUARD_OBJECT_NOTIFIER_PARAM)
explicit AutoHoldCompartment(JSCompartment *compartment
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: holdp(&compartment->hold)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
*holdp = true;
}
~AutoHoldCompartment() {
*holdp = false;
}
private:
bool *holdp;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
JS_PUBLIC_API(JSObject *)
@ -5119,11 +5122,14 @@ JS_DefineFunctionById(JSContext *cx, JSObject *objArg, jsid id_, JSNative call,
return js_DefineFunction(cx, obj, id, call, nargs, attrs);
}
struct AutoLastFrameCheck {
AutoLastFrameCheck(JSContext *cx JS_GUARD_OBJECT_NOTIFIER_PARAM)
: cx(cx) {
struct AutoLastFrameCheck
{
AutoLastFrameCheck(JSContext *cx
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: cx(cx)
{
JS_ASSERT(cx);
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
~AutoLastFrameCheck() {
@ -5135,8 +5141,8 @@ struct AutoLastFrameCheck {
}
private:
JSContext *cx;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
JSContext *cx;
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
/* Use the fastest available getc. */

View File

@ -13,8 +13,9 @@
#include "mozilla/Attributes.h"
#include "mozilla/FloatingPoint.h"
#include "mozilla/StandardInteger.h"
#include "mozilla/GuardObjects.h"
#include "mozilla/RangedPtr.h"
#include "mozilla/StandardInteger.h"
#include "mozilla/ThreadLocal.h"
#include <stddef.h>
@ -1104,17 +1105,17 @@ class AutoValueRooter : private AutoGCRooter
{
public:
explicit AutoValueRooter(JSContext *cx
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, JSVAL), val(NullValue())
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
AutoValueRooter(JSContext *cx, const Value &v
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, JSVAL), val(v)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
/*
@ -1152,16 +1153,17 @@ class AutoValueRooter : private AutoGCRooter
private:
Value val;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
class AutoObjectRooter : private AutoGCRooter {
class AutoObjectRooter : private AutoGCRooter
{
public:
AutoObjectRooter(JSContext *cx, JSObject *obj = NULL
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, OBJECT), obj(obj)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
void setObject(JSObject *obj) {
@ -1180,16 +1182,16 @@ class AutoObjectRooter : private AutoGCRooter {
private:
JSObject *obj;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
class AutoStringRooter : private AutoGCRooter {
public:
AutoStringRooter(JSContext *cx, JSString *str = NULL
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, STRING), str(str)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
void setString(JSString *str) {
@ -1212,16 +1214,16 @@ class AutoStringRooter : private AutoGCRooter {
private:
JSString *str;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
class AutoArrayRooter : private AutoGCRooter {
public:
AutoArrayRooter(JSContext *cx, size_t len, Value *vec
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, len), array(vec), skip(cx, array, len)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
JS_ASSERT(tag >= 0);
}
@ -1240,7 +1242,7 @@ class AutoArrayRooter : private AutoGCRooter {
friend void AutoGCRooter::trace(JSTracer *trc);
private:
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
js::SkipRoot skip;
};
@ -1250,10 +1252,10 @@ class AutoVectorRooter : protected AutoGCRooter
{
public:
explicit AutoVectorRooter(JSContext *cx, ptrdiff_t tag
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, tag), vector(cx), vectorRoot(cx, &vector)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
typedef T ElementType;
@ -1327,7 +1329,7 @@ class AutoVectorRooter : protected AutoGCRooter
/* Prevent overwriting of inline elements in vector. */
js::SkipRoot vectorRoot;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
template<class Key, class Value>
@ -1338,10 +1340,10 @@ class AutoHashMapRooter : protected AutoGCRooter
public:
explicit AutoHashMapRooter(JSContext *cx, ptrdiff_t tag
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, tag), map(cx)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
typedef Key KeyType;
@ -1450,46 +1452,46 @@ class AutoHashMapRooter : protected AutoGCRooter
HashMapImpl map;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
class AutoValueVector : public AutoVectorRooter<Value>
{
public:
explicit AutoValueVector(JSContext *cx
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoVectorRooter<Value>(cx, VALVECTOR)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
class AutoIdVector : public AutoVectorRooter<jsid>
{
public:
explicit AutoIdVector(JSContext *cx
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoVectorRooter<jsid>(cx, IDVECTOR)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
class AutoScriptVector : public AutoVectorRooter<JSScript *>
{
public:
explicit AutoScriptVector(JSContext *cx
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoVectorRooter<JSScript *>(cx, SCRIPTVECTOR)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
class CallReceiver
@ -2558,10 +2560,10 @@ class AutoIdRooter : private AutoGCRooter
{
public:
explicit AutoIdRooter(JSContext *cx, jsid id = INT_TO_JSID(0)
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, ID), id_(id)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
jsid id() {
@ -2576,7 +2578,7 @@ class AutoIdRooter : private AutoGCRooter
private:
jsid id_;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
} /* namespace JS */
@ -3032,11 +3034,14 @@ template <> struct RootMethods<jsid>
} /* namespace js */
class JSAutoRequest {
class JSAutoRequest
{
public:
JSAutoRequest(JSContext *cx JS_GUARD_OBJECT_NOTIFIER_PARAM)
: mContext(cx) {
JS_GUARD_OBJECT_NOTIFIER_INIT;
JSAutoRequest(JSContext *cx
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: mContext(cx)
{
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
JS_BeginRequest(mContext);
}
~JSAutoRequest() {
@ -3045,7 +3050,7 @@ class JSAutoRequest {
protected:
JSContext *mContext;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
#if 0
private:
@ -3054,14 +3059,17 @@ class JSAutoRequest {
#endif
};
class JSAutoCheckRequest {
class JSAutoCheckRequest
{
public:
JSAutoCheckRequest(JSContext *cx JS_GUARD_OBJECT_NOTIFIER_PARAM) {
JSAutoCheckRequest(JSContext *cx
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
{
#if defined JS_THREADSAFE && defined DEBUG
mContext = cx;
JS_ASSERT(JS_IsInRequest(JS_GetRuntime(cx)));
#endif
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
~JSAutoCheckRequest() {
@ -3075,7 +3083,7 @@ class JSAutoCheckRequest {
#if defined JS_THREADSAFE && defined DEBUG
JSContext *mContext;
#endif
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
extern JS_PUBLIC_API(JSContextCallback)
@ -4181,12 +4189,14 @@ JS_DestroyIdArray(JSContext *cx, JSIdArray *ida);
namespace JS {
class AutoIdArray : private AutoGCRooter {
class AutoIdArray : private AutoGCRooter
{
public:
AutoIdArray(JSContext *cx, JSIdArray *ida JS_GUARD_OBJECT_NOTIFIER_PARAM)
AutoIdArray(JSContext *cx, JSIdArray *ida
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, IDARRAY), context(cx), idArray(ida)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
~AutoIdArray() {
if (idArray)
@ -4218,7 +4228,7 @@ class AutoIdArray : private AutoGCRooter {
private:
JSContext *context;
JSIdArray *idArray;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
/* No copy or assignment semantics. */
AutoIdArray(AutoIdArray &ida) MOZ_DELETE;
@ -5537,8 +5547,10 @@ JS_EncodeStringToBuffer(JSString *str, char *buffer, size_t length);
class JSAutoByteString {
public:
JSAutoByteString(JSContext *cx, JSString *str JS_GUARD_OBJECT_NOTIFIER_PARAM)
: mBytes(JS_EncodeString(cx, str)) {
JSAutoByteString(JSContext *cx, JSString *str
JS_GUARD_OBJECT_NOTIFIER_PARAM)
: mBytes(JS_EncodeString(cx, str))
{
JS_ASSERT(cx);
JS_GUARD_OBJECT_NOTIFIER_INIT;
}

View File

@ -11,6 +11,7 @@
#define jscntxt_h___
#include "mozilla/Attributes.h"
#include "mozilla/GuardObjects.h"
#include "mozilla/LinkedList.h"
#include <string.h>
@ -65,14 +66,14 @@ class AutoCycleDetector
bool cyclic;
uint32_t hashsetGenerationAtInit;
ObjectSet::AddPtr hashsetAddPointer;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
public:
AutoCycleDetector(JSContext *cx, JSObject *obj
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: cx(cx), obj(obj), cyclic(true)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
~AutoCycleDetector();
@ -1702,10 +1703,10 @@ struct AutoResolving {
};
AutoResolving(JSContext *cx, HandleObject obj, HandleId id, Kind kind = LOOKUP
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: context(cx), object(obj), id(id), kind(kind), link(cx->resolvingList)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
JS_ASSERT(obj);
cx->resolvingList = this;
}
@ -1727,17 +1728,17 @@ struct AutoResolving {
HandleId id;
Kind const kind;
AutoResolving *const link;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
#if JS_HAS_XML_SUPPORT
class AutoXMLRooter : private AutoGCRooter {
public:
AutoXMLRooter(JSContext *cx, JSXML *xml
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, XML), xml(xml)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
JS_ASSERT(xml);
}
@ -1745,7 +1746,7 @@ class AutoXMLRooter : private AutoGCRooter {
private:
JSXML * const xml;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
#endif /* JS_HAS_XML_SUPPORT */
@ -1792,36 +1793,38 @@ class AutoLockGC
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
class AutoUnlockGC {
class AutoUnlockGC
{
private:
#ifdef JS_THREADSAFE
JSRuntime *rt;
#endif
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
public:
explicit AutoUnlockGC(JSRuntime *rt
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
#ifdef JS_THREADSAFE
: rt(rt)
#endif
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
JS_UNLOCK_GC(rt);
}
~AutoUnlockGC() { JS_LOCK_GC(rt); }
};
class AutoKeepAtoms {
class AutoKeepAtoms
{
JSRuntime *rt;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
public:
explicit AutoKeepAtoms(JSRuntime *rt
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: rt(rt)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
JS_KEEP_ATOMS(rt);
}
~AutoKeepAtoms() { JS_UNKEEP_ATOMS(rt); }
@ -1833,10 +1836,10 @@ class JSAutoResolveFlags
{
public:
JSAutoResolveFlags(JSContext *cx, unsigned flags
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: mContext(cx), mSaved(cx->resolveFlags)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
cx->resolveFlags = flags;
}
@ -1845,7 +1848,7 @@ class JSAutoResolveFlags
private:
JSContext *mContext;
unsigned mSaved;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
namespace js {
@ -2101,39 +2104,39 @@ class AutoObjectVector : public AutoVectorRooter<RawObject>
{
public:
explicit AutoObjectVector(JSContext *cx
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoVectorRooter<RawObject>(cx, OBJVECTOR)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
class AutoStringVector : public AutoVectorRooter<RawString>
{
public:
explicit AutoStringVector(JSContext *cx
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoVectorRooter<RawString>(cx, STRINGVECTOR)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
class AutoShapeVector : public AutoVectorRooter<RawShape>
{
public:
explicit AutoShapeVector(JSContext *cx
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoVectorRooter<RawShape>(cx, SHAPEVECTOR)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
class AutoValueArray : public AutoGCRooter
@ -2144,29 +2147,29 @@ class AutoValueArray : public AutoGCRooter
public:
AutoValueArray(JSContext *cx, RawValue *start, unsigned length
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, VALARRAY), start_(start), length_(length), skip(cx, start, length)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
RawValue *start() { return start_; }
unsigned length() const { return length_; }
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
class AutoObjectObjectHashMap : public AutoHashMapRooter<RawObject, RawObject>
{
public:
explicit AutoObjectObjectHashMap(JSContext *cx
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoHashMapRooter<RawObject, RawObject>(cx, OBJOBJHASHMAP)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
/*

View File

@ -9,6 +9,7 @@
#define jscompartment_h___
#include "mozilla/Attributes.h"
#include "mozilla/GuardObjects.h"
#include "mozilla/Util.h"
#include "jscntxt.h"
@ -578,20 +579,24 @@ JSContext::global() const
namespace js {
class AssertCompartmentUnchanged {
protected:
JSContext * const cx;
JSCompartment * const oldCompartment;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
class AssertCompartmentUnchanged
{
public:
AssertCompartmentUnchanged(JSContext *cx JS_GUARD_OBJECT_NOTIFIER_PARAM)
: cx(cx), oldCompartment(cx->compartment) {
JS_GUARD_OBJECT_NOTIFIER_INIT;
AssertCompartmentUnchanged(JSContext *cx
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: cx(cx), oldCompartment(cx->compartment)
{
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
~AssertCompartmentUnchanged() {
JS_ASSERT(cx->compartment == oldCompartment);
}
protected:
JSContext * const cx;
JSCompartment * const oldCompartment;
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
class AutoCompartment
@ -728,22 +733,22 @@ class AutoWrapperVector : public AutoVectorRooter<WrapperValue>
{
public:
explicit AutoWrapperVector(JSContext *cx
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoVectorRooter<WrapperValue>(cx, WRAPVECTOR)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
class AutoWrapperRooter : private AutoGCRooter {
public:
AutoWrapperRooter(JSContext *cx, WrapperValue v
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, WRAPPER), value(v)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
operator JSObject *() const {
@ -754,7 +759,7 @@ class AutoWrapperRooter : private AutoGCRooter {
private:
WrapperValue value;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
} /* namespace js */

View File

@ -8,8 +8,8 @@
#ifndef jscrashreport_h___
#define jscrashreport_h___
#include "jstypes.h"
#include "jsutil.h"
#include "mozilla/GuardObjects.h"
#include "mozilla/StandardInteger.h"
namespace js {
namespace crash {
@ -24,21 +24,20 @@ void
SaveCrashData(uint64_t tag, void *ptr, size_t size);
template<size_t size, unsigned char marker>
class StackBuffer {
private:
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
volatile unsigned char buffer[size + 4];
class StackBuffer
{
public:
StackBuffer(void *data JS_GUARD_OBJECT_NOTIFIER_PARAM) {
JS_GUARD_OBJECT_NOTIFIER_INIT;
StackBuffer(void *data
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
{
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
buffer[0] = marker;
buffer[1] = '[';
for (size_t i = 0; i < size; i++) {
if (data)
buffer[i + 2] = ((unsigned char *)data)[i];
buffer[i + 2] = static_cast<unsigned char*>(data)[i];
else
buffer[i + 2] = 0;
}
@ -46,6 +45,10 @@ class StackBuffer {
buffer[size - 2] = ']';
buffer[size - 1] = marker;
}
private:
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
volatile unsigned char buffer[size + 4];
};
} /* namespace crash */

View File

@ -9,6 +9,7 @@
#define jsscope_h___
#include "mozilla/Attributes.h"
#include "mozilla/GuardObjects.h"
#include "jsobj.h"
#include "jspropertytree.h"
@ -419,10 +420,10 @@ struct StackBaseShape
{
public:
explicit AutoRooter(JSContext *cx, const StackBaseShape *base_
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, STACKBASESHAPE), base(base_), skip(cx, base_)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
friend void AutoGCRooter::trace(JSTracer *trc);
@ -430,7 +431,7 @@ struct StackBaseShape
private:
const StackBaseShape *base;
SkipRoot skip;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
};
@ -575,10 +576,10 @@ class Shape : public js::gc::Cell
{
public:
explicit AutoRooter(JSContext *cx, Range *r_
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, SHAPERANGE), r(r_), skip(cx, r_)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
friend void AutoGCRooter::trace(JSTracer *trc);
@ -587,7 +588,7 @@ class Shape : public js::gc::Cell
private:
Range *r;
SkipRoot skip;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
};
@ -882,18 +883,18 @@ class AutoRooterGetterSetter
public:
explicit AutoRooterGetterSetter(JSContext *cx, uint8_t attrs,
PropertyOp *pgetter, StrictPropertyOp *psetter
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
{
if (attrs & (JSPROP_GETTER | JSPROP_SETTER))
inner.construct(cx, attrs, pgetter, psetter);
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
friend void AutoGCRooter::trace(JSTracer *trc);
private:
mozilla::Maybe<Inner> inner;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
struct EmptyShape : public js::Shape
@ -1014,10 +1015,10 @@ struct StackShape
{
public:
explicit AutoRooter(JSContext *cx, const StackShape *shape_
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, STACKSHAPE), shape(shape_), skip(cx, shape_)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
friend void AutoGCRooter::trace(JSTracer *trc);
@ -1025,7 +1026,7 @@ struct StackShape
private:
const StackShape *shape;
SkipRoot skip;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
};

View File

@ -12,6 +12,7 @@
#define jsutil_h___
#include "mozilla/Attributes.h"
#include "mozilla/GuardObjects.h"
#include "js/Utility.h"
@ -158,20 +159,21 @@ ImplicitCast(U &u)
template<typename T>
class AutoScopedAssign
{
private:
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
T *addr;
T old;
public:
AutoScopedAssign(T *addr, const T &value JS_GUARD_OBJECT_NOTIFIER_PARAM)
AutoScopedAssign(T *addr, const T &value
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: addr(addr), old(*addr)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
*addr = value;
}
~AutoScopedAssign() { *addr = old; }
private:
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
T *addr;
T old;
};
template <class T>

View File

@ -13,6 +13,8 @@
#ifndef jsworkers_h___
#define jsworkers_h___
#include "mozilla/GuardObjects.h"
#include "jscntxt.h"
#include "jslock.h"
@ -125,14 +127,15 @@ OffThreadCompilationAvailable(JSContext *cx);
class AutoLockWorkerThreadState
{
JSRuntime *rt;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
public:
AutoLockWorkerThreadState(JSRuntime *rt JS_GUARD_OBJECT_NOTIFIER_PARAM)
AutoLockWorkerThreadState(JSRuntime *rt
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: rt(rt)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
#ifdef JS_PARALLEL_COMPILATION
JS_ASSERT(rt->workerThreadState);
rt->workerThreadState->lock();
@ -152,14 +155,15 @@ class AutoLockWorkerThreadState
class AutoUnlockWorkerThreadState
{
JSRuntime *rt;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
public:
AutoUnlockWorkerThreadState(JSRuntime *rt JS_GUARD_OBJECT_NOTIFIER_PARAM)
AutoUnlockWorkerThreadState(JSRuntime *rt
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: rt(rt)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
#ifdef JS_PARALLEL_COMPILATION
JS_ASSERT(rt->workerThreadState);
rt->workerThreadState->unlock();

View File

@ -16,6 +16,7 @@
#include <string.h>
#include "mozilla/DebugOnly.h"
#include "mozilla/GuardObjects.h"
#include "mozilla/Util.h"
#include "jstypes.h"
@ -3268,14 +3269,17 @@ Parse(JSContext *cx, unsigned argc, jsval *vp)
return true;
}
struct FreeOnReturn {
struct FreeOnReturn
{
JSContext *cx;
const char *ptr;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
FreeOnReturn(JSContext *cx, const char *ptr = NULL JS_GUARD_OBJECT_NOTIFIER_PARAM)
: cx(cx), ptr(ptr) {
JS_GUARD_OBJECT_NOTIFIER_INIT;
FreeOnReturn(JSContext *cx, const char *ptr = NULL
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: cx(cx), ptr(ptr)
{
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
void init(const char *ptr) {

View File

@ -9,6 +9,7 @@
#define ObjectImpl_h___
#include "mozilla/Assertions.h"
#include "mozilla/GuardObjects.h"
#include "mozilla/StandardInteger.h"
#include "jsfriendapi.h"
@ -298,10 +299,10 @@ struct PropDesc {
{
public:
explicit AutoRooter(JSContext *cx, PropDesc *pd_
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, PROPDESC), pd(pd_), skip(cx, pd_)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
friend void AutoGCRooter::trace(JSTracer *trc);
@ -309,7 +310,7 @@ struct PropDesc {
private:
PropDesc *pd;
SkipRoot skip;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
};

View File

@ -8,6 +8,8 @@
#ifndef RegExpStatics_h__
#define RegExpStatics_h__
#include "mozilla/GuardObjects.h"
#include "jscntxt.h"
#include "gc/Barrier.h"
@ -149,10 +151,10 @@ class RegExpStatics
{
public:
explicit AutoRooter(JSContext *cx, RegExpStatics *statics_
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoGCRooter(cx, REGEXPSTATICS), statics(statics_), skip(cx, statics_)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
friend void AutoGCRooter::trace(JSTracer *trc);
@ -161,7 +163,7 @@ class RegExpStatics
private:
RegExpStatics *statics;
SkipRoot skip;
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
};

View File

@ -9,6 +9,7 @@
#define String_h_
#include "mozilla/Attributes.h"
#include "mozilla/GuardObjects.h"
#include "jsapi.h"
#include "jsatom.h"
@ -835,17 +836,17 @@ class AutoNameVector : public AutoVectorRooter<PropertyName *>
typedef AutoVectorRooter<PropertyName *> BaseType;
public:
explicit AutoNameVector(JSContext *cx
JS_GUARD_OBJECT_NOTIFIER_PARAM)
MOZ_GUARD_OBJECT_NOTIFIER_PARAM)
: AutoVectorRooter<PropertyName *>(cx, NAMEVECTOR)
{
JS_GUARD_OBJECT_NOTIFIER_INIT;
MOZ_GUARD_OBJECT_NOTIFIER_INIT;
}
HandlePropertyName operator[](size_t i) const {
return HandlePropertyName::fromMarkedLocation(&BaseType::operator[](i));
}
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
};
} /* namespace js */