(void) ChangeTable(table, JS_CeilingLog2(capacity) - table->sizeLog2, NULL);
(void) ChangeTable(table, JS_CeilingLog2(capacity) - table->sizeLog2);
JS_DHashTableEnumerate(JSDHashTable *table, JSDHashEnumerator etor, void *arg){    char *entryAddr, *entryLimit;    uint32 i, capacity, entrySize;    JSDHashEntryHdr *entry;    JSDHashOperator op;    entryAddr = table->entryStore;    entrySize = table->entrySize;    capacity = JS_BIT(table->sizeLog2);    entryLimit = entryAddr + capacity * entrySize;    i = 0;    while (entryAddr < entryLimit) {        entry = (JSDHashEntryHdr *)entryAddr;        if (ENTRY_IS_LIVE(entry)) {            op = etor(table, entry, i++, arg);            if (op & JS_DHASH_REMOVE) {                METER(table->stats.removeEnums++);                JS_DHashTableRawRemove(table, entry);            }            if (op & JS_DHASH_STOP)                break;        }        entryAddr += entrySize;    }    /* Shrink or compress if enough entries were removed that alpha < .5. */    if (table->removedCount >= capacity >> 2) {        METER(table->stats.enumShrinks++);        capacity = table->entryCount;        capacity += capacity >> 1;        if (capacity < JS_DHASH_MIN_SIZE)            capacity = JS_DHASH_MIN_SIZE;        (void) ChangeTable(table,                           JS_CeilingLog2(capacity) - table->sizeLog2,                           NULL);    }    return i;}