void WeakMapBase::sweepCompartment(JSCompartment *c) { WeakMapBase **tailPtr = &c->gcWeakMapList; for (WeakMapBase *m = c->gcWeakMapList, *next; m; m = next) { next = m->next; if (m->marked) { m->sweep(); *tailPtr = m; tailPtr = &m->next; } else { /* Destroy the hash map now to catch any use after this point. */ m->finish(); m->next = WeakMapNotInList; } } *tailPtr = nullptr; #ifdef DEBUG for (WeakMapBase *m = c->gcWeakMapList; m; m = m->next) JS_ASSERT(m->isInList() && m->marked); #endif }