void js_InitAtomMap(JSContext *cx, JSAtomMap *map, AtomIndexMap *indices) { /* Map length must already be initialized. */ JS_ASSERT(indices->count() == map->length); if (indices->isMap()) { typedef AtomIndexMap::WordMap WordMap; const WordMap &wm = indices->asMap(); for (WordMap::Range r = wm.all(); !r.empty(); r.popFront()) { JSAtom *atom = r.front().key; jsatomid index = r.front().value; JS_ASSERT(index < map->length); map->vector[index] = atom; } } else { for (const AtomIndexMap::InlineElem *it = indices->asInline(), *end = indices->inlineEnd(); it != end; ++it) { JSAtom *atom = it->key; if (!atom) continue; JS_ASSERT(it->value < map->length); map->vector[it->value] = atom; } } }
void frontend::InitAtomMap(JSContext *cx, frontend::AtomIndexMap *indices, HeapPtrAtom *atoms) { if (indices->isMap()) { typedef AtomIndexMap::WordMap WordMap; const WordMap &wm = indices->asMap(); for (WordMap::Range r = wm.all(); !r.empty(); r.popFront()) { JSAtom *atom = r.front().key; jsatomid index = r.front().value; JS_ASSERT(index < indices->count()); atoms[index].init(atom); } } else { for (const AtomIndexMap::InlineElem *it = indices->asInline(), *end = indices->inlineEnd(); it != end; ++it) { JSAtom *atom = it->key; if (!atom) continue; JS_ASSERT(it->value < indices->count()); atoms[it->value].init(atom); } } }