<!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>[196423] 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/196423">196423</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2016-02-11 10:23:25 -0800 (Thu, 11 Feb 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Move 'length' property to the prototype
https://bugs.webkit.org/show_bug.cgi?id=154051
&lt;rdar://problem/24577385&gt;

Reviewed by Darin Adler.

LayoutTests/imported/w3c:

Rebaseline several W3C tests now that more checks are passing.

* web-platform-tests/dom/collections/HTMLCollection-supported-property-names-expected.txt:
* web-platform-tests/dom/collections/namednodemap-supported-property-names-expected.txt:
* web-platform-tests/dom/interfaces-expected.txt:
* web-platform-tests/dom/nodes/Element-children-expected.txt:
* web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt:
* web-platform-tests/dom/nodes/attributes-expected.txt:
* web-platform-tests/html/dom/documents/dom-tree-accessors/document.forms-expected.txt:
* web-platform-tests/html/dom/interfaces-expected.txt:

Source/WebCore:

Move 'length' property to the prototype, where it should be. We used to
keep it on the instance because our implementation of
getOwnPropertySlot() was wrong for interfaces with a named property
getter. However, our implementation of getOwnPropertySlot() is now
spec-compliant so this should be OK.

Moving 'length' to the prototype is also a little bit risky in terms of
performance, especially for HTMLCollection / NodeList. However, I did
not see an impact on realistic benchmarks like Speedometer and only saw
a small impact (&lt; 5%) on micro-benchmarks. I propose we make our behavior
correct and monitor performance. If we see any benchmark we care about
regress then we should try and optimize while keeping the attribute on
the prototype.

No new tests, already covered by existing tests.

* bindings/js/JSDOMBinding.h:
(WebCore::getStaticValueSlotEntryWithoutCaching):
* bindings/js/JSHTMLDocumentCustom.cpp:
(WebCore::JSHTMLDocument::getOwnPropertySlot):
(WebCore::JSHTMLDocument::nameGetter): Deleted.
* bindings/js/JSLocationCustom.cpp:
(WebCore::JSLocation::putDelegate):
* bindings/js/JSPluginElementFunctions.h:
(WebCore::pluginElementCustomGetOwnPropertySlot):
* bindings/js/JSStorageCustom.cpp:
(WebCore::JSStorage::deleteProperty):
(WebCore::JSStorage::deletePropertyByIndex):
(WebCore::JSStorage::putDelegate):
Leverage the new hasStaticPropertyTable static property in the
generated bindings for performance.

* bindings/scripts/CodeGeneratorJS.pm:
(GenerateHeader):
Generate a &quot;hasStaticPropertyTable&quot; static const boolean property
for each bindings class so we can check at build time if
ClassInfo::staticPropHashTable is null.

(AttributeShouldBeOnInstance):
Move &quot;length&quot; to the prototype.

* bindings/scripts/test/JS/JSTestActiveDOMObject.h:
* bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h:
* bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h:
* bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
* bindings/scripts/test/JS/JSTestEventConstructor.h:
* bindings/scripts/test/JS/JSTestEventTarget.h:
* bindings/scripts/test/JS/JSTestException.h:
* bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
* bindings/scripts/test/JS/JSTestInterface.h:
* bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
* bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
* bindings/scripts/test/JS/JSTestNamedConstructor.h:
* bindings/scripts/test/JS/JSTestNode.h:
* bindings/scripts/test/JS/JSTestNondeterministic.h:
* bindings/scripts/test/JS/JSTestObj.h:
* bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
* bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
* bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
* bindings/scripts/test/JS/JSTestTypedefs.h:
* bindings/scripts/test/JS/JSattribute.h:
* bindings/scripts/test/JS/JSreadonly.h:
Rebaseline bindings tests.

LayoutTests:

Rebaseline a couple of existing layout tests now that 'length' is
on the prototype.

* fast/dom/htmlcollection-getownpropertynames-expected.txt:
* storage/domstorage/localstorage/delete-defineproperty-removal-expected.txt:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastdomhtmlcollectiongetownpropertynamesexpectedtxt">trunk/LayoutTests/fast/dom/htmlcollection-getownpropertynames-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cChangeLog">trunk/LayoutTests/imported/w3c/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsdomcollectionsHTMLCollectionsupportedpropertynamesexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-supported-property-names-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsdomcollectionsnamednodemapsupportedpropertynamesexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/dom/collections/namednodemap-supported-property-names-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsdominterfacesexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsdomnodesElementchildrenexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-children-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsdomnodesElementgetElementsByTagNameexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsdomnodesattributesexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/attributes-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestshtmldomdocumentsdomtreeaccessorsdocumentformsexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/documents/dom-tree-accessors/document.forms-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestshtmldominterfacesexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces-expected.txt</a></li>
<li><a href="#trunkLayoutTestsstoragedomstoragelocalstoragedeletedefinepropertyremovalexpectedtxt">trunk/LayoutTests/storage/domstorage/localstorage/delete-defineproperty-removal-expected.txt</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="#trunkSourceWebCorebindingsjsJSHTMLDocumentCustomcpp">trunk/Source/WebCore/bindings/js/JSHTMLDocumentCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSLocationCustomcpp">trunk/Source/WebCore/bindings/js/JSLocationCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSPluginElementFunctionsh">trunk/Source/WebCore/bindings/js/JSPluginElementFunctions.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSStorageCustomcpp">trunk/Source/WebCore/bindings/js/JSStorageCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjecth">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestClassWithJSBuiltinConstructorh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCustomConstructorWithNoInterfaceObjecth">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCustomNamedGetterh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventTargeth">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestExceptionh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachableh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestInterfaceh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenerh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedConstructorh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNodeh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministich">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorsh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestOverrideBuiltinsh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfaceh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestTypedefsh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSattributeh">trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSreadonlyh">trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/LayoutTests/ChangeLog        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2016-02-11  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Move 'length' property to the prototype
+        https://bugs.webkit.org/show_bug.cgi?id=154051
+        &lt;rdar://problem/24577385&gt;
+
+        Reviewed by Darin Adler.
+
+        Rebaseline a couple of existing layout tests now that 'length' is
+        on the prototype.
+
+        * fast/dom/htmlcollection-getownpropertynames-expected.txt:
+        * storage/domstorage/localstorage/delete-defineproperty-removal-expected.txt:
+
</ins><span class="cx"> 2016-02-11  Frederic Wang  &lt;fred.wang@free.fr&gt;
</span><span class="cx"> 
</span><span class="cx">         Use Testharness.js for the MathML script tests
</span></span></pre></div>
<a id="trunkLayoutTestsfastdomhtmlcollectiongetownpropertynamesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/htmlcollection-getownpropertynames-expected.txt (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/htmlcollection-getownpropertynames-expected.txt        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/LayoutTests/fast/dom/htmlcollection-getownpropertynames-expected.txt        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> * Own properties
</span><del>-Actual:   ['0', '1', '2', '3', '4', '5', '6', '7', 'some-id', 'some-name', 'another-id', 'another-name', 'length']
</del><ins>+Actual:   ['0', '1', '2', '3', '4', '5', '6', '7', 'some-id', 'some-name', 'another-id', 'another-name']
</ins><span class="cx"> Expected: ['0', '1', '2', '3', '4', '5', '6', '7', 'some-id', 'some-name', 'another-id', 'another-name']
</span><span class="cx"> 
</span><span class="cx"> * Enumerated properties
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/ChangeLog (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/ChangeLog        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/LayoutTests/imported/w3c/ChangeLog        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -1,3 +1,22 @@
</span><ins>+2016-02-11  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Move 'length' property to the prototype
+        https://bugs.webkit.org/show_bug.cgi?id=154051
+        &lt;rdar://problem/24577385&gt;
+
+        Reviewed by Darin Adler.
+
+        Rebaseline several W3C tests now that more checks are passing.
+
+        * web-platform-tests/dom/collections/HTMLCollection-supported-property-names-expected.txt:
+        * web-platform-tests/dom/collections/namednodemap-supported-property-names-expected.txt:
+        * web-platform-tests/dom/interfaces-expected.txt:
+        * web-platform-tests/dom/nodes/Element-children-expected.txt:
+        * web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt:
+        * web-platform-tests/dom/nodes/attributes-expected.txt:
+        * web-platform-tests/html/dom/documents/dom-tree-accessors/document.forms-expected.txt:
+        * web-platform-tests/html/dom/interfaces-expected.txt:
+
</ins><span class="cx"> 2016-02-10  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Web IDL] interface objects should be Function objects
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsdomcollectionsHTMLCollectionsupportedpropertynamesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-supported-property-names-expected.txt (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-supported-property-names-expected.txt        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/collections/HTMLCollection-supported-property-names-expected.txt        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> 
</span><del>-FAIL Object.getOwnPropertyNames on HTMLCollection assert_array_equals: lengths differ, expected 12 got 13
-FAIL Object.getOwnPropertyNames on HTMLCollection with non-HTML namespace assert_array_equals: lengths differ, expected 1 got 2
-FAIL Object.getOwnPropertyNames on HTMLCollection with expando object assert_array_equals: lengths differ, expected 2 got 3
</del><ins>+PASS Object.getOwnPropertyNames on HTMLCollection 
+PASS Object.getOwnPropertyNames on HTMLCollection with non-HTML namespace 
+PASS Object.getOwnPropertyNames on HTMLCollection with expando object 
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsdomcollectionsnamednodemapsupportedpropertynamesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/collections/namednodemap-supported-property-names-expected.txt (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/collections/namednodemap-supported-property-names-expected.txt        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/collections/namednodemap-supported-property-names-expected.txt        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -1,7 +1,7 @@
</span><span class="cx"> Simple
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-FAIL Object.getOwnPropertyNames on NamedNodeMap assert_array_equals: lengths differ, expected 4 got 3
-FAIL Object.getOwnPropertyNames on NamedNodeMap of input assert_array_equals: lengths differ, expected 8 got 5
-FAIL Object.getOwnPropertyNames on NamedNodeMap after attribute removal assert_array_equals: lengths differ, expected 6 got 4
</del><ins>+FAIL Object.getOwnPropertyNames on NamedNodeMap assert_array_equals: lengths differ, expected 4 got 2
+FAIL Object.getOwnPropertyNames on NamedNodeMap of input assert_array_equals: lengths differ, expected 8 got 4
+FAIL Object.getOwnPropertyNames on NamedNodeMap after attribute removal assert_array_equals: lengths differ, expected 6 got 3
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsdominterfacesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces-expected.txt (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces-expected.txt        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/interfaces-expected.txt        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -123,23 +123,23 @@
</span><span class="cx"> PASS NodeList interface: existence and properties of interface prototype object 
</span><span class="cx"> PASS NodeList interface: existence and properties of interface prototype object's &quot;constructor&quot; property 
</span><span class="cx"> PASS NodeList interface: operation item(unsigned long) 
</span><del>-FAIL NodeList interface: attribute length assert_true: The prototype object must have a property &quot;length&quot; expected true got false
</del><ins>+PASS NodeList interface: attribute length 
</ins><span class="cx"> PASS NodeList must be primary interface of document.querySelectorAll(&quot;script&quot;) 
</span><span class="cx"> PASS Stringification of document.querySelectorAll(&quot;script&quot;) 
</span><span class="cx"> PASS NodeList interface: document.querySelectorAll(&quot;script&quot;) must inherit property &quot;item&quot; with the proper type (0) 
</span><span class="cx"> PASS NodeList interface: calling item(unsigned long) on document.querySelectorAll(&quot;script&quot;) with too few arguments must throw TypeError 
</span><del>-FAIL NodeList interface: document.querySelectorAll(&quot;script&quot;) must inherit property &quot;length&quot; with the proper type (1) assert_inherits: property &quot;length&quot; found on object expected in prototype chain
</del><ins>+PASS NodeList interface: document.querySelectorAll(&quot;script&quot;) must inherit property &quot;length&quot; with the proper type (1) 
</ins><span class="cx"> PASS HTMLCollection interface: existence and properties of interface object 
</span><span class="cx"> PASS HTMLCollection interface object length 
</span><span class="cx"> PASS HTMLCollection interface object name 
</span><span class="cx"> PASS HTMLCollection interface: existence and properties of interface prototype object 
</span><span class="cx"> PASS HTMLCollection interface: existence and properties of interface prototype object's &quot;constructor&quot; property 
</span><del>-FAIL HTMLCollection interface: attribute length assert_true: The prototype object must have a property &quot;length&quot; expected true got false
</del><ins>+PASS HTMLCollection interface: attribute length 
</ins><span class="cx"> FAIL HTMLCollection interface: operation item(unsigned long) assert_equals: property has wrong .length expected 1 but got 0
</span><span class="cx"> FAIL HTMLCollection interface: operation namedItem(DOMString) assert_equals: property has wrong .length expected 1 but got 0
</span><span class="cx"> PASS HTMLCollection must be primary interface of document.body.children 
</span><span class="cx"> PASS Stringification of document.body.children 
</span><del>-FAIL HTMLCollection interface: document.body.children must inherit property &quot;length&quot; with the proper type (0) assert_inherits: property &quot;length&quot; found on object expected in prototype chain
</del><ins>+PASS HTMLCollection interface: document.body.children must inherit property &quot;length&quot; with the proper type (0) 
</ins><span class="cx"> PASS HTMLCollection interface: document.body.children must inherit property &quot;item&quot; with the proper type (1) 
</span><span class="cx"> FAIL HTMLCollection interface: calling item(unsigned long) on document.body.children with too few arguments must throw TypeError assert_throws: Called with 0 arguments function &quot;function () {
</span><span class="cx">     [native code]
</span><span class="lines">@@ -932,7 +932,7 @@
</span><span class="cx"> PASS NamedNodeMap interface object name 
</span><span class="cx"> PASS NamedNodeMap interface: existence and properties of interface prototype object 
</span><span class="cx"> PASS NamedNodeMap interface: existence and properties of interface prototype object's &quot;constructor&quot; property 
</span><del>-FAIL NamedNodeMap interface: attribute length assert_true: The prototype object must have a property &quot;length&quot; expected true got false
</del><ins>+PASS NamedNodeMap interface: attribute length 
</ins><span class="cx"> FAIL NamedNodeMap interface: operation item(unsigned long) assert_equals: property has wrong .length expected 1 but got 0
</span><span class="cx"> FAIL NamedNodeMap interface: operation getNamedItem(DOMString) assert_equals: property has wrong .length expected 1 but got 0
</span><span class="cx"> FAIL NamedNodeMap interface: operation getNamedItemNS(DOMString,DOMString) assert_equals: property has wrong .length expected 2 but got 0
</span><span class="lines">@@ -1561,7 +1561,7 @@
</span><span class="cx"> PASS DOMTokenList interface object name 
</span><span class="cx"> PASS DOMTokenList interface: existence and properties of interface prototype object 
</span><span class="cx"> PASS DOMTokenList interface: existence and properties of interface prototype object's &quot;constructor&quot; property 
</span><del>-FAIL DOMTokenList interface: attribute length assert_true: The prototype object must have a property &quot;length&quot; expected true got false
</del><ins>+PASS DOMTokenList interface: attribute length 
</ins><span class="cx"> PASS DOMTokenList interface: operation item(unsigned long) 
</span><span class="cx"> PASS DOMTokenList interface: operation contains(DOMString) 
</span><span class="cx"> PASS DOMTokenList interface: operation add(DOMString) 
</span><span class="lines">@@ -1573,7 +1573,7 @@
</span><span class="cx"> FAIL DOMTokenList interface: stringifier assert_true: property is not enumerable expected true got false
</span><span class="cx"> PASS DOMTokenList must be primary interface of document.body.classList 
</span><span class="cx"> PASS Stringification of document.body.classList 
</span><del>-FAIL DOMTokenList interface: document.body.classList must inherit property &quot;length&quot; with the proper type (0) assert_inherits: property &quot;length&quot; found on object expected in prototype chain
</del><ins>+PASS DOMTokenList interface: document.body.classList must inherit property &quot;length&quot; with the proper type (0) 
</ins><span class="cx"> PASS DOMTokenList interface: document.body.classList must inherit property &quot;item&quot; with the proper type (1) 
</span><span class="cx"> PASS DOMTokenList interface: calling item(unsigned long) on document.body.classList with too few arguments must throw TypeError 
</span><span class="cx"> PASS DOMTokenList interface: document.body.classList must inherit property &quot;contains&quot; with the proper type (2) 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsdomnodesElementchildrenexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-children-expected.txt (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-children-expected.txt        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-children-expected.txt        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> PASS HTMLCollection edge cases 
</span><del>-FAIL HTMLCollection edge cases 1 assert_array_equals: lengths differ, expected 6 got 7
</del><ins>+FAIL HTMLCollection edge cases 1 assert_false: expected false got true
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsdomnodesElementgetElementsByTagNameexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/Element-getElementsByTagName-expected.txt        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -8,7 +8,7 @@
</span><span class="cx">     }&quot; did not throw
</span><span class="cx"> PASS Should be able to set expando shadowing a proto prop (item) 
</span><span class="cx"> PASS Should be able to set expando shadowing a proto prop (namedItem) 
</span><del>-FAIL hasOwnProperty, getOwnPropertyDescriptor, getOwnPropertyNames assert_array_equals: lengths differ, expected 7 got 8
</del><ins>+FAIL hasOwnProperty, getOwnPropertyDescriptor, getOwnPropertyNames assert_true: desc.configurable expected true got false
</ins><span class="cx"> PASS HTML element with uppercase tagName never matches in HTML Documents 
</span><span class="cx"> PASS Element in non-HTML namespace, no prefix, lowercase name 
</span><span class="cx"> PASS Element in non-HTML namespace, no prefix, uppercase name 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsdomnodesattributesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/attributes-expected.txt (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/attributes-expected.txt        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/dom/nodes/attributes-expected.txt        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -47,11 +47,11 @@
</span><span class="cx"> PASS setAttributeNode, if it fires mutation events, should fire one with the new node when resetting an existing attribute (outer shell) 
</span><span class="cx"> PASS setAttributeNode called with an Attr that has the same name as an existing one should not change attribute order 
</span><span class="cx"> FAIL getAttributeNames tests el.getAttributeNames is not a function. (In 'el.getAttributeNames()', 'el.getAttributeNames' is undefined)
</span><del>-FAIL Own property correctness with basic attributes assert_array_equals: lengths differ, expected 2 got 3
-FAIL Own property correctness with non-namespaced attribute before same-name namespaced one assert_array_equals: lengths differ, expected 3 got 4
-FAIL Own property correctness with namespaced attribute before same-name non-namespaced one assert_array_equals: lengths differ, expected 3 got 4
-FAIL Own property correctness with two namespaced attributes with the same name-with-prefix assert_array_equals: lengths differ, expected 3 got 4
-FAIL Own property names should only include all-lowercase qualified names for an HTML element in an HTML document assert_array_equals: lengths differ, expected 8 got 7
-FAIL Own property names should include all qualified names for a non-HTML element in an HTML document assert_array_equals: lengths differ, expected 12 got 7
-FAIL Own property names should include all qualified names for an HTML element in a non-HTML document assert_array_equals: lengths differ, expected 12 got 7
</del><ins>+FAIL Own property correctness with basic attributes assert_array_equals: lengths differ, expected 4 got 2
+FAIL Own property correctness with non-namespaced attribute before same-name namespaced one assert_array_equals: lengths differ, expected 5 got 3
+FAIL Own property correctness with namespaced attribute before same-name non-namespaced one assert_array_equals: lengths differ, expected 5 got 3
+FAIL Own property correctness with two namespaced attributes with the same name-with-prefix assert_array_equals: lengths differ, expected 5 got 3
+FAIL Own property names should only include all-lowercase qualified names for an HTML element in an HTML document assert_array_equals: lengths differ, expected 8 got 6
+FAIL Own property names should include all qualified names for a non-HTML element in an HTML document assert_array_equals: lengths differ, expected 12 got 6
+FAIL Own property names should include all qualified names for an HTML element in a non-HTML document assert_array_equals: lengths differ, expected 12 got 6
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestshtmldomdocumentsdomtreeaccessorsdocumentformsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/documents/dom-tree-accessors/document.forms-expected.txt (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/documents/dom-tree-accessors/document.forms-expected.txt        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/documents/dom-tree-accessors/document.forms-expected.txt        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -5,5 +5,5 @@
</span><span class="cx"> PASS document.forms.item with string arg 
</span><span class="cx"> PASS document.forms with empty string 
</span><span class="cx"> FAIL document.forms iteration assert_array_equals: property 3, expected &quot;item&quot; but got &quot;length&quot;
</span><del>-FAIL document.forms getOwnPropertyNames assert_array_equals: lengths differ, expected 5 got 6
</del><ins>+PASS document.forms getOwnPropertyNames 
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestshtmldominterfacesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces-expected.txt (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces-expected.txt        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces-expected.txt        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -12,7 +12,7 @@
</span><span class="cx"> PASS Stringification of document.getElementsByName(&quot;name&quot;) 
</span><span class="cx"> PASS NodeList interface: document.getElementsByName(&quot;name&quot;) must inherit property &quot;item&quot; with the proper type (0) 
</span><span class="cx"> PASS NodeList interface: calling item(unsigned long) on document.getElementsByName(&quot;name&quot;) with too few arguments must throw TypeError 
</span><del>-FAIL NodeList interface: document.getElementsByName(&quot;name&quot;) must inherit property &quot;length&quot; with the proper type (1) assert_inherits: property &quot;length&quot; found on object expected in prototype chain
</del><ins>+PASS NodeList interface: document.getElementsByName(&quot;name&quot;) must inherit property &quot;length&quot; with the proper type (1) 
</ins><span class="cx"> PASS Document interface: attribute domain 
</span><span class="cx"> PASS Document interface: attribute referrer 
</span><span class="cx"> PASS Document interface: attribute cookie 
</span><span class="lines">@@ -802,7 +802,7 @@
</span><span class="cx"> PASS HTMLOptionsCollection interface object name 
</span><span class="cx"> PASS HTMLOptionsCollection interface: existence and properties of interface prototype object 
</span><span class="cx"> PASS HTMLOptionsCollection interface: existence and properties of interface prototype object's &quot;constructor&quot; property 
</span><del>-FAIL HTMLOptionsCollection interface: attribute length assert_true: The prototype object must have a property &quot;length&quot; expected true got false
</del><ins>+PASS HTMLOptionsCollection interface: attribute length 
</ins><span class="cx"> PASS HTMLOptionsCollection interface: operation add([object Object],[object Object],[object Object],[object Object]) 
</span><span class="cx"> FAIL HTMLOptionsCollection interface: operation remove(long) assert_equals: property has wrong .length expected 1 but got 0
</span><span class="cx"> PASS HTMLOptionsCollection interface: attribute selectedIndex 
</span><span class="lines">@@ -2321,14 +2321,14 @@
</span><span class="cx"> PASS TextTrackList interface object name 
</span><span class="cx"> FAIL TextTrackList interface: existence and properties of interface prototype object assert_equals: prototype of TextTrackList.prototype is not EventTarget.prototype expected object &quot;[object EventTargetPrototype]&quot; but got object &quot;[object Object]&quot;
</span><span class="cx"> PASS TextTrackList interface: existence and properties of interface prototype object's &quot;constructor&quot; property 
</span><del>-FAIL TextTrackList interface: attribute length assert_true: The prototype object must have a property &quot;length&quot; expected true got false
</del><ins>+PASS TextTrackList interface: attribute length 
</ins><span class="cx"> PASS TextTrackList interface: operation getTrackById(DOMString) 
</span><span class="cx"> PASS TextTrackList interface: attribute onchange 
</span><span class="cx"> PASS TextTrackList interface: attribute onaddtrack 
</span><span class="cx"> PASS TextTrackList interface: attribute onremovetrack 
</span><span class="cx"> PASS TextTrackList must be primary interface of document.createElement(&quot;video&quot;).textTracks 
</span><span class="cx"> PASS Stringification of document.createElement(&quot;video&quot;).textTracks 
</span><del>-FAIL TextTrackList interface: document.createElement(&quot;video&quot;).textTracks must inherit property &quot;length&quot; with the proper type (0) assert_inherits: property &quot;length&quot; found on object expected in prototype chain
</del><ins>+PASS TextTrackList interface: document.createElement(&quot;video&quot;).textTracks must inherit property &quot;length&quot; with the proper type (0) 
</ins><span class="cx"> PASS TextTrackList interface: document.createElement(&quot;video&quot;).textTracks must inherit property &quot;getTrackById&quot; with the proper type (2) 
</span><span class="cx"> PASS TextTrackList interface: calling getTrackById(DOMString) on document.createElement(&quot;video&quot;).textTracks with too few arguments must throw TypeError 
</span><span class="cx"> PASS TextTrackList interface: document.createElement(&quot;video&quot;).textTracks must inherit property &quot;onchange&quot; with the proper type (3) 
</span><span class="lines">@@ -2398,11 +2398,11 @@
</span><span class="cx"> PASS TextTrackCueList interface object name 
</span><span class="cx"> PASS TextTrackCueList interface: existence and properties of interface prototype object 
</span><span class="cx"> PASS TextTrackCueList interface: existence and properties of interface prototype object's &quot;constructor&quot; property 
</span><del>-FAIL TextTrackCueList interface: attribute length assert_true: The prototype object must have a property &quot;length&quot; expected true got false
</del><ins>+PASS TextTrackCueList interface: attribute length 
</ins><span class="cx"> PASS TextTrackCueList interface: operation getCueById(DOMString) 
</span><span class="cx"> PASS TextTrackCueList must be primary interface of document.createElement(&quot;video&quot;).addTextTrack(&quot;subtitles&quot;).cues 
</span><span class="cx"> PASS Stringification of document.createElement(&quot;video&quot;).addTextTrack(&quot;subtitles&quot;).cues 
</span><del>-FAIL TextTrackCueList interface: document.createElement(&quot;video&quot;).addTextTrack(&quot;subtitles&quot;).cues must inherit property &quot;length&quot; with the proper type (0) assert_inherits: property &quot;length&quot; found on object expected in prototype chain
</del><ins>+PASS TextTrackCueList interface: document.createElement(&quot;video&quot;).addTextTrack(&quot;subtitles&quot;).cues must inherit property &quot;length&quot; with the proper type (0) 
</ins><span class="cx"> PASS TextTrackCueList interface: document.createElement(&quot;video&quot;).addTextTrack(&quot;subtitles&quot;).cues must inherit property &quot;getCueById&quot; with the proper type (2) 
</span><span class="cx"> PASS TextTrackCueList interface: calling getCueById(DOMString) on document.createElement(&quot;video&quot;).addTextTrack(&quot;subtitles&quot;).cues with too few arguments must throw TypeError 
</span><span class="cx"> FAIL TextTrackCue interface: existence and properties of interface object assert_equals: prototype of TextTrackCue is not EventTarget expected function &quot;function EventTarget() {
</span><span class="lines">@@ -2426,12 +2426,12 @@
</span><span class="cx"> PASS TimeRanges interface object name 
</span><span class="cx"> PASS TimeRanges interface: existence and properties of interface prototype object 
</span><span class="cx"> PASS TimeRanges interface: existence and properties of interface prototype object's &quot;constructor&quot; property 
</span><del>-FAIL TimeRanges interface: attribute length assert_true: The prototype object must have a property &quot;length&quot; expected true got false
</del><ins>+PASS TimeRanges interface: attribute length 
</ins><span class="cx"> PASS TimeRanges interface: operation start(unsigned long) 
</span><span class="cx"> PASS TimeRanges interface: operation end(unsigned long) 
</span><span class="cx"> PASS TimeRanges must be primary interface of document.createElement(&quot;video&quot;).buffered 
</span><span class="cx"> PASS Stringification of document.createElement(&quot;video&quot;).buffered 
</span><del>-FAIL TimeRanges interface: document.createElement(&quot;video&quot;).buffered must inherit property &quot;length&quot; with the proper type (0) assert_inherits: property &quot;length&quot; found on object expected in prototype chain
</del><ins>+PASS TimeRanges interface: document.createElement(&quot;video&quot;).buffered must inherit property &quot;length&quot; with the proper type (0) 
</ins><span class="cx"> PASS TimeRanges interface: document.createElement(&quot;video&quot;).buffered must inherit property &quot;start&quot; with the proper type (1) 
</span><span class="cx"> PASS TimeRanges interface: calling start(unsigned long) on document.createElement(&quot;video&quot;).buffered with too few arguments must throw TypeError 
</span><span class="cx"> PASS TimeRanges interface: document.createElement(&quot;video&quot;).buffered must inherit property &quot;end&quot; with the proper type (2) 
</span><span class="lines">@@ -2785,7 +2785,7 @@
</span><span class="cx"> PASS HTMLFormElement interface: attribute noValidate 
</span><span class="cx"> PASS HTMLFormElement interface: attribute target 
</span><span class="cx"> PASS HTMLFormElement interface: attribute elements 
</span><del>-FAIL HTMLFormElement interface: attribute length assert_true: The prototype object must have a property &quot;length&quot; expected true got false
</del><ins>+PASS HTMLFormElement interface: attribute length 
</ins><span class="cx"> PASS HTMLFormElement interface: operation submit() 
</span><span class="cx"> PASS HTMLFormElement interface: operation reset() 
</span><span class="cx"> PASS HTMLFormElement interface: operation checkValidity() 
</span><span class="lines">@@ -2803,7 +2803,7 @@
</span><span class="cx"> PASS HTMLFormElement interface: document.createElement(&quot;form&quot;) must inherit property &quot;noValidate&quot; with the proper type (7) 
</span><span class="cx"> PASS HTMLFormElement interface: document.createElement(&quot;form&quot;) must inherit property &quot;target&quot; with the proper type (8) 
</span><span class="cx"> PASS HTMLFormElement interface: document.createElement(&quot;form&quot;) must inherit property &quot;elements&quot; with the proper type (9) 
</span><del>-FAIL HTMLFormElement interface: document.createElement(&quot;form&quot;) must inherit property &quot;length&quot; with the proper type (10) assert_inherits: property &quot;length&quot; found on object expected in prototype chain
</del><ins>+PASS HTMLFormElement interface: document.createElement(&quot;form&quot;) must inherit property &quot;length&quot; with the proper type (10) 
</ins><span class="cx"> PASS HTMLFormElement interface: document.createElement(&quot;form&quot;) must inherit property &quot;submit&quot; with the proper type (13) 
</span><span class="cx"> PASS HTMLFormElement interface: document.createElement(&quot;form&quot;) must inherit property &quot;reset&quot; with the proper type (14) 
</span><span class="cx"> PASS HTMLFormElement interface: document.createElement(&quot;form&quot;) must inherit property &quot;checkValidity&quot; with the proper type (15) 
</span><span class="lines">@@ -3016,7 +3016,7 @@
</span><span class="cx"> PASS HTMLSelectElement interface: attribute size 
</span><span class="cx"> PASS HTMLSelectElement interface: attribute type 
</span><span class="cx"> PASS HTMLSelectElement interface: attribute options 
</span><del>-FAIL HTMLSelectElement interface: attribute length assert_true: The prototype object must have a property &quot;length&quot; expected true got false
</del><ins>+PASS HTMLSelectElement interface: attribute length 
</ins><span class="cx"> PASS HTMLSelectElement interface: operation item(unsigned long) 
</span><span class="cx"> FAIL HTMLSelectElement interface: operation namedItem(DOMString) assert_equals: property has wrong .length expected 1 but got 0
</span><span class="cx"> PASS HTMLSelectElement interface: operation add([object Object],[object Object],[object Object],[object Object]) 
</span><span class="lines">@@ -3044,7 +3044,7 @@
</span><span class="cx"> PASS HTMLSelectElement interface: document.createElement(&quot;select&quot;) must inherit property &quot;size&quot; with the proper type (7) 
</span><span class="cx"> PASS HTMLSelectElement interface: document.createElement(&quot;select&quot;) must inherit property &quot;type&quot; with the proper type (8) 
</span><span class="cx"> PASS HTMLSelectElement interface: document.createElement(&quot;select&quot;) must inherit property &quot;options&quot; with the proper type (9) 
</span><del>-FAIL HTMLSelectElement interface: document.createElement(&quot;select&quot;) must inherit property &quot;length&quot; with the proper type (10) assert_inherits: property &quot;length&quot; found on object expected in prototype chain
</del><ins>+PASS HTMLSelectElement interface: document.createElement(&quot;select&quot;) must inherit property &quot;length&quot; with the proper type (10) 
</ins><span class="cx"> PASS HTMLSelectElement interface: document.createElement(&quot;select&quot;) must inherit property &quot;item&quot; with the proper type (11) 
</span><span class="cx"> PASS HTMLSelectElement interface: calling item(unsigned long) on document.createElement(&quot;select&quot;) with too few arguments must throw TypeError 
</span><span class="cx"> PASS HTMLSelectElement interface: document.createElement(&quot;select&quot;) must inherit property &quot;namedItem&quot; with the proper type (12) 
</span><span class="lines">@@ -4113,7 +4113,7 @@
</span><span class="cx"> PASS History interface object name 
</span><span class="cx"> PASS History interface: existence and properties of interface prototype object 
</span><span class="cx"> PASS History interface: existence and properties of interface prototype object's &quot;constructor&quot; property 
</span><del>-FAIL History interface: attribute length assert_true: The prototype object must have a property &quot;length&quot; expected true got false
</del><ins>+PASS History interface: attribute length 
</ins><span class="cx"> FAIL History interface: attribute scrollRestoration assert_true: The prototype object must have a property &quot;scrollRestoration&quot; expected true got false
</span><span class="cx"> PASS History interface: attribute state 
</span><span class="cx"> PASS History interface: operation go(long) 
</span><span class="lines">@@ -4123,7 +4123,7 @@
</span><span class="cx"> PASS History interface: operation replaceState(any,DOMString,DOMString) 
</span><span class="cx"> PASS History must be primary interface of window.history 
</span><span class="cx"> PASS Stringification of window.history 
</span><del>-FAIL History interface: window.history must inherit property &quot;length&quot; with the proper type (0) assert_inherits: property &quot;length&quot; found on object expected in prototype chain
</del><ins>+PASS History interface: window.history must inherit property &quot;length&quot; with the proper type (0) 
</ins><span class="cx"> FAIL History interface: window.history must inherit property &quot;scrollRestoration&quot; with the proper type (1) assert_inherits: property &quot;scrollRestoration&quot; not found in prototype chain
</span><span class="cx"> PASS History interface: window.history must inherit property &quot;state&quot; with the proper type (2) 
</span><span class="cx"> PASS History interface: window.history must inherit property &quot;go&quot; with the proper type (3) 
</span><span class="lines">@@ -4344,7 +4344,7 @@
</span><span class="cx"> PASS PluginArray interface: existence and properties of interface prototype object 
</span><span class="cx"> PASS PluginArray interface: existence and properties of interface prototype object's &quot;constructor&quot; property 
</span><span class="cx"> PASS PluginArray interface: operation refresh(boolean) 
</span><del>-FAIL PluginArray interface: attribute length assert_true: The prototype object must have a property &quot;length&quot; expected true got false
</del><ins>+PASS PluginArray interface: attribute length 
</ins><span class="cx"> FAIL PluginArray interface: operation item(unsigned long) assert_equals: property has wrong .length expected 1 but got 0
</span><span class="cx"> FAIL PluginArray interface: operation namedItem(DOMString) assert_equals: property has wrong .length expected 1 but got 0
</span><span class="cx"> PASS MimeTypeArray interface: existence and properties of interface object 
</span><span class="lines">@@ -4352,7 +4352,7 @@
</span><span class="cx"> PASS MimeTypeArray interface object name 
</span><span class="cx"> PASS MimeTypeArray interface: existence and properties of interface prototype object 
</span><span class="cx"> PASS MimeTypeArray interface: existence and properties of interface prototype object's &quot;constructor&quot; property 
</span><del>-FAIL MimeTypeArray interface: attribute length assert_true: The prototype object must have a property &quot;length&quot; expected true got false
</del><ins>+PASS MimeTypeArray interface: attribute length 
</ins><span class="cx"> FAIL MimeTypeArray interface: operation item(unsigned long) assert_equals: property has wrong .length expected 1 but got 0
</span><span class="cx"> FAIL MimeTypeArray interface: operation namedItem(DOMString) assert_equals: property has wrong .length expected 1 but got 0
</span><span class="cx"> PASS Plugin interface: existence and properties of interface object 
</span><span class="lines">@@ -4363,7 +4363,7 @@
</span><span class="cx"> PASS Plugin interface: attribute name 
</span><span class="cx"> PASS Plugin interface: attribute description 
</span><span class="cx"> PASS Plugin interface: attribute filename 
</span><del>-FAIL Plugin interface: attribute length assert_true: The prototype object must have a property &quot;length&quot; expected true got false
</del><ins>+PASS Plugin interface: attribute length 
</ins><span class="cx"> FAIL Plugin interface: operation item(unsigned long) assert_equals: property has wrong .length expected 1 but got 0
</span><span class="cx"> FAIL Plugin interface: operation namedItem(DOMString) assert_equals: property has wrong .length expected 1 but got 0
</span><span class="cx"> PASS MimeType interface: existence and properties of interface object 
</span><span class="lines">@@ -4655,7 +4655,7 @@
</span><span class="cx"> PASS Storage interface object name 
</span><span class="cx"> PASS Storage interface: existence and properties of interface prototype object 
</span><span class="cx"> PASS Storage interface: existence and properties of interface prototype object's &quot;constructor&quot; property 
</span><del>-FAIL Storage interface: attribute length assert_true: The prototype object must have a property &quot;length&quot; expected true got false
</del><ins>+PASS Storage interface: attribute length 
</ins><span class="cx"> PASS Storage interface: operation key(unsigned long) 
</span><span class="cx"> PASS Storage interface: operation getItem(DOMString) 
</span><span class="cx"> PASS Storage interface: operation setItem(DOMString,DOMString) 
</span></span></pre></div>
<a id="trunkLayoutTestsstoragedomstoragelocalstoragedeletedefinepropertyremovalexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/storage/domstorage/localstorage/delete-defineproperty-removal-expected.txt (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/storage/domstorage/localstorage/delete-defineproperty-removal-expected.txt        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/LayoutTests/storage/domstorage/localstorage/delete-defineproperty-removal-expected.txt        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -1,10 +1,10 @@
</span><del>-CONSOLE MESSAGE: line 12: length
-CONSOLE MESSAGE: line 15: 1,length
-CONSOLE MESSAGE: line 18: 1,length
-CONSOLE MESSAGE: line 21: 1,2,length
-CONSOLE MESSAGE: line 24: 1,length
-CONSOLE MESSAGE: line 27: 1,length,Test
-CONSOLE MESSAGE: line 30: 1,length
-CONSOLE MESSAGE: line 33: 1,length,Test1
-CONSOLE MESSAGE: line 36: 1,length,Test1
</del><ins>+CONSOLE MESSAGE: line 12: 
+CONSOLE MESSAGE: line 15: 1
+CONSOLE MESSAGE: line 18: 1
+CONSOLE MESSAGE: line 21: 1,2
+CONSOLE MESSAGE: line 24: 1,2
+CONSOLE MESSAGE: line 27: 1,2,Test
+CONSOLE MESSAGE: line 30: 1,2,Test
+CONSOLE MESSAGE: line 33: 1,2,Test,Test1
+CONSOLE MESSAGE: line 36: 1,2,Test,Test1
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/ChangeLog        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -1,3 +1,76 @@
</span><ins>+2016-02-11  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Move 'length' property to the prototype
+        https://bugs.webkit.org/show_bug.cgi?id=154051
+        &lt;rdar://problem/24577385&gt;
+
+        Reviewed by Darin Adler.
+
+        Move 'length' property to the prototype, where it should be. We used to
+        keep it on the instance because our implementation of
+        getOwnPropertySlot() was wrong for interfaces with a named property
+        getter. However, our implementation of getOwnPropertySlot() is now
+        spec-compliant so this should be OK.
+
+        Moving 'length' to the prototype is also a little bit risky in terms of
+        performance, especially for HTMLCollection / NodeList. However, I did
+        not see an impact on realistic benchmarks like Speedometer and only saw
+        a small impact (&lt; 5%) on micro-benchmarks. I propose we make our behavior
+        correct and monitor performance. If we see any benchmark we care about
+        regress then we should try and optimize while keeping the attribute on
+        the prototype.
+
+        No new tests, already covered by existing tests.
+
+        * bindings/js/JSDOMBinding.h:
+        (WebCore::getStaticValueSlotEntryWithoutCaching):
+        * bindings/js/JSHTMLDocumentCustom.cpp:
+        (WebCore::JSHTMLDocument::getOwnPropertySlot):
+        (WebCore::JSHTMLDocument::nameGetter): Deleted.
+        * bindings/js/JSLocationCustom.cpp:
+        (WebCore::JSLocation::putDelegate):
+        * bindings/js/JSPluginElementFunctions.h:
+        (WebCore::pluginElementCustomGetOwnPropertySlot):
+        * bindings/js/JSStorageCustom.cpp:
+        (WebCore::JSStorage::deleteProperty):
+        (WebCore::JSStorage::deletePropertyByIndex):
+        (WebCore::JSStorage::putDelegate):
+        Leverage the new hasStaticPropertyTable static property in the
+        generated bindings for performance.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateHeader):
+        Generate a &quot;hasStaticPropertyTable&quot; static const boolean property
+        for each bindings class so we can check at build time if
+        ClassInfo::staticPropHashTable is null.
+
+        (AttributeShouldBeOnInstance):
+        Move &quot;length&quot; to the prototype.
+
+        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
+        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h:
+        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h:
+        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
+        * bindings/scripts/test/JS/JSTestEventConstructor.h:
+        * bindings/scripts/test/JS/JSTestEventTarget.h:
+        * bindings/scripts/test/JS/JSTestException.h:
+        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
+        * bindings/scripts/test/JS/JSTestInterface.h:
+        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
+        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
+        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
+        * bindings/scripts/test/JS/JSTestNode.h:
+        * bindings/scripts/test/JS/JSTestNondeterministic.h:
+        * bindings/scripts/test/JS/JSTestObj.h:
+        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
+        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
+        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
+        * bindings/scripts/test/JS/JSTestTypedefs.h:
+        * bindings/scripts/test/JS/JSattribute.h:
+        * bindings/scripts/test/JS/JSreadonly.h:
+        Rebaseline bindings tests.
+
+
</ins><span class="cx"> 2016-02-11  Csaba Osztrogonác  &lt;ossy@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix the !(ENABLE(SHADOW_DOM) || ENABLE(DETAILS_ELEMENT)) after r196281
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMBindingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMBinding.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -671,13 +671,11 @@
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename DOMClass&gt; inline const JSC::HashTableValue* getStaticValueSlotEntryWithoutCaching(JSC::ExecState* exec, JSC::PropertyName propertyName)
</span><span class="cx"> {
</span><del>-    const JSC::HashTable* table = DOMClass::info()-&gt;staticPropHashTable;
-    if (!table)
-        return getStaticValueSlotEntryWithoutCaching&lt;typename DOMClass::Base&gt;(exec, propertyName);
-    const JSC::HashTableValue* entry = table-&gt;entry(propertyName);
-    if (!entry) // not found, forward to parent
-        return getStaticValueSlotEntryWithoutCaching&lt;typename DOMClass::Base&gt;(exec, propertyName);
-    return entry;
</del><ins>+    if (DOMClass::hasStaticPropertyTable) {
+        if (auto* entry = DOMClass::info()-&gt;staticPropHashTable-&gt;entry(propertyName))
+            return entry;
+    }
+    return getStaticValueSlotEntryWithoutCaching&lt;typename DOMClass::Base&gt;(exec, propertyName);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt; inline const JSC::HashTableValue* getStaticValueSlotEntryWithoutCaching&lt;JSDOMObject&gt;(JSC::ExecState*, JSC::PropertyName)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSHTMLDocumentCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSHTMLDocumentCustom.cpp (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSHTMLDocumentCustom.cpp        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/js/JSHTMLDocumentCustom.cpp        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -71,12 +71,7 @@
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (auto* table = JSHTMLDocument::info()-&gt;staticPropHashTable) {
-        if (const HashTableValue* entry = table-&gt;entry(propertyName)) {
-            slot.setCacheableCustom(thisObject, entry-&gt;attributes(), entry-&gt;propertyGetter());
-            return true;
-        }
-    }
</del><ins>+    static_assert(!hasStaticPropertyTable, &quot;This method does not handle static instance properties&quot;);
</ins><span class="cx"> 
</span><span class="cx">     return Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSLocationCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSLocationCustom.cpp (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSLocationCustom.cpp        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/js/JSLocationCustom.cpp        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -82,6 +82,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool sameDomainAccess = shouldAllowAccessToFrame(exec, frame);
</span><span class="cx"> 
</span><ins>+    static_assert(hasStaticPropertyTable, &quot;The implementation dereferences ClassInfo::staticPropHashTable without null check&quot;);
</ins><span class="cx">     const HashTableValue* entry = JSLocation::info()-&gt;staticPropHashTable-&gt;entry(propertyName);
</span><span class="cx">     if (!entry) {
</span><span class="cx">         if (sameDomainAccess)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSPluginElementFunctionsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSPluginElementFunctions.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSPluginElementFunctions.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/js/JSPluginElementFunctions.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx">     template &lt;class Type, class Base&gt; bool pluginElementCustomGetOwnPropertySlot(JSC::ExecState* exec, JSC::PropertyName propertyName, JSC::PropertySlot&amp; slot, Type* element)
</span><span class="cx">     {
</span><span class="cx">         if (!element-&gt;globalObject()-&gt;world().isNormal()) {
</span><del>-            if (Type::info()-&gt;staticPropHashTable &amp;&amp; JSC::getStaticValueSlot&lt;Type, Base&gt;(exec, *Type::info()-&gt;staticPropHashTable, element, propertyName, slot))
</del><ins>+            if (Type::hasStaticPropertyTable &amp;&amp; JSC::getStaticValueSlot&lt;Type, Base&gt;(exec, *Type::info()-&gt;staticPropHashTable, element, propertyName, slot))
</ins><span class="cx">                 return true;
</span><span class="cx"> 
</span><span class="cx">             JSC::JSValue proto = element-&gt;prototype();
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSStorageCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSStorageCustom.cpp (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSStorageCustom.cpp        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/js/JSStorageCustom.cpp        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -58,11 +58,9 @@
</span><span class="cx">     // Since hasProperty() would end up calling canGetItemsForName() and be fooled, we need to check
</span><span class="cx">     // the native property slots manually.
</span><span class="cx">     PropertySlot slot(thisObject);
</span><del>-    if (getStaticValueSlot&lt;JSStorage, Base&gt;(exec, *s_info.staticPropHashTable, thisObject, propertyName, slot)) {
-        if (Optional&lt;uint32_t&gt; index = parseIndex(propertyName))
-            return Base::deletePropertyByIndex(thisObject, exec, index.value());
-        return Base::deleteProperty(thisObject, exec, propertyName);
-    }
</del><ins>+
+    static_assert(!hasStaticPropertyTable, &quot;This function does not handle static instance properties&quot;);
+
</ins><span class="cx">     JSValue prototype = thisObject-&gt;prototype();
</span><span class="cx">     if (prototype.isObject() &amp;&amp; asObject(prototype)-&gt;getPropertySlot(exec, propertyName, slot))
</span><span class="cx">         return Base::deleteProperty(thisObject, exec, propertyName);
</span><span class="lines">@@ -80,8 +78,7 @@
</span><span class="cx"> {
</span><span class="cx">     JSStorage* thisObject = jsCast&lt;JSStorage*&gt;(cell);
</span><span class="cx">     PropertySlot slot(thisObject);
</span><del>-    if (getStaticValueSlot&lt;JSStorage, Base&gt;(exec, *s_info.staticPropHashTable, thisObject, Identifier::from(exec, propertyName), slot))
-        return Base::deletePropertyByIndex(thisObject, exec, propertyName);
</del><ins>+    static_assert(!hasStaticPropertyTable, &quot;This function does not handle static instance properties&quot;);
</ins><span class="cx">     return deleteProperty(cell, exec, Identifier::from(exec, propertyName));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -109,8 +106,7 @@
</span><span class="cx">     // Since hasProperty() would end up calling canGetItemsForName() and be fooled, we need to check
</span><span class="cx">     // the native property slots manually.
</span><span class="cx">     PropertySlot slot(this);
</span><del>-    if (getStaticValueSlot&lt;JSStorage, Base&gt;(exec, *s_info.staticPropHashTable, this, propertyName, slot))
-        return false;
</del><ins>+    static_assert(!hasStaticPropertyTable, &quot;This function does not handle static instance properties&quot;);
</ins><span class="cx"> 
</span><span class="cx">     JSValue prototype = this-&gt;prototype();
</span><span class="cx">     if (prototype.isObject() &amp;&amp; asObject(prototype)-&gt;getPropertySlot(exec, propertyName, slot))
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -711,12 +711,6 @@
</span><span class="cx">     # https://heycam.github.io/webidl/#Unforgeable
</span><span class="cx">     return 1 if $attribute-&gt;signature-&gt;extendedAttributes-&gt;{&quot;Unforgeable&quot;} || $interface-&gt;extendedAttributes-&gt;{&quot;Unforgeable&quot;};
</span><span class="cx"> 
</span><del>-    # FIXME: Length is a tricky attribute to handle correctly as it is frequently tied to
-    # objects which also have magic named attributes that can end up being named &quot;length&quot;
-    # and so interfere with lookup ordering.  I'm not sure what the correct solution is
-    # here.
-    return 1 if ($attribute-&gt;signature-&gt;name eq &quot;length&quot;) &amp;&amp; $interface-&gt;name ne &quot;CharacterData&quot;;
-    
</del><span class="cx">     # It becomes hard to reason about attributes that require security checks if we push
</span><span class="cx">     # them down the prototype chain, so before we do these we'll need to carefully consider
</span><span class="cx">     # the possible pitfalls.
</span><span class="lines">@@ -949,6 +943,9 @@
</span><span class="cx">         push(@headerContent, &quot;    static const bool needsDestruction = false;\n\n&quot;);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    my $hasStaticPropertyTable = InstanceAttributeCount($interface) &gt; 0 ? &quot;true&quot; : &quot;false&quot;;
+    push(@headerContent, &quot;    static const bool hasStaticPropertyTable = $hasStaticPropertyTable;\n\n&quot;);
+
</ins><span class="cx">     # Prototype
</span><span class="cx">     unless (IsDOMGlobalObject($interface)) {
</span><span class="cx">         push(@headerContent, &quot;    static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);\n&quot;);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -37,6 +37,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = true;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestActiveDOMObject* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestClassWithJSBuiltinConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -37,6 +37,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = false;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestClassWithJSBuiltinConstructor* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCustomConstructorWithNoInterfaceObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -37,6 +37,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = false;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestCustomConstructorWithNoInterfaceObject* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCustomNamedGetterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -37,6 +37,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = false;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestCustomNamedGetter* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -39,6 +39,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = false;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestEventConstructor* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventTargeth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -38,6 +38,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = false;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestEventTarget* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestExceptionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -38,6 +38,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = true;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestException* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachableh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -37,6 +37,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = false;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestGenerateIsReachable* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -39,6 +39,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = false;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestInterface* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -35,6 +35,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = false;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -37,6 +37,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = false;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestMediaQueryListListener* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNamedConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -37,6 +37,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = false;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestNamedConstructor* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -36,6 +36,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = false;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministich"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -37,6 +37,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = false;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestNondeterministic* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -37,6 +37,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = true;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestObj* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -37,6 +37,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = false;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestOverloadedConstructors* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestOverrideBuiltinsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -37,6 +37,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = false;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestOverrideBuiltins* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -39,6 +39,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = false;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestSerializedScriptValueInterface* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestTypedefsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -37,6 +37,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = true;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestTypedefs* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSattributeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -38,6 +38,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = false;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static attribute* toWrapped(JSC::JSValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSreadonlyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.h (196422 => 196423)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.h        2016-02-11 18:19:02 UTC (rev 196422)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.h        2016-02-11 18:23:25 UTC (rev 196423)
</span><span class="lines">@@ -37,6 +37,8 @@
</span><span class="cx">         return ptr;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static const bool hasStaticPropertyTable = false;
+
</ins><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static readonly* toWrapped(JSC::JSValue);
</span></span></pre>
</div>
</div>

</body>
</html>