void JSCompartment::purge(JSContext *cx) { arenas.purge(); regExps.purge(); dtoaCache.purge(); /* * Clear the hash and reset all evalHashLink to null before the GC. This * way MarkChildren(trc, JSScript *) can assume that JSScript::u.object is * not null when we have script owned by an object and not from the eval * cache. */ for (size_t i = 0; i < ArrayLength(evalCache); ++i) { for (JSScript **listHeadp = &evalCache[i]; *listHeadp; ) { JSScript *script = *listHeadp; JS_ASSERT(GetGCThingTraceKind(script) == JSTRACE_SCRIPT); *listHeadp = NULL; listHeadp = &script->evalHashLink(); } } nativeIterCache.purge(); toSourceCache.destroyIfConstructed(); }