void HashTable::createTable(VM* vm) const { ASSERT(!table); int linkIndex = compactHashSizeMask + 1; HashEntry* entries = new HashEntry[compactSize]; for (int i = 0; i < compactSize; ++i) entries[i].setKey(0); for (int i = 0; values[i].key; ++i) { StringImpl* identifier = Identifier::add(vm, values[i].key).leakRef(); int hashIndex = identifier->existingHash() & compactHashSizeMask; HashEntry* entry = &entries[hashIndex]; if (entry->key()) { while (entry->next()) { entry = entry->next(); } ASSERT(linkIndex < compactSize); entry->setNext(&entries[linkIndex++]); entry = entry->next(); } entry->initialize(identifier, values[i].attributes, values[i].value1, values[i].value2, values[i].intrinsic); } table = entries; }
void HashTable::createTable(JSGlobalData* globalData) const { ASSERT(!table); int linkIndex = compactHashSizeMask + 1; HashEntry* entries = new HashEntry[compactSize]; for (int i = 0; i < compactSize; ++i) entries[i].setKey(0); for (int i = 0; values[i].key; ++i) { StringImpl* identifier = Identifier::add(globalData, values[i].key).leakRef(); int hashIndex = identifier->existingHash() & compactHashSizeMask; HashEntry* entry = &entries[hashIndex]; if (entry->key()) { while (entry->next()) { entry = entry->next(); } ASSERT(linkIndex < compactSize); entry->setNext(&entries[linkIndex++]); entry = entry->next(); } entry->initialize(identifier, values[i].attributes, values[i].value1, values[i].value2 #if ENABLE(JIT) , values[i].generator #if ENABLE(DFG_JIT) , values[i].intrinsic #endif #endif ); } table = entries; }
void HashTable::createTable(JSGlobalData* globalData) const { #if ENABLE(PERFECT_HASH_SIZE) ASSERT(!table); HashEntry* entries = new HashEntry[hashSizeMask + 1]; for (int i = 0; i <= hashSizeMask; ++i) entries[i].setKey(0); for (int i = 0; values[i].key; ++i) { UString::Rep* identifier = Identifier::add(globalData, values[i].key).releaseRef(); int hashIndex = identifier->computedHash() & hashSizeMask; ASSERT(!entries[hashIndex].key()); entries[hashIndex].initialize(identifier, values[i].attributes, values[i].value1, values[i].value2); } table = entries; #else ASSERT(!table); int linkIndex = compactHashSizeMask + 1; HashEntry* entries = new HashEntry[compactSize]; for (int i = 0; i < compactSize; ++i) entries[i].setKey(0); for (int i = 0; values[i].key; ++i) { UString::Rep* identifier = Identifier::add(globalData, values[i].key).releaseRef(); int hashIndex = identifier->computedHash() & compactHashSizeMask; HashEntry* entry = &entries[hashIndex]; if (entry->key()) { while (entry->next()) { entry = entry->next(); } ASSERT(linkIndex < compactSize); entry->setNext(&entries[linkIndex++]); entry = entry->next(); } entry->initialize(identifier, values[i].attributes, values[i].value1, values[i].value2); } table = entries; #endif }