<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[165482] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/165482">165482</a></dd>
<dt>Author</dt> <dd>barraclough@apple.com</dd>
<dt>Date</dt> <dd>2014-03-12 11:08:35 -0700 (Wed, 12 Mar 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Reduce memory use for static property maps
https://bugs.webkit.org/show_bug.cgi?id=129986

Reviewed by Andreas Kling.

Static property tables are currently duplicated on first use from read-only memory into dirty memory
in every process, and since the entries are large (48 bytes) and the tables can be unusually sparse
(we use a custom hash table without a rehash) a lot of memory may be wasted.

Source/JavaScriptCore: 

First, reduce the size of the hashtable. Instead of storing values in the table the hashtable maps
from string hashes to indicies into a densely packed array of values. Compute the index table at
compile time as a part of the derived sources step, such that this may be read-only data.

Second, don't copy all data from the HashTableValue array into a HashEntry objects. Instead refer
directly to the HashTableValue entries. The only data that needs to be allocated at runtime are the
keys, which are Identifiers.

* create_hash_table:
    - emit the hash table index into the derived source (we were calculating this already to ensure chaining does not get too deep).
* parser/Lexer.cpp:
(JSC::Lexer&lt;LChar&gt;::parseIdentifier):
(JSC::Lexer&lt;UChar&gt;::parseIdentifier):
(JSC::Lexer&lt;T&gt;::parseIdentifierSlowCase):
    - HashEntry -&gt; HashTableValue.
* parser/Lexer.h:
(JSC::Keywords::getKeyword):
    - HashEntry -&gt; HashTableValue.
* runtime/ClassInfo.h:
    - removed HashEntry.
* runtime/JSObject.cpp:
(JSC::getClassPropertyNames):
    - use HashTable::ConstIterator.
(JSC::JSObject::put):
(JSC::JSObject::deleteProperty):
(JSC::JSObject::findPropertyHashEntry):
    - HashEntry -&gt; HashTableValue.
(JSC::JSObject::reifyStaticFunctionsForDelete):
    - changed HashTable::ConstIterator interface.
* runtime/JSObject.h:
    - HashEntry -&gt; HashTableValue.
* runtime/Lookup.cpp:
(JSC::HashTable::createTable):
    - table -&gt; keys, keys array is now densely packed.
(JSC::HashTable::deleteTable):
    - table -&gt; keys.
(JSC::setUpStaticFunctionSlot):
    - HashEntry -&gt; HashTableValue.
* runtime/Lookup.h:
(JSC::HashTableValue::builtinGenerator):
(JSC::HashTableValue::function):
(JSC::HashTableValue::functionLength):
(JSC::HashTableValue::propertyGetter):
(JSC::HashTableValue::propertyPutter):
(JSC::HashTableValue::lexerValue):
    - added accessor methods from HashEntry.
(JSC::HashTable::copy):
    - fields changed.
(JSC::HashTable::initializeIfNeeded):
    - table -&gt; keys.
(JSC::HashTable::entry):
    - HashEntry -&gt; HashTableValue.
(JSC::HashTable::ConstIterator::ConstIterator):
    - iterate packed value array, so no need to skipInvalidKeys().
(JSC::HashTable::ConstIterator::value):
(JSC::HashTable::ConstIterator::key):
(JSC::HashTable::ConstIterator::operator-&gt;):
    - accessors now get HashTableValue/StringImpl* separately.
(JSC::HashTable::ConstIterator::operator++):
    - iterate packed value array, so no need to skipInvalidKeys().
(JSC::HashTable::end):
    - end is now size of dense not sparse array.
(JSC::getStaticPropertySlot):
(JSC::getStaticFunctionSlot):
(JSC::getStaticValueSlot):
(JSC::putEntry):
(JSC::lookupPut):
    - HashEntry -&gt; HashTableValue.

Source/WebCore: 

* bindings/js/JSDOMBinding.h:
(WebCore::getStaticValueSlotEntryWithoutCaching):
(WebCore::getStaticValueSlotEntryWithoutCaching&lt;JSDOMWrapper&gt;):
    - HashEntry -&gt; HashTableValue.
* bindings/js/JSDOMWindowCustom.cpp:
(WebCore::JSDOMWindow::getOwnPropertySlot):
    - HashEntry -&gt; HashTableValue.
* bindings/js/JSHistoryCustom.cpp:
(WebCore::JSHistory::getOwnPropertySlotDelegate):
    - HashEntry -&gt; HashTableValue.
* bindings/js/JSLocationCustom.cpp:
(WebCore::JSLocation::getOwnPropertySlotDelegate):
(WebCore::JSLocation::putDelegate):
    - HashEntry -&gt; HashTableValue.
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateGetOwnPropertySlotBody):
    - HashEntry -&gt; HashTableValue.
(GenerateHashTable):
    - emit the hash table index into the derived source (we were calculating this already to ensure chaining does not get too deep).

LayoutTests: 

* inspector-protocol/debugger/setPauseOnExceptions-all-expected.txt:
* inspector-protocol/debugger/setPauseOnExceptions-none-expected.txt:
* inspector-protocol/debugger/setPauseOnExceptions-uncaught-expected.txt:
* js/dom/dom-static-property-for-in-iteration-expected.txt:
    - Properties now iterated in correct order, not permuted by hash table.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsinspectorprotocoldebuggersetPauseOnExceptionsallexpectedtxt">trunk/LayoutTests/inspector-protocol/debugger/setPauseOnExceptions-all-expected.txt</a></li>
<li><a href="#trunkLayoutTestsinspectorprotocoldebuggersetPauseOnExceptionsnoneexpectedtxt">trunk/LayoutTests/inspector-protocol/debugger/setPauseOnExceptions-none-expected.txt</a></li>
<li><a href="#trunkLayoutTestsinspectorprotocoldebuggersetPauseOnExceptionsuncaughtexpectedtxt">trunk/LayoutTests/inspector-protocol/debugger/setPauseOnExceptions-uncaught-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomdomstaticpropertyforiniterationexpectedtxt">trunk/LayoutTests/js/dom/dom-static-property-for-in-iteration-expected.txt</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorecreate_hash_table">trunk/Source/JavaScriptCore/create_hash_table</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserLexercpp">trunk/Source/JavaScriptCore/parser/Lexer.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreparserLexerh">trunk/Source/JavaScriptCore/parser/Lexer.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeClassInfoh">trunk/Source/JavaScriptCore/runtime/ClassInfo.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSObjectcpp">trunk/Source/JavaScriptCore/runtime/JSObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSObjecth">trunk/Source/JavaScriptCore/runtime/JSObject.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeLookupcpp">trunk/Source/JavaScriptCore/runtime/Lookup.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeLookuph">trunk/Source/JavaScriptCore/runtime/Lookup.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMBindingh">trunk/Source/WebCore/bindings/js/JSDOMBinding.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMWindowCustomcpp">trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSHistoryCustomcpp">trunk/Source/WebCore/bindings/js/JSHistoryCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSLocationCustomcpp">trunk/Source/WebCore/bindings/js/JSLocationCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjectcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCustomNamedGettercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachablecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSattributecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSreadonlycpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/LayoutTests/ChangeLog        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2014-03-12  Gavin Barraclough  &lt;barraclough@apple.com&gt;
+
+        Reduce memory use for static property maps
+        https://bugs.webkit.org/show_bug.cgi?id=129986
+
+        Reviewed by Andreas Kling.
+
+        Static property tables are currently duplicated on first use from read-only memory into dirty memory
+        in every process, and since the entries are large (48 bytes) and the tables can be unusually sparse
+        (we use a custom hash table without a rehash) a lot of memory may be wasted.
+
+        * inspector-protocol/debugger/setPauseOnExceptions-all-expected.txt:
+        * inspector-protocol/debugger/setPauseOnExceptions-none-expected.txt:
+        * inspector-protocol/debugger/setPauseOnExceptions-uncaught-expected.txt:
+        * js/dom/dom-static-property-for-in-iteration-expected.txt:
+            - Properties now iterated in correct order, not permuted by hash table.
+
</ins><span class="cx"> 2014-03-12  Frédéric Wang  &lt;fred.wang@free.fr&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK] Update references for mo-stretch.html.
</span></span></pre></div>
<a id="trunkLayoutTestsinspectorprotocoldebuggersetPauseOnExceptionsallexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/inspector-protocol/debugger/setPauseOnExceptions-all-expected.txt (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector-protocol/debugger/setPauseOnExceptions-all-expected.txt        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/LayoutTests/inspector-protocol/debugger/setPauseOnExceptions-all-expected.txt        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> CONSOLE MESSAGE: line 1: caught inline: {&quot;line&quot;:1,&quot;column&quot;:36}
</span><span class="cx"> CONSOLE MESSAGE: line 38: catchNested caught exception: {&quot;line&quot;:3,&quot;column&quot;:11,&quot;sourceURL&quot;:&quot;exception.js&quot;}
</span><del>-CONSOLE MESSAGE: line 38: catchNested caught exception: {&quot;code&quot;:8,&quot;message&quot;:&quot;NotFoundError: DOM Exception 8&quot;,&quot;name&quot;:&quot;NotFoundError&quot;,&quot;line&quot;:8,&quot;column&quot;:30,&quot;sourceURL&quot;:&quot;exception.js&quot;}
</del><ins>+CONSOLE MESSAGE: line 38: catchNested caught exception: {&quot;code&quot;:8,&quot;name&quot;:&quot;NotFoundError&quot;,&quot;message&quot;:&quot;NotFoundError: DOM Exception 8&quot;,&quot;line&quot;:8,&quot;column&quot;:30,&quot;sourceURL&quot;:&quot;exception.js&quot;}
</ins><span class="cx"> CONSOLE MESSAGE: line 38: catchNested caught exception: &quot;exception in host function&quot;
</span><span class="cx"> CONSOLE MESSAGE: line 38: catchNested caught exception: &quot;exception string&quot;
</span><span class="cx"> CONSOLE MESSAGE: line 38: catchNested caught exception: {&quot;line&quot;:18,&quot;column&quot;:12,&quot;sourceURL&quot;:&quot;exception.js&quot;}
</span></span></pre></div>
<a id="trunkLayoutTestsinspectorprotocoldebuggersetPauseOnExceptionsnoneexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/inspector-protocol/debugger/setPauseOnExceptions-none-expected.txt (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector-protocol/debugger/setPauseOnExceptions-none-expected.txt        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/LayoutTests/inspector-protocol/debugger/setPauseOnExceptions-none-expected.txt        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> CONSOLE MESSAGE: line 1: caught inline: {&quot;line&quot;:1,&quot;column&quot;:36}
</span><span class="cx"> CONSOLE MESSAGE: line 38: catchNested caught exception: {&quot;line&quot;:3,&quot;column&quot;:11,&quot;sourceURL&quot;:&quot;exception.js&quot;}
</span><del>-CONSOLE MESSAGE: line 38: catchNested caught exception: {&quot;code&quot;:8,&quot;message&quot;:&quot;NotFoundError: DOM Exception 8&quot;,&quot;name&quot;:&quot;NotFoundError&quot;,&quot;line&quot;:8,&quot;column&quot;:30,&quot;sourceURL&quot;:&quot;exception.js&quot;}
</del><ins>+CONSOLE MESSAGE: line 38: catchNested caught exception: {&quot;code&quot;:8,&quot;name&quot;:&quot;NotFoundError&quot;,&quot;message&quot;:&quot;NotFoundError: DOM Exception 8&quot;,&quot;line&quot;:8,&quot;column&quot;:30,&quot;sourceURL&quot;:&quot;exception.js&quot;}
</ins><span class="cx"> CONSOLE MESSAGE: line 38: catchNested caught exception: &quot;exception in host function&quot;
</span><span class="cx"> CONSOLE MESSAGE: line 38: catchNested caught exception: &quot;exception string&quot;
</span><span class="cx"> CONSOLE MESSAGE: line 38: catchNested caught exception: {&quot;line&quot;:18,&quot;column&quot;:12,&quot;sourceURL&quot;:&quot;exception.js&quot;}
</span></span></pre></div>
<a id="trunkLayoutTestsinspectorprotocoldebuggersetPauseOnExceptionsuncaughtexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/inspector-protocol/debugger/setPauseOnExceptions-uncaught-expected.txt (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/inspector-protocol/debugger/setPauseOnExceptions-uncaught-expected.txt        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/LayoutTests/inspector-protocol/debugger/setPauseOnExceptions-uncaught-expected.txt        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><span class="cx"> CONSOLE MESSAGE: line 1: caught inline: {&quot;line&quot;:1,&quot;column&quot;:36}
</span><span class="cx"> CONSOLE MESSAGE: line 38: catchNested caught exception: {&quot;line&quot;:3,&quot;column&quot;:11,&quot;sourceURL&quot;:&quot;exception.js&quot;}
</span><del>-CONSOLE MESSAGE: line 38: catchNested caught exception: {&quot;code&quot;:8,&quot;message&quot;:&quot;NotFoundError: DOM Exception 8&quot;,&quot;name&quot;:&quot;NotFoundError&quot;,&quot;line&quot;:8,&quot;column&quot;:30,&quot;sourceURL&quot;:&quot;exception.js&quot;}
</del><ins>+CONSOLE MESSAGE: line 38: catchNested caught exception: {&quot;code&quot;:8,&quot;name&quot;:&quot;NotFoundError&quot;,&quot;message&quot;:&quot;NotFoundError: DOM Exception 8&quot;,&quot;line&quot;:8,&quot;column&quot;:30,&quot;sourceURL&quot;:&quot;exception.js&quot;}
</ins><span class="cx"> CONSOLE MESSAGE: line 38: catchNested caught exception: &quot;exception in host function&quot;
</span><span class="cx"> CONSOLE MESSAGE: line 38: catchNested caught exception: &quot;exception string&quot;
</span><span class="cx"> CONSOLE MESSAGE: line 38: catchNested caught exception: {&quot;line&quot;:18,&quot;column&quot;:12,&quot;sourceURL&quot;:&quot;exception.js&quot;}
</span><span class="lines">@@ -13,7 +13,7 @@
</span><span class="cx"> CONSOLE MESSAGE: line 18: Error: error message
</span><span class="cx"> CONSOLE MESSAGE: line 1: caught inline: {&quot;line&quot;:1,&quot;column&quot;:36}
</span><span class="cx"> CONSOLE MESSAGE: line 38: catchNested caught exception: {&quot;line&quot;:3,&quot;column&quot;:11,&quot;sourceURL&quot;:&quot;exception.js&quot;}
</span><del>-CONSOLE MESSAGE: line 38: catchNested caught exception: {&quot;code&quot;:8,&quot;message&quot;:&quot;NotFoundError: DOM Exception 8&quot;,&quot;name&quot;:&quot;NotFoundError&quot;,&quot;line&quot;:8,&quot;column&quot;:30,&quot;sourceURL&quot;:&quot;exception.js&quot;}
</del><ins>+CONSOLE MESSAGE: line 38: catchNested caught exception: {&quot;code&quot;:8,&quot;name&quot;:&quot;NotFoundError&quot;,&quot;message&quot;:&quot;NotFoundError: DOM Exception 8&quot;,&quot;line&quot;:8,&quot;column&quot;:30,&quot;sourceURL&quot;:&quot;exception.js&quot;}
</ins><span class="cx"> CONSOLE MESSAGE: line 38: catchNested caught exception: &quot;exception in host function&quot;
</span><span class="cx"> CONSOLE MESSAGE: line 38: catchNested caught exception: &quot;exception string&quot;
</span><span class="cx"> CONSOLE MESSAGE: line 38: catchNested caught exception: {&quot;line&quot;:18,&quot;column&quot;:12,&quot;sourceURL&quot;:&quot;exception.js&quot;}
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomdomstaticpropertyforiniterationexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/dom-static-property-for-in-iteration-expected.txt (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/dom-static-property-for-in-iteration-expected.txt        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/LayoutTests/js/dom/dom-static-property-for-in-iteration-expected.txt        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -9,102 +9,102 @@
</span><span class="cx"> PASS a[&quot;hick&quot;] is 4
</span><span class="cx"> PASS a[&quot;hock&quot;] is 5
</span><span class="cx"> PASS a[&quot;snood&quot;] is 6
</span><del>-PASS a[&quot;origin&quot;] is file://
-PASS a[&quot;hash&quot;] is 
-PASS a[&quot;search&quot;] is 
-PASS a[&quot;text&quot;] is nerget
-PASS a[&quot;hostname&quot;] is 
-PASS a[&quot;rel&quot;] is 
</del><ins>+PASS a[&quot;charset&quot;] is 
+PASS a[&quot;coords&quot;] is 
</ins><span class="cx"> PASS a[&quot;hreflang&quot;] is 
</span><ins>+PASS a[&quot;name&quot;] is 
</ins><span class="cx"> PASS a[&quot;ping&quot;] is 
</span><ins>+PASS a[&quot;rel&quot;] is 
</ins><span class="cx"> PASS a[&quot;rev&quot;] is 
</span><del>-PASS a[&quot;host&quot;] is 
-PASS a[&quot;charset&quot;] is 
</del><ins>+PASS a[&quot;shape&quot;] is 
</ins><span class="cx"> PASS a[&quot;target&quot;] is 
</span><span class="cx"> PASS a[&quot;type&quot;] is 
</span><del>-PASS a[&quot;coords&quot;] is 
-PASS a[&quot;name&quot;] is 
-PASS a[&quot;shape&quot;] is 
</del><ins>+PASS a[&quot;hash&quot;] is 
+PASS a[&quot;host&quot;] is 
+PASS a[&quot;hostname&quot;] is 
</ins><span class="cx"> PASS a[&quot;port&quot;] is 
</span><span class="cx"> PASS a[&quot;protocol&quot;] is file:
</span><del>-PASS a[&quot;outerHTML&quot;] is &lt;a id=&quot;foo&quot; href=&quot;bar&quot;&gt;nerget&lt;/a&gt;
-PASS a[&quot;spellcheck&quot;] is true
-PASS a[&quot;webkitdropzone&quot;] is 
</del><ins>+PASS a[&quot;search&quot;] is 
+PASS a[&quot;origin&quot;] is file://
+PASS a[&quot;text&quot;] is nerget
</ins><span class="cx"> PASS a[&quot;title&quot;] is 
</span><span class="cx"> PASS a[&quot;lang&quot;] is 
</span><span class="cx"> PASS a[&quot;translate&quot;] is true
</span><del>-PASS a[&quot;hidden&quot;] is false
-PASS a[&quot;innerText&quot;] is nerget
</del><span class="cx"> PASS a[&quot;dir&quot;] is 
</span><del>-PASS a[&quot;innerHTML&quot;] is nerget
-PASS a[&quot;contentEditable&quot;] is inherit
</del><span class="cx"> PASS a[&quot;tabIndex&quot;] is 0
</span><span class="cx"> PASS a[&quot;draggable&quot;] is true
</span><ins>+PASS a[&quot;webkitdropzone&quot;] is 
+PASS a[&quot;hidden&quot;] is false
+PASS a[&quot;accessKey&quot;] is 
+PASS a[&quot;innerHTML&quot;] is nerget
+PASS a[&quot;innerText&quot;] is nerget
+PASS a[&quot;outerHTML&quot;] is &lt;a id=&quot;foo&quot; href=&quot;bar&quot;&gt;nerget&lt;/a&gt;
</ins><span class="cx"> PASS a[&quot;outerText&quot;] is nerget
</span><del>-PASS a[&quot;accessKey&quot;] is 
</del><span class="cx"> PASS a[&quot;children&quot;] is [object HTMLCollection]
</span><ins>+PASS a[&quot;contentEditable&quot;] is inherit
</ins><span class="cx"> PASS a[&quot;isContentEditable&quot;] is false
</span><ins>+PASS a[&quot;spellcheck&quot;] is true
+PASS a[&quot;tagName&quot;] is A
+PASS a[&quot;attributes&quot;] is [object NamedNodeMap]
</ins><span class="cx"> PASS a[&quot;style&quot;] is [object CSSStyleDeclaration]
</span><span class="cx"> PASS a[&quot;id&quot;] is foo
</span><del>-PASS a[&quot;dataset&quot;] is [object DOMStringMap]
</del><ins>+PASS a[&quot;offsetLeft&quot;] is 8
+PASS a[&quot;offsetTop&quot;] is 774
+PASS a[&quot;offsetWidth&quot;] is 39
+PASS a[&quot;offsetHeight&quot;] is 18
+PASS a[&quot;offsetParent&quot;] is [object HTMLBodyElement]
+PASS a[&quot;clientLeft&quot;] is 0
+PASS a[&quot;clientTop&quot;] is 0
</ins><span class="cx"> PASS a[&quot;clientWidth&quot;] is 0
</span><ins>+PASS a[&quot;clientHeight&quot;] is 0
+PASS a[&quot;scrollLeft&quot;] is 0
+PASS a[&quot;scrollTop&quot;] is 0
</ins><span class="cx"> PASS a[&quot;scrollWidth&quot;] is 0
</span><del>-PASS a[&quot;attributes&quot;] is [object NamedNodeMap]
-PASS a[&quot;webkitRegionOverset&quot;] is undefined
-PASS a[&quot;ALLOW_KEYBOARD_INPUT&quot;] is 1
-PASS a[&quot;offsetWidth&quot;] is 39
</del><ins>+PASS a[&quot;scrollHeight&quot;] is 0
+PASS a[&quot;className&quot;] is 
</ins><span class="cx"> PASS a[&quot;classList&quot;] is 
</span><del>-PASS a[&quot;offsetLeft&quot;] is 8
-PASS a[&quot;className&quot;] is 
-PASS a[&quot;clientTop&quot;] is 0
</del><ins>+PASS a[&quot;dataset&quot;] is [object DOMStringMap]
+PASS a[&quot;firstElementChild&quot;] is null
</ins><span class="cx"> PASS a[&quot;lastElementChild&quot;] is null
</span><del>-PASS a[&quot;offsetParent&quot;] is [object HTMLBodyElement]
</del><ins>+PASS a[&quot;previousElementSibling&quot;] is [object HTMLDivElement]
</ins><span class="cx"> PASS a[&quot;nextElementSibling&quot;] is [object HTMLScriptElement]
</span><del>-PASS a[&quot;tagName&quot;] is A
-PASS a[&quot;previousElementSibling&quot;] is [object HTMLDivElement]
</del><span class="cx"> PASS a[&quot;childElementCount&quot;] is 0
</span><del>-PASS a[&quot;scrollLeft&quot;] is 0
-PASS a[&quot;firstElementChild&quot;] is null
</del><span class="cx"> PASS a[&quot;uiactions&quot;] is 
</span><del>-PASS a[&quot;clientLeft&quot;] is 0
-PASS a[&quot;offsetHeight&quot;] is 18
-PASS a[&quot;clientHeight&quot;] is 0
-PASS a[&quot;offsetTop&quot;] is 1074
-PASS a[&quot;scrollTop&quot;] is 0
-PASS a[&quot;scrollHeight&quot;] is 0
-PASS a[&quot;previousSibling&quot;] is [object Text]
-PASS a[&quot;NOTATION_NODE&quot;] is 12
-PASS a[&quot;CDATA_SECTION_NODE&quot;] is 4
-PASS a[&quot;lastChild&quot;] is [object Text]
-PASS a[&quot;ELEMENT_NODE&quot;] is 1
</del><ins>+PASS a[&quot;webkitRegionOverset&quot;] is undefined
+PASS a[&quot;ALLOW_KEYBOARD_INPUT&quot;] is 1
+PASS a[&quot;nodeName&quot;] is A
</ins><span class="cx"> PASS a[&quot;nodeValue&quot;] is null
</span><del>-PASS a[&quot;DOCUMENT_POSITION_DISCONNECTED&quot;] is 1
-PASS a[&quot;ENTITY_NODE&quot;] is 6
-PASS a[&quot;TEXT_NODE&quot;] is 3
-PASS a[&quot;ENTITY_REFERENCE_NODE&quot;] is 5
-PASS a[&quot;textContent&quot;] is nerget
</del><span class="cx"> PASS a[&quot;nodeType&quot;] is 1
</span><del>-PASS a[&quot;DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC&quot;] is 32
-PASS a[&quot;ownerDocument&quot;] is [object HTMLDocument]
-PASS a[&quot;PROCESSING_INSTRUCTION_NODE&quot;] is 7
-PASS a[&quot;localName&quot;] is a
</del><span class="cx"> PASS a[&quot;parentNode&quot;] is [object HTMLBodyElement]
</span><ins>+PASS a[&quot;childNodes&quot;] is [object NodeList]
</ins><span class="cx"> PASS a[&quot;firstChild&quot;] is [object Text]
</span><del>-PASS a[&quot;DOCUMENT_POSITION_PRECEDING&quot;] is 2
-PASS a[&quot;DOCUMENT_TYPE_NODE&quot;] is 10
-PASS a[&quot;COMMENT_NODE&quot;] is 8
-PASS a[&quot;nodeName&quot;] is A
-PASS a[&quot;DOCUMENT_POSITION_FOLLOWING&quot;] is 4
-PASS a[&quot;prefix&quot;] is null
-PASS a[&quot;childNodes&quot;] is [object NodeList]
</del><ins>+PASS a[&quot;lastChild&quot;] is [object Text]
+PASS a[&quot;previousSibling&quot;] is [object Text]
</ins><span class="cx"> PASS a[&quot;nextSibling&quot;] is [object Text]
</span><del>-PASS a[&quot;ATTRIBUTE_NODE&quot;] is 2
-PASS a[&quot;DOCUMENT_POSITION_CONTAINED_BY&quot;] is 16
</del><ins>+PASS a[&quot;ownerDocument&quot;] is [object HTMLDocument]
</ins><span class="cx"> PASS a[&quot;namespaceURI&quot;] is http://www.w3.org/1999/xhtml
</span><ins>+PASS a[&quot;prefix&quot;] is null
+PASS a[&quot;localName&quot;] is a
+PASS a[&quot;textContent&quot;] is nerget
</ins><span class="cx"> PASS a[&quot;parentElement&quot;] is [object HTMLBodyElement]
</span><ins>+PASS a[&quot;ELEMENT_NODE&quot;] is 1
+PASS a[&quot;ATTRIBUTE_NODE&quot;] is 2
+PASS a[&quot;TEXT_NODE&quot;] is 3
+PASS a[&quot;CDATA_SECTION_NODE&quot;] is 4
+PASS a[&quot;ENTITY_REFERENCE_NODE&quot;] is 5
+PASS a[&quot;ENTITY_NODE&quot;] is 6
+PASS a[&quot;PROCESSING_INSTRUCTION_NODE&quot;] is 7
+PASS a[&quot;COMMENT_NODE&quot;] is 8
</ins><span class="cx"> PASS a[&quot;DOCUMENT_NODE&quot;] is 9
</span><ins>+PASS a[&quot;DOCUMENT_TYPE_NODE&quot;] is 10
</ins><span class="cx"> PASS a[&quot;DOCUMENT_FRAGMENT_NODE&quot;] is 11
</span><ins>+PASS a[&quot;NOTATION_NODE&quot;] is 12
+PASS a[&quot;DOCUMENT_POSITION_DISCONNECTED&quot;] is 1
+PASS a[&quot;DOCUMENT_POSITION_PRECEDING&quot;] is 2
+PASS a[&quot;DOCUMENT_POSITION_FOLLOWING&quot;] is 4
</ins><span class="cx"> PASS a[&quot;DOCUMENT_POSITION_CONTAINS&quot;] is 8
</span><ins>+PASS a[&quot;DOCUMENT_POSITION_CONTAINED_BY&quot;] is 16
+PASS a[&quot;DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC&quot;] is 32
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -1,3 +1,83 @@
</span><ins>+2014-03-12  Gavin Barraclough  &lt;barraclough@apple.com&gt;
+
+        Reduce memory use for static property maps
+        https://bugs.webkit.org/show_bug.cgi?id=129986
+
+        Reviewed by Andreas Kling.
+
+        Static property tables are currently duplicated on first use from read-only memory into dirty memory
+        in every process, and since the entries are large (48 bytes) and the tables can be unusually sparse
+        (we use a custom hash table without a rehash) a lot of memory may be wasted.
+
+        First, reduce the size of the hashtable. Instead of storing values in the table the hashtable maps
+        from string hashes to indicies into a densely packed array of values. Compute the index table at
+        compile time as a part of the derived sources step, such that this may be read-only data.
+
+        Second, don't copy all data from the HashTableValue array into a HashEntry objects. Instead refer
+        directly to the HashTableValue entries. The only data that needs to be allocated at runtime are the
+        keys, which are Identifiers.
+
+        * create_hash_table:
+            - emit the hash table index into the derived source (we were calculating this already to ensure chaining does not get too deep).
+        * parser/Lexer.cpp:
+        (JSC::Lexer&lt;LChar&gt;::parseIdentifier):
+        (JSC::Lexer&lt;UChar&gt;::parseIdentifier):
+        (JSC::Lexer&lt;T&gt;::parseIdentifierSlowCase):
+            - HashEntry -&gt; HashTableValue.
+        * parser/Lexer.h:
+        (JSC::Keywords::getKeyword):
+            - HashEntry -&gt; HashTableValue.
+        * runtime/ClassInfo.h:
+            - removed HashEntry.
+        * runtime/JSObject.cpp:
+        (JSC::getClassPropertyNames):
+            - use HashTable::ConstIterator.
+        (JSC::JSObject::put):
+        (JSC::JSObject::deleteProperty):
+        (JSC::JSObject::findPropertyHashEntry):
+            - HashEntry -&gt; HashTableValue.
+        (JSC::JSObject::reifyStaticFunctionsForDelete):
+            - changed HashTable::ConstIterator interface.
+        * runtime/JSObject.h:
+            - HashEntry -&gt; HashTableValue.
+        * runtime/Lookup.cpp:
+        (JSC::HashTable::createTable):
+            - table -&gt; keys, keys array is now densely packed.
+        (JSC::HashTable::deleteTable):
+            - table -&gt; keys.
+        (JSC::setUpStaticFunctionSlot):
+            - HashEntry -&gt; HashTableValue.
+        * runtime/Lookup.h:
+        (JSC::HashTableValue::builtinGenerator):
+        (JSC::HashTableValue::function):
+        (JSC::HashTableValue::functionLength):
+        (JSC::HashTableValue::propertyGetter):
+        (JSC::HashTableValue::propertyPutter):
+        (JSC::HashTableValue::lexerValue):
+            - added accessor methods from HashEntry.
+        (JSC::HashTable::copy):
+            - fields changed.
+        (JSC::HashTable::initializeIfNeeded):
+            - table -&gt; keys.
+        (JSC::HashTable::entry):
+            - HashEntry -&gt; HashTableValue.
+        (JSC::HashTable::ConstIterator::ConstIterator):
+            - iterate packed value array, so no need to skipInvalidKeys().
+        (JSC::HashTable::ConstIterator::value):
+        (JSC::HashTable::ConstIterator::key):
+        (JSC::HashTable::ConstIterator::operator-&gt;):
+            - accessors now get HashTableValue/StringImpl* separately.
+        (JSC::HashTable::ConstIterator::operator++):
+            - iterate packed value array, so no need to skipInvalidKeys().
+        (JSC::HashTable::end):
+            - end is now size of dense not sparse array.
+        (JSC::getStaticPropertySlot):
+        (JSC::getStaticFunctionSlot):
+        (JSC::getStaticValueSlot):
+        (JSC::putEntry):
+        (JSC::lookupPut):
+            - HashEntry -&gt; HashTableValue.
+
</ins><span class="cx"> 2014-03-11  Filip Pizlo  &lt;fpizlo@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         It should be possible to build WebKit with FTL on iOS
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorecreate_hash_table"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/create_hash_table (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/create_hash_table        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/JavaScriptCore/create_hash_table        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -41,6 +41,8 @@
</span><span class="cx"> my @attrs = ();
</span><span class="cx"> my @values = ();
</span><span class="cx"> my @hashes = ();
</span><ins>+my @table = ();
+my @links = ();
</ins><span class="cx"> 
</span><span class="cx"> my $hasSetter = &quot;false&quot;;
</span><span class="cx"> 
</span><span class="lines">@@ -76,6 +78,8 @@
</span><span class="cx">         @attrs = ();
</span><span class="cx">         @values = ();
</span><span class="cx">         @hashes = ();
</span><ins>+        @table = ();
+        @links = ();
</ins><span class="cx"> 
</span><span class="cx">         $inside = 0;
</span><span class="cx">     } elsif (/^(\S+)\s*(\S+)\s*([\w\|]*)\s*(\w*)\s*$/ &amp;&amp; $inside) {
</span><span class="lines">@@ -155,8 +159,6 @@
</span><span class="cx"> 
</span><span class="cx"> sub calcCompactHashSize()
</span><span class="cx"> {
</span><del>-    my @table = ();
-    my @links = ();
</del><span class="cx">     my $compactHashSize = ceilingToPowerOf2(2 * @keys);
</span><span class="cx">     $compactHashSizeMask = $compactHashSize - 1;
</span><span class="cx">     $compactSize = $compactHashSize;
</span><span class="lines">@@ -247,6 +249,8 @@
</span><span class="cx"> 
</span><span class="cx">     my $nameEntries = &quot;${name}Values&quot;;
</span><span class="cx">     $nameEntries =~ s/:/_/g;
</span><ins>+    my $nameIndex = &quot;${name}Index&quot;;
+    $nameIndex =~ s/:/_/g;
</ins><span class="cx"> 
</span><span class="cx">     print &quot;\n#include \&quot;JSCBuiltins.h\&quot;\n&quot;;
</span><span class="cx">     print &quot;\n#include \&quot;Lookup.h\&quot;\n&quot; if ($includelookup);
</span><span class="lines">@@ -257,8 +261,19 @@
</span><span class="cx">     } else {
</span><span class="cx">         print &quot;\nnamespace JSC {\n&quot;;
</span><span class="cx">     }
</span><del>-    my $count = scalar @keys + 1;
-    print &quot;\nstatic const struct HashTableValue ${nameEntries}\[$count\] = {\n&quot;;
</del><ins>+
+    print &quot;\nstatic const struct CompactHashIndex ${nameIndex}\[$compactSize\] = {\n&quot;;
+    for (my $i = 0; $i &lt; $compactSize; $i++) {
+        my $T = -1;
+        if (defined($table[$i])) { $T = $table[$i]; }
+        my $L = -1;
+        if (defined($links[$i])) { $L = $links[$i]; }
+        print &quot;    { $T, $L },\n&quot;;
+    }
+    print &quot;};\n\n&quot;;
+
+    my $packedSize = scalar @keys;
+    print &quot;\nstatic const struct HashTableValue ${nameEntries}\[$packedSize\] = {\n&quot;;
</ins><span class="cx">     my $i = 0;
</span><span class="cx">     foreach my $key (@keys) {
</span><span class="cx">         my $firstValue = &quot;&quot;;
</span><span class="lines">@@ -304,9 +319,8 @@
</span><span class="cx">         }
</span><span class="cx">         $i++;
</span><span class="cx">     }
</span><del>-    print &quot;   { 0, 0, NoIntrinsic, 0, 0 }\n&quot;;
</del><span class="cx">     print &quot;};\n\n&quot;;
</span><span class="cx">     print &quot;extern const struct HashTable $name =\n&quot;;
</span><del>-    print &quot;    \{ $compactSize, $compactHashSizeMask, $hasSetter, $nameEntries, 0 \};\n&quot;;
</del><ins>+    print &quot;    \{ $packedSize, $compactHashSizeMask, $hasSetter, $nameEntries, 0, $nameIndex \};\n&quot;;
</ins><span class="cx">     print &quot;} // namespace\n&quot;;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserLexercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Lexer.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Lexer.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/JavaScriptCore/parser/Lexer.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -829,7 +829,7 @@
</span><span class="cx">     if (UNLIKELY((remaining &lt; maxTokenLength) &amp;&amp; !(lexerFlags &amp; LexerFlagsIgnoreReservedWords)) &amp;&amp; !isPrivateName) {
</span><span class="cx">         ASSERT(shouldCreateIdentifier);
</span><span class="cx">         if (remaining &lt; maxTokenLength) {
</span><del>-            const HashEntry* entry = m_vm-&gt;keywords-&gt;getKeyword(*ident);
</del><ins>+            const HashTableValue* entry = m_vm-&gt;keywords-&gt;getKeyword(*ident);
</ins><span class="cx">             ASSERT((remaining &lt; maxTokenLength) || !entry);
</span><span class="cx">             if (!entry)
</span><span class="cx">                 return IDENT;
</span><span class="lines">@@ -906,7 +906,7 @@
</span><span class="cx">     if (UNLIKELY((remaining &lt; maxTokenLength) &amp;&amp; !(lexerFlags &amp; LexerFlagsIgnoreReservedWords)) &amp;&amp; !isPrivateName) {
</span><span class="cx">         ASSERT(shouldCreateIdentifier);
</span><span class="cx">         if (remaining &lt; maxTokenLength) {
</span><del>-            const HashEntry* entry = m_vm-&gt;keywords-&gt;getKeyword(*ident);
</del><ins>+            const HashTableValue* entry = m_vm-&gt;keywords-&gt;getKeyword(*ident);
</ins><span class="cx">             ASSERT((remaining &lt; maxTokenLength) || !entry);
</span><span class="cx">             if (!entry)
</span><span class="cx">                 return IDENT;
</span><span class="lines">@@ -973,7 +973,7 @@
</span><span class="cx">         ASSERT(shouldCreateIdentifier);
</span><span class="cx">         // Keywords must not be recognized if there was an \uXXXX in the identifier.
</span><span class="cx">         if (remaining &lt; maxTokenLength) {
</span><del>-            const HashEntry* entry = m_vm-&gt;keywords-&gt;getKeyword(*ident);
</del><ins>+            const HashTableValue* entry = m_vm-&gt;keywords-&gt;getKeyword(*ident);
</ins><span class="cx">             ASSERT((remaining &lt; maxTokenLength) || !entry);
</span><span class="cx">             if (!entry)
</span><span class="cx">                 return IDENT;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreparserLexerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/parser/Lexer.h (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/parser/Lexer.h        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/JavaScriptCore/parser/Lexer.h        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx">         return m_keywordTable.entry(m_vm, ident);
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    const HashEntry* getKeyword(const Identifier&amp; ident) const
</del><ins>+    const HashTableValue* getKeyword(const Identifier&amp; ident) const
</ins><span class="cx">     {
</span><span class="cx">         return m_keywordTable.entry(m_vm, ident);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeClassInfoh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ClassInfo.h (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ClassInfo.h        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/JavaScriptCore/runtime/ClassInfo.h        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -30,7 +30,6 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><del>-class HashEntry;
</del><span class="cx"> class JSArrayBufferView;
</span><span class="cx"> struct HashTable;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSObject.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSObject.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/JavaScriptCore/runtime/JSObject.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -75,19 +75,17 @@
</span><span class="cx"> 
</span><span class="cx"> static inline void getClassPropertyNames(ExecState* exec, const ClassInfo* classInfo, PropertyNameArray&amp; propertyNames, EnumerationMode mode, bool didReify)
</span><span class="cx"> {
</span><ins>+    VM&amp; vm = exec-&gt;vm();
+
</ins><span class="cx">     // Add properties from the static hashtables of properties
</span><span class="cx">     for (; classInfo; classInfo = classInfo-&gt;parentClass) {
</span><del>-        const HashTable* table = classInfo-&gt;propHashTable(exec);
</del><ins>+        const HashTable* table = classInfo-&gt;propHashTable(vm);
</ins><span class="cx">         if (!table)
</span><span class="cx">             continue;
</span><del>-        table-&gt;initializeIfNeeded(exec);
-        ASSERT(table-&gt;table);
</del><span class="cx"> 
</span><del>-        int hashSizeMask = table-&gt;compactSize - 1;
-        const HashEntry* entry = table-&gt;table;
-        for (int i = 0; i &lt;= hashSizeMask; ++i, ++entry) {
-            if (entry-&gt;key() &amp;&amp; (!(entry-&gt;attributes() &amp; DontEnum) || (mode == IncludeDontEnumProperties)) &amp;&amp; !((entry-&gt;attributes() &amp; BuiltinOrFunction) &amp;&amp; didReify))
-                propertyNames.add(entry-&gt;key());
</del><ins>+        for (auto iter = table-&gt;begin(vm); iter != table-&gt;end(vm); ++iter) {
+            if ((!(iter-&gt;attributes() &amp; DontEnum) || (mode == IncludeDontEnumProperties)) &amp;&amp; !((iter-&gt;attributes() &amp; BuiltinOrFunction) &amp;&amp; didReify))
+                propertyNames.add(iter.key());
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="lines">@@ -396,7 +394,7 @@
</span><span class="cx">         }
</span><span class="cx">         const ClassInfo* info = obj-&gt;classInfo();
</span><span class="cx">         if (info-&gt;hasStaticSetterOrReadonlyProperties(vm)) {
</span><del>-            if (const HashEntry* entry = obj-&gt;findPropertyHashEntry(vm, propertyName)) {
</del><ins>+            if (const HashTableValue* entry = obj-&gt;findPropertyHashEntry(vm, propertyName)) {
</ins><span class="cx">                 putEntry(exec, entry, obj, propertyName, value, slot);
</span><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="lines">@@ -1273,7 +1271,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Look in the static hashtable of properties
</span><del>-    const HashEntry* entry = thisObject-&gt;findPropertyHashEntry(vm, propertyName);
</del><ins>+    const HashTableValue* entry = thisObject-&gt;findPropertyHashEntry(vm, propertyName);
</ins><span class="cx">     if (entry) {
</span><span class="cx">         if (entry-&gt;attributes() &amp; DontDelete &amp;&amp; !vm.isInDefineOwnProperty())
</span><span class="cx">             return false; // this builtin property can't be deleted
</span><span class="lines">@@ -1401,11 +1399,11 @@
</span><span class="cx">     return exec-&gt;vm().throwException(exec, createTypeError(exec, ASCIILiteral(&quot;No default value&quot;)));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const HashEntry* JSObject::findPropertyHashEntry(VM&amp; vm, PropertyName propertyName) const
</del><ins>+const HashTableValue* JSObject::findPropertyHashEntry(VM&amp; vm, PropertyName propertyName) const
</ins><span class="cx"> {
</span><span class="cx">     for (const ClassInfo* info = classInfo(); info; info = info-&gt;parentClass) {
</span><span class="cx">         if (const HashTable* propHashTable = info-&gt;propHashTable(vm)) {
</span><del>-            if (const HashEntry* entry = propHashTable-&gt;entry(vm, propertyName))
</del><ins>+            if (const HashTableValue* entry = propHashTable-&gt;entry(vm, propertyName))
</ins><span class="cx">                 return entry;
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="lines">@@ -1621,13 +1619,13 @@
</span><span class="cx">         setStructure(vm, Structure::toUncacheableDictionaryTransition(vm, structure(vm)));
</span><span class="cx"> 
</span><span class="cx">     for (const ClassInfo* info = classInfo(); info; info = info-&gt;parentClass) {
</span><del>-        const HashTable* hashTable = info-&gt;propHashTable(globalObject()-&gt;globalExec());
</del><ins>+        const HashTable* hashTable = info-&gt;propHashTable(vm);
</ins><span class="cx">         if (!hashTable)
</span><span class="cx">             continue;
</span><span class="cx">         PropertySlot slot(this);
</span><del>-        for (HashTable::ConstIterator iter = hashTable-&gt;begin(vm); iter != hashTable-&gt;end(vm); ++iter) {
</del><ins>+        for (auto iter = hashTable-&gt;begin(vm); iter != hashTable-&gt;end(vm); ++iter) {
</ins><span class="cx">             if (iter-&gt;attributes() &amp; BuiltinOrFunction)
</span><del>-                setUpStaticFunctionSlot(globalObject()-&gt;globalExec(), *iter, this, Identifier(&amp;vm, iter-&gt;key()), slot);
</del><ins>+                setUpStaticFunctionSlot(globalObject()-&gt;globalExec(), iter.value(), this, Identifier(&amp;vm, iter.key()), slot);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSObject.h (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSObject.h        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/JavaScriptCore/runtime/JSObject.h        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -65,7 +65,6 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> class GetterSetter;
</span><del>-class HashEntry;
</del><span class="cx"> class InternalFunction;
</span><span class="cx"> class JSFunction;
</span><span class="cx"> class LLIntOffsetsExtractor;
</span><span class="lines">@@ -74,6 +73,7 @@
</span><span class="cx"> class PropertyNameArray;
</span><span class="cx"> class Structure;
</span><span class="cx"> struct HashTable;
</span><ins>+struct HashTableValue;
</ins><span class="cx"> 
</span><span class="cx"> JS_EXPORT_PRIVATE JSObject* throwTypeError(ExecState*, const String&amp;);
</span><span class="cx"> extern JS_EXPORTDATA const char* StrictModeReadonlyPropertyWriteError;
</span><span class="lines">@@ -93,7 +93,7 @@
</span><span class="cx">     friend class JSCell;
</span><span class="cx">     friend class JSFinalObject;
</span><span class="cx">     friend class MarkedBlock;
</span><del>-    JS_EXPORT_PRIVATE friend bool setUpStaticFunctionSlot(ExecState*, const HashEntry*, JSObject*, PropertyName, PropertySlot&amp;);
</del><ins>+    JS_EXPORT_PRIVATE friend bool setUpStaticFunctionSlot(ExecState*, const HashTableValue*, JSObject*, PropertyName, PropertySlot&amp;);
</ins><span class="cx"> 
</span><span class="cx">     enum PutMode {
</span><span class="cx">         PutModePut,
</span><span class="lines">@@ -952,7 +952,7 @@
</span><span class="cx">     bool inlineGetOwnPropertySlot(ExecState*, VM&amp;, Structure&amp;, PropertyName, PropertySlot&amp;);
</span><span class="cx">     JS_EXPORT_PRIVATE void fillGetterPropertySlot(PropertySlot&amp;, JSValue, unsigned, PropertyOffset);
</span><span class="cx"> 
</span><del>-    const HashEntry* findPropertyHashEntry(VM&amp;, PropertyName) const;
</del><ins>+    const HashTableValue* findPropertyHashEntry(VM&amp;, PropertyName) const;
</ins><span class="cx">         
</span><span class="cx">     void putIndexedDescriptor(ExecState*, SparseArrayEntry*, const PropertyDescriptor&amp;, PropertyDescriptor&amp; old);
</span><span class="cx">         
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeLookupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Lookup.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Lookup.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/JavaScriptCore/runtime/Lookup.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -28,44 +28,30 @@
</span><span class="cx"> 
</span><span class="cx"> void HashTable::createTable(VM&amp; vm) const
</span><span class="cx"> {
</span><del>-    ASSERT(!table);
-    int linkIndex = compactHashSizeMask + 1;
-    HashEntry* entries = new HashEntry[compactSize];
-    for (int i = 0; i &lt; compactSize; ++i)
-        entries[i].setKey(0);
-    for (int i = 0; values[i].key; ++i) {
-        StringImpl&amp; identifier = Identifier::add(&amp;vm, values[i].key).leakRef();
-        int hashIndex = identifier.existingHash() &amp; compactHashSizeMask;
-        HashEntry* entry = &amp;entries[hashIndex];
</del><ins>+    ASSERT(!keys);
+    keys = new StringImpl*[numberOfValues];
</ins><span class="cx"> 
</span><del>-        if (entry-&gt;key()) {
-            while (entry-&gt;next()) {
-                entry = entry-&gt;next();
-            }
-            ASSERT(linkIndex &lt; compactSize);
-            entry-&gt;setNext(&amp;entries[linkIndex++]);
-            entry = entry-&gt;next();
-        }
-
-        entry-&gt;initialize(&amp;identifier, values[i].attributes, values[i].value1, values[i].value2, values[i].intrinsic);
</del><ins>+    for (int i = 0; i &lt; numberOfValues; ++i) {
+        if (values[i].m_key)
+            keys[i] = &amp;Identifier::add(&amp;vm, values[i].m_key).leakRef();
+        else
+            keys[i] = 0;
</ins><span class="cx">     }
</span><del>-    table = entries;
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void HashTable::deleteTable() const
</span><span class="cx"> {
</span><del>-    if (table) {
-        int max = compactSize;
-        for (int i = 0; i != max; ++i) {
-            if (StringImpl* key = table[i].key())
-                key-&gt;deref();
</del><ins>+    if (keys) {
+        for (int i = 0; i != numberOfValues; ++i) {
+            if (keys[i])
+                keys[i]-&gt;deref();
</ins><span class="cx">         }
</span><del>-        delete [] table;
-        table = 0;
</del><ins>+        delete [] keys;
+        keys = nullptr;
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool setUpStaticFunctionSlot(ExecState* exec, const HashEntry* entry, JSObject* thisObj, PropertyName propertyName, PropertySlot&amp; slot)
</del><ins>+bool setUpStaticFunctionSlot(ExecState* exec, const HashTableValue* entry, JSObject* thisObj, PropertyName propertyName, PropertySlot&amp; slot)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(thisObj-&gt;globalObject());
</span><span class="cx">     ASSERT(entry-&gt;attributes() &amp; BuiltinOrFunction);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeLookuph"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Lookup.h (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Lookup.h        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/JavaScriptCore/runtime/Lookup.h        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -30,13 +30,9 @@
</span><span class="cx"> #include &lt;wtf/Assertions.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><del>-    // Hash table generated by the create_hash_table script.
-    struct HashTableValue {
-        const char* key; // property name
-        unsigned char attributes; // JSObject attributes
-        Intrinsic intrinsic;
-        intptr_t value1;
-        intptr_t value2;
</del><ins>+    struct CompactHashIndex {
+        const int16_t value;
+        const int16_t next;
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     // FIXME: There is no reason this get function can't be simpler.
</span><span class="lines">@@ -45,22 +41,14 @@
</span><span class="cx">     typedef PutPropertySlot::PutValueFunc PutFunction;
</span><span class="cx">     typedef FunctionExecutable* (*BuiltinGenerator)(VM&amp;);
</span><span class="cx"> 
</span><del>-    class HashEntry {
-        WTF_MAKE_FAST_ALLOCATED;
-    public:
-        void initialize(StringImpl* key, unsigned char attributes, intptr_t v1, intptr_t v2, Intrinsic intrinsic)
-        {
-            m_key = key;
-            m_attributes = attributes;
-            m_u.store.value1 = v1;
-            m_u.store.value2 = v2;
-            m_intrinsic = intrinsic;
-            m_next = 0;
-        }
</del><ins>+    // Hash table generated by the create_hash_table script.
+    struct HashTableValue {
+        const char* m_key; // property name
+        unsigned char m_attributes; // JSObject attributes
+        Intrinsic m_intrinsic;
+        intptr_t m_value1;
+        intptr_t m_value2;
</ins><span class="cx"> 
</span><del>-        void setKey(StringImpl* key) { m_key = key; }
-        StringImpl* key() const { return m_key; }
-
</del><span class="cx">         unsigned char attributes() const { return m_attributes; }
</span><span class="cx"> 
</span><span class="cx">         Intrinsic intrinsic() const
</span><span class="lines">@@ -69,87 +57,55 @@
</span><span class="cx">             return m_intrinsic;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        BuiltinGenerator builtinGenerator() const { ASSERT(m_attributes &amp; Builtin); return m_u.builtinGenerator.generatorValue; }
-        NativeFunction function() const { ASSERT(m_attributes &amp; Function); return m_u.function.functionValue; }
-        unsigned char functionLength() const { ASSERT(m_attributes &amp; Function); return static_cast&lt;unsigned char&gt;(m_u.function.length); }
</del><ins>+        BuiltinGenerator builtinGenerator() const { ASSERT(m_attributes &amp; Builtin); return reinterpret_cast&lt;BuiltinGenerator&gt;(m_value1); }
+        NativeFunction function() const { ASSERT(m_attributes &amp; Function); return reinterpret_cast&lt;NativeFunction&gt;(m_value1); }
+        unsigned char functionLength() const { ASSERT(m_attributes &amp; Function); return static_cast&lt;unsigned char&gt;(m_value2); }
</ins><span class="cx"> 
</span><del>-        GetFunction propertyGetter() const { ASSERT(!(m_attributes &amp; BuiltinOrFunction)); return m_u.property.get; }
-        PutFunction propertyPutter() const { ASSERT(!(m_attributes &amp; BuiltinOrFunction)); return m_u.property.put; }
</del><ins>+        GetFunction propertyGetter() const { ASSERT(!(m_attributes &amp; BuiltinOrFunction)); return reinterpret_cast&lt;GetFunction&gt;(m_value1); }
+        PutFunction propertyPutter() const { ASSERT(!(m_attributes &amp; BuiltinOrFunction)); return reinterpret_cast&lt;PutFunction&gt;(m_value2); }
</ins><span class="cx"> 
</span><del>-        intptr_t lexerValue() const { ASSERT(!m_attributes); return m_u.lexer.value; }
-
-        void setNext(HashEntry *next) { m_next = next; }
-        HashEntry* next() const { return m_next; }
-
-    private:
-        StringImpl* m_key;
-        unsigned char m_attributes; // JSObject attributes
-        Intrinsic m_intrinsic;
-
-        union {
-            struct {
-                intptr_t value1;
-                intptr_t value2;
-            } store;
-            struct {
-                NativeFunction functionValue;
-                intptr_t length; // number of arguments for function
-            } function;
-            struct {
-                BuiltinGenerator generatorValue;
-                intptr_t unused;
-            } builtinGenerator;
-            struct {
-                GetFunction get;
-                PutFunction put;
-            } property;
-            struct {
-                intptr_t value;
-                intptr_t unused;
-            } lexer;
-        } m_u;
-
-        HashEntry* m_next;
</del><ins>+        intptr_t lexerValue() const { ASSERT(!m_attributes); return m_value1; }
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     struct HashTable {
</span><span class="cx"> 
</span><del>-        int compactSize;
-        int compactHashSizeMask;
</del><ins>+        mutable int numberOfValues;
+        int indexMask;
</ins><span class="cx">         bool hasSetterOrReadonlyProperties;
</span><span class="cx"> 
</span><span class="cx">         const HashTableValue* values; // Fixed values generated by script.
</span><del>-        mutable const HashEntry* table; // Table allocated at runtime.
</del><ins>+        mutable StringImpl** keys; // Table allocated at runtime.
+        const CompactHashIndex* index;
</ins><span class="cx"> 
</span><span class="cx">         ALWAYS_INLINE HashTable copy() const
</span><span class="cx">         {
</span><span class="cx">             // Don't copy dynamic table since it's thread specific.
</span><del>-            HashTable result = { compactSize, compactHashSizeMask, hasSetterOrReadonlyProperties, values, 0 };
</del><ins>+            HashTable result = { numberOfValues, indexMask, hasSetterOrReadonlyProperties, values, 0, index };
</ins><span class="cx">             return result;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         ALWAYS_INLINE void initializeIfNeeded(VM&amp; vm) const
</span><span class="cx">         {
</span><del>-            if (!table)
</del><ins>+            if (!keys)
</ins><span class="cx">                 createTable(vm);
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         ALWAYS_INLINE void initializeIfNeeded(ExecState* exec) const
</span><span class="cx">         {
</span><del>-            if (!table)
</del><ins>+            if (!keys)
</ins><span class="cx">                 createTable(exec-&gt;vm());
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         JS_EXPORT_PRIVATE void deleteTable() const;
</span><span class="cx"> 
</span><span class="cx">         // Find an entry in the table, and return the entry.
</span><del>-        ALWAYS_INLINE const HashEntry* entry(VM&amp; vm, PropertyName identifier) const
</del><ins>+        ALWAYS_INLINE const HashTableValue* entry(VM&amp; vm, PropertyName identifier) const
</ins><span class="cx">         {
</span><span class="cx">             initializeIfNeeded(vm);
</span><span class="cx">             return entry(identifier);
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        ALWAYS_INLINE const HashEntry* entry(ExecState* exec, PropertyName identifier) const
</del><ins>+        ALWAYS_INLINE const HashTableValue* entry(ExecState* exec, PropertyName identifier) const
</ins><span class="cx">         {
</span><span class="cx">             initializeIfNeeded(exec);
</span><span class="cx">             return entry(identifier);
</span><span class="lines">@@ -164,16 +120,21 @@
</span><span class="cx">                 skipInvalidKeys();
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            const HashEntry* operator-&gt;()
</del><ins>+            const HashTableValue* value()
</ins><span class="cx">             {
</span><del>-                return &amp;m_table-&gt;table[m_position];
</del><ins>+                return &amp;m_table-&gt;values[m_position];
</ins><span class="cx">             }
</span><span class="cx"> 
</span><del>-            const HashEntry* operator*()
</del><ins>+            StringImpl* key()
</ins><span class="cx">             {
</span><del>-                return &amp;m_table-&gt;table[m_position];
</del><ins>+                return m_table-&gt;keys[m_position];
</ins><span class="cx">             }
</span><span class="cx"> 
</span><ins>+            const HashTableValue* operator-&gt;()
+            {
+                return value();
+            }
+
</ins><span class="cx">             bool operator!=(const ConstIterator&amp; other)
</span><span class="cx">             {
</span><span class="cx">                 ASSERT(m_table == other.m_table);
</span><span class="lines">@@ -182,7 +143,7 @@
</span><span class="cx">             
</span><span class="cx">             ConstIterator&amp; operator++()
</span><span class="cx">             {
</span><del>-                ASSERT(m_position &lt; m_table-&gt;compactSize);
</del><ins>+                ASSERT(m_position &lt; m_table-&gt;numberOfValues);
</ins><span class="cx">                 ++m_position;
</span><span class="cx">                 skipInvalidKeys();
</span><span class="cx">                 return *this;
</span><span class="lines">@@ -191,10 +152,10 @@
</span><span class="cx">         private:
</span><span class="cx">             void skipInvalidKeys()
</span><span class="cx">             {
</span><del>-                ASSERT(m_position &lt;= m_table-&gt;compactSize);
-                while (m_position &lt; m_table-&gt;compactSize &amp;&amp; !m_table-&gt;table[m_position].key())
</del><ins>+                ASSERT(m_position &lt;= m_table-&gt;numberOfValues);
+                while (m_position &lt; m_table-&gt;numberOfValues &amp;&amp; !m_table-&gt;keys[m_position])
</ins><span class="cx">                     ++m_position;
</span><del>-                ASSERT(m_position &lt;= m_table-&gt;compactSize);
</del><ins>+                ASSERT(m_position &lt;= m_table-&gt;numberOfValues);
</ins><span class="cx">             }
</span><span class="cx">             
</span><span class="cx">             const HashTable* m_table;
</span><span class="lines">@@ -209,37 +170,40 @@
</span><span class="cx">         ConstIterator end(VM&amp; vm) const
</span><span class="cx">         {
</span><span class="cx">             initializeIfNeeded(vm);
</span><del>-            return ConstIterator(this, compactSize);
</del><ins>+            return ConstIterator(this, numberOfValues);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">     private:
</span><del>-        ALWAYS_INLINE const HashEntry* entry(PropertyName propertyName) const
</del><ins>+        ALWAYS_INLINE const HashTableValue* entry(PropertyName propertyName) const
</ins><span class="cx">         {
</span><span class="cx">             StringImpl* impl = propertyName.uid();
</span><span class="cx">             if (!impl)
</span><span class="cx">                 return 0;
</span><span class="cx">         
</span><del>-            ASSERT(table);
</del><ins>+            ASSERT(keys);
</ins><span class="cx"> 
</span><del>-            const HashEntry* entry = &amp;table[impl-&gt;existingHash() &amp; compactHashSizeMask];
-
-            if (!entry-&gt;key())
</del><ins>+            int indexEntry = impl-&gt;existingHash() &amp; indexMask;
+            int valueIndex = index[indexEntry].value;
+            if (valueIndex == -1)
</ins><span class="cx">                 return 0;
</span><span class="cx"> 
</span><del>-            do {
-                if (entry-&gt;key() == impl)
-                    return entry;
-                entry = entry-&gt;next();
-            } while (entry);
</del><ins>+            while (true) {
+                if (keys[valueIndex] == impl)
+                    return &amp;values[valueIndex];
</ins><span class="cx"> 
</span><del>-            return 0;
</del><ins>+                indexEntry = index[indexEntry].next;
+                if (indexEntry == -1)
+                    return nullptr;
+                valueIndex = index[indexEntry].value;
+                ASSERT(valueIndex != -1);
+            };
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         // Convert the hash table keys to identifiers.
</span><span class="cx">         JS_EXPORT_PRIVATE void createTable(VM&amp;) const;
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    JS_EXPORT_PRIVATE bool setUpStaticFunctionSlot(ExecState*, const HashEntry*, JSObject* thisObject, PropertyName, PropertySlot&amp;);
</del><ins>+    JS_EXPORT_PRIVATE bool setUpStaticFunctionSlot(ExecState*, const HashTableValue*, JSObject* thisObject, PropertyName, PropertySlot&amp;);
</ins><span class="cx"> 
</span><span class="cx">     /**
</span><span class="cx">      * This method does it all (looking in the hashtable, checking for function
</span><span class="lines">@@ -250,7 +214,7 @@
</span><span class="cx">     template &lt;class ThisImp, class ParentImp&gt;
</span><span class="cx">     inline bool getStaticPropertySlot(ExecState* exec, const HashTable&amp; table, ThisImp* thisObj, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx">     {
</span><del>-        const HashEntry* entry = table.entry(exec, propertyName);
</del><ins>+        const HashTableValue* entry = table.entry(exec, propertyName);
</ins><span class="cx"> 
</span><span class="cx">         if (!entry) // not found, forward to parent
</span><span class="cx">             return ParentImp::getOwnPropertySlot(thisObj, exec, propertyName, slot);
</span><span class="lines">@@ -273,7 +237,7 @@
</span><span class="cx">         if (ParentImp::getOwnPropertySlot(thisObj, exec, propertyName, slot))
</span><span class="cx">             return true;
</span><span class="cx"> 
</span><del>-        const HashEntry* entry = table.entry(exec, propertyName);
</del><ins>+        const HashTableValue* entry = table.entry(exec, propertyName);
</ins><span class="cx">         if (!entry)
</span><span class="cx">             return false;
</span><span class="cx"> 
</span><span class="lines">@@ -287,7 +251,7 @@
</span><span class="cx">     template &lt;class ThisImp, class ParentImp&gt;
</span><span class="cx">     inline bool getStaticValueSlot(ExecState* exec, const HashTable&amp; table, ThisImp* thisObj, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx">     {
</span><del>-        const HashEntry* entry = table.entry(exec, propertyName);
</del><ins>+        const HashTableValue* entry = table.entry(exec, propertyName);
</ins><span class="cx"> 
</span><span class="cx">         if (!entry) // not found, forward to parent
</span><span class="cx">             return ParentImp::getOwnPropertySlot(thisObj, exec, propertyName, slot);
</span><span class="lines">@@ -298,7 +262,7 @@
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    inline void putEntry(ExecState* exec, const HashEntry* entry, JSObject* base, PropertyName propertyName, JSValue value, PutPropertySlot&amp; slot)
</del><ins>+    inline void putEntry(ExecState* exec, const HashTableValue* entry, JSObject* base, PropertyName propertyName, JSValue value, PutPropertySlot&amp; slot)
</ins><span class="cx">     {
</span><span class="cx">         // If this is a function put it as an override property.
</span><span class="cx">         if (entry-&gt;attributes() &amp; BuiltinOrFunction) {
</span><span class="lines">@@ -318,7 +282,7 @@
</span><span class="cx">      */
</span><span class="cx">     inline bool lookupPut(ExecState* exec, PropertyName propertyName, JSObject* base, JSValue value, const HashTable&amp; table, PutPropertySlot&amp; slot)
</span><span class="cx">     {
</span><del>-        const HashEntry* entry = table.entry(exec, propertyName);
</del><ins>+        const HashTableValue* entry = table.entry(exec, propertyName);
</ins><span class="cx"> 
</span><span class="cx">         if (!entry)
</span><span class="cx">             return false;
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/ChangeLog        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -1,3 +1,34 @@
</span><ins>+2014-03-12  Gavin Barraclough  &lt;barraclough@apple.com&gt;
+
+        Reduce memory use for static property maps
+        https://bugs.webkit.org/show_bug.cgi?id=129986
+
+        Reviewed by Andreas Kling.
+
+        Static property tables are currently duplicated on first use from read-only memory into dirty memory
+        in every process, and since the entries are large (48 bytes) and the tables can be unusually sparse
+        (we use a custom hash table without a rehash) a lot of memory may be wasted.
+
+        * bindings/js/JSDOMBinding.h:
+        (WebCore::getStaticValueSlotEntryWithoutCaching):
+        (WebCore::getStaticValueSlotEntryWithoutCaching&lt;JSDOMWrapper&gt;):
+            - HashEntry -&gt; HashTableValue.
+        * bindings/js/JSDOMWindowCustom.cpp:
+        (WebCore::JSDOMWindow::getOwnPropertySlot):
+            - HashEntry -&gt; HashTableValue.
+        * bindings/js/JSHistoryCustom.cpp:
+        (WebCore::JSHistory::getOwnPropertySlotDelegate):
+            - HashEntry -&gt; HashTableValue.
+        * bindings/js/JSLocationCustom.cpp:
+        (WebCore::JSLocation::getOwnPropertySlotDelegate):
+        (WebCore::JSLocation::putDelegate):
+            - HashEntry -&gt; HashTableValue.
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateGetOwnPropertySlotBody):
+            - HashEntry -&gt; HashTableValue.
+        (GenerateHashTable):
+            - emit the hash table index into the derived source (we were calculating this already to ensure chaining does not get too deep).
+
</ins><span class="cx"> 2014-03-12  Tim Horton  &lt;timothy_horton@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Hook up image controls for WebKit1
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMBindingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMBinding.h (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -601,19 +601,19 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template &lt;class ThisImp&gt;
</span><del>-inline const JSC::HashEntry* getStaticValueSlotEntryWithoutCaching(JSC::ExecState* exec, JSC::PropertyName propertyName)
</del><ins>+inline const JSC::HashTableValue* getStaticValueSlotEntryWithoutCaching(JSC::ExecState* exec, JSC::PropertyName propertyName)
</ins><span class="cx"> {
</span><span class="cx">     const JSC::HashTable* table = ThisImp::info()-&gt;propHashTable(exec);
</span><span class="cx">     if (!table)
</span><span class="cx">         return getStaticValueSlotEntryWithoutCaching&lt;typename ThisImp::Base&gt;(exec, propertyName);
</span><del>-    const JSC::HashEntry* entry = table-&gt;entry(exec, propertyName);
</del><ins>+    const JSC::HashTableValue* entry = table-&gt;entry(exec, propertyName);
</ins><span class="cx">     if (!entry) // not found, forward to parent
</span><span class="cx">         return getStaticValueSlotEntryWithoutCaching&lt;typename ThisImp::Base&gt;(exec, propertyName);
</span><span class="cx">     return entry;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template &lt;&gt;
</span><del>-inline const JSC::HashEntry* getStaticValueSlotEntryWithoutCaching&lt;JSDOMWrapper&gt;(JSC::ExecState*, JSC::PropertyName)
</del><ins>+inline const JSC::HashTableValue* getStaticValueSlotEntryWithoutCaching&lt;JSDOMWrapper&gt;(JSC::ExecState*, JSC::PropertyName)
</ins><span class="cx"> {
</span><span class="cx">     return 0;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMWindowCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -116,7 +116,7 @@
</span><span class="cx">     // are not affected by properties changed on the Window or anything in its prototype chain.
</span><span class="cx">     // This is consistent with the behavior of Firefox.
</span><span class="cx"> 
</span><del>-    const HashEntry* entry;
</del><ins>+    const HashTableValue* entry;
</ins><span class="cx"> 
</span><span class="cx">     // We don't want any properties other than &quot;close&quot; and &quot;closed&quot; on a frameless window (i.e. one whose page got closed,
</span><span class="cx">     // or whose iframe got removed).
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSHistoryCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSHistoryCustom.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSHistoryCustom.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/js/JSHistoryCustom.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -66,7 +66,7 @@
</span><span class="cx"> 
</span><span class="cx">     // Check for the few functions that we allow, even when called cross-domain.
</span><span class="cx">     // Make these read-only / non-configurable to prevent writes via defineProperty.
</span><del>-    const HashEntry* entry = JSHistoryPrototype::info()-&gt;propHashTable(exec)-&gt;entry(exec, propertyName);
</del><ins>+    const HashTableValue* entry = JSHistoryPrototype::info()-&gt;propHashTable(exec)-&gt;entry(exec, propertyName);
</ins><span class="cx">     if (entry) {
</span><span class="cx">         // Allow access to back(), forward() and go() from any frame.
</span><span class="cx">         if (entry-&gt;attributes() &amp; JSC::Function) {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSLocationCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSLocationCustom.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSLocationCustom.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/js/JSLocationCustom.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -64,7 +64,7 @@
</span><span class="cx"> 
</span><span class="cx">     // Check for the few functions that we allow, even when called cross-domain.
</span><span class="cx">     // Make these read-only / non-configurable to prevent writes via defineProperty.
</span><del>-    const HashEntry* entry = JSLocationPrototype::info()-&gt;propHashTable(exec)-&gt;entry(exec, propertyName);
</del><ins>+    const HashTableValue* entry = JSLocationPrototype::info()-&gt;propHashTable(exec)-&gt;entry(exec, propertyName);
</ins><span class="cx">     if (entry &amp;&amp; (entry-&gt;attributes() &amp; JSC::Function)) {
</span><span class="cx">         if (entry-&gt;function() == jsLocationPrototypeFunctionReplace) {
</span><span class="cx">             slot.setCustom(this, ReadOnly | DontDelete | DontEnum, nonCachingStaticReplaceFunctionGetter);
</span><span class="lines">@@ -98,7 +98,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool sameDomainAccess = shouldAllowAccessToFrame(exec, frame);
</span><span class="cx"> 
</span><del>-    const HashEntry* entry = JSLocation::info()-&gt;propHashTable(exec)-&gt;entry(exec, propertyName);
</del><ins>+    const HashTableValue* entry = JSLocation::info()-&gt;propHashTable(exec)-&gt;entry(exec, propertyName);
</ins><span class="cx">     if (!entry) {
</span><span class="cx">         if (sameDomainAccess)
</span><span class="cx">             JSObject::put(this, exec, propertyName, value, slot);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -405,7 +405,7 @@
</span><span class="cx">     my $manualLookupGetterGeneration = sub {
</span><span class="cx">         my $requiresManualLookup = ($indexedGetterFunction &amp;&amp; !$hasNumericIndexedGetter) || $namedGetterFunction;
</span><span class="cx">         if ($requiresManualLookup) {
</span><del>-            push(@getOwnPropertySlotImpl, &quot;    const ${namespaceMaybe}HashEntry* entry = getStaticValueSlotEntryWithoutCaching&lt;$className&gt;(exec, propertyName);\n&quot;);
</del><ins>+            push(@getOwnPropertySlotImpl, &quot;    const ${namespaceMaybe}HashTableValue* entry = getStaticValueSlotEntryWithoutCaching&lt;$className&gt;(exec, propertyName);\n&quot;);
</ins><span class="cx">             push(@getOwnPropertySlotImpl, &quot;    if (entry) {\n&quot;);
</span><span class="cx">             push(@getOwnPropertySlotImpl, &quot;        slot.setCustom(thisObject, entry-&gt;attributes(), entry-&gt;propertyGetter());\n&quot;);
</span><span class="cx">             push(@getOwnPropertySlotImpl, &quot;        return true;\n&quot;);
</span><span class="lines">@@ -3937,6 +3937,8 @@
</span><span class="cx">     # Start outputing the hashtables
</span><span class="cx">     my $nameEntries = &quot;${name}Values&quot;;
</span><span class="cx">     $nameEntries =~ s/:/_/g;
</span><ins>+    my $nameIndex = &quot;${name}Index&quot;;
+    $nameIndex =~ s/:/_/g;
</ins><span class="cx">     my $hasSetter = &quot;false&quot;;
</span><span class="cx"> 
</span><span class="cx">     if (($name =~ /Prototype/) or ($name =~ /Constructor/)) {
</span><span class="lines">@@ -3956,8 +3958,19 @@
</span><span class="cx">         push(@implContent, &quot;/* Hash table */\n&quot;);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    push(@implContent, &quot;\nstatic const struct CompactHashIndex ${nameIndex}\[$compactSize\] = {\n&quot;);
+    for (my $i = 0; $i &lt; $compactSize; $i++) {
+        my $T = -1;
+        if (defined($table[$i])) { $T = $table[$i]; }
+        my $L = -1;
+        if (defined($links[$i])) { $L = $links[$i]; }
+        push(@implContent, &quot;    { $T, $L },\n&quot;);
+    }
+    push(@implContent, &quot;};\n\n&quot;);
+
</ins><span class="cx">     # Dump the hash table
</span><del>-    push(@implContent, &quot;\nstatic const HashTableValue $nameEntries\[\] =\n\{\n&quot;);
</del><ins>+    my $packedSize = scalar @{$keys};
+    push(@implContent, &quot;\nstatic const HashTableValue $nameEntries\[$packedSize\] =\n\{\n&quot;);
</ins><span class="cx">     $i = 0;
</span><span class="cx">     foreach my $key (@{$keys}) {
</span><span class="cx">         my $conditional;
</span><span class="lines">@@ -3980,14 +3993,17 @@
</span><span class="cx">             $hasSetter = &quot;true&quot;;
</span><span class="cx">         }
</span><span class="cx">         push(@implContent, &quot;    { \&quot;$key\&quot;, @$specials[$i], NoIntrinsic, (intptr_t)&quot; . $firstTargetType . &quot;(@$value1[$i]), (intptr_t) &quot; . $secondTargetType . &quot;(@$value2[$i]) },\n&quot;);
</span><del>-        push(@implContent, &quot;#endif\n&quot;) if $conditional;
</del><ins>+        if ($conditional) {
+            push(@implContent, &quot;#else\n&quot;) ;
+            push(@implContent, &quot;    { 0, 0, NoIntrinsic, 0, 0 },\n&quot;);
+            push(@implContent, &quot;#endif\n&quot;) ;
+        }
</ins><span class="cx">         ++$i;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    push(@implContent, &quot;    { 0, 0, NoIntrinsic, 0, 0 }\n&quot;);
</del><span class="cx">     push(@implContent, &quot;};\n\n&quot;);
</span><span class="cx">     my $compactSizeMask = $numEntries - 1;
</span><del>-    push(@implContent, &quot;static const HashTable $name = { $compactSize, $compactSizeMask, $hasSetter, $nameEntries, 0 };\n&quot;);
</del><ins>+    push(@implContent, &quot;static const HashTable $name = { $packedSize, $compactSizeMask, $hasSetter, $nameEntries, 0, $nameIndex };\n&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> sub WriteData
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -35,22 +35,33 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestActiveDOMObjectTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestActiveDOMObjectTableIndex[4] = {
+    { 1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestActiveDOMObjectTableValues[2] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestActiveDOMObjectConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><span class="cx">     { &quot;excitingAttr&quot;, DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestActiveDOMObjectExcitingAttr), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestActiveDOMObjectTable = { 4, 3, true, JSTestActiveDOMObjectTableValues, 0 };
</del><ins>+static const HashTable JSTestActiveDOMObjectTable = { 2, 3, true, JSTestActiveDOMObjectTableValues, 0, JSTestActiveDOMObjectTableIndex };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestActiveDOMObjectConstructorTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestActiveDOMObjectConstructorTableIndex[1] = {
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestActiveDOMObjectConstructorTableValues[0] =
</ins><span class="cx"> {
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestActiveDOMObjectConstructorTable = { 1, 0, false, JSTestActiveDOMObjectConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestActiveDOMObjectConstructorTable = { 0, 0, false, JSTestActiveDOMObjectConstructorTableValues, 0, JSTestActiveDOMObjectConstructorTableIndex };
</ins><span class="cx"> const ClassInfo JSTestActiveDOMObjectConstructor::s_info = { &quot;TestActiveDOMObjectConstructor&quot;, &amp;Base::s_info, &amp;JSTestActiveDOMObjectConstructorTable, 0, CREATE_METHOD_TABLE(JSTestActiveDOMObjectConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestActiveDOMObjectConstructor::JSTestActiveDOMObjectConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -73,14 +84,21 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestActiveDOMObjectPrototypeTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestActiveDOMObjectPrototypeTableIndex[4] = {
+    { 0, -1 },
+    { 1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestActiveDOMObjectPrototypeTableValues[2] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;excitingFunction&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestActiveDOMObjectPrototypeFunctionExcitingFunction), (intptr_t) (1) },
</span><span class="cx">     { &quot;postMessage&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestActiveDOMObjectPrototypeFunctionPostMessage), (intptr_t) (1) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestActiveDOMObjectPrototypeTable = { 4, 3, false, JSTestActiveDOMObjectPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestActiveDOMObjectPrototypeTable = { 2, 3, false, JSTestActiveDOMObjectPrototypeTableValues, 0, JSTestActiveDOMObjectPrototypeTableIndex };
</ins><span class="cx"> const ClassInfo JSTestActiveDOMObjectPrototype::s_info = { &quot;TestActiveDOMObjectPrototype&quot;, &amp;Base::s_info, &amp;JSTestActiveDOMObjectPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestActiveDOMObjectPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestActiveDOMObjectPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCustomNamedGettercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -34,21 +34,30 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestCustomNamedGetterTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestCustomNamedGetterTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
+static const HashTableValue JSTestCustomNamedGetterTableValues[1] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestCustomNamedGetterConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestCustomNamedGetterTable = { 2, 1, true, JSTestCustomNamedGetterTableValues, 0 };
</del><ins>+static const HashTable JSTestCustomNamedGetterTable = { 1, 1, true, JSTestCustomNamedGetterTableValues, 0, JSTestCustomNamedGetterTableIndex };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestCustomNamedGetterConstructorTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestCustomNamedGetterConstructorTableIndex[1] = {
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestCustomNamedGetterConstructorTableValues[0] =
</ins><span class="cx"> {
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestCustomNamedGetterConstructorTable = { 1, 0, false, JSTestCustomNamedGetterConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestCustomNamedGetterConstructorTable = { 0, 0, false, JSTestCustomNamedGetterConstructorTableValues, 0, JSTestCustomNamedGetterConstructorTableIndex };
</ins><span class="cx"> const ClassInfo JSTestCustomNamedGetterConstructor::s_info = { &quot;TestCustomNamedGetterConstructor&quot;, &amp;Base::s_info, &amp;JSTestCustomNamedGetterConstructorTable, 0, CREATE_METHOD_TABLE(JSTestCustomNamedGetterConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestCustomNamedGetterConstructor::JSTestCustomNamedGetterConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -71,13 +80,18 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestCustomNamedGetterPrototypeTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestCustomNamedGetterPrototypeTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
+static const HashTableValue JSTestCustomNamedGetterPrototypeTableValues[1] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;anotherFunction&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestCustomNamedGetterPrototypeFunctionAnotherFunction), (intptr_t) (1) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestCustomNamedGetterPrototypeTable = { 2, 1, false, JSTestCustomNamedGetterPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestCustomNamedGetterPrototypeTable = { 1, 1, false, JSTestCustomNamedGetterPrototypeTableValues, 0, JSTestCustomNamedGetterPrototypeTableIndex };
</ins><span class="cx"> const ClassInfo JSTestCustomNamedGetterPrototype::s_info = { &quot;TestCustomNamedGetterPrototype&quot;, &amp;Base::s_info, &amp;JSTestCustomNamedGetterPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestCustomNamedGetterPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestCustomNamedGetterPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -35,12 +35,16 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestEventConstructorConstructorTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestEventConstructorConstructorTableIndex[1] = {
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestEventConstructorConstructorTableValues[0] =
</ins><span class="cx"> {
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestEventConstructorConstructorTable = { 1, 0, false, JSTestEventConstructorConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestEventConstructorConstructorTable = { 0, 0, false, JSTestEventConstructorConstructorTableValues, 0, JSTestEventConstructorConstructorTableIndex };
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL JSTestEventConstructorConstructor::constructJSTestEventConstructor(ExecState* exec)
</span><span class="cx"> {
</span><span class="cx">     JSTestEventConstructorConstructor* jsConstructor = jsCast&lt;JSTestEventConstructorConstructor*&gt;(exec-&gt;callee());
</span><span class="lines">@@ -107,15 +111,27 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestEventConstructorPrototypeTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestEventConstructorPrototypeTableIndex[9] = {
+    { -1, -1 },
+    { 0, 8 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 2, -1 },
+};
+
+
+static const HashTableValue JSTestEventConstructorPrototypeTableValues[3] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestEventConstructorConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><span class="cx">     { &quot;attr1&quot;, DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestEventConstructorAttr1), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><span class="cx">     { &quot;attr2&quot;, DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestEventConstructorAttr2), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestEventConstructorPrototypeTable = { 9, 7, true, JSTestEventConstructorPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestEventConstructorPrototypeTable = { 3, 7, true, JSTestEventConstructorPrototypeTableValues, 0, JSTestEventConstructorPrototypeTableIndex };
</ins><span class="cx"> const ClassInfo JSTestEventConstructorPrototype::s_info = { &quot;TestEventConstructorPrototype&quot;, &amp;Base::s_info, &amp;JSTestEventConstructorPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestEventConstructorPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestEventConstructorPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -40,21 +40,30 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestEventTargetTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestEventTargetTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
+static const HashTableValue JSTestEventTargetTableValues[1] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestEventTargetConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestEventTargetTable = { 2, 1, true, JSTestEventTargetTableValues, 0 };
</del><ins>+static const HashTable JSTestEventTargetTable = { 1, 1, true, JSTestEventTargetTableValues, 0, JSTestEventTargetTableIndex };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestEventTargetConstructorTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestEventTargetConstructorTableIndex[1] = {
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestEventTargetConstructorTableValues[0] =
</ins><span class="cx"> {
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestEventTargetConstructorTable = { 1, 0, false, JSTestEventTargetConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestEventTargetConstructorTable = { 0, 0, false, JSTestEventTargetConstructorTableValues, 0, JSTestEventTargetConstructorTableIndex };
</ins><span class="cx"> const ClassInfo JSTestEventTargetConstructor::s_info = { &quot;TestEventTargetConstructor&quot;, &amp;Base::s_info, &amp;JSTestEventTargetConstructorTable, 0, CREATE_METHOD_TABLE(JSTestEventTargetConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestEventTargetConstructor::JSTestEventTargetConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -77,16 +86,27 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestEventTargetPrototypeTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestEventTargetPrototypeTableIndex[8] = {
+    { 2, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 3, -1 },
+    { 1, -1 },
+    { 0, -1 },
+};
+
+
+static const HashTableValue JSTestEventTargetPrototypeTableValues[4] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;item&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestEventTargetPrototypeFunctionItem), (intptr_t) (1) },
</span><span class="cx">     { &quot;addEventListener&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestEventTargetPrototypeFunctionAddEventListener), (intptr_t) (2) },
</span><span class="cx">     { &quot;removeEventListener&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestEventTargetPrototypeFunctionRemoveEventListener), (intptr_t) (2) },
</span><span class="cx">     { &quot;dispatchEvent&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestEventTargetPrototypeFunctionDispatchEvent), (intptr_t) (1) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestEventTargetPrototypeTable = { 8, 7, false, JSTestEventTargetPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestEventTargetPrototypeTable = { 4, 7, false, JSTestEventTargetPrototypeTableValues, 0, JSTestEventTargetPrototypeTableIndex };
</ins><span class="cx"> const ClassInfo JSTestEventTargetPrototype::s_info = { &quot;TestEventTargetPrototype&quot;, &amp;Base::s_info, &amp;JSTestEventTargetPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestEventTargetPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestEventTargetPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -134,7 +154,7 @@
</span><span class="cx"> {
</span><span class="cx">     JSTestEventTarget* thisObject = jsCast&lt;JSTestEventTarget*&gt;(object);
</span><span class="cx">     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
</span><del>-    const HashEntry* entry = getStaticValueSlotEntryWithoutCaching&lt;JSTestEventTarget&gt;(exec, propertyName);
</del><ins>+    const HashTableValue* entry = getStaticValueSlotEntryWithoutCaching&lt;JSTestEventTarget&gt;(exec, propertyName);
</ins><span class="cx">     if (entry) {
</span><span class="cx">         slot.setCustom(thisObject, entry-&gt;attributes(), entry-&gt;propertyGetter());
</span><span class="cx">         return true;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -33,21 +33,30 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestExceptionTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestExceptionTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
+static const HashTableValue JSTestExceptionTableValues[1] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;name&quot;, DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestExceptionName), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestExceptionTable = { 2, 1, true, JSTestExceptionTableValues, 0 };
</del><ins>+static const HashTable JSTestExceptionTable = { 1, 1, true, JSTestExceptionTableValues, 0, JSTestExceptionTableIndex };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestExceptionConstructorTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestExceptionConstructorTableIndex[1] = {
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestExceptionConstructorTableValues[0] =
</ins><span class="cx"> {
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestExceptionConstructorTable = { 1, 0, false, JSTestExceptionConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestExceptionConstructorTable = { 0, 0, false, JSTestExceptionConstructorTableValues, 0, JSTestExceptionConstructorTableIndex };
</ins><span class="cx"> const ClassInfo JSTestExceptionConstructor::s_info = { &quot;TestExceptionConstructor&quot;, &amp;Base::s_info, &amp;JSTestExceptionConstructorTable, 0, CREATE_METHOD_TABLE(JSTestExceptionConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestExceptionConstructor::JSTestExceptionConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -70,13 +79,18 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestExceptionPrototypeTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestExceptionPrototypeTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
+static const HashTableValue JSTestExceptionPrototypeTableValues[1] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestExceptionConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestExceptionPrototypeTable = { 2, 1, true, JSTestExceptionPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestExceptionPrototypeTable = { 1, 1, true, JSTestExceptionPrototypeTableValues, 0, JSTestExceptionPrototypeTableIndex };
</ins><span class="cx"> const ClassInfo JSTestExceptionPrototype::s_info = { &quot;TestExceptionPrototype&quot;, &amp;Base::s_info, &amp;JSTestExceptionPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestExceptionPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestExceptionPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -30,12 +30,16 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestGenerateIsReachableConstructorTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestGenerateIsReachableConstructorTableIndex[1] = {
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestGenerateIsReachableConstructorTableValues[0] =
</ins><span class="cx"> {
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestGenerateIsReachableConstructorTable = { 1, 0, false, JSTestGenerateIsReachableConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestGenerateIsReachableConstructorTable = { 0, 0, false, JSTestGenerateIsReachableConstructorTableValues, 0, JSTestGenerateIsReachableConstructorTableIndex };
</ins><span class="cx"> const ClassInfo JSTestGenerateIsReachableConstructor::s_info = { &quot;TestGenerateIsReachableConstructor&quot;, &amp;Base::s_info, &amp;JSTestGenerateIsReachableConstructorTable, 0, CREATE_METHOD_TABLE(JSTestGenerateIsReachableConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestGenerateIsReachableConstructor::JSTestGenerateIsReachableConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -58,13 +62,18 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestGenerateIsReachablePrototypeTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestGenerateIsReachablePrototypeTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
+static const HashTableValue JSTestGenerateIsReachablePrototypeTableValues[1] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestGenerateIsReachableConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestGenerateIsReachablePrototypeTable = { 2, 1, true, JSTestGenerateIsReachablePrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestGenerateIsReachablePrototypeTable = { 1, 1, true, JSTestGenerateIsReachablePrototypeTableValues, 0, JSTestGenerateIsReachablePrototypeTableIndex };
</ins><span class="cx"> const ClassInfo JSTestGenerateIsReachablePrototype::s_info = { &quot;TestGenerateIsReachablePrototype&quot;, &amp;Base::s_info, &amp;JSTestGenerateIsReachablePrototypeTable, 0, CREATE_METHOD_TABLE(JSTestGenerateIsReachablePrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestGenerateIsReachablePrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -50,56 +50,101 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestInterfaceTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestInterfaceTableIndex[4] = {
+    { -1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { 1, -1 },
+};
+
+
+static const HashTableValue JSTestInterfaceTableValues[2] =
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx">     { &quot;implementsStr3&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceImplementsStr3), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestInterfaceImplementsStr3) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><span class="cx">     { &quot;supplementalStr3&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceSupplementalStr3), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestInterfaceSupplementalStr3) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestInterfaceTable = { 4, 3, true, JSTestInterfaceTableValues, 0 };
</del><ins>+static const HashTable JSTestInterfaceTable = { 2, 3, true, JSTestInterfaceTableValues, 0, JSTestInterfaceTableIndex };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestInterfaceConstructorTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestInterfaceConstructorTableIndex[11] = {
+    { 8, -1 },
+    { 5, -1 },
+    { -1, -1 },
+    { 0, 9 },
+    { 6, 10 },
+    { 7, -1 },
+    { 2, -1 },
+    { 1, 8 },
+    { 3, -1 },
+    { 4, -1 },
+    { 9, -1 },
+};
+
+
+static const HashTableValue JSTestInterfaceConstructorTableValues[10] =
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx">     { &quot;IMPLEMENTSCONSTANT1&quot;, DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceIMPLEMENTSCONSTANT1), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx">     { &quot;IMPLEMENTSCONSTANT2&quot;, DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceIMPLEMENTSCONSTANT2), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><span class="cx">     { &quot;SUPPLEMENTALCONSTANT1&quot;, DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceSUPPLEMENTALCONSTANT1), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><span class="cx">     { &quot;SUPPLEMENTALCONSTANT2&quot;, DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceSUPPLEMENTALCONSTANT2), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx">     { &quot;implementsStaticReadOnlyAttr&quot;, DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceConstructorImplementsStaticReadOnlyAttr), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx">     { &quot;implementsStaticAttr&quot;, DontDelete, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceConstructorImplementsStaticAttr), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestInterfaceConstructorImplementsStaticAttr) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><span class="cx">     { &quot;supplementalStaticReadOnlyAttr&quot;, DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceConstructorSupplementalStaticReadOnlyAttr), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><span class="cx">     { &quot;supplementalStaticAttr&quot;, DontDelete, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceConstructorSupplementalStaticAttr), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestInterfaceConstructorSupplementalStaticAttr) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx">     { &quot;implementsMethod4&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestInterfaceConstructorFunctionImplementsMethod4), (intptr_t) (0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><span class="cx">     { &quot;supplementalMethod4&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestInterfaceConstructorFunctionSupplementalMethod4), (intptr_t) (0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestInterfaceConstructorTable = { 11, 7, true, JSTestInterfaceConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestInterfaceConstructorTable = { 10, 7, true, JSTestInterfaceConstructorTableValues, 0, JSTestInterfaceConstructorTableIndex };
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx"> COMPILE_ASSERT(1 == TestInterface::IMPLEMENTSCONSTANT1, TestInterfaceEnumIMPLEMENTSCONSTANT1IsWrongUseDoNotCheckConstants);
</span><span class="lines">@@ -167,61 +212,161 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestInterfacePrototypeTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestInterfacePrototypeTableIndex[65] = {
+    { -1, -1 },
+    { 3, 64 },
+    { 14, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 13, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 10, -1 },
+    { -1, -1 },
+    { 5, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 4, -1 },
+    { -1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { 7, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 15, -1 },
+    { 1, -1 },
+    { 6, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 11, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 8, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 16, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { 9, -1 },
+    { -1, -1 },
+    { 12, -1 },
+};
+
+
+static const HashTableValue JSTestInterfacePrototypeTableValues[17] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx">     { &quot;implementsStr1&quot;, DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceImplementsStr1), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx">     { &quot;implementsStr2&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceImplementsStr2), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestInterfaceImplementsStr2) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx">     { &quot;implementsNode&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceImplementsNode), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestInterfaceImplementsNode) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><span class="cx">     { &quot;supplementalStr1&quot;, DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceSupplementalStr1), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><span class="cx">     { &quot;supplementalStr2&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceSupplementalStr2), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestInterfaceSupplementalStr2) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><span class="cx">     { &quot;supplementalNode&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceSupplementalNode), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestInterfaceSupplementalNode) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx">     { &quot;IMPLEMENTSCONSTANT1&quot;, DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceIMPLEMENTSCONSTANT1), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx">     { &quot;IMPLEMENTSCONSTANT2&quot;, DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceIMPLEMENTSCONSTANT2), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><span class="cx">     { &quot;SUPPLEMENTALCONSTANT1&quot;, DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceSUPPLEMENTALCONSTANT1), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><span class="cx">     { &quot;SUPPLEMENTALCONSTANT2&quot;, DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceSUPPLEMENTALCONSTANT2), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx">     { &quot;implementsMethod1&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestInterfacePrototypeFunctionImplementsMethod1), (intptr_t) (0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx">     { &quot;implementsMethod2&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestInterfacePrototypeFunctionImplementsMethod2), (intptr_t) (2) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx">     { &quot;implementsMethod3&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestInterfacePrototypeFunctionImplementsMethod3), (intptr_t) (0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><span class="cx">     { &quot;supplementalMethod1&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestInterfacePrototypeFunctionSupplementalMethod1), (intptr_t) (0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><span class="cx">     { &quot;supplementalMethod2&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestInterfacePrototypeFunctionSupplementalMethod2), (intptr_t) (2) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><span class="cx">     { &quot;supplementalMethod3&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestInterfacePrototypeFunctionSupplementalMethod3), (intptr_t) (0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestInterfacePrototypeTable = { 65, 63, true, JSTestInterfacePrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestInterfacePrototypeTable = { 17, 63, true, JSTestInterfacePrototypeTableValues, 0, JSTestInterfacePrototypeTableIndex };
</ins><span class="cx"> const ClassInfo JSTestInterfacePrototype::s_info = { &quot;TestInterfacePrototype&quot;, &amp;Base::s_info, &amp;JSTestInterfacePrototypeTable, 0, CREATE_METHOD_TABLE(JSTestInterfacePrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestInterfacePrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -34,12 +34,16 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestMediaQueryListListenerConstructorTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestMediaQueryListListenerConstructorTableIndex[1] = {
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestMediaQueryListListenerConstructorTableValues[0] =
</ins><span class="cx"> {
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestMediaQueryListListenerConstructorTable = { 1, 0, false, JSTestMediaQueryListListenerConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestMediaQueryListListenerConstructorTable = { 0, 0, false, JSTestMediaQueryListListenerConstructorTableValues, 0, JSTestMediaQueryListListenerConstructorTableIndex };
</ins><span class="cx"> const ClassInfo JSTestMediaQueryListListenerConstructor::s_info = { &quot;TestMediaQueryListListenerConstructor&quot;, &amp;Base::s_info, &amp;JSTestMediaQueryListListenerConstructorTable, 0, CREATE_METHOD_TABLE(JSTestMediaQueryListListenerConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestMediaQueryListListenerConstructor::JSTestMediaQueryListListenerConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -62,14 +66,21 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestMediaQueryListListenerPrototypeTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestMediaQueryListListenerPrototypeTableIndex[4] = {
+    { 1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestMediaQueryListListenerPrototypeTableValues[2] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestMediaQueryListListenerConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><span class="cx">     { &quot;method&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestMediaQueryListListenerPrototypeFunctionMethod), (intptr_t) (1) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestMediaQueryListListenerPrototypeTable = { 4, 3, true, JSTestMediaQueryListListenerPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestMediaQueryListListenerPrototypeTable = { 2, 3, true, JSTestMediaQueryListListenerPrototypeTableValues, 0, JSTestMediaQueryListListenerPrototypeTableIndex };
</ins><span class="cx"> const ClassInfo JSTestMediaQueryListListenerPrototype::s_info = { &quot;TestMediaQueryListListenerPrototype&quot;, &amp;Base::s_info, &amp;JSTestMediaQueryListListenerPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestMediaQueryListListenerPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestMediaQueryListListenerPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNamedConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -33,12 +33,16 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestNamedConstructorConstructorTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestNamedConstructorConstructorTableIndex[1] = {
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestNamedConstructorConstructorTableValues[0] =
</ins><span class="cx"> {
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestNamedConstructorConstructorTable = { 1, 0, false, JSTestNamedConstructorConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestNamedConstructorConstructorTable = { 0, 0, false, JSTestNamedConstructorConstructorTableValues, 0, JSTestNamedConstructorConstructorTableIndex };
</ins><span class="cx"> const ClassInfo JSTestNamedConstructorConstructor::s_info = { &quot;TestNamedConstructorConstructor&quot;, &amp;Base::s_info, &amp;JSTestNamedConstructorConstructorTable, 0, CREATE_METHOD_TABLE(JSTestNamedConstructorConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestNamedConstructorConstructor::JSTestNamedConstructorConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -105,13 +109,18 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestNamedConstructorPrototypeTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestNamedConstructorPrototypeTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
+static const HashTableValue JSTestNamedConstructorPrototypeTableValues[1] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestNamedConstructorConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestNamedConstructorPrototypeTable = { 2, 1, true, JSTestNamedConstructorPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestNamedConstructorPrototypeTable = { 1, 1, true, JSTestNamedConstructorPrototypeTableValues, 0, JSTestNamedConstructorPrototypeTableIndex };
</ins><span class="cx"> const ClassInfo JSTestNamedConstructorPrototype::s_info = { &quot;TestNamedConstructorPrototype&quot;, &amp;Base::s_info, &amp;JSTestNamedConstructorPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestNamedConstructorPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestNamedConstructorPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -33,12 +33,16 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestNodeConstructorTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestNodeConstructorTableIndex[1] = {
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestNodeConstructorTableValues[0] =
</ins><span class="cx"> {
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestNodeConstructorTable = { 1, 0, false, JSTestNodeConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestNodeConstructorTable = { 0, 0, false, JSTestNodeConstructorTableValues, 0, JSTestNodeConstructorTableIndex };
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL JSTestNodeConstructor::constructJSTestNode(ExecState* exec)
</span><span class="cx"> {
</span><span class="cx">     JSTestNodeConstructor* castedThis = jsCast&lt;JSTestNodeConstructor*&gt;(exec-&gt;callee());
</span><span class="lines">@@ -74,13 +78,18 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestNodePrototypeTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestNodePrototypeTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
+static const HashTableValue JSTestNodePrototypeTableValues[1] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestNodeConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestNodePrototypeTable = { 2, 1, true, JSTestNodePrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestNodePrototypeTable = { 1, 1, true, JSTestNodePrototypeTableValues, 0, JSTestNodePrototypeTableIndex };
</ins><span class="cx"> const ClassInfo JSTestNodePrototype::s_info = { &quot;TestNodePrototype&quot;, &amp;Base::s_info, &amp;JSTestNodePrototypeTable, 0, CREATE_METHOD_TABLE(JSTestNodePrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestNodePrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -76,30 +76,101 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestObjTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestObjTableIndex[17] = {
+    { 5, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 4, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { 0, 16 },
+    { -1, -1 },
+    { 1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 3, -1 },
+};
+
+
+static const HashTableValue JSTestObjTableValues[6] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;TestSubObjEnabledBySetting&quot;, DontEnum, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjTestSubObjEnabledBySettingConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestObjTestSubObjEnabledBySettingConstructor) },
</span><span class="cx">     { &quot;customAttr&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjCustomAttr), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestObjCustomAttr) },
</span><span class="cx"> #if ENABLE(Condition1)
</span><span class="cx">     { &quot;conditionalAttr4&quot;, DontEnum, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjConditionalAttr4Constructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestObjConditionalAttr4Constructor) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition1) &amp;&amp; ENABLE(Condition2)
</span><span class="cx">     { &quot;conditionalAttr5&quot;, DontEnum, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjConditionalAttr5Constructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestObjConditionalAttr5Constructor) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition1) || ENABLE(Condition2)
</span><span class="cx">     { &quot;conditionalAttr6&quot;, DontEnum, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjConditionalAttr6Constructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestObjConditionalAttr6Constructor) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx">     { &quot;contentDocument&quot;, DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjContentDocument), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestObjTable = { 17, 15, true, JSTestObjTableValues, 0 };
</del><ins>+static const HashTable JSTestObjTable = { 6, 15, true, JSTestObjTableValues, 0, JSTestObjTableIndex };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestObjConstructorTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestObjConstructorTableIndex[39] = {
+    { -1, -1 },
+    { 9, 34 },
+    { 21, -1 },
+    { 2, -1 },
+    { 1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 0, -1 },
+    { 12, -1 },
+    { 16, -1 },
+    { 5, 32 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 10, -1 },
+    { 7, 36 },
+    { 15, -1 },
+    { 3, -1 },
+    { -1, -1 },
+    { 11, 33 },
+    { -1, -1 },
+    { -1, -1 },
+    { 8, 37 },
+    { 18, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 4, -1 },
+    { 6, -1 },
+    { 13, -1 },
+    { 14, 35 },
+    { 17, -1 },
+    { 19, 38 },
+    { 20, -1 },
+    { 22, -1 },
+};
+
+
+static const HashTableValue JSTestObjConstructorTableValues[23] =
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(Condition1)
</span><span class="cx">     { &quot;CONDITIONAL_CONST&quot;, DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjCONDITIONAL_CONST), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx">     { &quot;CONST_VALUE_0&quot;, DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjCONST_VALUE_0), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><span class="cx">     { &quot;CONST_VALUE_1&quot;, DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjCONST_VALUE_1), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><span class="lines">@@ -124,11 +195,12 @@
</span><span class="cx">     { &quot;classMethod2&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjConstructorFunctionClassMethod2), (intptr_t) (1) },
</span><span class="cx"> #if ENABLE(Condition1)
</span><span class="cx">     { &quot;overloadedMethod1&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjConstructorFunctionOverloadedMethod1), (intptr_t) (1) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestObjConstructorTable = { 39, 31, true, JSTestObjConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestObjConstructorTable = { 23, 31, true, JSTestObjConstructorTableValues, 0, JSTestObjConstructorTableIndex };
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition1)
</span><span class="cx"> COMPILE_ASSERT(0 == TestObj::CONDITIONAL_CONST, TestObjEnumCONDITIONAL_CONSTIsWrongUseDoNotCheckConstants);
</span><span class="lines">@@ -187,7 +259,541 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestObjPrototypeTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestObjPrototypeTableIndex[530] = {
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 23, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 49, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 16, 513 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 47, -1 },
+    { 73, -1 },
+    { -1, -1 },
+    { 41, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 102, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 15, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 110, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 27, 522 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 126, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 101, -1 },
+    { 100, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 4, -1 },
+    { -1, -1 },
+    { 17, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 5, -1 },
+    { 134, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 53, -1 },
+    { 32, 517 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 93, -1 },
+    { 87, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 31, -1 },
+    { -1, -1 },
+    { 55, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 117, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 78, -1 },
+    { 70, -1 },
+    { -1, -1 },
+    { 25, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 22, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 96, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 114, -1 },
+    { -1, -1 },
+    { 6, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 86, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 33, -1 },
+    { 51, -1 },
+    { -1, -1 },
+    { 71, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 92, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 127, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 72, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 67, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 24, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 89, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 82, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 3, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 45, -1 },
+    { -1, -1 },
+    { 77, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 36, 526 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 8, 512 },
+    { -1, -1 },
+    { 130, -1 },
+    { -1, -1 },
+    { 58, 528 },
+    { 135, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 64, 524 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 131, -1 },
+    { -1, -1 },
+    { 103, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 39, 515 },
+    { -1, -1 },
+    { -1, -1 },
+    { 113, -1 },
+    { 90, -1 },
+    { 120, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 34, -1 },
+    { -1, -1 },
+    { 18, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 61, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 128, -1 },
+    { 123, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 26, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 76, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 84, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 43, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 12, -1 },
+    { -1, -1 },
+    { 59, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { 99, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 30, -1 },
+    { 28, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 124, -1 },
+    { -1, -1 },
+    { 35, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 65, 518 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 88, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 46, 521 },
+    { 80, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 44, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 69, -1 },
+    { -1, -1 },
+    { 62, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { -1, -1 },
+    { 50, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 95, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 38, 523 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 57, -1 },
+    { 68, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 107, 527 },
+    { -1, -1 },
+    { 108, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 14, -1 },
+    { 20, 529 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 112, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 118, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 79, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 60, -1 },
+    { 52, -1 },
+    { -1, -1 },
+    { 74, -1 },
+    { 132, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 54, 516 },
+    { -1, -1 },
+    { 85, -1 },
+    { 9, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 105, -1 },
+    { 29, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 37, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 19, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 109, -1 },
+    { 13, 514 },
+    { 40, -1 },
+    { 111, -1 },
+    { -1, -1 },
+    { 7, 525 },
+    { -1, -1 },
+    { 125, -1 },
+    { 106, -1 },
+    { 75, 520 },
+    { -1, -1 },
+    { 122, -1 },
+    { 83, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 119, -1 },
+    { -1, -1 },
+    { 10, 519 },
+    { 11, -1 },
+    { 21, -1 },
+    { 42, -1 },
+    { 48, -1 },
+    { 56, -1 },
+    { 63, -1 },
+    { 66, -1 },
+    { 81, -1 },
+    { 91, -1 },
+    { 94, -1 },
+    { 97, -1 },
+    { 98, -1 },
+    { 104, -1 },
+    { 115, -1 },
+    { 116, -1 },
+    { 121, -1 },
+    { 129, -1 },
+    { 133, -1 },
+};
+
+
+static const HashTableValue JSTestObjPrototypeTableValues[136] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><span class="cx">     { &quot;readOnlyLongAttr&quot;, DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjReadOnlyLongAttr), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><span class="lines">@@ -229,12 +835,18 @@
</span><span class="cx">     { &quot;withScriptArgumentsAndCallStackAttribute&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjWithScriptArgumentsAndCallStackAttribute), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestObjWithScriptArgumentsAndCallStackAttribute) },
</span><span class="cx"> #if ENABLE(Condition1)
</span><span class="cx">     { &quot;conditionalAttr1&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjConditionalAttr1), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestObjConditionalAttr1) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition1) &amp;&amp; ENABLE(Condition2)
</span><span class="cx">     { &quot;conditionalAttr2&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjConditionalAttr2), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestObjConditionalAttr2) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition1) || ENABLE(Condition2)
</span><span class="cx">     { &quot;conditionalAttr3&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjConditionalAttr3), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestObjConditionalAttr3) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx">     { &quot;cachedAttribute1&quot;, DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjCachedAttribute1), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><span class="cx">     { &quot;cachedAttribute2&quot;, DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjCachedAttribute2), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><span class="lines">@@ -257,6 +869,8 @@
</span><span class="cx">     { &quot;attributeWithReservedEnumType&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjAttributeWithReservedEnumType), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestObjAttributeWithReservedEnumType) },
</span><span class="cx"> #if ENABLE(Condition1)
</span><span class="cx">     { &quot;CONDITIONAL_CONST&quot;, DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjCONDITIONAL_CONST), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx">     { &quot;CONST_VALUE_0&quot;, DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjCONST_VALUE_0), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><span class="cx">     { &quot;CONST_VALUE_1&quot;, DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestObjCONST_VALUE_1), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><span class="lines">@@ -312,12 +926,18 @@
</span><span class="cx">     { &quot;methodWithCallbackAndOptionalArg&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg), (intptr_t) (0) },
</span><span class="cx"> #if ENABLE(Condition1)
</span><span class="cx">     { &quot;conditionalMethod1&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionConditionalMethod1), (intptr_t) (0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition1) &amp;&amp; ENABLE(Condition2)
</span><span class="cx">     { &quot;conditionalMethod2&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionConditionalMethod2), (intptr_t) (0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition1) || ENABLE(Condition2)
</span><span class="cx">     { &quot;conditionalMethod3&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionConditionalMethod3), (intptr_t) (0) },
</span><ins>+#else
+    { 0, 0, NoIntrinsic, 0, 0 },
</ins><span class="cx"> #endif
</span><span class="cx">     { &quot;overloadedMethod&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionOverloadedMethod), (intptr_t) (2) },
</span><span class="cx">     { &quot;classMethodWithClamp&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionClassMethodWithClamp), (intptr_t) (2) },
</span><span class="lines">@@ -339,10 +959,9 @@
</span><span class="cx">     { &quot;variadicDoubleMethod&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionVariadicDoubleMethod), (intptr_t) (2) },
</span><span class="cx">     { &quot;variadicNodeMethod&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionVariadicNodeMethod), (intptr_t) (2) },
</span><span class="cx">     { &quot;any&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestObjPrototypeFunctionAny), (intptr_t) (2) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestObjPrototypeTable = { 530, 511, true, JSTestObjPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestObjPrototypeTable = { 136, 511, true, JSTestObjPrototypeTableValues, 0, JSTestObjPrototypeTableIndex };
</ins><span class="cx"> const ClassInfo JSTestObjPrototype::s_info = { &quot;TestObjectPrototype&quot;, &amp;Base::s_info, &amp;JSTestObjPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestObjPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestObjPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -34,12 +34,16 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestOverloadedConstructorsConstructorTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestOverloadedConstructorsConstructorTableIndex[1] = {
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestOverloadedConstructorsConstructorTableValues[0] =
</ins><span class="cx"> {
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestOverloadedConstructorsConstructorTable = { 1, 0, false, JSTestOverloadedConstructorsConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestOverloadedConstructorsConstructorTable = { 0, 0, false, JSTestOverloadedConstructorsConstructorTableValues, 0, JSTestOverloadedConstructorsConstructorTableIndex };
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors1(ExecState* exec)
</span><span class="cx"> {
</span><span class="cx">     JSTestOverloadedConstructorsConstructor* castedThis = jsCast&lt;JSTestOverloadedConstructorsConstructor*&gt;(exec-&gt;callee());
</span><span class="lines">@@ -133,13 +137,18 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestOverloadedConstructorsPrototypeTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestOverloadedConstructorsPrototypeTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
+static const HashTableValue JSTestOverloadedConstructorsPrototypeTableValues[1] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestOverloadedConstructorsConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestOverloadedConstructorsPrototypeTable = { 2, 1, true, JSTestOverloadedConstructorsPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestOverloadedConstructorsPrototypeTable = { 1, 1, true, JSTestOverloadedConstructorsPrototypeTableValues, 0, JSTestOverloadedConstructorsPrototypeTableIndex };
</ins><span class="cx"> const ClassInfo JSTestOverloadedConstructorsPrototype::s_info = { &quot;TestOverloadedConstructorsPrototype&quot;, &amp;Base::s_info, &amp;JSTestOverloadedConstructorsPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestOverloadedConstructorsPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestOverloadedConstructorsPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -38,12 +38,16 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestSerializedScriptValueInterfaceConstructorTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestSerializedScriptValueInterfaceConstructorTableIndex[1] = {
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestSerializedScriptValueInterfaceConstructorTableValues[0] =
</ins><span class="cx"> {
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestSerializedScriptValueInterfaceConstructorTable = { 1, 0, false, JSTestSerializedScriptValueInterfaceConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestSerializedScriptValueInterfaceConstructorTable = { 0, 0, false, JSTestSerializedScriptValueInterfaceConstructorTableValues, 0, JSTestSerializedScriptValueInterfaceConstructorTableIndex };
</ins><span class="cx"> const ClassInfo JSTestSerializedScriptValueInterfaceConstructor::s_info = { &quot;TestSerializedScriptValueInterfaceConstructor&quot;, &amp;Base::s_info, &amp;JSTestSerializedScriptValueInterfaceConstructorTable, 0, CREATE_METHOD_TABLE(JSTestSerializedScriptValueInterfaceConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestSerializedScriptValueInterfaceConstructor::JSTestSerializedScriptValueInterfaceConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -66,7 +70,28 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestSerializedScriptValueInterfacePrototypeTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestSerializedScriptValueInterfacePrototypeTableIndex[17] = {
+    { -1, -1 },
+    { -1, -1 },
+    { 3, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 2, 16 },
+    { -1, -1 },
+    { 4, -1 },
+    { -1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { 1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 5, -1 },
+};
+
+
+static const HashTableValue JSTestSerializedScriptValueInterfacePrototypeTableValues[6] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestSerializedScriptValueInterfaceConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><span class="cx">     { &quot;value&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestSerializedScriptValueInterfaceValue), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestSerializedScriptValueInterfaceValue) },
</span><span class="lines">@@ -74,10 +99,9 @@
</span><span class="cx">     { &quot;cachedValue&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestSerializedScriptValueInterfaceCachedValue), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestSerializedScriptValueInterfaceCachedValue) },
</span><span class="cx">     { &quot;ports&quot;, DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestSerializedScriptValueInterfacePorts), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><span class="cx">     { &quot;cachedReadonlyValue&quot;, DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestSerializedScriptValueInterfaceCachedReadonlyValue), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestSerializedScriptValueInterfacePrototypeTable = { 17, 15, true, JSTestSerializedScriptValueInterfacePrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestSerializedScriptValueInterfacePrototypeTable = { 6, 15, true, JSTestSerializedScriptValueInterfacePrototypeTableValues, 0, JSTestSerializedScriptValueInterfacePrototypeTableIndex };
</ins><span class="cx"> const ClassInfo JSTestSerializedScriptValueInterfacePrototype::s_info = { &quot;TestSerializedScriptValueInterfacePrototype&quot;, &amp;Base::s_info, &amp;JSTestSerializedScriptValueInterfacePrototypeTable, 0, CREATE_METHOD_TABLE(JSTestSerializedScriptValueInterfacePrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestSerializedScriptValueInterfacePrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -46,21 +46,30 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestTypedefsTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestTypedefsTableIndex[2] = {
+    { -1, -1 },
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSTestTypedefsTableValues[0] =
</ins><span class="cx"> {
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestTypedefsTable = { 2, 1, false, JSTestTypedefsTableValues, 0 };
</del><ins>+static const HashTable JSTestTypedefsTable = { 0, 1, false, JSTestTypedefsTableValues, 0, JSTestTypedefsTableIndex };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestTypedefsConstructorTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestTypedefsConstructorTableIndex[1] = {
+    { 0, -1 },
+};
+
+
+static const HashTableValue JSTestTypedefsConstructorTableValues[1] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;TestSubObj&quot;, DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestTypedefsConstructorTestSubObj), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestTypedefsConstructorTable = { 1, 0, true, JSTestTypedefsConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestTypedefsConstructorTable = { 1, 0, true, JSTestTypedefsConstructorTableValues, 0, JSTestTypedefsConstructorTableIndex };
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL JSTestTypedefsConstructor::constructJSTestTypedefs(ExecState* exec)
</span><span class="cx"> {
</span><span class="cx">     JSTestTypedefsConstructor* castedThis = jsCast&lt;JSTestTypedefsConstructor*&gt;(exec-&gt;callee());
</span><span class="lines">@@ -104,7 +113,77 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSTestTypedefsPrototypeTableValues[] =
</del><ins>+static const struct CompactHashIndex JSTestTypedefsPrototypeTableIndex[66] = {
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 9, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 16, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 2, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 0, 64 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 11, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 5, -1 },
+    { -1, -1 },
+    { 8, -1 },
+    { -1, -1 },
+    { 12, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 15, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 14, -1 },
+    { -1, -1 },
+    { 1, -1 },
+    { 3, -1 },
+    { 4, 65 },
+    { -1, -1 },
+    { -1, -1 },
+    { 10, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 13, -1 },
+    { -1, -1 },
+    { -1, -1 },
+    { 6, -1 },
+    { 7, -1 },
+};
+
+
+static const HashTableValue JSTestTypedefsPrototypeTableValues[17] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestTypedefsConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><span class="cx">     { &quot;unsignedLongLongAttr&quot;, DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestTypedefsUnsignedLongLongAttr), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestTypedefsUnsignedLongLongAttr) },
</span><span class="lines">@@ -123,10 +202,9 @@
</span><span class="cx">     { &quot;stringArrayFunction2&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestTypedefsPrototypeFunctionStringArrayFunction2), (intptr_t) (1) },
</span><span class="cx">     { &quot;callWithSequenceThatRequiresInclude&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestTypedefsPrototypeFunctionCallWithSequenceThatRequiresInclude), (intptr_t) (1) },
</span><span class="cx">     { &quot;methodWithException&quot;, JSC::Function, NoIntrinsic, (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestTypedefsPrototypeFunctionMethodWithException), (intptr_t) (0) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestTypedefsPrototypeTable = { 66, 63, true, JSTestTypedefsPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestTypedefsPrototypeTable = { 17, 63, true, JSTestTypedefsPrototypeTableValues, 0, JSTestTypedefsPrototypeTableIndex };
</ins><span class="cx"> const ClassInfo JSTestTypedefsPrototype::s_info = { &quot;TestTypedefsPrototype&quot;, &amp;Base::s_info, &amp;JSTestTypedefsPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestTypedefsPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestTypedefsPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSattributecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -33,12 +33,16 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSattributeConstructorTableValues[] =
</del><ins>+static const struct CompactHashIndex JSattributeConstructorTableIndex[1] = {
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSattributeConstructorTableValues[0] =
</ins><span class="cx"> {
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSattributeConstructorTable = { 1, 0, false, JSattributeConstructorTableValues, 0 };
</del><ins>+static const HashTable JSattributeConstructorTable = { 0, 0, false, JSattributeConstructorTableValues, 0, JSattributeConstructorTableIndex };
</ins><span class="cx"> const ClassInfo JSattributeConstructor::s_info = { &quot;attributeConstructor&quot;, &amp;Base::s_info, &amp;JSattributeConstructorTable, 0, CREATE_METHOD_TABLE(JSattributeConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSattributeConstructor::JSattributeConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -61,14 +65,21 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSattributePrototypeTableValues[] =
</del><ins>+static const struct CompactHashIndex JSattributePrototypeTableIndex[4] = {
+    { 1, -1 },
+    { 0, -1 },
+    { -1, -1 },
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSattributePrototypeTableValues[2] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsattributeConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><span class="cx">     { &quot;readonly&quot;, DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsattributeReadonly), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSattributePrototypeTable = { 4, 3, true, JSattributePrototypeTableValues, 0 };
</del><ins>+static const HashTable JSattributePrototypeTable = { 2, 3, true, JSattributePrototypeTableValues, 0, JSattributePrototypeTableIndex };
</ins><span class="cx"> const ClassInfo JSattributePrototype::s_info = { &quot;attributePrototype&quot;, &amp;Base::s_info, &amp;JSattributePrototypeTable, 0, CREATE_METHOD_TABLE(JSattributePrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSattributePrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSreadonlycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp (165481 => 165482)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp        2014-03-12 18:00:17 UTC (rev 165481)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp        2014-03-12 18:08:35 UTC (rev 165482)
</span><span class="lines">@@ -30,12 +30,16 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSreadonlyConstructorTableValues[] =
</del><ins>+static const struct CompactHashIndex JSreadonlyConstructorTableIndex[1] = {
+    { -1, -1 },
+};
+
+
+static const HashTableValue JSreadonlyConstructorTableValues[0] =
</ins><span class="cx"> {
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSreadonlyConstructorTable = { 1, 0, false, JSreadonlyConstructorTableValues, 0 };
</del><ins>+static const HashTable JSreadonlyConstructorTable = { 0, 0, false, JSreadonlyConstructorTableValues, 0, JSreadonlyConstructorTableIndex };
</ins><span class="cx"> const ClassInfo JSreadonlyConstructor::s_info = { &quot;readonlyConstructor&quot;, &amp;Base::s_info, &amp;JSreadonlyConstructorTable, 0, CREATE_METHOD_TABLE(JSreadonlyConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSreadonlyConstructor::JSreadonlyConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -58,13 +62,18 @@
</span><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><del>-static const HashTableValue JSreadonlyPrototypeTableValues[] =
</del><ins>+static const struct CompactHashIndex JSreadonlyPrototypeTableIndex[2] = {
+    { -1, -1 },
+    { 0, -1 },
+};
+
+
+static const HashTableValue JSreadonlyPrototypeTableValues[1] =
</ins><span class="cx"> {
</span><span class="cx">     { &quot;constructor&quot;, DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsreadonlyConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) },
</span><del>-    { 0, 0, NoIntrinsic, 0, 0 }
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSreadonlyPrototypeTable = { 2, 1, true, JSreadonlyPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSreadonlyPrototypeTable = { 1, 1, true, JSreadonlyPrototypeTableValues, 0, JSreadonlyPrototypeTableIndex };
</ins><span class="cx"> const ClassInfo JSreadonlyPrototype::s_info = { &quot;readonlyPrototype&quot;, &amp;Base::s_info, &amp;JSreadonlyPrototypeTable, 0, CREATE_METHOD_TABLE(JSreadonlyPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSreadonlyPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre>
</div>
</div>

</body>
</html>