Merge backout.

This commit is contained in:
Jason Orendorff 2010-06-07 20:39:48 -05:00
commit 6e7f075424
4 changed files with 18 additions and 21 deletions

View File

@ -1443,9 +1443,7 @@ JS_ResolveStandardClass(JSContext *cx, JSObject *obj, jsval id, JSBool *resolved
return JS_TRUE;
JSProtoKey key = JSCLASS_CACHED_PROTO_KEY(stdnm->clasp);
jsval v;
if (!js_GetReservedSlot(cx, obj, key, &v))
return JS_FALSE;
jsval v = obj->getReservedSlot(key);
if (!JSVAL_IS_PRIMITIVE(v))
return JS_TRUE;
@ -4083,8 +4081,7 @@ js_generic_fast_native_method_dispatcher(JSContext *cx, uintN argc, jsval *vp)
JSObject *tmp;
JSFastNative native;
if (!js_GetReservedSlot(cx, JSVAL_TO_OBJECT(*vp), 0, &fsv))
return JS_FALSE;
fsv = JSVAL_TO_OBJECT(*vp)->getReservedSlot(0);
fs = (JSFunctionSpec *) JSVAL_TO_PRIVATE(fsv);
JS_ASSERT((~fs->flags & (JSFUN_FAST_NATIVE | JSFUN_GENERIC_NATIVE)) == 0);
@ -4139,8 +4136,7 @@ js_generic_native_method_dispatcher(JSContext *cx, JSObject *obj,
JSFunctionSpec *fs;
JSObject *tmp;
if (!js_GetReservedSlot(cx, JSVAL_TO_OBJECT(argv[-2]), 0, &fsv))
return JS_FALSE;
fsv = JSVAL_TO_OBJECT(argv[-2])->getReservedSlot(0);
fs = (JSFunctionSpec *) JSVAL_TO_PRIVATE(fsv);
JS_ASSERT((fs->flags & (JSFUN_FAST_NATIVE | JSFUN_GENERIC_NATIVE)) ==
JSFUN_GENERIC_NATIVE);

View File

@ -3740,15 +3740,6 @@ static JSObjectOp lazy_prototype_init[JSProto_LIMIT] = {
JS_END_EXTERN_C
static jsval
GetGlobalObjectReservedSlot(JSContext *cx, JSObject *obj, uint32 index)
{
JSClass *clasp = obj->getClass();
JS_ASSERT(clasp->flags & JSCLASS_IS_GLOBAL);
uint32 slot = JSSLOT_START(clasp) + index;
return (slot < obj->numSlots()) ? obj->getSlot(slot) : JSVAL_VOID;
}
JSBool
js_GetClassObject(JSContext *cx, JSObject *obj, JSProtoKey key,
JSObject **objp)
@ -3767,7 +3758,7 @@ js_GetClassObject(JSContext *cx, JSObject *obj, JSProtoKey key,
return JS_TRUE;
}
v = GetGlobalObjectReservedSlot(cx, obj, key);
v = obj->getReservedSlot(key);
if (!JSVAL_IS_PRIMITIVE(v)) {
*objp = JSVAL_TO_OBJECT(v);
return JS_TRUE;
@ -3791,7 +3782,7 @@ js_GetClassObject(JSContext *cx, JSObject *obj, JSProtoKey key,
if (!init(cx, obj)) {
ok = JS_FALSE;
} else {
v = GetGlobalObjectReservedSlot(cx, obj, key);
v = obj->getReservedSlot(key);
if (!JSVAL_IS_PRIMITIVE(v))
cobj = JSVAL_TO_OBJECT(v);
}
@ -5752,7 +5743,7 @@ js_GetClassPrototype(JSContext *cx, JSObject *scope, JSProtoKey protoKey,
}
scope = scope->getGlobal();
if (scope->getClass()->flags & JSCLASS_IS_GLOBAL) {
jsval v = GetGlobalObjectReservedSlot(cx, scope, JSProto_LIMIT + protoKey);
jsval v = scope->getReservedSlot(JSProto_LIMIT + protoKey);
if (!JSVAL_IS_PRIMITIVE(v)) {
*protop = JSVAL_TO_OBJECT(v);
return true;
@ -6326,7 +6317,8 @@ js_ReportGetterOnlyAssignment(JSContext *cx)
JSCompartment *
JSObject::getCompartment(JSContext *cx) {
JSObject *obj = getGlobal();
jsval v = GetGlobalObjectReservedSlot(cx, obj, JSRESERVED_GLOBAL_COMPARTMENT);
JS_ASSERT(obj->getClass()->flags & JSCLASS_IS_GLOBAL);
jsval v = obj->getReservedSlot(JSRESERVED_GLOBAL_COMPARTMENT);
return (JSCompartment *) JSVAL_TO_PRIVATE(v);
}

View File

@ -348,6 +348,8 @@ struct JSObject {
inline jsval getSlotMT(JSContext *cx, uintN slot);
inline void setSlotMT(JSContext *cx, uintN slot, jsval value);
inline jsval getReservedSlot(uintN index) const;
JSObject *getProto() const {
return JSVAL_TO_OBJECT(fslots[JSSLOT_PROTO]);
}
@ -1266,7 +1268,7 @@ js_Clear(JSContext *cx, JSObject *obj);
extern bool
js_GetReservedSlot(JSContext *cx, JSObject *obj, uint32 index, jsval *vp);
bool
extern bool
js_SetReservedSlot(JSContext *cx, JSObject *obj, uint32 index, jsval v);
/*

View File

@ -97,6 +97,13 @@ JSObject::setSlotMT(JSContext *cx, uintN slot, jsval value)
#endif
}
inline jsval
JSObject::getReservedSlot(uintN index) const
{
uint32 slot = JSSLOT_START(getClass()) + index;
return (slot < numSlots()) ? getSlot(slot) : JSVAL_VOID;
}
inline bool
JSObject::isPrimitive() const
{