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

Stephen Lin swlin at post.harvard.edu
Tue Sep 18 22:29:45 PDT 2012


On Wed, Sep 19, 2012 at 1:12 AM, Geoffrey Garen <ggaren at apple.com> wrote:

> 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.
>

Thanks! So is PropertyMapHashTable for properties that have been defined by
the user, or is it not that simple?

>
> > 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();


>

My mistake: the second assert seems to not be there in QtWebKit-2.2.0, the
version I'm looking through, but I reading further I realized that keys are
also assumed to be unique identifiers with the comparison below.

        if (key == table()[entryIndex - 1].key)
            return std::make_pair(&table()[entryIndex - 1], hash &
m_indexMask);

(The way the types resolve, the key comparison is done on address rather
than value, as I assumed the first time I read it)


> > 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?
>

Apologies. Basically, does the implementation of object property access in
the JIT codebase also use strings which have been made unique identifiers
in the same way as in the runtime stack? (i.e. can they be assumed equal
iff they have the same address). I can't seem to find any code that does
it, but I am new to the whole tree.


> Geoff
>

Thanks!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-dev/attachments/20120919/03c493be/attachment.html>


More information about the webkit-dev mailing list