mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Merge backout.
This commit is contained in:
commit
c80c81124a
108
js/src/jsapi.cpp
108
js/src/jsapi.cpp
@ -184,7 +184,6 @@ JS_ConvertArgumentsVA(JSContext *cx, uintN argc, jsval *argv, const char *format
|
|||||||
JSObject *obj;
|
JSObject *obj;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, ValueArray(argv - 2, argc + 2));
|
|
||||||
sp = argv;
|
sp = argv;
|
||||||
required = JS_TRUE;
|
required = JS_TRUE;
|
||||||
while ((c = *format++) != '\0') {
|
while ((c = *format++) != '\0') {
|
||||||
@ -346,7 +345,6 @@ JS_ConvertValue(JSContext *cx, jsval v, JSType type, jsval *vp)
|
|||||||
jsdouble d, *dp;
|
jsdouble d, *dp;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v);
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case JSTYPE_VOID:
|
case JSTYPE_VOID:
|
||||||
*vp = JSVAL_VOID;
|
*vp = JSVAL_VOID;
|
||||||
@ -395,7 +393,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_ValueToObject(JSContext *cx, jsval v, JSObject **objp)
|
JS_ValueToObject(JSContext *cx, jsval v, JSObject **objp)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v);
|
|
||||||
return js_ValueToObject(cx, v, objp);
|
return js_ValueToObject(cx, v, objp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -403,7 +400,6 @@ JS_PUBLIC_API(JSFunction *)
|
|||||||
JS_ValueToFunction(JSContext *cx, jsval v)
|
JS_ValueToFunction(JSContext *cx, jsval v)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v);
|
|
||||||
return js_ValueToFunction(cx, &v, JSV2F_SEARCH_STACK);
|
return js_ValueToFunction(cx, &v, JSV2F_SEARCH_STACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -411,7 +407,6 @@ JS_PUBLIC_API(JSFunction *)
|
|||||||
JS_ValueToConstructor(JSContext *cx, jsval v)
|
JS_ValueToConstructor(JSContext *cx, jsval v)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v);
|
|
||||||
return js_ValueToFunction(cx, &v, JSV2F_SEARCH_STACK);
|
return js_ValueToFunction(cx, &v, JSV2F_SEARCH_STACK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -419,7 +414,6 @@ JS_PUBLIC_API(JSString *)
|
|||||||
JS_ValueToString(JSContext *cx, jsval v)
|
JS_ValueToString(JSContext *cx, jsval v)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v);
|
|
||||||
return js_ValueToString(cx, v);
|
return js_ValueToString(cx, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -427,7 +421,6 @@ JS_PUBLIC_API(JSString *)
|
|||||||
JS_ValueToSource(JSContext *cx, jsval v)
|
JS_ValueToSource(JSContext *cx, jsval v)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v);
|
|
||||||
return js_ValueToSource(cx, v);
|
return js_ValueToSource(cx, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -435,7 +428,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_ValueToNumber(JSContext *cx, jsval v, jsdouble *dp)
|
JS_ValueToNumber(JSContext *cx, jsval v, jsdouble *dp)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v);
|
|
||||||
|
|
||||||
AutoValueRooter tvr(cx, v);
|
AutoValueRooter tvr(cx, v);
|
||||||
return ValueToNumber(cx, v, dp);
|
return ValueToNumber(cx, v, dp);
|
||||||
@ -451,7 +443,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_ValueToECMAInt32(JSContext *cx, jsval v, int32 *ip)
|
JS_ValueToECMAInt32(JSContext *cx, jsval v, int32 *ip)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v);
|
|
||||||
|
|
||||||
AutoValueRooter tvr(cx, v);
|
AutoValueRooter tvr(cx, v);
|
||||||
return ValueToECMAInt32(cx, v, (int32_t *)ip);
|
return ValueToECMAInt32(cx, v, (int32_t *)ip);
|
||||||
@ -461,7 +452,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_ValueToECMAUint32(JSContext *cx, jsval v, uint32 *ip)
|
JS_ValueToECMAUint32(JSContext *cx, jsval v, uint32 *ip)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v);
|
|
||||||
|
|
||||||
AutoValueRooter tvr(cx, v);
|
AutoValueRooter tvr(cx, v);
|
||||||
return ValueToECMAUint32(cx, v, (uint32_t *)ip);
|
return ValueToECMAUint32(cx, v, (uint32_t *)ip);
|
||||||
@ -471,7 +461,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_ValueToInt32(JSContext *cx, jsval v, int32 *ip)
|
JS_ValueToInt32(JSContext *cx, jsval v, int32 *ip)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v);
|
|
||||||
|
|
||||||
AutoValueRooter tvr(cx, v);
|
AutoValueRooter tvr(cx, v);
|
||||||
return ValueToInt32(cx, v, (int32_t *)ip);
|
return ValueToInt32(cx, v, (int32_t *)ip);
|
||||||
@ -481,7 +470,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_ValueToUint16(JSContext *cx, jsval v, uint16 *ip)
|
JS_ValueToUint16(JSContext *cx, jsval v, uint16 *ip)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v);
|
|
||||||
|
|
||||||
AutoValueRooter tvr(cx, v);
|
AutoValueRooter tvr(cx, v);
|
||||||
return ValueToUint16(cx, v, (uint16_t *)ip);
|
return ValueToUint16(cx, v, (uint16_t *)ip);
|
||||||
@ -491,7 +479,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_ValueToBoolean(JSContext *cx, jsval v, JSBool *bp)
|
JS_ValueToBoolean(JSContext *cx, jsval v, JSBool *bp)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v);
|
|
||||||
*bp = js_ValueToBoolean(v);
|
*bp = js_ValueToBoolean(v);
|
||||||
return JS_TRUE;
|
return JS_TRUE;
|
||||||
}
|
}
|
||||||
@ -503,7 +490,6 @@ JS_TypeOfValue(JSContext *cx, jsval v)
|
|||||||
JSObject *obj;
|
JSObject *obj;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v);
|
|
||||||
if (JSVAL_IS_OBJECT(v)) {
|
if (JSVAL_IS_OBJECT(v)) {
|
||||||
obj = JSVAL_TO_OBJECT(v);
|
obj = JSVAL_TO_OBJECT(v);
|
||||||
if (obj)
|
if (obj)
|
||||||
@ -532,14 +518,12 @@ JS_GetTypeName(JSContext *cx, JSType type)
|
|||||||
JS_PUBLIC_API(JSBool)
|
JS_PUBLIC_API(JSBool)
|
||||||
JS_StrictlyEqual(JSContext *cx, jsval v1, jsval v2)
|
JS_StrictlyEqual(JSContext *cx, jsval v1, jsval v2)
|
||||||
{
|
{
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v1, v2);
|
|
||||||
return js_StrictlyEqual(cx, v1, v2);
|
return js_StrictlyEqual(cx, v1, v2);
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_PUBLIC_API(JSBool)
|
JS_PUBLIC_API(JSBool)
|
||||||
JS_SameValue(JSContext *cx, jsval v1, jsval v2)
|
JS_SameValue(JSContext *cx, jsval v1, jsval v2)
|
||||||
{
|
{
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v1, v2);
|
|
||||||
return js_SameValue(v1, v2, cx);
|
return js_SameValue(v1, v2, cx);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1099,7 +1083,6 @@ JS_PUBLIC_API(void)
|
|||||||
JS_SetGlobalObject(JSContext *cx, JSObject *obj)
|
JS_SetGlobalObject(JSContext *cx, JSObject *obj)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
cx->globalObject = obj;
|
cx->globalObject = obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1216,7 +1199,6 @@ JS_InitStandardClasses(JSContext *cx, JSObject *obj)
|
|||||||
JSAtom *atom;
|
JSAtom *atom;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
|
|
||||||
/* Define a top-level property 'undefined' with the undefined value. */
|
/* Define a top-level property 'undefined' with the undefined value. */
|
||||||
atom = cx->runtime->atomState.typeAtoms[JSTYPE_VOID];
|
atom = cx->runtime->atomState.typeAtoms[JSTYPE_VOID];
|
||||||
@ -1414,7 +1396,6 @@ JS_ResolveStandardClass(JSContext *cx, JSObject *obj, jsval id, JSBool *resolved
|
|||||||
uintN i;
|
uintN i;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, id);
|
|
||||||
*resolved = JS_FALSE;
|
*resolved = JS_FALSE;
|
||||||
|
|
||||||
rt = cx->runtime;
|
rt = cx->runtime;
|
||||||
@ -1515,7 +1496,6 @@ JS_EnumerateStandardClasses(JSContext *cx, JSObject *obj)
|
|||||||
uintN i;
|
uintN i;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
rt = cx->runtime;
|
rt = cx->runtime;
|
||||||
|
|
||||||
/* Check whether we need to bind 'undefined' and define it if so. */
|
/* 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;
|
JSObjectOp init;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, ida);
|
|
||||||
rt = cx->runtime;
|
rt = cx->runtime;
|
||||||
if (ida) {
|
if (ida) {
|
||||||
i = ida->length;
|
i = ida->length;
|
||||||
@ -1676,7 +1655,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_GetClassObject(JSContext *cx, JSObject *obj, JSProtoKey key, JSObject **objp)
|
JS_GetClassObject(JSContext *cx, JSObject *obj, JSProtoKey key, JSObject **objp)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
return js_GetClassObject(cx, obj, key, objp);
|
return js_GetClassObject(cx, obj, key, objp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1713,7 +1691,6 @@ JS_GetScopeChain(JSContext *cx)
|
|||||||
JS_PUBLIC_API(JSObject *)
|
JS_PUBLIC_API(JSObject *)
|
||||||
JS_GetGlobalForObject(JSContext *cx, JSObject *obj)
|
JS_GetGlobalForObject(JSContext *cx, JSObject *obj)
|
||||||
{
|
{
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
return obj->getGlobal();
|
return obj->getGlobal();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1745,7 +1722,6 @@ JS_GetGlobalForScopeChain(JSContext *cx)
|
|||||||
JS_PUBLIC_API(jsval)
|
JS_PUBLIC_API(jsval)
|
||||||
JS_ComputeThis(JSContext *cx, jsval *vp)
|
JS_ComputeThis(JSContext *cx, jsval *vp)
|
||||||
{
|
{
|
||||||
ASSERT_SAME_COMPARTMENT(cx, ValueArray(vp, 2));
|
|
||||||
if (!js_ComputeThis(cx, vp + 2))
|
if (!js_ComputeThis(cx, vp + 2))
|
||||||
return JSVAL_NULL;
|
return JSVAL_NULL;
|
||||||
return vp[1];
|
return vp[1];
|
||||||
@ -2695,8 +2671,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_ValueToId(JSContext *cx, jsval v, jsid *idp)
|
JS_ValueToId(JSContext *cx, jsval v, jsid *idp)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v);
|
|
||||||
|
|
||||||
if (JSVAL_IS_INT(v)) {
|
if (JSVAL_IS_INT(v)) {
|
||||||
*idp = INT_JSVAL_TO_JSID(v);
|
*idp = INT_JSVAL_TO_JSID(v);
|
||||||
return JS_TRUE;
|
return JS_TRUE;
|
||||||
@ -2722,7 +2696,6 @@ JS_IdToValue(JSContext *cx, jsid id, jsval *vp)
|
|||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
*vp = ID_TO_VALUE(id);
|
*vp = ID_TO_VALUE(id);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, *vp);
|
|
||||||
return JS_TRUE;
|
return JS_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2763,7 +2736,6 @@ JS_InitClass(JSContext *cx, JSObject *obj, JSObject *parent_proto,
|
|||||||
JSPropertySpec *static_ps, JSFunctionSpec *static_fs)
|
JSPropertySpec *static_ps, JSFunctionSpec *static_fs)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, parent_proto);
|
|
||||||
return js_InitClass(cx, obj, parent_proto, clasp, constructor, nargs,
|
return js_InitClass(cx, obj, parent_proto, clasp, constructor, nargs,
|
||||||
ps, fs, static_ps, static_fs);
|
ps, fs, static_ps, static_fs);
|
||||||
}
|
}
|
||||||
@ -2788,7 +2760,6 @@ JS_InstanceOf(JSContext *cx, JSObject *obj, JSClass *clasp, jsval *argv)
|
|||||||
JSFunction *fun;
|
JSFunction *fun;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
if (obj && obj->getClass() == clasp)
|
if (obj && obj->getClass() == clasp)
|
||||||
return JS_TRUE;
|
return JS_TRUE;
|
||||||
if (argv) {
|
if (argv) {
|
||||||
@ -2808,21 +2779,18 @@ JS_InstanceOf(JSContext *cx, JSObject *obj, JSClass *clasp, jsval *argv)
|
|||||||
JS_PUBLIC_API(JSBool)
|
JS_PUBLIC_API(JSBool)
|
||||||
JS_HasInstance(JSContext *cx, JSObject *obj, jsval v, JSBool *bp)
|
JS_HasInstance(JSContext *cx, JSObject *obj, jsval v, JSBool *bp)
|
||||||
{
|
{
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, v);
|
|
||||||
return js_HasInstance(cx, obj, v, bp);
|
return js_HasInstance(cx, obj, v, bp);
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_PUBLIC_API(void *)
|
JS_PUBLIC_API(void *)
|
||||||
JS_GetPrivate(JSContext *cx, JSObject *obj)
|
JS_GetPrivate(JSContext *cx, JSObject *obj)
|
||||||
{
|
{
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
return obj->getPrivate();
|
return obj->getPrivate();
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_PUBLIC_API(JSBool)
|
JS_PUBLIC_API(JSBool)
|
||||||
JS_SetPrivate(JSContext *cx, JSObject *obj, void *data)
|
JS_SetPrivate(JSContext *cx, JSObject *obj, void *data)
|
||||||
{
|
{
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
obj->setPrivate(data);
|
obj->setPrivate(data);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -2841,7 +2809,6 @@ JS_GetPrototype(JSContext *cx, JSObject *obj)
|
|||||||
JSObject *proto;
|
JSObject *proto;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
proto = obj->getProto();
|
proto = obj->getProto();
|
||||||
|
|
||||||
/* Beware ref to dead object (we may be called from obj's finalizer). */
|
/* 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)
|
JS_SetPrototype(JSContext *cx, JSObject *obj, JSObject *proto)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, proto);
|
|
||||||
return js_SetProtoOrParent(cx, obj, JSSLOT_PROTO, proto, JS_FALSE);
|
return js_SetProtoOrParent(cx, obj, JSSLOT_PROTO, proto, JS_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_PUBLIC_API(JSObject *)
|
JS_PUBLIC_API(JSObject *)
|
||||||
JS_GetParent(JSContext *cx, JSObject *obj)
|
JS_GetParent(JSContext *cx, JSObject *obj)
|
||||||
{
|
{
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
JSObject *parent = obj->getParent();
|
JSObject *parent = obj->getParent();
|
||||||
|
|
||||||
/* Beware ref to dead object (we may be called from obj's finalizer). */
|
/* 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)
|
JS_SetParent(JSContext *cx, JSObject *obj, JSObject *parent)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, parent);
|
|
||||||
return js_SetProtoOrParent(cx, obj, JSSLOT_PARENT, parent, JS_FALSE);
|
return js_SetProtoOrParent(cx, obj, JSSLOT_PARENT, parent, JS_FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2880,7 +2844,6 @@ JS_GetConstructor(JSContext *cx, JSObject *proto)
|
|||||||
jsval cval;
|
jsval cval;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, proto);
|
|
||||||
{
|
{
|
||||||
JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED);
|
JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED);
|
||||||
|
|
||||||
@ -2898,7 +2861,6 @@ JS_GetConstructor(JSContext *cx, JSObject *proto)
|
|||||||
JS_PUBLIC_API(JSBool)
|
JS_PUBLIC_API(JSBool)
|
||||||
JS_GetObjectId(JSContext *cx, JSObject *obj, jsid *idp)
|
JS_GetObjectId(JSContext *cx, JSObject *obj, jsid *idp)
|
||||||
{
|
{
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
JS_ASSERT(JSID_IS_OBJECT(obj));
|
JS_ASSERT(JSID_IS_OBJECT(obj));
|
||||||
*idp = OBJECT_TO_JSID(obj);
|
*idp = OBJECT_TO_JSID(obj);
|
||||||
return JS_TRUE;
|
return JS_TRUE;
|
||||||
@ -2920,7 +2882,6 @@ JS_PUBLIC_API(JSObject *)
|
|||||||
JS_NewObject(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent)
|
JS_NewObject(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, proto, parent);
|
|
||||||
if (!clasp)
|
if (!clasp)
|
||||||
clasp = &js_ObjectClass; /* default class is Object */
|
clasp = &js_ObjectClass; /* default class is Object */
|
||||||
JS_ASSERT(!(clasp->flags & JSCLASS_IS_GLOBAL));
|
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)
|
JS_NewObjectWithGivenProto(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, proto, parent);
|
|
||||||
if (!clasp)
|
if (!clasp)
|
||||||
clasp = &js_ObjectClass; /* default class is Object */
|
clasp = &js_ObjectClass; /* default class is Object */
|
||||||
JS_ASSERT(!(clasp->flags & JSCLASS_IS_GLOBAL));
|
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_PUBLIC_API(JSBool)
|
||||||
JS_SealObject(JSContext *cx, JSObject *obj, JSBool deep)
|
JS_SealObject(JSContext *cx, JSObject *obj, JSBool deep)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
|
|
||||||
JSScope *scope;
|
JSScope *scope;
|
||||||
JSIdArray *ida;
|
JSIdArray *ida;
|
||||||
uint32 nslots, i;
|
uint32 nslots, i;
|
||||||
@ -3014,7 +2971,6 @@ JS_PUBLIC_API(JSObject *)
|
|||||||
JS_ConstructObject(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent)
|
JS_ConstructObject(JSContext *cx, JSClass *clasp, JSObject *proto, JSObject *parent)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, proto, parent);
|
|
||||||
if (!clasp)
|
if (!clasp)
|
||||||
clasp = &js_ObjectClass; /* default class is Object */
|
clasp = &js_ObjectClass; /* default class is Object */
|
||||||
return js_ConstructObject(cx, clasp, proto, parent, 0, NULL);
|
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)
|
JSObject *parent, uintN argc, jsval *argv)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, proto, parent, ValueArray(argv, argc));
|
|
||||||
if (!clasp)
|
if (!clasp)
|
||||||
clasp = &js_ObjectClass; /* default class is Object */
|
clasp = &js_ObjectClass; /* default class is Object */
|
||||||
return js_ConstructObject(cx, clasp, proto, parent, argc, argv);
|
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)
|
JSObject **objp, JSProperty **propp)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, id);
|
|
||||||
|
|
||||||
JSAutoResolveFlags rf(cx, flags);
|
JSAutoResolveFlags rf(cx, flags);
|
||||||
id = js_CheckForStringIndex(id);
|
id = js_CheckForStringIndex(id);
|
||||||
@ -3115,7 +3069,6 @@ JS_LookupPropertyWithFlagsById(JSContext *cx, JSObject *obj, jsid id, uintN flag
|
|||||||
JSProperty *prop;
|
JSProperty *prop;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, id);
|
|
||||||
ok = obj->isNative()
|
ok = obj->isNative()
|
||||||
? js_LookupPropertyWithFlags(cx, obj, id, flags, objp, &prop) >= 0
|
? js_LookupPropertyWithFlags(cx, obj, id, flags, objp, &prop) >= 0
|
||||||
: obj->lookupProperty(cx, id, objp, &prop);
|
: obj->lookupProperty(cx, id, objp, &prop);
|
||||||
@ -3173,7 +3126,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_AlreadyHasOwnPropertyById(JSContext *cx, JSObject *obj, jsid id, JSBool *foundp)
|
JS_AlreadyHasOwnPropertyById(JSContext *cx, JSObject *obj, jsid id, JSBool *foundp)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, id);
|
|
||||||
|
|
||||||
if (!obj->isNative()) {
|
if (!obj->isNative()) {
|
||||||
JSObject *obj2;
|
JSObject *obj2;
|
||||||
@ -3223,13 +3175,6 @@ DefinePropertyById(JSContext *cx, JSObject *obj, jsid id, jsval value,
|
|||||||
uintN flags, intN tinyid)
|
uintN flags, intN tinyid)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
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);
|
JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED | JSRESOLVE_DECLARING);
|
||||||
if (flags != 0 && obj->isNative()) {
|
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)
|
JS_DefineOwnProperty(JSContext *cx, JSObject *obj, jsid id, jsval descriptor, JSBool *bp)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, id, descriptor);
|
|
||||||
return js_DefineOwnProperty(cx, obj, id, descriptor, bp);
|
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;
|
JSObject *nobj;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, proto);
|
|
||||||
if (!clasp)
|
if (!clasp)
|
||||||
clasp = &js_ObjectClass; /* default class is Object */
|
clasp = &js_ObjectClass; /* default class is Object */
|
||||||
nobj = NewObject(cx, clasp, proto, obj);
|
nobj = NewObject(cx, clasp, proto, obj);
|
||||||
@ -3386,7 +3329,6 @@ JS_AliasProperty(JSContext *cx, JSObject *obj, const char *name, const char *ali
|
|||||||
JSScopeProperty *sprop;
|
JSScopeProperty *sprop;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
|
|
||||||
JSAtom *atom = js_Atomize(cx, name, strlen(name), 0);
|
JSAtom *atom = js_Atomize(cx, name, strlen(name), 0);
|
||||||
if (!atom)
|
if (!atom)
|
||||||
@ -3427,7 +3369,6 @@ JS_AliasElement(JSContext *cx, JSObject *obj, const char *name, jsint alias)
|
|||||||
JSBool ok;
|
JSBool ok;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
|
|
||||||
JSAtom *atom = js_Atomize(cx, name, strlen(name), 0);
|
JSAtom *atom = js_Atomize(cx, name, strlen(name), 0);
|
||||||
if (!atom)
|
if (!atom)
|
||||||
@ -3623,7 +3564,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_GetPropertyById(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
|
JS_GetPropertyById(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, id);
|
|
||||||
JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED);
|
JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED);
|
||||||
return obj->getProperty(cx, id, vp);
|
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)
|
JS_GetMethodById(JSContext *cx, JSObject *obj, jsid id, JSObject **objp, jsval *vp)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, id);
|
|
||||||
if (!js_GetMethod(cx, obj, id, JSGET_METHOD_BARRIER, vp))
|
if (!js_GetMethod(cx, obj, id, JSGET_METHOD_BARRIER, vp))
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
if (objp)
|
if (objp)
|
||||||
@ -3671,7 +3610,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_SetPropertyById(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
|
JS_SetPropertyById(JSContext *cx, JSObject *obj, jsid id, jsval *vp)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, id);
|
|
||||||
JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED | JSRESOLVE_ASSIGNING);
|
JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED | JSRESOLVE_ASSIGNING);
|
||||||
return obj->setProperty(cx, id, vp);
|
return obj->setProperty(cx, id, vp);
|
||||||
}
|
}
|
||||||
@ -3700,7 +3638,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_DeletePropertyById2(JSContext *cx, JSObject *obj, jsid id, jsval *rval)
|
JS_DeletePropertyById2(JSContext *cx, JSObject *obj, jsid id, jsval *rval)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, id);
|
|
||||||
JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED);
|
JSAutoResolveFlags rf(cx, JSRESOLVE_QUALIFIED);
|
||||||
return obj->deleteProperty(cx, id, rval);
|
return obj->deleteProperty(cx, id, rval);
|
||||||
}
|
}
|
||||||
@ -3750,7 +3687,6 @@ JS_PUBLIC_API(void)
|
|||||||
JS_ClearScope(JSContext *cx, JSObject *obj)
|
JS_ClearScope(JSContext *cx, JSObject *obj)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
|
|
||||||
if (obj->map->ops->clear)
|
if (obj->map->ops->clear)
|
||||||
obj->map->ops->clear(cx, obj);
|
obj->map->ops->clear(cx, obj);
|
||||||
@ -3768,7 +3704,6 @@ JS_PUBLIC_API(JSIdArray *)
|
|||||||
JS_Enumerate(JSContext *cx, JSObject *obj)
|
JS_Enumerate(JSContext *cx, JSObject *obj)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
|
|
||||||
JSIdArray *ida;
|
JSIdArray *ida;
|
||||||
if (!GetPropertyNames(cx, obj, JSITER_OWNONLY, &ida))
|
if (!GetPropertyNames(cx, obj, JSITER_OWNONLY, &ida))
|
||||||
@ -3840,7 +3775,6 @@ JS_NewPropertyIterator(JSContext *cx, JSObject *obj)
|
|||||||
JSIdArray *ida;
|
JSIdArray *ida;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
iterobj = NewObject(cx, &prop_iter_class, NULL, obj);
|
iterobj = NewObject(cx, &prop_iter_class, NULL, obj);
|
||||||
if (!iterobj)
|
if (!iterobj)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -3881,7 +3815,6 @@ JS_NextProperty(JSContext *cx, JSObject *iterobj, jsid *idp)
|
|||||||
JSIdArray *ida;
|
JSIdArray *ida;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, iterobj);
|
|
||||||
i = JSVAL_TO_INT(iterobj->fslots[JSSLOT_ITER_INDEX]);
|
i = JSVAL_TO_INT(iterobj->fslots[JSSLOT_ITER_INDEX]);
|
||||||
if (i < 0) {
|
if (i < 0) {
|
||||||
/* Native case: private data is a property tree node pointer. */
|
/* 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)
|
JS_GetReservedSlot(JSContext *cx, JSObject *obj, uint32 index, jsval *vp)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
return js_GetReservedSlot(cx, obj, index, vp);
|
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)
|
JS_SetReservedSlot(JSContext *cx, JSObject *obj, uint32 index, jsval v)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, v);
|
|
||||||
return js_SetReservedSlot(cx, obj, index, v);
|
return js_SetReservedSlot(cx, obj, index, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3939,14 +3870,12 @@ JS_NewArrayObject(JSContext *cx, jsint length, jsval *vector)
|
|||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
/* NB: jsuint cast does ToUint32. */
|
/* NB: jsuint cast does ToUint32. */
|
||||||
ASSERT_SAME_COMPARTMENT(cx, ValueArray(vector, (jsuint)length));
|
|
||||||
return js_NewArrayObject(cx, (jsuint)length, vector);
|
return js_NewArrayObject(cx, (jsuint)length, vector);
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_PUBLIC_API(JSBool)
|
JS_PUBLIC_API(JSBool)
|
||||||
JS_IsArrayObject(JSContext *cx, JSObject *obj)
|
JS_IsArrayObject(JSContext *cx, JSObject *obj)
|
||||||
{
|
{
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
return obj->wrappedObject(cx)->isArray();
|
return obj->wrappedObject(cx)->isArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3954,7 +3883,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_GetArrayLength(JSContext *cx, JSObject *obj, jsuint *lengthp)
|
JS_GetArrayLength(JSContext *cx, JSObject *obj, jsuint *lengthp)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
return js_GetLengthProperty(cx, obj, lengthp);
|
return js_GetLengthProperty(cx, obj, lengthp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3962,7 +3890,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_SetArrayLength(JSContext *cx, JSObject *obj, jsuint length)
|
JS_SetArrayLength(JSContext *cx, JSObject *obj, jsuint length)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
return js_SetLengthProperty(cx, obj, length);
|
return js_SetLengthProperty(cx, obj, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3970,7 +3897,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_HasArrayLength(JSContext *cx, JSObject *obj, jsuint *lengthp)
|
JS_HasArrayLength(JSContext *cx, JSObject *obj, jsuint *lengthp)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
return js_HasLengthProperty(cx, obj, lengthp);
|
return js_HasLengthProperty(cx, obj, lengthp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3979,7 +3905,6 @@ JS_CheckAccess(JSContext *cx, JSObject *obj, jsid id, JSAccessMode mode,
|
|||||||
jsval *vp, uintN *attrsp)
|
jsval *vp, uintN *attrsp)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, id);
|
|
||||||
return obj->checkAccess(cx, id, mode, vp, attrsp);
|
return obj->checkAccess(cx, id, mode, vp, attrsp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4041,7 +3966,6 @@ JS_NewFunction(JSContext *cx, JSNative native, uintN nargs, uintN flags,
|
|||||||
JSAtom *atom;
|
JSAtom *atom;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, parent);
|
|
||||||
|
|
||||||
if (!name) {
|
if (!name) {
|
||||||
atom = NULL;
|
atom = NULL;
|
||||||
@ -4057,7 +3981,6 @@ JS_PUBLIC_API(JSObject *)
|
|||||||
JS_CloneFunctionObject(JSContext *cx, JSObject *funobj, JSObject *parent)
|
JS_CloneFunctionObject(JSContext *cx, JSObject *funobj, JSObject *parent)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, parent); // XXX no funobj for now
|
|
||||||
if (!parent) {
|
if (!parent) {
|
||||||
if (cx->fp)
|
if (cx->fp)
|
||||||
parent = js_GetScopeChain(cx, cx->fp);
|
parent = js_GetScopeChain(cx, cx->fp);
|
||||||
@ -4289,7 +4212,6 @@ JS_DefineFunctions(JSContext *cx, JSObject *obj, JSFunctionSpec *fs)
|
|||||||
JSFunction *fun;
|
JSFunction *fun;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
ctor = NULL;
|
ctor = NULL;
|
||||||
for (; fs->name; fs++) {
|
for (; fs->name; fs++) {
|
||||||
flags = fs->flags;
|
flags = fs->flags;
|
||||||
@ -4340,7 +4262,6 @@ JS_DefineFunction(JSContext *cx, JSObject *obj, const char *name, JSNative call,
|
|||||||
uintN nargs, uintN attrs)
|
uintN nargs, uintN attrs)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
JSAtom *atom = js_Atomize(cx, name, strlen(name), 0);
|
JSAtom *atom = js_Atomize(cx, name, strlen(name), 0);
|
||||||
return atom ? js_DefineFunction(cx, obj, atom, call, nargs, attrs) : NULL;
|
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)
|
uintN nargs, uintN attrs)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
JSAtom *atom = js_AtomizeChars(cx, name, AUTO_NAMELEN(name, namelen), 0);
|
JSAtom *atom = js_AtomizeChars(cx, name, AUTO_NAMELEN(name, namelen), 0);
|
||||||
return atom ? js_DefineFunction(cx, obj, atom, call, nargs, attrs) : NULL;
|
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)
|
const char *filename, uintN lineno)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, principals);
|
|
||||||
|
|
||||||
uint32 tcflags = JS_OPTIONS_TO_TCFLAGS(cx) | TCF_NEED_MUTABLE_SCRIPT;
|
uint32 tcflags = JS_OPTIONS_TO_TCFLAGS(cx) | TCF_NEED_MUTABLE_SCRIPT;
|
||||||
JSScript *script = Compiler::compileScript(cx, obj, NULL, principals, tcflags,
|
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;
|
JSErrorReporter older;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
chars = js_InflateString(cx, bytes, &length);
|
chars = js_InflateString(cx, bytes, &length);
|
||||||
if (!chars)
|
if (!chars)
|
||||||
return JS_TRUE;
|
return JS_TRUE;
|
||||||
@ -4473,7 +4391,6 @@ JS_CompileFile(JSContext *cx, JSObject *obj, const char *filename)
|
|||||||
JSScript *script;
|
JSScript *script;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj);
|
|
||||||
if (!filename || strcmp(filename, "-") == 0) {
|
if (!filename || strcmp(filename, "-") == 0) {
|
||||||
fp = stdin;
|
fp = stdin;
|
||||||
} else {
|
} else {
|
||||||
@ -4502,7 +4419,6 @@ JS_CompileFileHandleForPrincipals(JSContext *cx, JSObject *obj, const char *file
|
|||||||
JSScript *script;
|
JSScript *script;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, principals);
|
|
||||||
tcflags = JS_OPTIONS_TO_TCFLAGS(cx);
|
tcflags = JS_OPTIONS_TO_TCFLAGS(cx);
|
||||||
script = Compiler::compileScript(cx, obj, NULL, principals, tcflags,
|
script = Compiler::compileScript(cx, obj, NULL, principals, tcflags,
|
||||||
NULL, 0, file, filename, 1);
|
NULL, 0, file, filename, 1);
|
||||||
@ -4522,7 +4438,6 @@ JS_NewScriptObject(JSContext *cx, JSScript *script)
|
|||||||
JSObject *obj;
|
JSObject *obj;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, script);
|
|
||||||
if (!script)
|
if (!script)
|
||||||
return NewObject(cx, &js_ScriptClass, NULL, NULL);
|
return NewObject(cx, &js_ScriptClass, NULL, NULL);
|
||||||
|
|
||||||
@ -4554,7 +4469,6 @@ JS_PUBLIC_API(void)
|
|||||||
JS_DestroyScript(JSContext *cx, JSScript *script)
|
JS_DestroyScript(JSContext *cx, JSScript *script)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, script);
|
|
||||||
js_DestroyScript(cx, script);
|
js_DestroyScript(cx, script);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4570,7 +4484,6 @@ JS_CompileUCFunctionForPrincipals(JSContext *cx, JSObject *obj,
|
|||||||
uintN i;
|
uintN i;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, principals);
|
|
||||||
if (!name) {
|
if (!name) {
|
||||||
funAtom = NULL;
|
funAtom = NULL;
|
||||||
} else {
|
} else {
|
||||||
@ -4676,7 +4589,6 @@ JS_DecompileScript(JSContext *cx, JSScript *script, const char *name, uintN inde
|
|||||||
JSString *str;
|
JSString *str;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, script);
|
|
||||||
jp = js_NewPrinter(cx, name, NULL,
|
jp = js_NewPrinter(cx, name, NULL,
|
||||||
indent & ~JS_DONT_PRETTY_PRINT,
|
indent & ~JS_DONT_PRETTY_PRINT,
|
||||||
!(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)
|
JS_DecompileFunction(JSContext *cx, JSFunction *fun, uintN indent)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, fun);
|
|
||||||
return js_DecompileToString(cx, "JS_DecompileFunction", fun,
|
return js_DecompileToString(cx, "JS_DecompileFunction", fun,
|
||||||
indent & ~JS_DONT_PRETTY_PRINT,
|
indent & ~JS_DONT_PRETTY_PRINT,
|
||||||
!(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)
|
JS_DecompileFunctionBody(JSContext *cx, JSFunction *fun, uintN indent)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, fun);
|
|
||||||
return js_DecompileToString(cx, "JS_DecompileFunctionBody", fun,
|
return js_DecompileToString(cx, "JS_DecompileFunctionBody", fun,
|
||||||
indent & ~JS_DONT_PRETTY_PRINT,
|
indent & ~JS_DONT_PRETTY_PRINT,
|
||||||
!(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;
|
JSBool ok;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, script);
|
|
||||||
ok = js_Execute(cx, obj, script, NULL, 0, rval);
|
ok = js_Execute(cx, obj, script, NULL, 0, rval);
|
||||||
LAST_FRAME_CHECKS(cx, ok);
|
LAST_FRAME_CHECKS(cx, ok);
|
||||||
return ok;
|
return ok;
|
||||||
@ -4788,7 +4697,6 @@ JS_CallFunction(JSContext *cx, JSObject *obj, JSFunction *fun, uintN argc, jsval
|
|||||||
JSBool ok;
|
JSBool ok;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
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,
|
ok = js_InternalCall(cx, obj, OBJECT_TO_JSVAL(FUN_OBJECT(fun)), argc, argv,
|
||||||
rval);
|
rval);
|
||||||
LAST_FRAME_CHECKS(cx, ok);
|
LAST_FRAME_CHECKS(cx, ok);
|
||||||
@ -4800,7 +4708,6 @@ JS_CallFunctionName(JSContext *cx, JSObject *obj, const char *name, uintN argc,
|
|||||||
jsval *rval)
|
jsval *rval)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, ValueArray(argv, argc));
|
|
||||||
|
|
||||||
AutoValueRooter tvr(cx);
|
AutoValueRooter tvr(cx);
|
||||||
JSAtom *atom = js_Atomize(cx, name, strlen(name), 0);
|
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;
|
JSBool ok;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, obj, fval, ValueArray(argv, argc));
|
|
||||||
ok = js_InternalCall(cx, obj, fval, argc, argv, rval);
|
ok = js_InternalCall(cx, obj, fval, argc, argv, rval);
|
||||||
LAST_FRAME_CHECKS(cx, ok);
|
LAST_FRAME_CHECKS(cx, ok);
|
||||||
return ok;
|
return ok;
|
||||||
@ -4828,7 +4734,6 @@ JS_PUBLIC_API(JSObject *)
|
|||||||
JS_New(JSContext *cx, JSObject *ctor, uintN argc, jsval *argv)
|
JS_New(JSContext *cx, JSObject *ctor, uintN argc, jsval *argv)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, ctor, ValueArray(argv, argc));
|
|
||||||
|
|
||||||
// This is not a simple variation of JS_CallFunctionValue because JSOP_NEW
|
// 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
|
// 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_PUBLIC_API(const char *)
|
||||||
JS_GetStringBytesZ(JSContext *cx, JSString *str)
|
JS_GetStringBytesZ(JSContext *cx, JSString *str)
|
||||||
{
|
{
|
||||||
ASSERT_SAME_COMPARTMENT(cx, str);
|
|
||||||
return js_GetStringBytes(cx, str);
|
return js_GetStringBytes(cx, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
JS_PUBLIC_API(const jschar *)
|
JS_PUBLIC_API(const jschar *)
|
||||||
JS_GetStringCharsZ(JSContext *cx, JSString *str)
|
JS_GetStringCharsZ(JSContext *cx, JSString *str)
|
||||||
{
|
{
|
||||||
ASSERT_SAME_COMPARTMENT(cx, str);
|
|
||||||
return js_UndependString(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)
|
JSONWriteCallback callback, void *data)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, replacer, space);
|
|
||||||
JSCharBuffer cb(cx);
|
JSCharBuffer cb(cx);
|
||||||
if (!js_Stringify(cx, vp, replacer, space, cb))
|
if (!js_Stringify(cx, vp, replacer, space, cb))
|
||||||
return false;
|
return false;
|
||||||
@ -5208,7 +5110,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_TryJSON(JSContext *cx, jsval *vp)
|
JS_TryJSON(JSContext *cx, jsval *vp)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, *vp);
|
|
||||||
return js_TryJSON(cx, vp);
|
return js_TryJSON(cx, vp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5230,7 +5131,6 @@ JS_PUBLIC_API(JSBool)
|
|||||||
JS_FinishJSONParse(JSContext *cx, JSONParser *jp, jsval reviver)
|
JS_FinishJSONParse(JSContext *cx, JSONParser *jp, jsval reviver)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, reviver);
|
|
||||||
return js_FinishJSONParse(cx, jp, reviver);
|
return js_FinishJSONParse(cx, jp, reviver);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5392,8 +5292,6 @@ JS_SetRegExpInput(JSContext *cx, JSString *input, JSBool multiline)
|
|||||||
JSRegExpStatics *res;
|
JSRegExpStatics *res;
|
||||||
|
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, input);
|
|
||||||
|
|
||||||
/* No locking required, cx is thread-private and input must be live. */
|
/* No locking required, cx is thread-private and input must be live. */
|
||||||
res = &cx->regExpStatics;
|
res = &cx->regExpStatics;
|
||||||
res->clearRoots();
|
res->clearRoots();
|
||||||
@ -5453,7 +5351,6 @@ JS_PUBLIC_API(void)
|
|||||||
JS_SetPendingException(JSContext *cx, jsval v)
|
JS_SetPendingException(JSContext *cx, jsval v)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v);
|
|
||||||
cx->throwing = JS_TRUE;
|
cx->throwing = JS_TRUE;
|
||||||
cx->exception = v;
|
cx->exception = v;
|
||||||
}
|
}
|
||||||
@ -5524,10 +5421,8 @@ JS_DropExceptionState(JSContext *cx, JSExceptionState *state)
|
|||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
if (state) {
|
if (state) {
|
||||||
if (state->throwing && JSVAL_IS_GCTHING(state->exception)) {
|
if (state->throwing && JSVAL_IS_GCTHING(state->exception))
|
||||||
ASSERT_SAME_COMPARTMENT(cx, state->exception);
|
|
||||||
JS_RemoveValueRoot(cx, &state->exception);
|
JS_RemoveValueRoot(cx, &state->exception);
|
||||||
}
|
|
||||||
cx->free(state);
|
cx->free(state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5536,7 +5431,6 @@ JS_PUBLIC_API(JSErrorReport *)
|
|||||||
JS_ErrorFromException(JSContext *cx, jsval v)
|
JS_ErrorFromException(JSContext *cx, jsval v)
|
||||||
{
|
{
|
||||||
CHECK_REQUEST(cx);
|
CHECK_REQUEST(cx);
|
||||||
ASSERT_SAME_COMPARTMENT(cx, v);
|
|
||||||
return js_ErrorFromException(cx, v);
|
return js_ErrorFromException(cx, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,7 +42,6 @@
|
|||||||
|
|
||||||
#include "jscntxt.h"
|
#include "jscntxt.h"
|
||||||
#include "jsparse.h"
|
#include "jsparse.h"
|
||||||
#include "jsstaticcheck.h"
|
|
||||||
#include "jsxml.h"
|
#include "jsxml.h"
|
||||||
|
|
||||||
inline bool
|
inline bool
|
||||||
@ -192,165 +191,6 @@ class AutoNamespaces : protected AutoGCRooter {
|
|||||||
JSXMLArray array;
|
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 <class T1> inline void
|
|
||||||
ASSERT_SAME_COMPARTMENT(JSContext *cx, T1 t1)
|
|
||||||
{
|
|
||||||
#ifdef DEBUG
|
|
||||||
START_ASSERT_SAME_COMPARTMENT();
|
|
||||||
c.check(t1);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
template <class T1, class T2> 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 <class T1, class T2, class T3> 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 <class T1, class T2, class T3, class T4> 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 <class T1, class T2, class T3, class T4, class T5> 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___ */
|
#endif /* jscntxtinlines_h___ */
|
||||||
|
@ -709,7 +709,7 @@ js_watch_set(JSContext *cx, JSObject *obj, jsval id, jsval *vp)
|
|||||||
? js_InternalCall(cx, obj,
|
? js_InternalCall(cx, obj,
|
||||||
CastAsObjectJSVal(wp->setter),
|
CastAsObjectJSVal(wp->setter),
|
||||||
1, vp, vp)
|
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. */
|
/* Evil code can cause us to have an arguments object. */
|
||||||
if (frame.getFrame())
|
if (frame.getFrame())
|
||||||
|
@ -439,7 +439,7 @@ Invoke(JSContext *cx, JSFunction *fun, JSScript *script, JSNative native,
|
|||||||
#ifdef DEBUG_NOT_THROWING
|
#ifdef DEBUG_NOT_THROWING
|
||||||
JSBool alreadyThrowing = cx->throwing;
|
JSBool alreadyThrowing = cx->throwing;
|
||||||
#endif
|
#endif
|
||||||
JSBool ok = callJSFastNative(cx, (JSFastNative) native, argc, vp);
|
JSBool ok = ((JSFastNative) native)(cx, argc, vp);
|
||||||
JS_RUNTIME_METER(cx->runtime, nativeCalls);
|
JS_RUNTIME_METER(cx->runtime, nativeCalls);
|
||||||
#ifdef DEBUG_NOT_THROWING
|
#ifdef DEBUG_NOT_THROWING
|
||||||
if (ok && !alreadyThrowing)
|
if (ok && !alreadyThrowing)
|
||||||
@ -548,7 +548,7 @@ Invoke(JSContext *cx, JSFunction *fun, JSScript *script, JSNative native,
|
|||||||
#endif
|
#endif
|
||||||
/* Primitive |this| should not be passed to slow natives. */
|
/* Primitive |this| should not be passed to slow natives. */
|
||||||
JSObject *thisp = JSVAL_TO_OBJECT(fp->thisv);
|
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_ASSERT(cx->fp == fp);
|
||||||
JS_RUNTIME_METER(cx->runtime, nativeCalls);
|
JS_RUNTIME_METER(cx->runtime, nativeCalls);
|
||||||
#ifdef DEBUG_NOT_THROWING
|
#ifdef DEBUG_NOT_THROWING
|
||||||
|
@ -4147,7 +4147,7 @@ AddPropertyHelper(JSContext *cx, JSClass *clasp, JSObject *obj, JSScope *scope,
|
|||||||
if (clasp->addProperty != JS_PropertyStub) {
|
if (clasp->addProperty != JS_PropertyStub) {
|
||||||
jsval nominal = *vp;
|
jsval nominal = *vp;
|
||||||
|
|
||||||
if (!callJSPropertyOp(cx, clasp->addProperty, obj, SPROP_USERID(sprop), vp))
|
if (!clasp->addProperty(cx, obj, SPROP_USERID(sprop), vp))
|
||||||
return false;
|
return false;
|
||||||
if (*vp != nominal) {
|
if (*vp != nominal) {
|
||||||
if (SPROP_HAS_VALID_SLOT(sprop, scope))
|
if (SPROP_HAS_VALID_SLOT(sprop, scope))
|
||||||
@ -4825,7 +4825,7 @@ js_GetPropertyHelper(JSContext *cx, JSObject *obj, jsid id, uintN getHow,
|
|||||||
if (!prop) {
|
if (!prop) {
|
||||||
*vp = JSVAL_VOID;
|
*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;
|
return JS_FALSE;
|
||||||
|
|
||||||
PCMETER(getHow & JSGET_CACHE_RESULT && JS_PROPERTY_CACHE(cx).nofills++);
|
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
|
* a prototype, call the class's delProperty hook, passing rval as the
|
||||||
* result parameter.
|
* 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;
|
sprop = (JSScopeProperty *)prop;
|
||||||
@ -5293,7 +5293,7 @@ js_DeleteProperty(JSContext *cx, JSObject *obj, jsid id, jsval *rval)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* XXXbe called with obj locked */
|
/* 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);
|
JS_UNLOCK_OBJ(cx, obj);
|
||||||
return JS_FALSE;
|
return JS_FALSE;
|
||||||
}
|
}
|
||||||
|
@ -756,6 +756,7 @@ struct JSObject {
|
|||||||
|
|
||||||
#endif /* JS_THREADSAFE */
|
#endif /* JS_THREADSAFE */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
inline void
|
inline void
|
||||||
OBJ_TO_INNER_OBJECT(JSContext *cx, JSObject *&obj)
|
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);
|
obj = xclasp->outerObject(cx, obj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
class ValueArray {
|
|
||||||
public:
|
|
||||||
jsval *array;
|
|
||||||
size_t length;
|
|
||||||
|
|
||||||
ValueArray(jsval *v, size_t c) : array(v), length(c) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
extern JSClass js_ObjectClass;
|
extern JSClass js_ObjectClass;
|
||||||
extern JSClass js_WithClass;
|
extern JSClass js_WithClass;
|
||||||
|
@ -113,7 +113,7 @@ JSProxyHandler::get(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id,
|
|||||||
}
|
}
|
||||||
if (desc.attrs & JSPROP_SHORTID)
|
if (desc.attrs & JSPROP_SHORTID)
|
||||||
id = INT_TO_JSID(desc.shortid);
|
id = INT_TO_JSID(desc.shortid);
|
||||||
return callJSPropertyOp(cx, desc.getter, proxy, id, vp);
|
return desc.getter(cx, proxy, id, vp);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@ -132,7 +132,7 @@ JSProxyHandler::set(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id,
|
|||||||
}
|
}
|
||||||
if (desc.attrs & JSPROP_SHORTID)
|
if (desc.attrs & JSPROP_SHORTID)
|
||||||
id = INT_TO_JSID(desc.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)
|
if (desc.attrs & JSPROP_READONLY)
|
||||||
return true;
|
return true;
|
||||||
@ -149,7 +149,7 @@ JSProxyHandler::set(JSContext *cx, JSObject *proxy, JSObject *receiver, jsid id,
|
|||||||
}
|
}
|
||||||
if (desc.attrs & JSPROP_SHORTID)
|
if (desc.attrs & JSPROP_SHORTID)
|
||||||
id = INT_TO_JSID(desc.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)
|
if (desc.attrs & JSPROP_READONLY)
|
||||||
return true;
|
return true;
|
||||||
|
@ -46,8 +46,6 @@
|
|||||||
#include "jsobj.h"
|
#include "jsobj.h"
|
||||||
#include "jsscope.h"
|
#include "jsscope.h"
|
||||||
|
|
||||||
#include "jscntxtinlines.h"
|
|
||||||
|
|
||||||
inline JSEmptyScope *
|
inline JSEmptyScope *
|
||||||
JSScope::createEmptyScope(JSContext *cx, JSClass *clasp)
|
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)
|
if (obj->getClass() == &js_WithClass)
|
||||||
obj = js_UnwrapWithObject(cx, obj);
|
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
|
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. */
|
/* See the comment in JSScopeProperty::get as to why we check for With. */
|
||||||
if (obj->getClass() == &js_WithClass)
|
if (obj->getClass() == &js_WithClass)
|
||||||
obj = js_UnwrapWithObject(cx, obj);
|
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___ */
|
#endif /* jsscopeinlines_h___ */
|
||||||
|
Loading…
Reference in New Issue
Block a user