bool MapObject::getKeysAndValuesInterleaved(JSContext* cx, HandleObject obj, JS::MutableHandle<GCVector<JS::Value>> entries) { ValueMap* map = obj->as<MapObject>().getData(); if (!map) return false; for (ValueMap::Range r = map->all(); !r.empty(); r.popFront()) { if (!entries.append(r.front().key.get()) || !entries.append(r.front().value)) { return false; } } return true; }
bool SetObject::keys(JSContext* cx, HandleObject obj, JS::MutableHandle<GCVector<JS::Value>> keys) { ValueSet* set = obj->as<SetObject>().getData(); if (!set) return false; for (ValueSet::Range r = set->all(); !r.empty(); r.popFront()) { if (!keys.append(r.front().get())) return false; } return true; }