js_atom_uninterner(JSHashEntry *he, intN i, void *arg) { JSAtom *atom; UninternArgs *args; atom = (JSAtom *)he; args = (UninternArgs *)arg; if (ATOM_IS_STRING(atom)) js_FinalizeStringRT(args->rt, ATOM_TO_STRING(atom)); else if (ATOM_IS_OBJECT(atom)) args->leaks++; return HT_ENUMERATE_NEXT; }
static JSDHashOperator js_string_uninterner(JSDHashTable *table, JSDHashEntryHdr *hdr, uint32 number, void *arg) { JSAtomHashEntry *entry = TO_ATOM_ENTRY(hdr); JSRuntime *rt = (JSRuntime *)arg; JSString *str; /* * Any string entry that remains at this point must be initialized, as the * last GC should clean any uninitialized ones. */ JS_ASSERT(IS_STRING_TABLE(table)); JS_ASSERT(entry->keyAndFlags != 0); str = (JSString *)ATOM_ENTRY_KEY(entry); js_FinalizeStringRT(rt, str); return JS_DHASH_NEXT; }