char *entryAddr; uint32 i, j, n, entrySize; JSDHashEntryHdr *entry; JSDHashOperator op;  entryAddr = table->entryStore; entrySize = table->entrySize; n = JS_BIT(table->sizeLog2); for (i = j = 0; i < n; i++) { entry = (JSDHashEntryHdr *)entryAddr; if (JS_DHASH_ENTRY_IS_BUSY(entry)) { op = etor(table, entry, j++, arg); if (op & JS_DHASH_REMOVE) { table->ops->clearEntry(table, entry); MARK_ENTRY_FREE(entry); table->removedCount++; table->entryCount--; } if (op & JS_DHASH_STOP) return j; } entryAddr += entrySize; } return j;
return malloc(nbytes);
JS_PUBLIC_API(uint32)JS_DHashTableEnumerate(JSDHashTable *table, JSDHashEnumerator etor, void *arg){    char *entryAddr;    uint32 i, j, n, entrySize;    JSDHashEntryHdr *entry;    JSDHashOperator op;    entryAddr = table->entryStore;    entrySize = table->entrySize;    n = JS_BIT(table->sizeLog2);    for (i = j = 0; i < n; i++) {        entry = (JSDHashEntryHdr *)entryAddr;        if (JS_DHASH_ENTRY_IS_BUSY(entry)) {            op = etor(table, entry, j++, arg);            if (op & JS_DHASH_REMOVE) {                table->ops->clearEntry(table, entry);                MARK_ENTRY_FREE(entry);                table->removedCount++;                table->entryCount--;            }            if (op & JS_DHASH_STOP)                return j;        }        entryAddr += entrySize;    }    return j;}