ht = (JSHashTable*) (*allocOps->allocTable)(allocPriv, sizeof *ht);
ht = (JSHashTable*) allocOps->allocTable(allocPriv, sizeof *ht);
JS_PUBLIC_API(JSHashTable *)JS_NewHashTable(uint32 n, JSHashFunction keyHash,                JSHashComparator keyCompare, JSHashComparator valueCompare,                JSHashAllocOps *allocOps, void *allocPriv){    JSHashTable *ht;    size_t nb;    if (n <= MINBUCKETS) {        n = MINBUCKETSLOG2;    } else {        n = JS_CeilingLog2(n);        if ((int32)n < 0)            return NULL;    }    if (!allocOps) allocOps = &defaultHashAllocOps;    ht = (JSHashTable*) (*allocOps->allocTable)(allocPriv, sizeof *ht);    if (!ht)	return NULL;    memset(ht, 0, sizeof *ht);    ht->shift = JS_HASH_BITS - n;    n = JS_BIT(n);#if defined _MSC_VER && _MSC_VER <= 800    if (n > 16000) {        (*allocOps->freeTable)(allocPriv, ht);        return NULL;    }#endif  /* WIN16 */    nb = n * sizeof(JSHashEntry *);    ht->buckets = (JSHashEntry**) (*allocOps->allocTable)(allocPriv, nb);    if (!ht->buckets) {        (*allocOps->freeTable)(allocPriv, ht);        return NULL;    }    memset(ht->buckets, 0, nb);    ht->keyHash = keyHash;    ht->keyCompare = keyCompare;    ht->valueCompare = valueCompare;    ht->allocOps = allocOps;    ht->allocPriv = allocPriv;    return ht;}