<div class="gmail_quote">On Wed, Sep 19, 2012 at 1:12 AM, Geoffrey Garen <span dir="ltr">&lt;<a href="mailto:ggaren@apple.com" target="_blank">ggaren@apple.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Stephen.<br>
<div class="im"><br>
&gt; 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 &quot;window.location&quot;, etc.? And assuming it&#39;s one or the other, what&#39;s the main use case of the other one?<br>

<br>
</div>window.location uses Lookup.h. Lookup.h contains hash table logic for static properties compiled into the binary.<br></blockquote><div><br></div><div>Thanks! So is PropertyMapHashTable for properties that have been defined by the user, or is it not that simple? </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><br>
&gt; 2. Also, it looks like string keys in Lookup.h are always &quot;Identifier&quot;s, meaning (I think) that they are guaranteed to be single unique entries in the &quot;identifierTable&quot; 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?<br>

<br>
</div>It does.<br>
<br>
inline PropertyTable::find_iterator PropertyTable::find(const KeyType&amp; key)<br>
{<br>
    ASSERT(key);<br>
    ASSERT(key-&gt;isIdentifier() || key-&gt;isEmptyUnique());<br>
    unsigned hash = key-&gt;existingHash(); </blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im"> </div></blockquote><div><br></div><div>My mistake: the second assert seems to not be there in QtWebKit-2.2.0, the version I&#39;m looking through, but I reading further I realized that keys are also assumed to be unique identifiers with the comparison below.</div>
<div><br></div><div><div>        if (key == table()[entryIndex - 1].key)</div><div>            return std::make_pair(&amp;table()[entryIndex - 1], hash &amp; m_indexMask);</div></div><div><br></div><div>(The way the types resolve, the key comparison is done on address rather than value, as I assumed the first time I read it)</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">
&gt; 3. Does the JIT side of the codebase use unique string identifiers like Lookup.h does, or is that a whole different ballgame? </div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">
<br>
</div>Can you be more specific?<br></blockquote><div><br></div><div>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&#39;t seem to find any code that does it, but I am new to the whole tree.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Geoff<br>
</blockquote></div><br><div>Thanks!
</div>