void ObjectWeakMap::checkAfterMovingGC() { for (ObjectValueMap::Range r = map.all(); !r.empty(); r.popFront()) { CheckGCThingAfterMovingGC(r.front().key().get()); CheckGCThingAfterMovingGC(&r.front().value().toObject()); } }
JS_NondeterministicGetWeakMapKeys(JSContext *cx, JSObject *obj, JSObject **ret) { if (!obj || !obj->isWeakMap()) { *ret = NULL; return true; } JSObject *arr = NewDenseEmptyArray(cx); if (!arr) return false; ObjectValueMap *map = GetObjectMap(obj); if (map) { for (ObjectValueMap::Range r = map->nondeterministicAll(); !r.empty(); r.popFront()) { if (!js_NewbornArrayPush(cx, arr, ObjectValue(*r.front().key))) return false; } } *ret = arr; return true; }
JS_NondeterministicGetWeakMapKeys(JSContext *cx, JSObject *obj, JSObject **ret) { if (!obj || !obj->isWeakMap()) { *ret = NULL; return true; } RootedVarObject arr(cx, NewDenseEmptyArray(cx)); if (!arr) return false; ObjectValueMap *map = GetObjectMap(obj); if (map) { for (ObjectValueMap::Range r = map->nondeterministicAll(); !r.empty(); r.popFront()) { JSObject *key = r.front().key; // Re-wrapping the key (see comment of GetKeyArg) if (!JS_WrapObject(cx, &key)) return false; if (!js_NewbornArrayPush(cx, arr, ObjectValue(*key))) return false; } } *ret = arr; return true; }