METER(table->stats.lookups++);
METER(table->stats.searches++);
SearchTable(JSDHashTable *table, const void *key, JSDHashNumber keyHash){    JSDHashNumber hash1, hash2;    int hashShift;    JSDHashEntryHdr *entry;    JSDHashMatchEntry matchEntry;    METER(table->stats.lookups++);    /* Compute the primary hash address. */    hashShift = table->hashShift;    hash1 = HASH1(keyHash, hashShift);    entry = ADDRESS_ENTRY(table, hash1);    /* Miss: return space for a new entry. */    if (JS_DHASH_ENTRY_IS_FREE(entry)) {        METER(table->stats.misses++);        return entry;    }    /* Hit: return entry. */    matchEntry = table->ops->matchEntry;    if (entry->keyHash == keyHash && matchEntry(table, entry, key)) {        METER(table->stats.hits++);        return entry;    }    /* Collision: double hash. */    hash2 = HASH2(keyHash, table->sizeLog2, hashShift);    do {        METER(table->stats.steps++);        hash1 -= hash2;        hash1 &= table->sizeMask;        entry = ADDRESS_ENTRY(table, hash1);        if (JS_DHASH_ENTRY_IS_FREE(entry)) {            METER(table->stats.misses++);            return entry;        }    } while (entry->keyHash != keyHash || !matchEntry(table, entry, key));    METER(table->stats.hits++);    return entry;}