diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp index 9d7ca54eb55..3d310abdcdb 100644 --- a/js/src/jsapi.cpp +++ b/js/src/jsapi.cpp @@ -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); diff --git a/js/src/jsobj.cpp b/js/src/jsobj.cpp index 0fd27636d3c..7fd00d7b612 100644 --- a/js/src/jsobj.cpp +++ b/js/src/jsobj.cpp @@ -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); } diff --git a/js/src/jsobj.h b/js/src/jsobj.h index 5e01a981090..e0b8ee134bc 100644 --- a/js/src/jsobj.h +++ b/js/src/jsobj.h @@ -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); /* diff --git a/js/src/jsobjinlines.h b/js/src/jsobjinlines.h index 40b5174e622..dfed929758c 100644 --- a/js/src/jsobjinlines.h +++ b/js/src/jsobjinlines.h @@ -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 {