JSAtomListElement * JSAtomListIterator::operator ()() { JSAtomListElement *ale; JSHashTable *ht; if (index == uint32(-1)) return NULL; ale = next; if (!ale) { ht = list->table; if (!ht) goto done; do { if (index == JS_BIT(JS_HASH_BITS - ht->shift)) goto done; next = (JSAtomListElement *) ht->buckets[index++]; } while (!next); ale = next; } next = ALE_NEXT(ale); return ale; done: index = uint32(-1); return NULL; }
JS_GetObjectTotalSize(JSContext *cx, JSObject *obj) { size_t nbytes; JSScope *scope; nbytes = sizeof *obj + obj->map->nslots * sizeof obj->slots[0]; if (OBJ_IS_NATIVE(obj)) { scope = OBJ_SCOPE(obj); if (scope->object == obj) { nbytes += sizeof *scope; nbytes += JS_BIT(scope->sizeLog2) * sizeof(JSScopeProperty *); } } return nbytes; }
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); nb = n * sizeof(JSHashEntry *); ht->buckets = (JSHashEntry**) allocOps->allocTable(allocPriv, nb); if (!ht->buckets) { allocOps->freeTable(allocPriv, ht, nb); return NULL; } memset(ht->buckets, 0, nb); ht->keyHash = keyHash; ht->keyCompare = keyCompare; ht->valueCompare = valueCompare; ht->allocOps = allocOps; ht->allocPriv = allocPriv; return ht; }