void WeakMapBase::sweepZone(JS::Zone* zone) { for (WeakMapBase* m = zone->gcWeakMapList().getFirst(); m;) { WeakMapBase* next = m->getNext(); if (m->marked) { m->sweep(); } else { m->clearAndCompact(); m->removeFrom(zone->gcWeakMapList()); } m = next; } #ifdef DEBUG for (WeakMapBase* m : zone->gcWeakMapList()) { MOZ_ASSERT(m->isInList() && m->marked); } #endif }
void WeakMapBase::sweepZone(JS::Zone* zone) { for (WeakMapBase* m = zone->gcWeakMapList().getFirst(); m; ) { WeakMapBase* next = m->getNext(); if (m->marked) { m->sweep(); } else { /* Destroy the hash map now to catch any use after this point. */ m->finish(); m->removeFrom(zone->gcWeakMapList()); } m = next; } #ifdef DEBUG for (WeakMapBase* m : zone->gcWeakMapList()) MOZ_ASSERT(m->isInList() && m->marked); #endif }