return (JSHashNumber)key >> JSVAL_TAGBITS;
JSObject *obj2; uint32 slot;  if (!JSVAL_IS_OBJECT(*vp)) return JS_TRUE; obj2 = JSVAL_TO_OBJECT(*vp); slot = (uint32) JSVAL_TO_INT(id); while (obj2) { if (obj2 == obj) { JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL, JSMSG_CYCLIC_VALUE, object_props[slot].name); return JS_FALSE; } obj2 = JSVAL_TO_OBJECT(OBJ_GET_SLOT(cx, obj2, slot)); } OBJ_SET_SLOT(cx, obj, slot, *vp); return JS_TRUE;
JS_STATIC_DLL_CALLBACK(JSHashNumber)js_hash_object(const void *key){    return (JSHashNumber)key >> JSVAL_TAGBITS;}