[webkit-dev] Hash tables and unique string identifiers in JavaScriptCore

Geoffrey Garen ggaren at apple.com
Tue Sep 18 22:12:01 PDT 2012


Hi Stephen.

> 1. I notice there are at least two implementations of hash tables in JavaScriptCore/runtime, in Lookup.h and PropertyMapHashTable.h. Which, if either, is used in, say, the normal case of accessing the properties of a DOM element, like "window.location", etc.? And assuming it's one or the other, what's the main use case of the other one?

window.location uses Lookup.h. Lookup.h contains hash table logic for static properties compiled into the binary.

> 2. Also, it looks like string keys in Lookup.h are always "Identifier"s, meaning (I think) that they are guaranteed to be single unique entries in the "identifierTable" of a JSGlobalData object. Because of this preprocessing, string equality in the hash table implementation can be tested just by comparing addresses. Is there any reason why PropertyMapHashTable.h does not (as far as I can tell) do the same thing?

It does.

inline PropertyTable::find_iterator PropertyTable::find(const KeyType& key)
{
    ASSERT(key);
    ASSERT(key->isIdentifier() || key->isEmptyUnique());
    unsigned hash = key->existingHash();

> 3. Does the JIT side of the codebase use unique string identifiers like Lookup.h does, or is that a whole different ballgame?

Can you be more specific?

Geoff


More information about the webkit-dev mailing list