Back out changeset fdaff211cb8f due to orange.

This commit is contained in:
Jason Orendorff 2010-06-16 20:02:53 -05:00
parent e4eacf8d04
commit 07430a1bcd
3 changed files with 112 additions and 132 deletions

View File

@ -184,7 +184,7 @@ JS_ConvertArgumentsVA(JSContext *cx, uintN argc, jsval *argv, const char *format
JSObject *obj;
CHECK_REQUEST(cx);
assertSameCompartment(cx, ValueArray(argv - 2, argc + 2));
ASSERT_SAME_COMPARTMENT(cx, ValueArray(argv - 2, argc + 2));
sp = argv;
required = JS_TRUE;
while ((c = *format++) != '\0') {
@ -346,7 +346,7 @@ JS_ConvertValue(JSContext *cx, jsval v, JSType type, jsval *vp)
jsdouble d, *dp;
CHECK_REQUEST(cx);
assertSameCompartment(cx, v);
ASSERT_SAME_COMPARTMENT(cx, v);
switch (type) {
case JSTYPE_VOID:
*vp = JSVAL_VOID;
@ -395,7 +395,7 @@ JS_PUBLIC_API(JSBool)
JS_ValueToObject(JSContext *cx, jsval v, JSObject **objp)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, v);
ASSERT_SAME_COMPARTMENT(cx, v);
return js_ValueToObject(cx, v, objp);
}
@ -403,7 +403,7 @@ JS_PUBLIC_API(JSFunction *)
JS_ValueToFunction(JSContext *cx, jsval v)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, v);
ASSERT_SAME_COMPARTMENT(cx, v);
return js_ValueToFunction(cx, &v, JSV2F_SEARCH_STACK);
}
@ -411,7 +411,7 @@ JS_PUBLIC_API(JSFunction *)
JS_ValueToConstructor(JSContext *cx, jsval v)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, v);
ASSERT_SAME_COMPARTMENT(cx, v);
return js_ValueToFunction(cx, &v, JSV2F_SEARCH_STACK);
}
@ -419,7 +419,7 @@ JS_PUBLIC_API(JSString *)
JS_ValueToString(JSContext *cx, jsval v)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, v);
ASSERT_SAME_COMPARTMENT(cx, v);
return js_ValueToString(cx, v);
}
@ -427,7 +427,7 @@ JS_PUBLIC_API(JSString *)
JS_ValueToSource(JSContext *cx, jsval v)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, v);
ASSERT_SAME_COMPARTMENT(cx, v);
return js_ValueToSource(cx, v);
}
@ -435,7 +435,7 @@ JS_PUBLIC_API(JSBool)
JS_ValueToNumber(JSContext *cx, jsval v, jsdouble *dp)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, v);
ASSERT_SAME_COMPARTMENT(cx, v);
AutoValueRooter tvr(cx, v);
return ValueToNumber(cx, v, dp);
@ -451,7 +451,7 @@ JS_PUBLIC_API(JSBool)
JS_ValueToECMAInt32(JSContext *cx, jsval v, int32 *ip)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, v);
ASSERT_SAME_COMPARTMENT(cx, v);
AutoValueRooter tvr(cx, v);
return ValueToECMAInt32(cx, v, (int32_t *)ip);
@ -461,7 +461,7 @@ JS_PUBLIC_API(JSBool)
JS_ValueToECMAUint32(JSContext *cx, jsval v, uint32 *ip)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, v);
ASSERT_SAME_COMPARTMENT(cx, v);
AutoValueRooter tvr(cx, v);
return ValueToECMAUint32(cx, v, (uint32_t *)ip);
@ -471,7 +471,7 @@ JS_PUBLIC_API(JSBool)
JS_ValueToInt32(JSContext *cx, jsval v, int32 *ip)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, v);
ASSERT_SAME_COMPARTMENT(cx, v);
AutoValueRooter tvr(cx, v);
return ValueToInt32(cx, v, (int32_t *)ip);
@ -481,7 +481,7 @@ JS_PUBLIC_API(JSBool)
JS_ValueToUint16(JSContext *cx, jsval v, uint16 *ip)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, v);
ASSERT_SAME_COMPARTMENT(cx, v);
AutoValueRooter tvr(cx, v);
return ValueToUint16(cx, v, (uint16_t *)ip);
@ -491,7 +491,7 @@ JS_PUBLIC_API(JSBool)
JS_ValueToBoolean(JSContext *cx, jsval v, JSBool *bp)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, v);
ASSERT_SAME_COMPARTMENT(cx, v);
*bp = js_ValueToBoolean(v);
return JS_TRUE;
}
@ -503,7 +503,7 @@ JS_TypeOfValue(JSContext *cx, jsval v)
JSObject *obj;
CHECK_REQUEST(cx);
assertSameCompartment(cx, v);
ASSERT_SAME_COMPARTMENT(cx, v);
if (JSVAL_IS_OBJECT(v)) {
obj = JSVAL_TO_OBJECT(v);
if (obj)
@ -532,14 +532,14 @@ JS_GetTypeName(JSContext *cx, JSType type)
JS_PUBLIC_API(JSBool)
JS_StrictlyEqual(JSContext *cx, jsval v1, jsval v2)
{
assertSameCompartment(cx, v1, v2);
ASSERT_SAME_COMPARTMENT(cx, v1, v2);
return js_StrictlyEqual(cx, v1, v2);
}
JS_PUBLIC_API(JSBool)
JS_SameValue(JSContext *cx, jsval v1, jsval v2)
{
assertSameCompartment(cx, v1, v2);
ASSERT_SAME_COMPARTMENT(cx, v1, v2);
return js_SameValue(v1, v2, cx);
}
@ -1099,7 +1099,7 @@ JS_PUBLIC_API(void)
JS_SetGlobalObject(JSContext *cx, JSObject *obj)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
cx->globalObject = obj;
}
@ -1216,7 +1216,7 @@ JS_InitStandardClasses(JSContext *cx, JSObject *obj)
JSAtom *atom;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
/* Define a top-level property 'undefined' with the undefined value. */
atom = cx->runtime->atomState.typeAtoms[JSTYPE_VOID];
@ -1414,7 +1414,7 @@ JS_ResolveStandardClass(JSContext *cx, JSObject *obj, jsval id, JSBool *resolved
uintN i;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, id);
ASSERT_SAME_COMPARTMENT(cx, obj, id);
*resolved = JS_FALSE;
rt = cx->runtime;
@ -1515,7 +1515,7 @@ JS_EnumerateStandardClasses(JSContext *cx, JSObject *obj)
uintN i;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
rt = cx->runtime;
/* Check whether we need to bind 'undefined' and define it if so. */
@ -1615,7 +1615,7 @@ JS_EnumerateResolvedStandardClasses(JSContext *cx, JSObject *obj, JSIdArray *ida
JSObjectOp init;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, ida);
ASSERT_SAME_COMPARTMENT(cx, obj, ida);
rt = cx->runtime;
if (ida) {
i = ida->length;
@ -1676,7 +1676,7 @@ JS_PUBLIC_API(JSBool)
JS_GetClassObject(JSContext *cx, JSObject *obj, JSProtoKey key, JSObject **objp)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
return js_GetClassObject(cx, obj, key, objp);
}
@ -1713,7 +1713,7 @@ JS_GetScopeChain(JSContext *cx)
JS_PUBLIC_API(JSObject *)
JS_GetGlobalForObject(JSContext *cx, JSObject *obj)
{
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
return obj->getGlobal();
}
@ -1745,7 +1745,7 @@ JS_GetGlobalForScopeChain(JSContext *cx)
JS_PUBLIC_API(jsval)
JS_ComputeThis(JSContext *cx, jsval *vp)
{
assertSameCompartment(cx, ValueArray(vp, 2));
ASSERT_SAME_COMPARTMENT(cx, ValueArray(vp, 2));
if (!js_ComputeThis(cx, vp + 2))
return JSVAL_NULL;
return vp[1];
@ -2695,7 +2695,7 @@ JS_PUBLIC_API(JSBool)
JS_ValueToId(JSContext *cx, jsval v, jsid *idp)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, v);
ASSERT_SAME_COMPARTMENT(cx, v);
if (JSVAL_IS_INT(v)) {
*idp = INT_JSVAL_TO_JSID(v);
@ -2722,7 +2722,7 @@ JS_IdToValue(JSContext *cx, jsid id, jsval *vp)
{
CHECK_REQUEST(cx);
*vp = ID_TO_VALUE(id);
assertSameCompartment(cx, *vp);
ASSERT_SAME_COMPARTMENT(cx, *vp);
return JS_TRUE;
}
@ -2763,7 +2763,7 @@ JS_InitClass(JSContext *cx, JSObject *obj, JSObject *parent_proto,
JSPropertySpec *static_ps, JSFunctionSpec *static_fs)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, parent_proto);
ASSERT_SAME_COMPARTMENT(cx, obj, parent_proto);
return js_InitClass(cx, obj, parent_proto, clasp, constructor, nargs,
ps, fs, static_ps, static_fs);
}
@ -2788,7 +2788,7 @@ JS_InstanceOf(JSContext *cx, JSObject *obj, JSClass *clasp, jsval *argv)
JSFunction *fun;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
if (obj && obj->getClass() == clasp)
return JS_TRUE;
if (argv) {
@ -2808,21 +2808,21 @@ JS_InstanceOf(JSContext *cx, JSObject *obj, JSClass *clasp, jsval *argv)
JS_PUBLIC_API(JSBool)
JS_HasInstance(JSContext *cx, JSObject *obj, jsval v, JSBool *bp)
{
assertSameCompartment(cx, obj, v);
ASSERT_SAME_COMPARTMENT(cx, obj, v);
return js_HasInstance(cx, obj, v, bp);
}
JS_PUBLIC_API(void *)
JS_GetPrivate(JSContext *cx, JSObject *obj)
{
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
return obj->getPrivate();
}
JS_PUBLIC_API(JSBool)
JS_SetPrivate(JSContext *cx, JSObject *obj, void *data)
{
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
obj->setPrivate(data);
return true;
}
@ -2841,7 +2841,7 @@ JS_GetPrototype(JSContext *cx, JSObject *obj)
JSObject *proto;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
proto = obj->getProto();
/* Beware ref to dead object (we may be called from obj's finalizer). */
@ -2852,14 +2852,14 @@ JS_PUBLIC_API(JSBool)
JS_SetPrototype(JSContext *cx, JSObject *obj, JSObject *proto)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, proto);
ASSERT_SAME_COMPARTMENT(cx, obj, proto);
return js_SetProtoOrParent(cx, obj, JSSLOT_PROTO, proto, JS_FALSE);
}
JS_PUBLIC_API(JSObject *)
JS_GetParent(JSContext *cx, JSObject *obj)
{
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
JSObject *parent = obj->getParent();
/* Beware ref to dead object (we may be called from obj's finalizer). */
@ -2870,7 +2870,7 @@ JS_PUBLIC_API(JSBool)
JS_SetParent(JSContext *cx, JSObject *obj, JSObject *parent)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, parent);
ASSERT_SAME_COMPARTMENT(cx, obj, parent);
return js_SetProtoOrParent(cx, obj, JSSLOT_PARENT, parent, JS_FALSE);
}
@ -2880,7 +2880,7 @@ JS_GetConstructor(JSContext *cx, JSObject *proto)
jsval cval;
CHECK_REQUEST(cx);
assertSameCompartment(cx, proto);
ASSERT_SAME_COMPARTMENT(cx, proto);
{
JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED);
@ -2898,7 +2898,7 @@ JS_GetConstructor(JSContext *cx, JSObject *proto)
JS_PUBLIC_API(JSBool)
JS_GetObjectId(JSContext *cx, JSObject *obj, jsid *idp)
{
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
JS_ASSERT(JSID_IS_OBJECT(obj));
*idp = OBJECT_TO_JSID(obj);
return JS_TRUE;
@ -2920,7 +2920,7 @@ JS_PUBLIC_API(JSObject *)
JS_NewObject(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, proto, parent);
ASSERT_SAME_COMPARTMENT(cx, proto, parent);
if (!clasp)
clasp = &js_ObjectClass; /* default class is Object */
JS_ASSERT(!(clasp->flags & JSCLASS_IS_GLOBAL));
@ -2933,7 +2933,7 @@ JS_PUBLIC_API(JSObject *)
JS_NewObjectWithGivenProto(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, proto, parent);
ASSERT_SAME_COMPARTMENT(cx, proto, parent);
if (!clasp)
clasp = &js_ObjectClass; /* default class is Object */
JS_ASSERT(!(clasp->flags & JSCLASS_IS_GLOBAL));
@ -2944,7 +2944,7 @@ JS_PUBLIC_API(JSBool)
JS_SealObject(JSContext *cx, JSObject *obj, JSBool deep)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
JSScope *scope;
JSIdArray *ida;
@ -3014,7 +3014,7 @@ JS_PUBLIC_API(JSObject *)
JS_ConstructObject(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, proto, parent);
ASSERT_SAME_COMPARTMENT(cx, proto, parent);
if (!clasp)
clasp = &js_ObjectClass; /* default class is Object */
return js_ConstructObject(cx, clasp, proto, parent, 0, NULL);
@ -3025,7 +3025,7 @@ JS_ConstructObjectWithArguments(JSContext *cx, JSClass *clasp, JSObject *proto,
JSObject *parent, uintN argc, jsval *argv)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, proto, parent, ValueArray(argv, argc));
ASSERT_SAME_COMPARTMENT(cx, proto, parent, ValueArray(argv, argc));
if (!clasp)
clasp = &js_ObjectClass; /* default class is Object */
return js_ConstructObject(cx, clasp, proto, parent, argc, argv);
@ -3036,7 +3036,7 @@ LookupPropertyById(JSContext *cx, JSObject *obj, jsid id, uintN flags,
JSObject **objp, JSProperty **propp)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, id);
ASSERT_SAME_COMPARTMENT(cx, obj, id);
JSAutoResolveFlags rf(cx, flags);
id = js_CheckForStringIndex(id);
@ -3115,7 +3115,7 @@ JS_LookupPropertyWithFlagsById(JSContext *cx, JSObject *obj, jsid id, uintN flag
JSProperty *prop;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, id);
ASSERT_SAME_COMPARTMENT(cx, obj, id);
ok = obj->isNative()
? js_LookupPropertyWithFlags(cx, obj, id, flags, objp, &prop) >= 0
: obj->lookupProperty(cx, id, objp, &prop);
@ -3173,7 +3173,7 @@ JS_PUBLIC_API(JSBool)
JS_AlreadyHasOwnPropertyById(JSContext *cx, JSObject *obj, jsid id, JSBool *foundp)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, id);
ASSERT_SAME_COMPARTMENT(cx, obj, id);
if (!obj->isNative()) {
JSObject *obj2;
@ -3223,7 +3223,7 @@ DefinePropertyById(JSContext *cx, JSObject *obj, jsid id, jsval value,
uintN flags, intN tinyid)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, id, value,
ASSERT_SAME_COMPARTMENT(cx, obj, id, value,
(attrs & JSPROP_GETTER)
? JS_FUNC_TO_DATA_PTR(JSObject *, getter)
: NULL,
@ -3319,7 +3319,7 @@ JS_PUBLIC_API(JSBool)
JS_DefineOwnProperty(JSContext *cx, JSObject *obj, jsid id, jsval descriptor, JSBool *bp)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, id, descriptor);
ASSERT_SAME_COMPARTMENT(cx, obj, id, descriptor);
return js_DefineOwnProperty(cx, obj, id, descriptor, bp);
}
@ -3330,7 +3330,7 @@ JS_DefineObject(JSContext *cx, JSObject *obj, const char *name, JSClass *clasp,
JSObject *nobj;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, proto);
ASSERT_SAME_COMPARTMENT(cx, obj, proto);
if (!clasp)
clasp = &js_ObjectClass; /* default class is Object */
nobj = NewObject(cx, clasp, proto, obj);
@ -3386,7 +3386,7 @@ JS_AliasProperty(JSContext *cx, JSObject *obj, const char *name, const char *ali
JSScopeProperty *sprop;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
JSAtom *atom = js_Atomize(cx, name, strlen(name), 0);
if (!atom)
@ -3427,7 +3427,7 @@ JS_AliasElement(JSContext *cx, JSObject *obj, const char *name, jsint alias)
JSBool ok;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
JSAtom *atom = js_Atomize(cx, name, strlen(name), 0);
if (!atom)
@ -3623,7 +3623,7 @@ JS_PUBLIC_API(JSBool)
JS_GetPropertyById(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, id);
ASSERT_SAME_COMPARTMENT(cx, obj, id);
JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED);
return obj->getProperty(cx, id, vp);
}
@ -3652,7 +3652,7 @@ JS_PUBLIC_API(JSBool)
JS_GetMethodById(JSContext *cx, JSObject *obj, jsid id, JSObject **objp, jsval *vp)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, id);
ASSERT_SAME_COMPARTMENT(cx, obj, id);
if (!js_GetMethod(cx, obj, id, JSGET_METHOD_BARRIER, vp))
return JS_FALSE;
if (objp)
@ -3671,7 +3671,7 @@ JS_PUBLIC_API(JSBool)
JS_SetPropertyById(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, id);
ASSERT_SAME_COMPARTMENT(cx, obj, id);
JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED | JSRESOLVE_ASSIGNING);
return obj->setProperty(cx, id, vp);
}
@ -3700,7 +3700,7 @@ JS_PUBLIC_API(JSBool)
JS_DeletePropertyById2(JSContext *cx, JSObject *obj, jsid id, jsval *rval)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, id);
ASSERT_SAME_COMPARTMENT(cx, obj, id);
JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED);
return obj->deleteProperty(cx, id, rval);
}
@ -3750,7 +3750,7 @@ JS_PUBLIC_API(void)
JS_ClearScope(JSContext *cx, JSObject *obj)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
if (obj->map->ops->clear)
obj->map->ops->clear(cx, obj);
@ -3768,7 +3768,7 @@ JS_PUBLIC_API(JSIdArray *)
JS_Enumerate(JSContext *cx, JSObject *obj)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
JSIdArray *ida;
if (!GetPropertyNames(cx, obj, JSITER_OWNONLY, &ida))
@ -3840,7 +3840,7 @@ JS_NewPropertyIterator(JSContext *cx, JSObject *obj)
JSIdArray *ida;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
iterobj = NewObject(cx, &prop_iter_class, NULL, obj);
if (!iterobj)
return NULL;
@ -3881,7 +3881,7 @@ JS_NextProperty(JSContext *cx, JSObject *iterobj, jsid *idp)
JSIdArray *ida;
CHECK_REQUEST(cx);
assertSameCompartment(cx, iterobj);
ASSERT_SAME_COMPARTMENT(cx, iterobj);
i = JSVAL_TO_INT(iterobj->fslots[JSSLOT_ITER_INDEX]);
if (i < 0) {
/* Native case: private data is a property tree node pointer. */
@ -3922,7 +3922,7 @@ JS_PUBLIC_API(JSBool)
JS_GetReservedSlot(JSContext *cx, JSObject *obj, uint32 index, jsval *vp)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
return js_GetReservedSlot(cx, obj, index, vp);
}
@ -3930,7 +3930,7 @@ JS_PUBLIC_API(JSBool)
JS_SetReservedSlot(JSContext *cx, JSObject *obj, uint32 index, jsval v)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, v);
ASSERT_SAME_COMPARTMENT(cx, obj, v);
return js_SetReservedSlot(cx, obj, index, v);
}
@ -3939,14 +3939,14 @@ JS_NewArrayObject(JSContext *cx, jsint length, jsval *vector)
{
CHECK_REQUEST(cx);
/* NB: jsuint cast does ToUint32. */
assertSameCompartment(cx, ValueArray(vector, (jsuint)length));
ASSERT_SAME_COMPARTMENT(cx, ValueArray(vector, (jsuint)length));
return js_NewArrayObject(cx, (jsuint)length, vector);
}
JS_PUBLIC_API(JSBool)
JS_IsArrayObject(JSContext *cx, JSObject *obj)
{
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
return obj->wrappedObject(cx)->isArray();
}
@ -3954,7 +3954,7 @@ JS_PUBLIC_API(JSBool)
JS_GetArrayLength(JSContext *cx, JSObject *obj, jsuint *lengthp)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
return js_GetLengthProperty(cx, obj, lengthp);
}
@ -3962,7 +3962,7 @@ JS_PUBLIC_API(JSBool)
JS_SetArrayLength(JSContext *cx, JSObject *obj, jsuint length)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
return js_SetLengthProperty(cx, obj, length);
}
@ -3970,7 +3970,7 @@ JS_PUBLIC_API(JSBool)
JS_HasArrayLength(JSContext *cx, JSObject *obj, jsuint *lengthp)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
return js_HasLengthProperty(cx, obj, lengthp);
}
@ -3979,7 +3979,7 @@ JS_CheckAccess(JSContext *cx, JSObject *obj, jsid id, JSAccessMode mode,
jsval *vp, uintN *attrsp)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, id);
ASSERT_SAME_COMPARTMENT(cx, obj, id);
return obj->checkAccess(cx, id, mode, vp, attrsp);
}
@ -4041,7 +4041,7 @@ JS_NewFunction(JSContext *cx, JSNative native, uintN nargs, uintN flags,
JSAtom *atom;
CHECK_REQUEST(cx);
assertSameCompartment(cx, parent);
ASSERT_SAME_COMPARTMENT(cx, parent);
if (!name) {
atom = NULL;
@ -4057,7 +4057,7 @@ JS_PUBLIC_API(JSObject *)
JS_CloneFunctionObject(JSContext *cx, JSObject *funobj, JSObject *parent)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, parent); // XXX no funobj for now
ASSERT_SAME_COMPARTMENT(cx, parent); // XXX no funobj for now
if (!parent) {
if (cx->fp)
parent = js_GetScopeChain(cx, cx->fp);
@ -4289,7 +4289,7 @@ JS_DefineFunctions(JSContext *cx, JSObject *obj, JSFunctionSpec *fs)
JSFunction *fun;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
ctor = NULL;
for (; fs->name; fs++) {
flags = fs->flags;
@ -4340,7 +4340,7 @@ JS_DefineFunction(JSContext *cx, JSObject *obj, const char *name, JSNative call,
uintN nargs, uintN attrs)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
JSAtom *atom = js_Atomize(cx, name, strlen(name), 0);
return atom ? js_DefineFunction(cx, obj, atom, call, nargs, attrs) : NULL;
}
@ -4351,7 +4351,7 @@ JS_DefineUCFunction(JSContext *cx, JSObject *obj,
uintN nargs, uintN attrs)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
JSAtom *atom = js_AtomizeChars(cx, name, AUTO_NAMELEN(name, namelen), 0);
return atom ? js_DefineFunction(cx, obj, atom, call, nargs, attrs) : NULL;
}
@ -4385,7 +4385,7 @@ JS_CompileUCScriptForPrincipals(JSContext *cx, JSObject *obj, JSPrincipals *prin
const char *filename, uintN lineno)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, principals);
ASSERT_SAME_COMPARTMENT(cx, obj, principals);
uint32 tcflags = JS_OPTIONS_TO_TCFLAGS(cx) | TCF_NEED_MUTABLE_SCRIPT;
JSScript *script = Compiler::compileScript(cx, obj, NULL, principals, tcflags,
@ -4433,7 +4433,7 @@ JS_BufferIsCompilableUnit(JSContext *cx, JSObject *obj, const char *bytes, size_
JSErrorReporter older;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
chars = js_InflateString(cx, bytes, &length);
if (!chars)
return JS_TRUE;
@ -4473,7 +4473,7 @@ JS_CompileFile(JSContext *cx, JSObject *obj, const char *filename)
JSScript *script;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj);
ASSERT_SAME_COMPARTMENT(cx, obj);
if (!filename || strcmp(filename, "-") == 0) {
fp = stdin;
} else {
@ -4502,7 +4502,7 @@ JS_CompileFileHandleForPrincipals(JSContext *cx, JSObject *obj, const char *file
JSScript *script;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, principals);
ASSERT_SAME_COMPARTMENT(cx, obj, principals);
tcflags = JS_OPTIONS_TO_TCFLAGS(cx);
script = Compiler::compileScript(cx, obj, NULL, principals, tcflags,
NULL, 0, file, filename, 1);
@ -4522,7 +4522,7 @@ JS_NewScriptObject(JSContext *cx, JSScript *script)
JSObject *obj;
CHECK_REQUEST(cx);
assertSameCompartment(cx, script);
ASSERT_SAME_COMPARTMENT(cx, script);
if (!script)
return NewObject(cx, &js_ScriptClass, NULL, NULL);
@ -4554,7 +4554,7 @@ JS_PUBLIC_API(void)
JS_DestroyScript(JSContext *cx, JSScript *script)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, script);
ASSERT_SAME_COMPARTMENT(cx, script);
js_DestroyScript(cx, script);
}
@ -4570,7 +4570,7 @@ JS_CompileUCFunctionForPrincipals(JSContext *cx, JSObject *obj,
uintN i;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, principals);
ASSERT_SAME_COMPARTMENT(cx, obj, principals);
if (!name) {
funAtom = NULL;
} else {
@ -4676,7 +4676,7 @@ JS_DecompileScript(JSContext *cx, JSScript *script, const char *name, uintN inde
JSString *str;
CHECK_REQUEST(cx);
assertSameCompartment(cx, script);
ASSERT_SAME_COMPARTMENT(cx, script);
jp = js_NewPrinter(cx, name, NULL,
indent & ~JS_DONT_PRETTY_PRINT,
!(indent & JS_DONT_PRETTY_PRINT),
@ -4695,7 +4695,7 @@ JS_PUBLIC_API(JSString *)
JS_DecompileFunction(JSContext *cx, JSFunction *fun, uintN indent)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, fun);
ASSERT_SAME_COMPARTMENT(cx, fun);
return js_DecompileToString(cx, "JS_DecompileFunction", fun,
indent & ~JS_DONT_PRETTY_PRINT,
!(indent & JS_DONT_PRETTY_PRINT),
@ -4706,7 +4706,7 @@ JS_PUBLIC_API(JSString *)
JS_DecompileFunctionBody(JSContext *cx, JSFunction *fun, uintN indent)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, fun);
ASSERT_SAME_COMPARTMENT(cx, fun);
return js_DecompileToString(cx, "JS_DecompileFunctionBody", fun,
indent & ~JS_DONT_PRETTY_PRINT,
!(indent & JS_DONT_PRETTY_PRINT),
@ -4719,7 +4719,7 @@ JS_ExecuteScript(JSContext *cx, JSObject *obj, JSScript *script, jsval *rval)
JSBool ok;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, script);
ASSERT_SAME_COMPARTMENT(cx, obj, script);
ok = js_Execute(cx, obj, script, NULL, 0, rval);
LAST_FRAME_CHECKS(cx, ok);
return ok;
@ -4788,7 +4788,7 @@ JS_CallFunction(JSContext *cx, JSObject *obj, JSFunction *fun, uintN argc, jsval
JSBool ok;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, fun, ValueArray(argv, argc));
ASSERT_SAME_COMPARTMENT(cx, obj, fun, ValueArray(argv, argc));
ok = js_InternalCall(cx, obj, OBJECT_TO_JSVAL(FUN_OBJECT(fun)), argc, argv,
rval);
LAST_FRAME_CHECKS(cx, ok);
@ -4800,7 +4800,7 @@ JS_CallFunctionName(JSContext *cx, JSObject *obj, const char *name, uintN argc,
jsval *rval)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, ValueArray(argv, argc));
ASSERT_SAME_COMPARTMENT(cx, obj, ValueArray(argv, argc));
AutoValueRooter tvr(cx);
JSAtom *atom = js_Atomize(cx, name, strlen(name), 0);
@ -4818,7 +4818,7 @@ JS_CallFunctionValue(JSContext *cx, JSObject *obj, jsval fval, uintN argc, jsval
JSBool ok;
CHECK_REQUEST(cx);
assertSameCompartment(cx, obj, fval, ValueArray(argv, argc));
ASSERT_SAME_COMPARTMENT(cx, obj, fval, ValueArray(argv, argc));
ok = js_InternalCall(cx, obj, fval, argc, argv, rval);
LAST_FRAME_CHECKS(cx, ok);
return ok;
@ -4828,7 +4828,7 @@ JS_PUBLIC_API(JSObject *)
JS_New(JSContext *cx, JSObject *ctor, uintN argc, jsval *argv)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, ctor, ValueArray(argv, argc));
ASSERT_SAME_COMPARTMENT(cx, ctor, ValueArray(argv, argc));
// This is not a simple variation of JS_CallFunctionValue because JSOP_NEW
// is not a simple variation of JSOP_CALL. We have to determine what class
@ -5104,14 +5104,14 @@ JS_GetStringLength(JSString *str)
JS_PUBLIC_API(const char *)
JS_GetStringBytesZ(JSContext *cx, JSString *str)
{
assertSameCompartment(cx, str);
ASSERT_SAME_COMPARTMENT(cx, str);
return js_GetStringBytes(cx, str);
}
JS_PUBLIC_API(const jschar *)
JS_GetStringCharsZ(JSContext *cx, JSString *str)
{
assertSameCompartment(cx, str);
ASSERT_SAME_COMPARTMENT(cx, str);
return js_UndependString(cx, str);
}
@ -5197,7 +5197,7 @@ JS_Stringify(JSContext *cx, jsval *vp, JSObject *replacer, jsval space,
JSONWriteCallback callback, void *data)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, replacer, space);
ASSERT_SAME_COMPARTMENT(cx, replacer, space);
JSCharBuffer cb(cx);
if (!js_Stringify(cx, vp, replacer, space, cb))
return false;
@ -5208,7 +5208,7 @@ JS_PUBLIC_API(JSBool)
JS_TryJSON(JSContext *cx, jsval *vp)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, *vp);
ASSERT_SAME_COMPARTMENT(cx, *vp);
return js_TryJSON(cx, vp);
}
@ -5230,7 +5230,7 @@ JS_PUBLIC_API(JSBool)
JS_FinishJSONParse(JSContext *cx, JSONParser *jp, jsval reviver)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, reviver);
ASSERT_SAME_COMPARTMENT(cx, reviver);
return js_FinishJSONParse(cx, jp, reviver);
}
@ -5392,7 +5392,7 @@ JS_SetRegExpInput(JSContext *cx, JSString *input, JSBool multiline)
JSRegExpStatics *res;
CHECK_REQUEST(cx);
assertSameCompartment(cx, input);
ASSERT_SAME_COMPARTMENT(cx, input);
/* No locking required, cx is thread-private and input must be live. */
res = &cx->regExpStatics;
@ -5453,7 +5453,7 @@ JS_PUBLIC_API(void)
JS_SetPendingException(JSContext *cx, jsval v)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, v);
ASSERT_SAME_COMPARTMENT(cx, v);
cx->throwing = JS_TRUE;
cx->exception = v;
}
@ -5525,7 +5525,7 @@ JS_DropExceptionState(JSContext *cx, JSExceptionState *state)
CHECK_REQUEST(cx);
if (state) {
if (state->throwing && JSVAL_IS_GCTHING(state->exception)) {
assertSameCompartment(cx, state->exception);
ASSERT_SAME_COMPARTMENT(cx, state->exception);
JS_RemoveValueRoot(cx, &state->exception);
}
cx->free(state);
@ -5536,7 +5536,7 @@ JS_PUBLIC_API(JSErrorReport *)
JS_ErrorFromException(JSContext *cx, jsval v)
{
CHECK_REQUEST(cx);
assertSameCompartment(cx, v);
ASSERT_SAME_COMPARTMENT(cx, v);
return js_ErrorFromException(cx, v);
}

View File

@ -193,14 +193,14 @@ class AutoNamespaces : protected AutoGCRooter {
};
#ifdef DEBUG
class CompartmentChecker
class MixingChecker
{
private:
JSContext *context;
JSCompartment *compartment;
public:
explicit CompartmentChecker(JSContext *cx) : context(cx), compartment(cx->compartment) {
explicit MixingChecker(JSContext *cx) : context(cx), compartment(cx->compartment) {
VOUCH_DOES_NOT_REQUIRE_STACK();
check(cx->fp ? JS_GetGlobalForScopeChain(cx) : cx->globalObject);
}
@ -255,10 +255,10 @@ class CompartmentChecker
#define START_ASSERT_SAME_COMPARTMENT() \
if (cx->runtime->gcRunning) \
return; \
CompartmentChecker c(cx)
MixingChecker c(cx)
template <class T1> inline void
assertSameCompartment(JSContext *cx, T1 t1)
ASSERT_SAME_COMPARTMENT(JSContext *cx, T1 t1)
{
#ifdef DEBUG
START_ASSERT_SAME_COMPARTMENT();
@ -267,7 +267,7 @@ assertSameCompartment(JSContext *cx, T1 t1)
}
template <class T1, class T2> inline void
assertSameCompartment(JSContext *cx, T1 t1, T2 t2)
ASSERT_SAME_COMPARTMENT(JSContext *cx, T1 t1, T2 t2)
{
#ifdef DEBUG
START_ASSERT_SAME_COMPARTMENT();
@ -277,7 +277,7 @@ assertSameCompartment(JSContext *cx, T1 t1, T2 t2)
}
template <class T1, class T2, class T3> inline void
assertSameCompartment(JSContext *cx, T1 t1, T2 t2, T3 t3)
ASSERT_SAME_COMPARTMENT(JSContext *cx, T1 t1, T2 t2, T3 t3)
{
#ifdef DEBUG
START_ASSERT_SAME_COMPARTMENT();
@ -288,7 +288,7 @@ assertSameCompartment(JSContext *cx, T1 t1, T2 t2, T3 t3)
}
template <class T1, class T2, class T3, class T4> inline void
assertSameCompartment(JSContext *cx, T1 t1, T2 t2, T3 t3, T4 t4)
ASSERT_SAME_COMPARTMENT(JSContext *cx, T1 t1, T2 t2, T3 t3, T4 t4)
{
#ifdef DEBUG
START_ASSERT_SAME_COMPARTMENT();
@ -300,7 +300,7 @@ assertSameCompartment(JSContext *cx, T1 t1, T2 t2, T3 t3, T4 t4)
}
template <class T1, class T2, class T3, class T4, class T5> inline void
assertSameCompartment(JSContext *cx, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
ASSERT_SAME_COMPARTMENT(JSContext *cx, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
{
#ifdef DEBUG
START_ASSERT_SAME_COMPARTMENT();
@ -317,37 +317,37 @@ assertSameCompartment(JSContext *cx, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5)
inline JSBool
callJSNative(JSContext *cx, JSNative native, JSObject *thisobj, uintN argc, jsval *argv, jsval *rval)
{
assertSameCompartment(cx, thisobj, ValueArray(argv, argc));
ASSERT_SAME_COMPARTMENT(cx, thisobj, ValueArray(argv, argc));
JSBool ok = native(cx, thisobj, argc, argv, rval);
if (ok)
assertSameCompartment(cx, *rval);
ASSERT_SAME_COMPARTMENT(cx, *rval);
return ok;
}
inline JSBool
callJSFastNative(JSContext *cx, JSFastNative native, uintN argc, jsval *vp)
{
assertSameCompartment(cx, ValueArray(vp, argc + 2));
ASSERT_SAME_COMPARTMENT(cx, ValueArray(vp, argc + 2));
JSBool ok = native(cx, argc, vp);
if (ok)
assertSameCompartment(cx, vp[0]);
ASSERT_SAME_COMPARTMENT(cx, vp[0]);
return ok;
}
inline JSBool
callJSPropertyOp(JSContext *cx, JSPropertyOp op, JSObject *obj, jsval idval, jsval *vp)
{
assertSameCompartment(cx, obj, idval, *vp);
ASSERT_SAME_COMPARTMENT(cx, obj, idval, *vp);
JSBool ok = op(cx, obj, idval, vp);
if (ok)
assertSameCompartment(cx, obj, *vp);
ASSERT_SAME_COMPARTMENT(cx, obj, *vp);
return ok;
}
inline JSBool
callJSPropertyOpSetter(JSContext *cx, JSPropertyOp op, JSObject *obj, jsval idval, jsval *vp)
{
assertSameCompartment(cx, obj, idval, *vp);
ASSERT_SAME_COMPARTMENT(cx, obj, idval, *vp);
return op(cx, obj, idval, vp);
}

View File

@ -6293,29 +6293,9 @@ js_ReportGetterOnlyAssignment(JSContext *cx)
}
JSCompartment *
JSObject::getCompartment(JSContext *cx)
{
JSObject::getCompartment(JSContext *cx) {
JSObject *obj = getGlobal();
JSClass *cls = obj->getClass();
if (!(cls->flags & JSCLASS_IS_GLOBAL)) {
// The magic AnyName object is runtime-wide.
if (cls == &js_AnyNameClass)
return cx->runtime->defaultCompartment;
// The magic function namespace object is runtime-wide.
if (cls == &js_NamespaceClass.base &&
obj->getNameURI() == ATOM_KEY(cx->runtime->atomState.lazy.functionNamespaceURIAtom)) {
return cx->runtime->defaultCompartment;
}
// Compile-time Function, Block, and RegExp objects are not parented.
if (cls == &js_FunctionClass || cls == &js_BlockClass || cls == &js_RegExpClass) {
// This is a bogus answer, but it'll do for now.
return cx->runtime->defaultCompartment;
}
JS_NOT_REACHED("non-global object at end of scope chain");
}
JS_ASSERT(obj->getClass()->flags & JSCLASS_IS_GLOBAL);
jsval v = obj->getReservedSlot(JSRESERVED_GLOBAL_COMPARTMENT);
return (JSCompartment *) JSVAL_TO_PRIVATE(v);
}