diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp index b8c70952150..2ad5b8e5658 100644 --- a/js/src/jsapi.cpp +++ b/js/src/jsapi.cpp @@ -184,7 +184,6 @@ JS_ConvertArgumentsVA(JSContext *cx, uintN argc, jsval *argv, const char *format JSObject *obj; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, ValueArray(argv - 2, argc + 2)); sp = argv; required = JS_TRUE; while ((c = *format++) != '\0') { @@ -346,7 +345,6 @@ JS_ConvertValue(JSContext *cx, jsval v, JSType type, jsval *vp) jsdouble d, *dp; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, v); switch (type) { case JSTYPE_VOID: *vp = JSVAL_VOID; @@ -395,7 +393,6 @@ JS_PUBLIC_API(JSBool) JS_ValueToObject(JSContext *cx, jsval v, JSObject **objp) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, v); return js_ValueToObject(cx, v, objp); } @@ -403,7 +400,6 @@ JS_PUBLIC_API(JSFunction *) JS_ValueToFunction(JSContext *cx, jsval v) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, v); return js_ValueToFunction(cx, &v, JSV2F_SEARCH_STACK); } @@ -411,7 +407,6 @@ JS_PUBLIC_API(JSFunction *) JS_ValueToConstructor(JSContext *cx, jsval v) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, v); return js_ValueToFunction(cx, &v, JSV2F_SEARCH_STACK); } @@ -419,7 +414,6 @@ JS_PUBLIC_API(JSString *) JS_ValueToString(JSContext *cx, jsval v) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, v); return js_ValueToString(cx, v); } @@ -427,7 +421,6 @@ JS_PUBLIC_API(JSString *) JS_ValueToSource(JSContext *cx, jsval v) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, v); return js_ValueToSource(cx, v); } @@ -435,7 +428,6 @@ JS_PUBLIC_API(JSBool) JS_ValueToNumber(JSContext *cx, jsval v, jsdouble *dp) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, v); AutoValueRooter tvr(cx, v); return ValueToNumber(cx, v, dp); @@ -451,7 +443,6 @@ JS_PUBLIC_API(JSBool) JS_ValueToECMAInt32(JSContext *cx, jsval v, int32 *ip) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, v); AutoValueRooter tvr(cx, v); return ValueToECMAInt32(cx, v, (int32_t *)ip); @@ -461,7 +452,6 @@ JS_PUBLIC_API(JSBool) JS_ValueToECMAUint32(JSContext *cx, jsval v, uint32 *ip) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, v); AutoValueRooter tvr(cx, v); return ValueToECMAUint32(cx, v, (uint32_t *)ip); @@ -471,7 +461,6 @@ JS_PUBLIC_API(JSBool) JS_ValueToInt32(JSContext *cx, jsval v, int32 *ip) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, v); AutoValueRooter tvr(cx, v); return ValueToInt32(cx, v, (int32_t *)ip); @@ -481,7 +470,6 @@ JS_PUBLIC_API(JSBool) JS_ValueToUint16(JSContext *cx, jsval v, uint16 *ip) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, v); AutoValueRooter tvr(cx, v); return ValueToUint16(cx, v, (uint16_t *)ip); @@ -491,7 +479,6 @@ JS_PUBLIC_API(JSBool) JS_ValueToBoolean(JSContext *cx, jsval v, JSBool *bp) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, v); *bp = js_ValueToBoolean(v); return JS_TRUE; } @@ -503,7 +490,6 @@ JS_TypeOfValue(JSContext *cx, jsval v) JSObject *obj; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, v); if (JSVAL_IS_OBJECT(v)) { obj = JSVAL_TO_OBJECT(v); if (obj) @@ -532,14 +518,12 @@ JS_GetTypeName(JSContext *cx, JSType type) JS_PUBLIC_API(JSBool) JS_StrictlyEqual(JSContext *cx, jsval v1, jsval 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) { - ASSERT_SAME_COMPARTMENT(cx, v1, v2); return js_SameValue(v1, v2, cx); } @@ -1099,7 +1083,6 @@ JS_PUBLIC_API(void) JS_SetGlobalObject(JSContext *cx, JSObject *obj) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); cx->globalObject = obj; } @@ -1216,7 +1199,6 @@ JS_InitStandardClasses(JSContext *cx, JSObject *obj) JSAtom *atom; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); /* Define a top-level property 'undefined' with the undefined value. */ atom = cx->runtime->atomState.typeAtoms[JSTYPE_VOID]; @@ -1414,7 +1396,6 @@ JS_ResolveStandardClass(JSContext *cx, JSObject *obj, jsval id, JSBool *resolved uintN i; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj, id); *resolved = JS_FALSE; rt = cx->runtime; @@ -1515,7 +1496,6 @@ JS_EnumerateStandardClasses(JSContext *cx, JSObject *obj) uintN i; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); rt = cx->runtime; /* Check whether we need to bind 'undefined' and define it if so. */ @@ -1615,7 +1595,6 @@ JS_EnumerateResolvedStandardClasses(JSContext *cx, JSObject *obj, JSIdArray *ida JSObjectOp init; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj, ida); rt = cx->runtime; if (ida) { i = ida->length; @@ -1676,7 +1655,6 @@ JS_PUBLIC_API(JSBool) JS_GetClassObject(JSContext *cx, JSObject *obj, JSProtoKey key, JSObject **objp) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); return js_GetClassObject(cx, obj, key, objp); } @@ -1713,7 +1691,6 @@ JS_GetScopeChain(JSContext *cx) JS_PUBLIC_API(JSObject *) JS_GetGlobalForObject(JSContext *cx, JSObject *obj) { - ASSERT_SAME_COMPARTMENT(cx, obj); return obj->getGlobal(); } @@ -1745,7 +1722,6 @@ JS_GetGlobalForScopeChain(JSContext *cx) JS_PUBLIC_API(jsval) JS_ComputeThis(JSContext *cx, jsval *vp) { - ASSERT_SAME_COMPARTMENT(cx, ValueArray(vp, 2)); if (!js_ComputeThis(cx, vp + 2)) return JSVAL_NULL; return vp[1]; @@ -2695,8 +2671,6 @@ JS_PUBLIC_API(JSBool) JS_ValueToId(JSContext *cx, jsval v, jsid *idp) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, v); - if (JSVAL_IS_INT(v)) { *idp = INT_JSVAL_TO_JSID(v); return JS_TRUE; @@ -2722,7 +2696,6 @@ JS_IdToValue(JSContext *cx, jsid id, jsval *vp) { CHECK_REQUEST(cx); *vp = ID_TO_VALUE(id); - ASSERT_SAME_COMPARTMENT(cx, *vp); return JS_TRUE; } @@ -2763,7 +2736,6 @@ JS_InitClass(JSContext *cx, JSObject *obj, JSObject *parent_proto, JSPropertySpec *static_ps, JSFunctionSpec *static_fs) { CHECK_REQUEST(cx); - 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 +2760,6 @@ JS_InstanceOf(JSContext *cx, JSObject *obj, JSClass *clasp, jsval *argv) JSFunction *fun; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); if (obj && obj->getClass() == clasp) return JS_TRUE; if (argv) { @@ -2808,21 +2779,18 @@ JS_InstanceOf(JSContext *cx, JSObject *obj, JSClass *clasp, jsval *argv) JS_PUBLIC_API(JSBool) JS_HasInstance(JSContext *cx, JSObject *obj, jsval v, JSBool *bp) { - ASSERT_SAME_COMPARTMENT(cx, obj, v); return js_HasInstance(cx, obj, v, bp); } JS_PUBLIC_API(void *) JS_GetPrivate(JSContext *cx, JSObject *obj) { - ASSERT_SAME_COMPARTMENT(cx, obj); return obj->getPrivate(); } JS_PUBLIC_API(JSBool) JS_SetPrivate(JSContext *cx, JSObject *obj, void *data) { - ASSERT_SAME_COMPARTMENT(cx, obj); obj->setPrivate(data); return true; } @@ -2841,7 +2809,6 @@ JS_GetPrototype(JSContext *cx, JSObject *obj) JSObject *proto; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); proto = obj->getProto(); /* Beware ref to dead object (we may be called from obj's finalizer). */ @@ -2852,14 +2819,12 @@ JS_PUBLIC_API(JSBool) JS_SetPrototype(JSContext *cx, JSObject *obj, JSObject *proto) { CHECK_REQUEST(cx); - 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) { - ASSERT_SAME_COMPARTMENT(cx, obj); JSObject *parent = obj->getParent(); /* Beware ref to dead object (we may be called from obj's finalizer). */ @@ -2870,7 +2835,6 @@ JS_PUBLIC_API(JSBool) JS_SetParent(JSContext *cx, JSObject *obj, JSObject *parent) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj, parent); return js_SetProtoOrParent(cx, obj, JSSLOT_PARENT, parent, JS_FALSE); } @@ -2880,7 +2844,6 @@ JS_GetConstructor(JSContext *cx, JSObject *proto) jsval cval; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, proto); { JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED); @@ -2898,7 +2861,6 @@ JS_GetConstructor(JSContext *cx, JSObject *proto) JS_PUBLIC_API(JSBool) JS_GetObjectId(JSContext *cx, JSObject *obj, jsid *idp) { - ASSERT_SAME_COMPARTMENT(cx, obj); JS_ASSERT(JSID_IS_OBJECT(obj)); *idp = OBJECT_TO_JSID(obj); return JS_TRUE; @@ -2920,7 +2882,6 @@ JS_PUBLIC_API(JSObject *) JS_NewObject(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, proto, parent); if (!clasp) clasp = &js_ObjectClass; /* default class is Object */ JS_ASSERT(!(clasp->flags & JSCLASS_IS_GLOBAL)); @@ -2933,7 +2894,6 @@ JS_PUBLIC_API(JSObject *) JS_NewObjectWithGivenProto(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, proto, parent); if (!clasp) clasp = &js_ObjectClass; /* default class is Object */ JS_ASSERT(!(clasp->flags & JSCLASS_IS_GLOBAL)); @@ -2943,9 +2903,6 @@ JS_NewObjectWithGivenProto(JSContext *cx, JSClass *clasp, JSObject *proto, JSObj JS_PUBLIC_API(JSBool) JS_SealObject(JSContext *cx, JSObject *obj, JSBool deep) { - CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); - JSScope *scope; JSIdArray *ida; uint32 nslots, i; @@ -3014,7 +2971,6 @@ JS_PUBLIC_API(JSObject *) JS_ConstructObject(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent) { CHECK_REQUEST(cx); - 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 +2981,6 @@ JS_ConstructObjectWithArguments(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent, uintN argc, jsval *argv) { CHECK_REQUEST(cx); - 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 +2991,6 @@ LookupPropertyById(JSContext *cx, JSObject *obj, jsid id, uintN flags, JSObject **objp, JSProperty **propp) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj, id); JSAutoResolveFlags rf(cx, flags); id = js_CheckForStringIndex(id); @@ -3115,7 +3069,6 @@ JS_LookupPropertyWithFlagsById(JSContext *cx, JSObject *obj, jsid id, uintN flag JSProperty *prop; CHECK_REQUEST(cx); - 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 +3126,6 @@ JS_PUBLIC_API(JSBool) JS_AlreadyHasOwnPropertyById(JSContext *cx, JSObject *obj, jsid id, JSBool *foundp) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj, id); if (!obj->isNative()) { JSObject *obj2; @@ -3223,13 +3175,6 @@ DefinePropertyById(JSContext *cx, JSObject *obj, jsid id, jsval value, uintN flags, intN tinyid) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj, id, value, - (attrs & JSPROP_GETTER) - ? JS_FUNC_TO_DATA_PTR(JSObject *, getter) - : NULL, - (attrs & JSPROP_SETTER) - ? JS_FUNC_TO_DATA_PTR(JSObject *, setter) - : NULL); JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED | JSRESOLVE_DECLARING); if (flags != 0 && obj->isNative()) { @@ -3319,7 +3264,6 @@ JS_PUBLIC_API(JSBool) JS_DefineOwnProperty(JSContext *cx, JSObject *obj, jsid id, jsval descriptor, JSBool *bp) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj, id, descriptor); return js_DefineOwnProperty(cx, obj, id, descriptor, bp); } @@ -3330,7 +3274,6 @@ JS_DefineObject(JSContext *cx, JSObject *obj, const char *name, JSClass *clasp, JSObject *nobj; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj, proto); if (!clasp) clasp = &js_ObjectClass; /* default class is Object */ nobj = NewObject(cx, clasp, proto, obj); @@ -3386,7 +3329,6 @@ JS_AliasProperty(JSContext *cx, JSObject *obj, const char *name, const char *ali JSScopeProperty *sprop; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); JSAtom *atom = js_Atomize(cx, name, strlen(name), 0); if (!atom) @@ -3427,7 +3369,6 @@ JS_AliasElement(JSContext *cx, JSObject *obj, const char *name, jsint alias) JSBool ok; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); JSAtom *atom = js_Atomize(cx, name, strlen(name), 0); if (!atom) @@ -3623,7 +3564,6 @@ JS_PUBLIC_API(JSBool) JS_GetPropertyById(JSContext *cx, JSObject *obj, jsid id, jsval *vp) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj, id); JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED); return obj->getProperty(cx, id, vp); } @@ -3652,7 +3592,6 @@ JS_PUBLIC_API(JSBool) JS_GetMethodById(JSContext *cx, JSObject *obj, jsid id, JSObject **objp, jsval *vp) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj, id); if (!js_GetMethod(cx, obj, id, JSGET_METHOD_BARRIER, vp)) return JS_FALSE; if (objp) @@ -3671,7 +3610,6 @@ JS_PUBLIC_API(JSBool) JS_SetPropertyById(JSContext *cx, JSObject *obj, jsid id, jsval *vp) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj, id); JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED | JSRESOLVE_ASSIGNING); return obj->setProperty(cx, id, vp); } @@ -3700,7 +3638,6 @@ JS_PUBLIC_API(JSBool) JS_DeletePropertyById2(JSContext *cx, JSObject *obj, jsid id, jsval *rval) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj, id); JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED); return obj->deleteProperty(cx, id, rval); } @@ -3750,7 +3687,6 @@ JS_PUBLIC_API(void) JS_ClearScope(JSContext *cx, JSObject *obj) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); if (obj->map->ops->clear) obj->map->ops->clear(cx, obj); @@ -3768,7 +3704,6 @@ JS_PUBLIC_API(JSIdArray *) JS_Enumerate(JSContext *cx, JSObject *obj) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); JSIdArray *ida; if (!GetPropertyNames(cx, obj, JSITER_OWNONLY, &ida)) @@ -3840,7 +3775,6 @@ JS_NewPropertyIterator(JSContext *cx, JSObject *obj) JSIdArray *ida; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); iterobj = NewObject(cx, &prop_iter_class, NULL, obj); if (!iterobj) return NULL; @@ -3881,7 +3815,6 @@ JS_NextProperty(JSContext *cx, JSObject *iterobj, jsid *idp) JSIdArray *ida; CHECK_REQUEST(cx); - 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 +3855,6 @@ JS_PUBLIC_API(JSBool) JS_GetReservedSlot(JSContext *cx, JSObject *obj, uint32 index, jsval *vp) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); return js_GetReservedSlot(cx, obj, index, vp); } @@ -3930,7 +3862,6 @@ JS_PUBLIC_API(JSBool) JS_SetReservedSlot(JSContext *cx, JSObject *obj, uint32 index, jsval v) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj, v); return js_SetReservedSlot(cx, obj, index, v); } @@ -3939,14 +3870,12 @@ JS_NewArrayObject(JSContext *cx, jsint length, jsval *vector) { CHECK_REQUEST(cx); /* NB: jsuint cast does ToUint32. */ - 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) { - ASSERT_SAME_COMPARTMENT(cx, obj); return obj->wrappedObject(cx)->isArray(); } @@ -3954,7 +3883,6 @@ JS_PUBLIC_API(JSBool) JS_GetArrayLength(JSContext *cx, JSObject *obj, jsuint *lengthp) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); return js_GetLengthProperty(cx, obj, lengthp); } @@ -3962,7 +3890,6 @@ JS_PUBLIC_API(JSBool) JS_SetArrayLength(JSContext *cx, JSObject *obj, jsuint length) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); return js_SetLengthProperty(cx, obj, length); } @@ -3970,7 +3897,6 @@ JS_PUBLIC_API(JSBool) JS_HasArrayLength(JSContext *cx, JSObject *obj, jsuint *lengthp) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); return js_HasLengthProperty(cx, obj, lengthp); } @@ -3979,7 +3905,6 @@ JS_CheckAccess(JSContext *cx, JSObject *obj, jsid id, JSAccessMode mode, jsval *vp, uintN *attrsp) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj, id); return obj->checkAccess(cx, id, mode, vp, attrsp); } @@ -4041,7 +3966,6 @@ JS_NewFunction(JSContext *cx, JSNative native, uintN nargs, uintN flags, JSAtom *atom; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, parent); if (!name) { atom = NULL; @@ -4057,7 +3981,6 @@ JS_PUBLIC_API(JSObject *) JS_CloneFunctionObject(JSContext *cx, JSObject *funobj, JSObject *parent) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, parent); // XXX no funobj for now if (!parent) { if (cx->fp) parent = js_GetScopeChain(cx, cx->fp); @@ -4289,7 +4212,6 @@ JS_DefineFunctions(JSContext *cx, JSObject *obj, JSFunctionSpec *fs) JSFunction *fun; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); ctor = NULL; for (; fs->name; fs++) { flags = fs->flags; @@ -4340,7 +4262,6 @@ JS_DefineFunction(JSContext *cx, JSObject *obj, const char *name, JSNative call, uintN nargs, uintN attrs) { CHECK_REQUEST(cx); - 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 +4272,6 @@ JS_DefineUCFunction(JSContext *cx, JSObject *obj, uintN nargs, uintN attrs) { CHECK_REQUEST(cx); - 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 +4305,6 @@ JS_CompileUCScriptForPrincipals(JSContext *cx, JSObject *obj, JSPrincipals *prin const char *filename, uintN lineno) { CHECK_REQUEST(cx); - 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 +4352,6 @@ JS_BufferIsCompilableUnit(JSContext *cx, JSObject *obj, const char *bytes, size_ JSErrorReporter older; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); chars = js_InflateString(cx, bytes, &length); if (!chars) return JS_TRUE; @@ -4473,7 +4391,6 @@ JS_CompileFile(JSContext *cx, JSObject *obj, const char *filename) JSScript *script; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj); if (!filename || strcmp(filename, "-") == 0) { fp = stdin; } else { @@ -4502,7 +4419,6 @@ JS_CompileFileHandleForPrincipals(JSContext *cx, JSObject *obj, const char *file JSScript *script; CHECK_REQUEST(cx); - 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 +4438,6 @@ JS_NewScriptObject(JSContext *cx, JSScript *script) JSObject *obj; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, script); if (!script) return NewObject(cx, &js_ScriptClass, NULL, NULL); @@ -4554,7 +4469,6 @@ JS_PUBLIC_API(void) JS_DestroyScript(JSContext *cx, JSScript *script) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, script); js_DestroyScript(cx, script); } @@ -4570,7 +4484,6 @@ JS_CompileUCFunctionForPrincipals(JSContext *cx, JSObject *obj, uintN i; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj, principals); if (!name) { funAtom = NULL; } else { @@ -4676,7 +4589,6 @@ JS_DecompileScript(JSContext *cx, JSScript *script, const char *name, uintN inde JSString *str; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, script); jp = js_NewPrinter(cx, name, NULL, indent & ~JS_DONT_PRETTY_PRINT, !(indent & JS_DONT_PRETTY_PRINT), @@ -4695,7 +4607,6 @@ JS_PUBLIC_API(JSString *) JS_DecompileFunction(JSContext *cx, JSFunction *fun, uintN indent) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, fun); return js_DecompileToString(cx, "JS_DecompileFunction", fun, indent & ~JS_DONT_PRETTY_PRINT, !(indent & JS_DONT_PRETTY_PRINT), @@ -4706,7 +4617,6 @@ JS_PUBLIC_API(JSString *) JS_DecompileFunctionBody(JSContext *cx, JSFunction *fun, uintN indent) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, fun); return js_DecompileToString(cx, "JS_DecompileFunctionBody", fun, indent & ~JS_DONT_PRETTY_PRINT, !(indent & JS_DONT_PRETTY_PRINT), @@ -4719,7 +4629,6 @@ JS_ExecuteScript(JSContext *cx, JSObject *obj, JSScript *script, jsval *rval) JSBool ok; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj, script); ok = js_Execute(cx, obj, script, NULL, 0, rval); LAST_FRAME_CHECKS(cx, ok); return ok; @@ -4788,7 +4697,6 @@ JS_CallFunction(JSContext *cx, JSObject *obj, JSFunction *fun, uintN argc, jsval JSBool ok; CHECK_REQUEST(cx); - 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 +4708,6 @@ JS_CallFunctionName(JSContext *cx, JSObject *obj, const char *name, uintN argc, jsval *rval) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, obj, ValueArray(argv, argc)); AutoValueRooter tvr(cx); JSAtom *atom = js_Atomize(cx, name, strlen(name), 0); @@ -4818,7 +4725,6 @@ JS_CallFunctionValue(JSContext *cx, JSObject *obj, jsval fval, uintN argc, jsval JSBool ok; CHECK_REQUEST(cx); - 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 +4734,6 @@ JS_PUBLIC_API(JSObject *) JS_New(JSContext *cx, JSObject *ctor, uintN argc, jsval *argv) { CHECK_REQUEST(cx); - 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 +5009,12 @@ JS_GetStringLength(JSString *str) JS_PUBLIC_API(const char *) JS_GetStringBytesZ(JSContext *cx, JSString *str) { - ASSERT_SAME_COMPARTMENT(cx, str); return js_GetStringBytes(cx, str); } JS_PUBLIC_API(const jschar *) JS_GetStringCharsZ(JSContext *cx, JSString *str) { - ASSERT_SAME_COMPARTMENT(cx, str); return js_UndependString(cx, str); } @@ -5197,7 +5100,6 @@ JS_Stringify(JSContext *cx, jsval *vp, JSObject *replacer, jsval space, JSONWriteCallback callback, void *data) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, replacer, space); JSCharBuffer cb(cx); if (!js_Stringify(cx, vp, replacer, space, cb)) return false; @@ -5208,7 +5110,6 @@ JS_PUBLIC_API(JSBool) JS_TryJSON(JSContext *cx, jsval *vp) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, *vp); return js_TryJSON(cx, vp); } @@ -5230,7 +5131,6 @@ JS_PUBLIC_API(JSBool) JS_FinishJSONParse(JSContext *cx, JSONParser *jp, jsval reviver) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, reviver); return js_FinishJSONParse(cx, jp, reviver); } @@ -5392,8 +5292,6 @@ JS_SetRegExpInput(JSContext *cx, JSString *input, JSBool multiline) JSRegExpStatics *res; CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, input); - /* No locking required, cx is thread-private and input must be live. */ res = &cx->regExpStatics; res->clearRoots(); @@ -5453,7 +5351,6 @@ JS_PUBLIC_API(void) JS_SetPendingException(JSContext *cx, jsval v) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, v); cx->throwing = JS_TRUE; cx->exception = v; } @@ -5524,10 +5421,8 @@ JS_DropExceptionState(JSContext *cx, JSExceptionState *state) { CHECK_REQUEST(cx); if (state) { - if (state->throwing && JSVAL_IS_GCTHING(state->exception)) { - ASSERT_SAME_COMPARTMENT(cx, state->exception); + if (state->throwing && JSVAL_IS_GCTHING(state->exception)) JS_RemoveValueRoot(cx, &state->exception); - } cx->free(state); } } @@ -5536,7 +5431,6 @@ JS_PUBLIC_API(JSErrorReport *) JS_ErrorFromException(JSContext *cx, jsval v) { CHECK_REQUEST(cx); - ASSERT_SAME_COMPARTMENT(cx, v); return js_ErrorFromException(cx, v); } diff --git a/js/src/jscntxtinlines.h b/js/src/jscntxtinlines.h index 05aa1ce7eb5..9f0d1ba1c4f 100644 --- a/js/src/jscntxtinlines.h +++ b/js/src/jscntxtinlines.h @@ -42,7 +42,6 @@ #include "jscntxt.h" #include "jsparse.h" -#include "jsstaticcheck.h" #include "jsxml.h" inline bool @@ -192,165 +191,6 @@ class AutoNamespaces : protected AutoGCRooter { JSXMLArray array; }; -#ifdef DEBUG -class MixingChecker -{ - private: - JSContext *context; - JSCompartment *compartment; - - public: - explicit MixingChecker(JSContext *cx) : context(cx), compartment(cx->compartment) { - VOUCH_DOES_NOT_REQUIRE_STACK(); - check(cx->fp ? JS_GetGlobalForScopeChain(cx) : cx->globalObject); - } - - void check(JSCompartment *c) { - if (c && c != context->runtime->defaultCompartment) { - if (!compartment) - compartment = c; - else if (c != compartment) - printf("*** Compartment mismatch %p vs. %p\n", (void *) compartment, (void *) c); - } - } - - void check(JSPrincipals *p) { /* nothing for now */ } - - void check(JSObject *obj) { - if (obj) - check(obj->getCompartment(context)); - } - - void check(jsval v) { - if (!JSVAL_IS_PRIMITIVE(v)) - check(JSVAL_TO_OBJECT(v)); - } - - void check(const ValueArray &arr) { - for (size_t i = 0; i < arr.length; i++) - check(arr.array[i]); - } - - void check(JSIdArray *ida) { - if (ida) { - for (jsint i = 0; i < ida->length; i++) - check(ID_TO_VALUE(ida->vector[i])); - } - } - - void check(JSScript *script) { - if (script && script->u.object) - check(script->u.object); - } - - void check(JSString *) { /* nothing for now */ } -}; - -#endif - -/* - * Don't perform these checks when called from a finalizer. The checking - * depends on other objects not having been swept yet. - */ -#define START_ASSERT_SAME_COMPARTMENT() \ - if (cx->runtime->gcRunning) \ - return; \ - MixingChecker c(cx) - -template inline void -ASSERT_SAME_COMPARTMENT(JSContext *cx, T1 t1) -{ -#ifdef DEBUG - START_ASSERT_SAME_COMPARTMENT(); - c.check(t1); -#endif -} - -template inline void -ASSERT_SAME_COMPARTMENT(JSContext *cx, T1 t1, T2 t2) -{ -#ifdef DEBUG - START_ASSERT_SAME_COMPARTMENT(); - c.check(t1); - c.check(t2); -#endif -} - -template inline void -ASSERT_SAME_COMPARTMENT(JSContext *cx, T1 t1, T2 t2, T3 t3) -{ -#ifdef DEBUG - START_ASSERT_SAME_COMPARTMENT(); - c.check(t1); - c.check(t2); - c.check(t3); -#endif -} - -template inline void -ASSERT_SAME_COMPARTMENT(JSContext *cx, T1 t1, T2 t2, T3 t3, T4 t4) -{ -#ifdef DEBUG - START_ASSERT_SAME_COMPARTMENT(); - c.check(t1); - c.check(t2); - c.check(t3); - c.check(t4); -#endif -} - -template inline void -ASSERT_SAME_COMPARTMENT(JSContext *cx, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5) -{ -#ifdef DEBUG - START_ASSERT_SAME_COMPARTMENT(); - c.check(t1); - c.check(t2); - c.check(t3); - c.check(t4); - c.check(t5); -#endif -} - -#undef START_ASSERT_SAME_COMPARTMENT - -inline JSBool -callJSNative(JSContext *cx, JSNative native, JSObject *thisobj, uintN argc, jsval *argv, jsval *rval) -{ - ASSERT_SAME_COMPARTMENT(cx, thisobj, ValueArray(argv, argc)); - JSBool ok = native(cx, thisobj, argc, argv, rval); - if (ok) - ASSERT_SAME_COMPARTMENT(cx, *rval); - return ok; -} - -inline JSBool -callJSFastNative(JSContext *cx, JSFastNative native, uintN argc, jsval *vp) -{ - ASSERT_SAME_COMPARTMENT(cx, ValueArray(vp, argc + 2)); - JSBool ok = native(cx, argc, vp); - if (ok) - ASSERT_SAME_COMPARTMENT(cx, vp[0]); - return ok; -} - -inline JSBool -callJSPropertyOp(JSContext *cx, JSPropertyOp op, JSObject *obj, jsval idval, jsval *vp) -{ - ASSERT_SAME_COMPARTMENT(cx, obj, idval, *vp); - JSBool ok = op(cx, obj, idval, vp); - if (ok) - ASSERT_SAME_COMPARTMENT(cx, obj, *vp); - return ok; -} - -inline JSBool -callJSPropertyOpSetter(JSContext *cx, JSPropertyOp op, JSObject *obj, jsval idval, jsval *vp) -{ - ASSERT_SAME_COMPARTMENT(cx, obj, idval, *vp); - return op(cx, obj, idval, vp); -} - } #endif /* jscntxtinlines_h___ */ diff --git a/js/src/jsdbgapi.cpp b/js/src/jsdbgapi.cpp index fce3374e799..65c8d0cc781 100644 --- a/js/src/jsdbgapi.cpp +++ b/js/src/jsdbgapi.cpp @@ -709,7 +709,7 @@ js_watch_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp) ? js_InternalCall(cx, obj, CastAsObjectJSVal(wp->setter), 1, vp, vp) - : callJSPropertyOpSetter(cx, wp->setter, obj, userid, vp)); + : wp->setter(cx, obj, userid, vp)); /* Evil code can cause us to have an arguments object. */ if (frame.getFrame()) diff --git a/js/src/jsinterp.cpp b/js/src/jsinterp.cpp index cb631d76758..eee4c9ce751 100644 --- a/js/src/jsinterp.cpp +++ b/js/src/jsinterp.cpp @@ -439,7 +439,7 @@ Invoke(JSContext *cx, JSFunction *fun, JSScript *script, JSNative native, #ifdef DEBUG_NOT_THROWING JSBool alreadyThrowing = cx->throwing; #endif - JSBool ok = callJSFastNative(cx, (JSFastNative) native, argc, vp); + JSBool ok = ((JSFastNative) native)(cx, argc, vp); JS_RUNTIME_METER(cx->runtime, nativeCalls); #ifdef DEBUG_NOT_THROWING if (ok && !alreadyThrowing) @@ -548,7 +548,7 @@ Invoke(JSContext *cx, JSFunction *fun, JSScript *script, JSNative native, #endif /* Primitive |this| should not be passed to slow natives. */ JSObject *thisp = JSVAL_TO_OBJECT(fp->thisv); - ok = callJSNative(cx, native, thisp, fp->argc, fp->argv, &fp->rval); + ok = native(cx, thisp, fp->argc, fp->argv, &fp->rval); JS_ASSERT(cx->fp == fp); JS_RUNTIME_METER(cx->runtime, nativeCalls); #ifdef DEBUG_NOT_THROWING diff --git a/js/src/jsobj.cpp b/js/src/jsobj.cpp index 11a57a183a5..91883629a10 100644 --- a/js/src/jsobj.cpp +++ b/js/src/jsobj.cpp @@ -4147,7 +4147,7 @@ AddPropertyHelper(JSContext *cx, JSClass *clasp, JSObject *obj, JSScope *scope, if (clasp->addProperty != JS_PropertyStub) { jsval nominal = *vp; - if (!callJSPropertyOp(cx, clasp->addProperty, obj, SPROP_USERID(sprop), vp)) + if (!clasp->addProperty(cx, obj, SPROP_USERID(sprop), vp)) return false; if (*vp != nominal) { if (SPROP_HAS_VALID_SLOT(sprop, scope)) @@ -4825,7 +4825,7 @@ js_GetPropertyHelper(JSContext *cx, JSObject *obj, jsid id, uintN getHow, if (!prop) { *vp = JSVAL_VOID; - if (!callJSPropertyOp(cx, obj->getClass()->getProperty, obj, ID_TO_VALUE(id), vp)) + if (!obj->getClass()->getProperty(cx, obj, ID_TO_VALUE(id), vp)) return JS_FALSE; PCMETER(getHow & JSGET_CACHE_RESULT && JS_PROPERTY_CACHE(cx).nofills++); @@ -5282,7 +5282,7 @@ js_DeleteProperty(JSContext *cx, JSObject *obj, jsid id, jsval *rval) * a prototype, call the class's delProperty hook, passing rval as the * result parameter. */ - return callJSPropertyOp(cx, obj->getClass()->delProperty, obj, ID_TO_VALUE(id), rval); + return obj->getClass()->delProperty(cx, obj, ID_TO_VALUE(id), rval); } sprop = (JSScopeProperty *)prop; @@ -5293,7 +5293,7 @@ js_DeleteProperty(JSContext *cx, JSObject *obj, jsid id, jsval *rval) } /* XXXbe called with obj locked */ - if (!callJSPropertyOp(cx, obj->getClass()->delProperty, obj, SPROP_USERID(sprop), rval)) { + if (!obj->getClass()->delProperty(cx, obj, SPROP_USERID(sprop), rval)) { JS_UNLOCK_OBJ(cx, obj); return JS_FALSE; } diff --git a/js/src/jsobj.h b/js/src/jsobj.h index 203e94d3c76..c308e01288a 100644 --- a/js/src/jsobj.h +++ b/js/src/jsobj.h @@ -756,6 +756,7 @@ struct JSObject { #endif /* JS_THREADSAFE */ +#ifdef __cplusplus inline void OBJ_TO_INNER_OBJECT(JSContext *cx, JSObject *&obj) { @@ -781,14 +782,7 @@ OBJ_TO_OUTER_OBJECT(JSContext *cx, JSObject *&obj) obj = xclasp->outerObject(cx, obj); } } - -class ValueArray { - public: - jsval *array; - size_t length; - - ValueArray(jsval *v, size_t c) : array(v), length(c) {} -}; +#endif extern JSClass js_ObjectClass; extern JSClass js_WithClass; diff --git a/js/src/jsproxy.cpp b/js/src/jsproxy.cpp index 63e45bfd0d0..6d8e199179f 100644 --- a/js/src/jsproxy.cpp +++ b/js/src/jsproxy.cpp @@ -113,7 +113,7 @@ JSProxyHandler::get(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, } if (desc.attrs & JSPROP_SHORTID) id = INT_TO_JSID(desc.shortid); - return callJSPropertyOp(cx, desc.getter, proxy, id, vp); + return desc.getter(cx, proxy, id, vp); } bool @@ -132,7 +132,7 @@ JSProxyHandler::set(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, } if (desc.attrs & JSPROP_SHORTID) id = INT_TO_JSID(desc.shortid); - return callJSPropertyOpSetter(cx, desc.setter, proxy, id, vp); + return desc.setter(cx, proxy, id, vp); } if (desc.attrs & JSPROP_READONLY) return true; @@ -149,7 +149,7 @@ JSProxyHandler::set(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id, } if (desc.attrs & JSPROP_SHORTID) id = INT_TO_JSID(desc.shortid); - return callJSPropertyOpSetter(cx, desc.setter, proxy, id, vp); + return desc.setter(cx, proxy, id, vp); } if (desc.attrs & JSPROP_READONLY) return true; diff --git a/js/src/jsscopeinlines.h b/js/src/jsscopeinlines.h index 9cdf54c6fe9..96fcc0ce61f 100644 --- a/js/src/jsscopeinlines.h +++ b/js/src/jsscopeinlines.h @@ -46,8 +46,6 @@ #include "jsobj.h" #include "jsscope.h" -#include "jscntxtinlines.h" - inline JSEmptyScope * JSScope::createEmptyScope(JSContext *cx, JSClass *clasp) { @@ -288,7 +286,7 @@ JSScopeProperty::get(JSContext* cx, JSObject* obj, JSObject *pobj, jsval* vp) */ if (obj->getClass() == &js_WithClass) obj = js_UnwrapWithObject(cx, obj); - return js::callJSPropertyOp(cx, getterOp(), obj, SPROP_USERID(this), vp); + return getterOp()(cx, obj, SPROP_USERID(this), vp); } inline bool @@ -307,7 +305,7 @@ JSScopeProperty::set(JSContext* cx, JSObject* obj, jsval* vp) /* See the comment in JSScopeProperty::get as to why we check for With. */ if (obj->getClass() == &js_WithClass) obj = js_UnwrapWithObject(cx, obj); - return js::callJSPropertyOpSetter(cx, setterOp(), obj, SPROP_USERID(this), vp); + return setterOp()(cx, obj, SPROP_USERID(this), vp); } #endif /* jsscopeinlines_h___ */