mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-14 05:45:37 +00:00
Bug 625484 - rename defaultCompartment r=gal
This commit is contained in:
parent
5f17a91711
commit
4ba60cb773
@ -638,9 +638,9 @@ JSRuntime::init(uint32 maxbytes)
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!(defaultCompartment = new JSCompartment(this)) ||
|
||||
!defaultCompartment->init() ||
|
||||
!compartments.append(defaultCompartment)) {
|
||||
if (!(atomsCompartment = new JSCompartment(this)) ||
|
||||
!atomsCompartment->init() ||
|
||||
!compartments.append(atomsCompartment)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1398,7 +1398,7 @@ private:
|
||||
JSObject *
|
||||
js_InitFunctionAndObjectClasses(JSContext *cx, JSObject *obj)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
JSObject *fun_proto, *obj_proto;
|
||||
|
||||
/* If cx has no global object, use obj so prototypes can be found. */
|
||||
@ -1449,7 +1449,7 @@ js_InitFunctionAndObjectClasses(JSContext *cx, JSObject *obj)
|
||||
JS_PUBLIC_API(JSBool)
|
||||
JS_InitStandardClasses(JSContext *cx, JSObject *obj)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
|
||||
/*
|
||||
@ -2932,7 +2932,7 @@ JS_GetObjectId(JSContext *cx, JSObject *obj, jsid *idp)
|
||||
JS_PUBLIC_API(JSObject *)
|
||||
JS_NewGlobalObject(JSContext *cx, JSClass *clasp)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
JS_ASSERT(clasp->flags & JSCLASS_IS_GLOBAL);
|
||||
JSObject *obj = NewNonFunction<WithProto::Given>(cx, Valueify(clasp), NULL, NULL);
|
||||
@ -2971,7 +2971,7 @@ JS_NewCompartmentAndGlobalObject(JSContext *cx, JSClass *clasp, JSPrincipals *pr
|
||||
JS_PUBLIC_API(JSObject *)
|
||||
JS_NewObject(JSContext *cx, JSClass *jsclasp, JSObject *proto, JSObject *parent)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, proto, parent);
|
||||
|
||||
@ -2993,7 +2993,7 @@ JS_NewObject(JSContext *cx, JSClass *jsclasp, JSObject *proto, JSObject *parent)
|
||||
JS_PUBLIC_API(JSObject *)
|
||||
JS_NewObjectWithGivenProto(JSContext *cx, JSClass *jsclasp, JSObject *proto, JSObject *parent)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, proto, parent);
|
||||
|
||||
@ -3999,7 +3999,7 @@ JS_SetReservedSlot(JSContext *cx, JSObject *obj, uint32 index, jsval v)
|
||||
JS_PUBLIC_API(JSObject *)
|
||||
JS_NewArrayObject(JSContext *cx, jsint length, jsval *vector)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
/* NB: jsuint cast does ToUint32. */
|
||||
assertSameCompartment(cx, JSValueArray(vector, vector ? (jsuint)length : 0));
|
||||
@ -4102,7 +4102,7 @@ JS_PUBLIC_API(JSFunction *)
|
||||
JS_NewFunction(JSContext *cx, JSNative native, uintN nargs, uintN flags,
|
||||
JSObject *parent, const char *name)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
JSAtom *atom;
|
||||
|
||||
CHECK_REQUEST(cx);
|
||||
@ -4123,7 +4123,7 @@ JS_NewFunctionById(JSContext *cx, JSNative native, uintN nargs, uintN flags, JSO
|
||||
jsid id)
|
||||
{
|
||||
JS_ASSERT(JSID_IS_STRING(id));
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, parent);
|
||||
|
||||
@ -4288,7 +4288,7 @@ js_generic_native_method_dispatcher(JSContext *cx, uintN argc, Value *vp)
|
||||
JS_PUBLIC_API(JSBool)
|
||||
JS_DefineFunctions(JSContext *cx, JSObject *obj, JSFunctionSpec *fs)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
uintN flags;
|
||||
JSObject *ctor;
|
||||
JSFunction *fun;
|
||||
@ -4338,7 +4338,7 @@ JS_PUBLIC_API(JSFunction *)
|
||||
JS_DefineFunction(JSContext *cx, JSObject *obj, const char *name, JSNative call,
|
||||
uintN nargs, uintN attrs)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj);
|
||||
JSAtom *atom = js_Atomize(cx, name, strlen(name), 0);
|
||||
@ -4352,7 +4352,7 @@ JS_DefineUCFunction(JSContext *cx, JSObject *obj,
|
||||
const jschar *name, size_t namelen, JSNative call,
|
||||
uintN nargs, uintN attrs)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj);
|
||||
JSAtom *atom = js_AtomizeChars(cx, name, AUTO_NAMELEN(name, namelen), 0);
|
||||
@ -4365,7 +4365,7 @@ extern JS_PUBLIC_API(JSFunction *)
|
||||
JS_DefineFunctionById(JSContext *cx, JSObject *obj, jsid id, JSNative call,
|
||||
uintN nargs, uintN attrs)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj);
|
||||
return js_DefineFunction(cx, obj, id, Valueify(call), nargs, attrs);
|
||||
@ -4409,7 +4409,7 @@ JS_CompileUCScriptForPrincipals(JSContext *cx, JSObject *obj, JSPrincipals *prin
|
||||
const jschar *chars, size_t length,
|
||||
const char *filename, uintN lineno)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj, principals);
|
||||
|
||||
@ -4428,7 +4428,7 @@ JS_PUBLIC_API(JSScript *)
|
||||
JS_CompileUCScript(JSContext *cx, JSObject *obj, const jschar *chars, size_t length,
|
||||
const char *filename, uintN lineno)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
return JS_CompileUCScriptForPrincipals(cx, obj, NULL, chars, length, filename, lineno);
|
||||
}
|
||||
|
||||
@ -4449,7 +4449,7 @@ JS_CompileScriptForPrincipals(JSContext *cx, JSObject *obj,
|
||||
const char *bytes, size_t length,
|
||||
const char *filename, uintN lineno)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
|
||||
jschar *chars = js_InflateString(cx, bytes, &length);
|
||||
@ -4464,7 +4464,7 @@ JS_PUBLIC_API(JSScript *)
|
||||
JS_CompileScript(JSContext *cx, JSObject *obj, const char *bytes, size_t length,
|
||||
const char *filename, uintN lineno)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
return JS_CompileScriptForPrincipals(cx, obj, NULL, bytes, length, filename, lineno);
|
||||
}
|
||||
|
||||
@ -4576,7 +4576,7 @@ CompileFileHelper(JSContext *cx, JSObject *obj, JSPrincipals *principals, uint32
|
||||
JS_PUBLIC_API(JSScript *)
|
||||
JS_CompileFile(JSContext *cx, JSObject *obj, const char *filename)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
FILE *fp;
|
||||
uint32 tcflags;
|
||||
JSScript *script;
|
||||
@ -4611,7 +4611,7 @@ JS_PUBLIC_API(JSScript *)
|
||||
JS_CompileFileHandleForPrincipals(JSContext *cx, JSObject *obj, const char *filename, FILE *file,
|
||||
JSPrincipals *principals)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
uint32 tcflags;
|
||||
JSScript *script;
|
||||
|
||||
@ -4639,14 +4639,14 @@ JS_CompileFileHandleForPrincipalsVersion(JSContext *cx, JSObject *obj, const cha
|
||||
JS_PUBLIC_API(JSScript *)
|
||||
JS_CompileFileHandle(JSContext *cx, JSObject *obj, const char *filename, FILE *file)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
return JS_CompileFileHandleForPrincipals(cx, obj, filename, file, NULL);
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JSObject *)
|
||||
JS_NewScriptObject(JSContext *cx, JSScript *script)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, script);
|
||||
if (!script)
|
||||
@ -4710,7 +4710,7 @@ JS_CompileUCFunctionForPrincipals(JSContext *cx, JSObject *obj,
|
||||
const jschar *chars, size_t length,
|
||||
const char *filename, uintN lineno)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
JSFunction *fun;
|
||||
JSAtom *funAtom, *argAtom;
|
||||
uintN i;
|
||||
@ -4786,7 +4786,7 @@ JS_CompileUCFunction(JSContext *cx, JSObject *obj, const char *name,
|
||||
const jschar *chars, size_t length,
|
||||
const char *filename, uintN lineno)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
return JS_CompileUCFunctionForPrincipals(cx, obj, NULL, name, nargs, argnames,
|
||||
chars, length, filename, lineno);
|
||||
}
|
||||
@ -4798,7 +4798,7 @@ JS_CompileFunctionForPrincipals(JSContext *cx, JSObject *obj,
|
||||
const char *bytes, size_t length,
|
||||
const char *filename, uintN lineno)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
jschar *chars = js_InflateString(cx, bytes, &length);
|
||||
if (!chars)
|
||||
return NULL;
|
||||
@ -4815,7 +4815,7 @@ JS_CompileFunction(JSContext *cx, JSObject *obj, const char *name,
|
||||
const char *bytes, size_t length,
|
||||
const char *filename, uintN lineno)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
return JS_CompileFunctionForPrincipals(cx, obj, NULL, name, nargs, argnames, bytes, length,
|
||||
filename, lineno);
|
||||
}
|
||||
@ -4823,7 +4823,7 @@ JS_CompileFunction(JSContext *cx, JSObject *obj, const char *name,
|
||||
JS_PUBLIC_API(JSString *)
|
||||
JS_DecompileScript(JSContext *cx, JSScript *script, const char *name, uintN indent)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
JSPrinter *jp;
|
||||
JSString *str;
|
||||
|
||||
@ -4849,7 +4849,7 @@ JS_DecompileScript(JSContext *cx, JSScript *script, const char *name, uintN inde
|
||||
JS_PUBLIC_API(JSString *)
|
||||
JS_DecompileFunction(JSContext *cx, JSFunction *fun, uintN indent)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, fun);
|
||||
return js_DecompileToString(cx, "JS_DecompileFunction", fun,
|
||||
@ -4861,7 +4861,7 @@ JS_DecompileFunction(JSContext *cx, JSFunction *fun, uintN indent)
|
||||
JS_PUBLIC_API(JSString *)
|
||||
JS_DecompileFunctionBody(JSContext *cx, JSFunction *fun, uintN indent)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, fun);
|
||||
return js_DecompileToString(cx, "JS_DecompileFunctionBody", fun,
|
||||
@ -4873,7 +4873,7 @@ JS_DecompileFunctionBody(JSContext *cx, JSFunction *fun, uintN indent)
|
||||
JS_PUBLIC_API(JSBool)
|
||||
JS_ExecuteScript(JSContext *cx, JSObject *obj, JSScript *script, jsval *rval)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
JSBool ok;
|
||||
|
||||
CHECK_REQUEST(cx);
|
||||
@ -4913,7 +4913,7 @@ JS_EvaluateUCScriptForPrincipals(JSContext *cx, JSObject *obj,
|
||||
const char *filename, uintN lineno,
|
||||
jsval *rval)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
JSScript *script;
|
||||
JSBool ok;
|
||||
|
||||
@ -4937,7 +4937,7 @@ JS_PUBLIC_API(JSBool)
|
||||
JS_EvaluateUCScript(JSContext *cx, JSObject *obj, const jschar *chars, uintN length,
|
||||
const char *filename, uintN lineno, jsval *rval)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
return JS_EvaluateUCScriptForPrincipals(cx, obj, NULL, chars, length, filename, lineno, rval);
|
||||
}
|
||||
|
||||
@ -4947,7 +4947,7 @@ JS_EvaluateScriptForPrincipals(JSContext *cx, JSObject *obj, JSPrincipals *princ
|
||||
const char *bytes, uintN nbytes,
|
||||
const char *filename, uintN lineno, jsval *rval)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
size_t length = nbytes;
|
||||
jschar *chars = js_InflateString(cx, bytes, &length);
|
||||
if (!chars)
|
||||
@ -4972,7 +4972,7 @@ JS_PUBLIC_API(JSBool)
|
||||
JS_EvaluateScript(JSContext *cx, JSObject *obj, const char *bytes, uintN nbytes,
|
||||
const char *filename, uintN lineno, jsval *rval)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
return JS_EvaluateScriptForPrincipals(cx, obj, NULL, bytes, nbytes, filename, lineno, rval);
|
||||
}
|
||||
|
||||
@ -4980,7 +4980,7 @@ JS_PUBLIC_API(JSBool)
|
||||
JS_CallFunction(JSContext *cx, JSObject *obj, JSFunction *fun, uintN argc, jsval *argv,
|
||||
jsval *rval)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
JSBool ok;
|
||||
|
||||
CHECK_REQUEST(cx);
|
||||
@ -4994,7 +4994,7 @@ JS_PUBLIC_API(JSBool)
|
||||
JS_CallFunctionName(JSContext *cx, JSObject *obj, const char *name, uintN argc, jsval *argv,
|
||||
jsval *rval)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj, JSValueArray(argv, argc));
|
||||
|
||||
@ -5011,7 +5011,7 @@ JS_PUBLIC_API(JSBool)
|
||||
JS_CallFunctionValue(JSContext *cx, JSObject *obj, jsval fval, uintN argc, jsval *argv,
|
||||
jsval *rval)
|
||||
{
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->defaultCompartment);
|
||||
JS_THREADSAFE_ASSERT(cx->compartment != cx->runtime->atomsCompartment);
|
||||
JSBool ok;
|
||||
|
||||
CHECK_REQUEST(cx);
|
||||
|
@ -480,7 +480,7 @@ js_AtomizeString(JSContext *cx, JSString *strArg, uintN flags)
|
||||
JSAtomState *state = &cx->runtime->atomState;
|
||||
AtomSet &atoms = state->atoms;
|
||||
|
||||
AutoLockDefaultCompartment lock(cx);
|
||||
AutoLockAtomsCompartment lock(cx);
|
||||
AtomSet::AddPtr p = atoms.lookupForAdd(str);
|
||||
|
||||
/* Hashing the string should have flattened it if it was a rope. */
|
||||
@ -495,7 +495,7 @@ js_AtomizeString(JSContext *cx, JSString *strArg, uintN flags)
|
||||
* compartment.
|
||||
*/
|
||||
bool needNewString = !!(flags & ATOM_TMPSTR) ||
|
||||
str->asCell()->compartment() != cx->runtime->defaultCompartment;
|
||||
str->asCell()->compartment() != cx->runtime->atomsCompartment;
|
||||
|
||||
/*
|
||||
* Unless str is already comes from the default compartment and flat,
|
||||
@ -509,7 +509,7 @@ js_AtomizeString(JSContext *cx, JSString *strArg, uintN flags)
|
||||
atoms.add(p, StringToInitialAtomEntry(key));
|
||||
} else {
|
||||
if (needNewString) {
|
||||
SwitchToCompartment sc(cx, cx->runtime->defaultCompartment);
|
||||
SwitchToCompartment sc(cx, cx->runtime->atomsCompartment);
|
||||
if (flags & ATOM_NOCOPY) {
|
||||
key = js_NewString(cx, const_cast<jschar *>(str->flatChars()), length);
|
||||
if (!key)
|
||||
|
@ -1007,9 +1007,9 @@ typedef js::Vector<JSCompartment *, 0, js::SystemAllocPolicy> WrapperVector;
|
||||
|
||||
struct JSRuntime {
|
||||
/* Default compartment. */
|
||||
JSCompartment *defaultCompartment;
|
||||
JSCompartment *atomsCompartment;
|
||||
#ifdef JS_THREADSAFE
|
||||
bool defaultCompartmentIsLocked;
|
||||
bool atomsCompartmentIsLocked;
|
||||
#endif
|
||||
|
||||
/* List of compartments (protected by the GC lock). */
|
||||
@ -2630,49 +2630,49 @@ class AutoUnlockGC {
|
||||
~AutoUnlockGC() { JS_LOCK_GC(rt); }
|
||||
};
|
||||
|
||||
class AutoLockDefaultCompartment {
|
||||
class AutoLockAtomsCompartment {
|
||||
private:
|
||||
JSContext *cx;
|
||||
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
|
||||
|
||||
public:
|
||||
AutoLockDefaultCompartment(JSContext *cx
|
||||
AutoLockAtomsCompartment(JSContext *cx
|
||||
JS_GUARD_OBJECT_NOTIFIER_PARAM)
|
||||
: cx(cx)
|
||||
{
|
||||
JS_GUARD_OBJECT_NOTIFIER_INIT;
|
||||
JS_LOCK(cx, &cx->runtime->atomState.lock);
|
||||
#ifdef JS_THREADSAFE
|
||||
cx->runtime->defaultCompartmentIsLocked = true;
|
||||
cx->runtime->atomsCompartmentIsLocked = true;
|
||||
#endif
|
||||
}
|
||||
~AutoLockDefaultCompartment() {
|
||||
~AutoLockAtomsCompartment() {
|
||||
#ifdef JS_THREADSAFE
|
||||
cx->runtime->defaultCompartmentIsLocked = false;
|
||||
cx->runtime->atomsCompartmentIsLocked = false;
|
||||
#endif
|
||||
JS_UNLOCK(cx, &cx->runtime->atomState.lock);
|
||||
}
|
||||
};
|
||||
|
||||
class AutoUnlockDefaultCompartment {
|
||||
class AutoUnlockAtomsCompartment {
|
||||
JSContext *cx;
|
||||
JS_DECL_USE_GUARD_OBJECT_NOTIFIER
|
||||
|
||||
public:
|
||||
AutoUnlockDefaultCompartment(JSContext *cx
|
||||
AutoUnlockAtomsCompartment(JSContext *cx
|
||||
JS_GUARD_OBJECT_NOTIFIER_PARAM)
|
||||
: cx(cx)
|
||||
{
|
||||
JS_GUARD_OBJECT_NOTIFIER_INIT;
|
||||
#ifdef JS_THREADSAFE
|
||||
cx->runtime->defaultCompartmentIsLocked = false;
|
||||
cx->runtime->atomsCompartmentIsLocked = false;
|
||||
#endif
|
||||
JS_UNLOCK(cx, &cx->runtime->atomState.lock);
|
||||
}
|
||||
~AutoUnlockDefaultCompartment() {
|
||||
~AutoUnlockAtomsCompartment() {
|
||||
JS_LOCK(cx, &cx->runtime->atomState.lock);
|
||||
#ifdef JS_THREADSAFE
|
||||
cx->runtime->defaultCompartmentIsLocked = true;
|
||||
cx->runtime->atomsCompartmentIsLocked = true;
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
@ -543,14 +543,14 @@ class CompartmentChecker
|
||||
|
||||
/* Note: should only be used when neither c1 nor c2 may be the default compartment. */
|
||||
static void check(JSCompartment *c1, JSCompartment *c2) {
|
||||
JS_ASSERT(c1 != c1->rt->defaultCompartment);
|
||||
JS_ASSERT(c2 != c2->rt->defaultCompartment);
|
||||
JS_ASSERT(c1 != c1->rt->atomsCompartment);
|
||||
JS_ASSERT(c2 != c2->rt->atomsCompartment);
|
||||
if (c1 != c2)
|
||||
fail(c1, c2);
|
||||
}
|
||||
|
||||
void check(JSCompartment *c) {
|
||||
if (c && c != context->runtime->defaultCompartment) {
|
||||
if (c && c != context->runtime->atomsCompartment) {
|
||||
if (!compartment)
|
||||
compartment = c;
|
||||
else if (c != compartment)
|
||||
|
@ -169,7 +169,7 @@ JSCompartment::wrap(JSContext *cx, Value *vp)
|
||||
|
||||
/* If the string is an atom, we don't have to copy. */
|
||||
if (str->isAtomized()) {
|
||||
JS_ASSERT(str->asCell()->compartment() == cx->runtime->defaultCompartment);
|
||||
JS_ASSERT(str->asCell()->compartment() == cx->runtime->atomsCompartment);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -560,7 +560,7 @@ js_InitGC(JSRuntime *rt, uint32 maxbytes)
|
||||
|
||||
rt->gcTriggerFactor = uint32(100.0f * GC_HEAP_GROWTH_FACTOR);
|
||||
|
||||
rt->defaultCompartment->setGCLastBytes(8192);
|
||||
rt->atomsCompartment->setGCLastBytes(8192);
|
||||
|
||||
/*
|
||||
* The assigned value prevents GC from running when GC memory is too low
|
||||
@ -854,14 +854,14 @@ js_FinishGC(JSRuntime *rt)
|
||||
js_DumpGCStats(rt, stdout);
|
||||
#endif
|
||||
|
||||
/* Delete all remaining Compartments. Ideally only the defaultCompartment should be left. */
|
||||
/* Delete all remaining Compartments. Ideally only the atomsCompartment should be left. */
|
||||
for (JSCompartment **c = rt->compartments.begin(); c != rt->compartments.end(); ++c) {
|
||||
JSCompartment *comp = *c;
|
||||
comp->finishArenaLists();
|
||||
delete comp;
|
||||
}
|
||||
rt->compartments.clear();
|
||||
rt->defaultCompartment = NULL;
|
||||
rt->atomsCompartment = NULL;
|
||||
|
||||
for (GCChunkSet::Range r(rt->gcChunkSet.all()); !r.empty(); r.popFront())
|
||||
ReleaseGCChunk(rt, r.front());
|
||||
@ -1027,7 +1027,7 @@ JSRuntime::setGCTriggerFactor(uint32 factor)
|
||||
for (JSCompartment **c = compartments.begin(); c != compartments.end(); ++c) {
|
||||
(*c)->setGCLastBytes(gcLastBytes);
|
||||
}
|
||||
defaultCompartment->setGCLastBytes(gcLastBytes);
|
||||
atomsCompartment->setGCLastBytes(gcLastBytes);
|
||||
}
|
||||
|
||||
void
|
||||
@ -1108,9 +1108,9 @@ RunLastDitchGC(JSContext *cx)
|
||||
JSRuntime *rt = cx->runtime;
|
||||
METER(rt->gcStats.lastditch++);
|
||||
#ifdef JS_THREADSAFE
|
||||
Conditionally<AutoUnlockDefaultCompartment>
|
||||
unlockDefaultCompartmenIf(cx->compartment == rt->defaultCompartment &&
|
||||
rt->defaultCompartmentIsLocked, cx);
|
||||
Conditionally<AutoUnlockAtomsCompartment>
|
||||
unlockAtomsCompartmenIf(cx->compartment == rt->atomsCompartment &&
|
||||
rt->atomsCompartmentIsLocked, cx);
|
||||
#endif
|
||||
/* The last ditch GC preserves all atoms. */
|
||||
AutoKeepAtoms keep(rt);
|
||||
@ -1794,7 +1794,7 @@ TriggerCompartmentGC(JSCompartment *comp)
|
||||
}
|
||||
#endif
|
||||
|
||||
if (rt->gcMode != JSGC_MODE_COMPARTMENT || comp == rt->defaultCompartment) {
|
||||
if (rt->gcMode != JSGC_MODE_COMPARTMENT || comp == rt->atomsCompartment) {
|
||||
/* We can't do a compartmental GC of the default compartment. */
|
||||
TriggerGC(rt);
|
||||
return;
|
||||
@ -2192,8 +2192,8 @@ SweepCompartments(JSContext *cx, JSGCInvocationKind gckind)
|
||||
JSCompartment **end = rt->compartments.end();
|
||||
JSCompartment **write = read;
|
||||
|
||||
/* Delete defaultCompartment only during runtime shutdown */
|
||||
rt->defaultCompartment->marked = true;
|
||||
/* Delete atomsCompartment only during runtime shutdown */
|
||||
rt->atomsCompartment->marked = true;
|
||||
|
||||
while (read < end) {
|
||||
JSCompartment *compartment = (*read++);
|
||||
|
@ -112,7 +112,7 @@ NewFinalizableGCThing(JSContext *cx, unsigned thingKind)
|
||||
{
|
||||
JS_ASSERT(thingKind < js::gc::FINALIZE_LIMIT);
|
||||
#ifdef JS_THREADSAFE
|
||||
JS_ASSERT_IF((cx->compartment == cx->runtime->defaultCompartment),
|
||||
JS_ASSERT_IF((cx->compartment == cx->runtime->atomsCompartment),
|
||||
(thingKind == js::gc::FINALIZE_STRING) ||
|
||||
(thingKind == js::gc::FINALIZE_SHORT_STRING));
|
||||
#endif
|
||||
@ -413,10 +413,10 @@ NonRopeTypedMarker(JSRuntime *rt, JSString *str)
|
||||
|
||||
/*
|
||||
* If we perform single-compartment GC don't mark Strings outside the current compartment.
|
||||
* Dependent Strings are not shared between compartments and they can't be in the defaultCompartment.
|
||||
* Dependent Strings are not shared between compartments and they can't be in the atomsCompartment.
|
||||
*/
|
||||
if (str->asCell()->compartment() != rt->gcCurrentCompartment) {
|
||||
JS_ASSERT(str->asCell()->compartment() == rt->defaultCompartment);
|
||||
JS_ASSERT(str->asCell()->compartment() == rt->atomsCompartment);
|
||||
break;
|
||||
}
|
||||
if (!str->asCell()->markIfUnmarked())
|
||||
@ -460,7 +460,7 @@ TypedMarker(JSTracer *trc, JSString *str)
|
||||
*/
|
||||
JSString *parent = NULL;
|
||||
first_visit_node: {
|
||||
JS_ASSERT(strComp == str->asCell()->compartment() || str->asCell()->compartment() == rt->defaultCompartment);
|
||||
JS_ASSERT(strComp == str->asCell()->compartment() || str->asCell()->compartment() == rt->atomsCompartment);
|
||||
JS_ASSERT(!JSString::isStatic(str));
|
||||
if (!str->asCell()->markIfUnmarked())
|
||||
goto finish_node;
|
||||
@ -474,7 +474,7 @@ TypedMarker(JSTracer *trc, JSString *str)
|
||||
}
|
||||
JS_ASSERT_IF(!JSString::isStatic(left),
|
||||
strComp == left->asCell()->compartment()
|
||||
|| left->asCell()->compartment() == rt->defaultCompartment);
|
||||
|| left->asCell()->compartment() == rt->atomsCompartment);
|
||||
NonRopeTypedMarker(rt, left);
|
||||
}
|
||||
visit_right_child: {
|
||||
@ -488,7 +488,7 @@ TypedMarker(JSTracer *trc, JSString *str)
|
||||
}
|
||||
JS_ASSERT_IF(!JSString::isStatic(right),
|
||||
strComp == right->asCell()->compartment()
|
||||
|| right->asCell()->compartment() == rt->defaultCompartment);
|
||||
|| right->asCell()->compartment() == rt->atomsCompartment);
|
||||
NonRopeTypedMarker(rt, right);
|
||||
}
|
||||
finish_node: {
|
||||
|
@ -279,8 +279,8 @@ DumpArenaStats(JSGCArenaStats *stp, FILE *fp)
|
||||
void
|
||||
DumpCompartmentStats(JSCompartment *comp, FILE *fp)
|
||||
{
|
||||
if (comp->rt->defaultCompartment == comp)
|
||||
fprintf(fp, "\n**** DefaultCompartment Allocation Statistics: %p ****\n\n", (void *) comp);
|
||||
if (comp->rt->atomsCompartment == comp)
|
||||
fprintf(fp, "\n**** AtomsCompartment Allocation Statistics: %p ****\n\n", (void *) comp);
|
||||
else
|
||||
fprintf(fp, "\n**** Compartment Allocation Statistics: %p ****\n\n", (void *) comp);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user