<!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>[163562] 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/163562">163562</a></dd>
<dt>Author</dt> <dd>oliver@apple.com</dd>
<dt>Date</dt> <dd>2014-02-06 13:53:31 -0800 (Thu, 06 Feb 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>Push DOM attributes into the prototype chain
https://bugs.webkit.org/show_bug.cgi?id=127969
Reviewed by Mark Lam.
Source/WebCore:
This patch does the actual work of moving dom attributes up the
prototype chain. There are still a few class and edge cases
where we can't do this without impacting existing behaviour,
but they can be fixed separately in later patches.
* bindings/js/JSDOMBinding.h:
(WebCore::getStaticPropertySlotEntryWithoutCaching):
(WebCore::getStaticPropertySlotEntryWithoutCaching<JSDOMWrapper>):
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateGetOwnPropertySlotBody):
(HasComplexGetOwnProperty):
(ConstructorShouldBeOnInstance):
(AttributeShouldBeOnInstance):
(InstanceAttributeCount):
(PrototypeAttributeCount):
(InstanceOverridesGetOwnPropertySlot):
(PrototypeOverridesGetOwnPropertySlot):
(GenerateAttributesHashTable):
(GenerateImplementation):
LayoutTests:
Update layout test results
* fast/dom/wrapper-classes-expected.txt:
* js/dom/constructor-attributes-expected.txt:
* js/dom/dom-static-property-for-in-iteration-expected.txt:
* js/dom/script-tests/constructor-attributes.js:</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastdomGeolocationenabledexpectedtxt">trunk/LayoutTests/fast/dom/Geolocation/enabled-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastdomGeolocationscripttestsenabledjs">trunk/LayoutTests/fast/dom/Geolocation/script-tests/enabled.js</a></li>
<li><a href="#trunkLayoutTestsfastdomwrapperclassesexpectedtxt">trunk/LayoutTests/fast/dom/wrapper-classes-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestssecuritycrossframeaccessenumerationexpectedtxt">trunk/LayoutTests/http/tests/security/cross-frame-access-enumeration-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomconstructorattributesexpectedtxt">trunk/LayoutTests/js/dom/constructor-attributes-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomdeletesyntaxexpectedtxt">trunk/LayoutTests/js/dom/delete-syntax-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomdomattributesonmismatchtypeexpectedtxt">trunk/LayoutTests/js/dom/dom-attributes-on-mismatch-type-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomdomattributesonmismatchtypehtml">trunk/LayoutTests/js/dom/dom-attributes-on-mismatch-type.html</a></li>
<li><a href="#trunkLayoutTestsjsdomdomstaticpropertyforiniterationexpectedtxt">trunk/LayoutTests/js/dom/dom-static-property-for-in-iteration-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomscripttestsconstructorattributesjs">trunk/LayoutTests/js/dom/script-tests/constructor-attributes.js</a></li>
<li><a href="#trunkLayoutTestsjsdomscripttestsdeletesyntaxjs">trunk/LayoutTests/js/dom/script-tests/delete-syntax.js</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="#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="#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="#trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h</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="#trunkSourceWebCorebindingsscriptstestJSJSTestExceptionh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachablecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachableh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.h</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="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedConstructorh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNodeh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.h</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="#trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorsh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfaceh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h</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="#trunkSourceWebCorebindingsscriptstestJSJSattributeh">trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSreadonlycpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp</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 (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/LayoutTests/ChangeLog        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2014-01-30 Oliver Hunt <oliver@apple.com>
+ Push DOM attributes into the prototype chain
+ https://bugs.webkit.org/show_bug.cgi?id=127969
+
+ Reviewed by Mark Lam.
+
+ Update layout test results
+
+ * fast/dom/wrapper-classes-expected.txt:
+ * js/dom/constructor-attributes-expected.txt:
+ * js/dom/dom-static-property-for-in-iteration-expected.txt:
+ * js/dom/script-tests/constructor-attributes.js:
+
</ins><span class="cx"> 2014-02-06 Andreas Kling <akling@apple.com>
</span><span class="cx">
</span><span class="cx"> Remove display:run-in support.
</span></span></pre></div>
<a id="trunkLayoutTestsfastdomGeolocationenabledexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/Geolocation/enabled-expected.txt (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/Geolocation/enabled-expected.txt        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/LayoutTests/fast/dom/Geolocation/enabled-expected.txt        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -6,7 +6,8 @@
</span><span class="cx"> PASS typeof navigator.geolocation == 'object' is true
</span><span class="cx"> PASS hasGeolocationProperty() is true
</span><span class="cx"> PASS 'geolocation' in navigator is true
</span><del>-PASS navigator.hasOwnProperty('geolocation') is true
</del><ins>+PASS navigator.hasOwnProperty('geolocation') is false
+PASS navigator.__proto__.hasOwnProperty('geolocation') is true
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx">
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestsfastdomGeolocationscripttestsenabledjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/Geolocation/script-tests/enabled.js (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/Geolocation/script-tests/enabled.js        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/LayoutTests/fast/dom/Geolocation/script-tests/enabled.js        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -12,6 +12,7 @@
</span><span class="cx"> shouldBeTrue("typeof navigator.geolocation == 'object'");
</span><span class="cx"> shouldBeTrue("hasGeolocationProperty()");
</span><span class="cx"> shouldBeTrue("'geolocation' in navigator");
</span><del>-shouldBeTrue("navigator.hasOwnProperty('geolocation')");
</del><ins>+shouldBeFalse("navigator.hasOwnProperty('geolocation')");
+shouldBeTrue("navigator.__proto__.hasOwnProperty('geolocation')");
</ins><span class="cx">
</span><span class="cx"> window.jsTestIsAsync = false;
</span></span></pre></div>
<a id="trunkLayoutTestsfastdomwrapperclassesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/wrapper-classes-expected.txt (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/wrapper-classes-expected.txt        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/LayoutTests/fast/dom/wrapper-classes-expected.txt        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -142,7 +142,7 @@
</span><span class="cx"> PASS jsWrapperClass(document.constructor) is 'HTMLDocumentConstructor'
</span><span class="cx"> PASS jsWrapperClass(document.createElement('select').options) is 'HTMLOptionsCollection'
</span><span class="cx"> PASS jsWrapperClass(document.createElement('select').options.__proto__) is 'HTMLOptionsCollectionPrototype'
</span><del>-FAIL jsWrapperClass(document.createElement('select').options.constructor) should be HTMLOptionsCollectionConstructor. Was Function.
</del><ins>+PASS jsWrapperClass(document.createElement('select').options.constructor) is 'HTMLOptionsCollectionConstructor'
</ins><span class="cx">
</span><span class="cx"> HTML Elements
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestshttptestssecuritycrossframeaccessenumerationexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/security/cross-frame-access-enumeration-expected.txt (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/security/cross-frame-access-enumeration-expected.txt        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/LayoutTests/http/tests/security/cross-frame-access-enumeration-expected.txt        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -9,6 +9,8 @@
</span><span class="cx"> CONSOLE MESSAGE: Blocked a frame with origin "http://127.0.0.1:8000" from accessing a frame with origin "http://localhost:8000". Protocols, domains, and ports must match.
</span><span class="cx"> CONSOLE MESSAGE: Blocked a frame with origin "http://127.0.0.1:8000" from accessing a frame with origin "http://localhost:8000". Protocols, domains, and ports must match.
</span><span class="cx"> CONSOLE MESSAGE: Blocked a frame with origin "http://127.0.0.1:8000" from accessing a frame with origin "http://localhost:8000". Protocols, domains, and ports must match.
</span><ins>+CONSOLE MESSAGE: Blocked a frame with origin "http://127.0.0.1:8000" from accessing a frame with origin "http://localhost:8000". Protocols, domains, and ports must match.
+CONSOLE MESSAGE: Blocked a frame with origin "http://127.0.0.1:8000" from accessing a frame with origin "http://localhost:8000". Protocols, domains, and ports must match.
</ins><span class="cx"> This tests that variable names can't be enumerated cross domain (see http://bugs.webkit.org/show_bug.cgi?id=16387)
</span><span class="cx">
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomconstructorattributesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/constructor-attributes-expected.txt (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/constructor-attributes-expected.txt        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/LayoutTests/js/dom/constructor-attributes-expected.txt        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -75,10 +75,10 @@
</span><span class="cx"> PASS canEnum(URIError.prototype, 'constructor') is false
</span><span class="cx"> PASS x = URIError.prototype; x.constructor = 4; x.constructor is 4
</span><span class="cx"> PASS x = URIError.prototype; delete x.constructor; x.hasOwnProperty('constructor') is false
</span><del>-PASS document.createTextNode('').hasOwnProperty('constructor') is true
-PASS canEnum(document.createTextNode(''), 'constructor') is false
-FAIL x = document.createTextNode(''); x.constructor = 4; x.constructor should be 4 (of type number). Was [object TextConstructor] (of type object).
-FAIL x = document.createTextNode(''); delete x.constructor; x.hasOwnProperty('constructor') should be false. Was true.
</del><ins>+PASS document.createTextNode('').__proto__.hasOwnProperty('constructor') is true
+PASS canEnum(document.createTextNode('').__proto__, 'constructor') is false
+FAIL x = document.createTextNode('').__proto__; x.constructor = 4; x.constructor should be 4 (of type number). Was [object TextConstructor] (of type object).
+FAIL x = document.createTextNode('').__proto__; delete x.constructor; x.hasOwnProperty('constructor') should be false. Was true.
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx">
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomdeletesyntaxexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/delete-syntax-expected.txt (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/delete-syntax-expected.txt        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/LayoutTests/js/dom/delete-syntax-expected.txt        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -30,19 +30,32 @@
</span><span class="cx"> PASS RegExp.prototype.exec is undefined
</span><span class="cx"> PASS RegExp.prototype.test is null
</span><span class="cx"> PASS Object.getOwnPropertyNames(Object.prototype).indexOf('__defineSetter__') is -1
</span><del>-PASS navigatorPropertyNames.indexOf('appName') != -1 is true
-PASS navigatorPropertyNames.indexOf('appVersion') != -1 is true
-PASS navigatorPropertyNames.indexOf('language') != -1 is true
-PASS navigatorPropertyNames.indexOf('userAgent') != -1 is true
-PASS navigatorPropertyNames.indexOf('platform') != -1 is true
-PASS navigatorPropertyNames.indexOf('plugins') != -1 is true
-PASS navigatorPropertyNames.indexOf('mimeTypes') != -1 is true
-PASS navigatorPropertyNames.indexOf('product') != -1 is true
-PASS navigatorPropertyNames.indexOf('productSub') != -1 is true
-PASS navigatorPropertyNames.indexOf('vendor') != -1 is true
-PASS navigatorPropertyNames.indexOf('vendorSub') != -1 is true
-PASS navigatorPropertyNames.indexOf('cookieEnabled') != -1 is true
-PASS navigatorPropertyNames.indexOf('onLine') != -1 is true
</del><ins>+PASS navigatorPropertyNames.indexOf('appName') == -1 is true
+PASS navigatorPropertyNames.indexOf('appVersion') == -1 is true
+PASS navigatorPropertyNames.indexOf('language') == -1 is true
+PASS navigatorPropertyNames.indexOf('userAgent') == -1 is true
+PASS navigatorPropertyNames.indexOf('platform') == -1 is true
+PASS navigatorPropertyNames.indexOf('plugins') == -1 is true
+PASS navigatorPropertyNames.indexOf('mimeTypes') == -1 is true
+PASS navigatorPropertyNames.indexOf('product') == -1 is true
+PASS navigatorPropertyNames.indexOf('productSub') == -1 is true
+PASS navigatorPropertyNames.indexOf('vendor') == -1 is true
+PASS navigatorPropertyNames.indexOf('vendorSub') == -1 is true
+PASS navigatorPropertyNames.indexOf('cookieEnabled') == -1 is true
+PASS navigatorPropertyNames.indexOf('onLine') == -1 is true
+PASS navigatorPrototypePropertyNames.indexOf('appName') != -1 is true
+PASS navigatorPrototypePropertyNames.indexOf('appVersion') != -1 is true
+PASS navigatorPrototypePropertyNames.indexOf('language') != -1 is true
+PASS navigatorPrototypePropertyNames.indexOf('userAgent') != -1 is true
+PASS navigatorPrototypePropertyNames.indexOf('platform') != -1 is true
+PASS navigatorPrototypePropertyNames.indexOf('plugins') != -1 is true
+PASS navigatorPrototypePropertyNames.indexOf('mimeTypes') != -1 is true
+PASS navigatorPrototypePropertyNames.indexOf('product') != -1 is true
+PASS navigatorPrototypePropertyNames.indexOf('productSub') != -1 is true
+PASS navigatorPrototypePropertyNames.indexOf('vendor') != -1 is true
+PASS navigatorPrototypePropertyNames.indexOf('vendorSub') != -1 is true
+PASS navigatorPrototypePropertyNames.indexOf('cookieEnabled') != -1 is true
+PASS navigatorPrototypePropertyNames.indexOf('onLine') != -1 is true
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx">
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomdomattributesonmismatchtypeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/dom-attributes-on-mismatch-type-expected.txt (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/dom-attributes-on-mismatch-type-expected.txt        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/LayoutTests/js/dom/dom-attributes-on-mismatch-type-expected.txt        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -6,7 +6,7 @@
</span><span class="cx"> PASS objectWithDocumentAsPrototype.all threw exception TypeError: Type error.
</span><span class="cx"> See what happens if we put the anchor prototype on a div
</span><span class="cx"> PASS testDiv instanceof HTMLAnchorElement is true
</span><del>-PASS testDiv.href is undefined.
</del><ins>+PASS testDiv.href threw exception TypeError: Type error.
</ins><span class="cx"> PASS testDiv instanceof HTMLAnchorElement is true
</span><span class="cx"> PASS testDiv.href threw exception TypeError: Type error.
</span><span class="cx"> PASS successfullyParsed is true
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomdomattributesonmismatchtypehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/dom-attributes-on-mismatch-type.html (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/dom-attributes-on-mismatch-type.html        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/LayoutTests/js/dom/dom-attributes-on-mismatch-type.html        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -16,8 +16,7 @@
</span><span class="cx"> debug("See what happens if we put the anchor prototype on a div");
</span><span class="cx"> testDiv.__proto__ = testAnchor.__proto__;
</span><span class="cx"> shouldBeTrue("testDiv instanceof HTMLAnchorElement")
</span><del>- /* This will change to an exception once attributes are on the prototype chain */
- shouldBeUndefined("testDiv.href")
</del><ins>+ shouldThrow("testDiv.href")
</ins><span class="cx"> testDiv.__proto__ = testAnchor;
</span><span class="cx"> shouldBeTrue("testDiv instanceof HTMLAnchorElement")
</span><span class="cx"> shouldThrow("testDiv.href")
</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 (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/dom-static-property-for-in-iteration-expected.txt        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/LayoutTests/js/dom/dom-static-property-for-in-iteration-expected.txt        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -3,13 +3,18 @@
</span><span class="cx"> On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
</span><span class="cx">
</span><span class="cx">
</span><ins>+PASS a["foo"] is 1
+PASS a["bar"] is 2
+PASS a["wibble"] is 3
+PASS a["hick"] is 4
+PASS a["hock"] is 5
+PASS a["snood"] is 6
</ins><span class="cx"> PASS a["origin"] is file://
</span><span class="cx"> PASS a["hash"] is
</span><span class="cx"> PASS a["search"] is
</span><span class="cx"> PASS a["text"] is nerget
</span><span class="cx"> PASS a["hostname"] is
</span><span class="cx"> PASS a["rel"] is
</span><del>-PASS a["name"] is
</del><span class="cx"> PASS a["hreflang"] is
</span><span class="cx"> PASS a["ping"] is
</span><span class="cx"> PASS a["rev"] is
</span><span class="lines">@@ -18,6 +23,7 @@
</span><span class="cx"> PASS a["target"] is
</span><span class="cx"> PASS a["type"] is
</span><span class="cx"> PASS a["coords"] is
</span><ins>+PASS a["name"] is
</ins><span class="cx"> PASS a["shape"] is
</span><span class="cx"> PASS a["port"] is
</span><span class="cx"> PASS a["protocol"] is file:
</span><span class="lines">@@ -45,6 +51,7 @@
</span><span class="cx"> PASS a["scrollWidth"] is 0
</span><span class="cx"> PASS a["attributes"] is [object NamedNodeMap]
</span><span class="cx"> PASS a["webkitRegionOverset"] is undefined
</span><ins>+PASS a["ALLOW_KEYBOARD_INPUT"] is 1
</ins><span class="cx"> PASS a["offsetWidth"] is 39
</span><span class="cx"> PASS a["classList"] is
</span><span class="cx"> PASS a["offsetLeft"] is 8
</span><span class="lines">@@ -62,48 +69,41 @@
</span><span class="cx"> PASS a["clientLeft"] is 0
</span><span class="cx"> PASS a["offsetHeight"] is 18
</span><span class="cx"> PASS a["clientHeight"] is 0
</span><del>-PASS a["offsetTop"] is 969
</del><ins>+PASS a["offsetTop"] is 1074
</ins><span class="cx"> PASS a["scrollTop"] is 0
</span><span class="cx"> PASS a["scrollHeight"] is 0
</span><span class="cx"> PASS a["previousSibling"] is [object Text]
</span><del>-PASS a["parentNode"] is [object HTMLBodyElement]
-PASS a["lastChild"] is [object Text]
-PASS a["firstChild"] is [object Text]
-PASS a["nodeValue"] is null
-PASS a["textContent"] is nerget
-PASS a["nodeType"] is 1
-PASS a["nodeName"] is A
-PASS a["prefix"] is null
-PASS a["childNodes"] is [object NodeList]
-PASS a["nextSibling"] is [object Text]
-PASS a["ownerDocument"] is [object HTMLDocument]
-PASS a["namespaceURI"] is http://www.w3.org/1999/xhtml
-PASS a["localName"] is a
-PASS a["parentElement"] is [object HTMLBodyElement]
-PASS a["foo"] is 1
-PASS a["bar"] is 2
-PASS a["wibble"] is 3
-PASS a["hick"] is 4
-PASS a["hock"] is 5
-PASS a["snood"] is 6
-PASS a["ALLOW_KEYBOARD_INPUT"] is 1
</del><span class="cx"> PASS a["NOTATION_NODE"] is 12
</span><span class="cx"> PASS a["CDATA_SECTION_NODE"] is 4
</span><ins>+PASS a["lastChild"] is [object Text]
</ins><span class="cx"> PASS a["ELEMENT_NODE"] is 1
</span><ins>+PASS a["nodeValue"] is null
</ins><span class="cx"> PASS a["DOCUMENT_POSITION_DISCONNECTED"] is 1
</span><span class="cx"> PASS a["ENTITY_NODE"] is 6
</span><span class="cx"> PASS a["TEXT_NODE"] is 3
</span><span class="cx"> PASS a["ENTITY_REFERENCE_NODE"] is 5
</span><ins>+PASS a["textContent"] is nerget
+PASS a["nodeType"] is 1
</ins><span class="cx"> PASS a["DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC"] is 32
</span><del>-PASS a["DOCUMENT_FRAGMENT_NODE"] is 11
</del><ins>+PASS a["ownerDocument"] is [object HTMLDocument]
</ins><span class="cx"> PASS a["PROCESSING_INSTRUCTION_NODE"] is 7
</span><ins>+PASS a["localName"] is a
+PASS a["parentNode"] is [object HTMLBodyElement]
+PASS a["firstChild"] is [object Text]
</ins><span class="cx"> PASS a["DOCUMENT_POSITION_PRECEDING"] is 2
</span><span class="cx"> PASS a["DOCUMENT_TYPE_NODE"] is 10
</span><span class="cx"> PASS a["COMMENT_NODE"] is 8
</span><ins>+PASS a["nodeName"] is A
</ins><span class="cx"> PASS a["DOCUMENT_POSITION_FOLLOWING"] is 4
</span><ins>+PASS a["prefix"] is null
+PASS a["childNodes"] is [object NodeList]
+PASS a["nextSibling"] is [object Text]
</ins><span class="cx"> PASS a["ATTRIBUTE_NODE"] is 2
</span><span class="cx"> PASS a["DOCUMENT_POSITION_CONTAINED_BY"] is 16
</span><ins>+PASS a["namespaceURI"] is http://www.w3.org/1999/xhtml
+PASS a["parentElement"] is [object HTMLBodyElement]
</ins><span class="cx"> PASS a["DOCUMENT_NODE"] is 9
</span><ins>+PASS a["DOCUMENT_FRAGMENT_NODE"] is 11
</ins><span class="cx"> PASS a["DOCUMENT_POSITION_CONTAINS"] is 8
</span><span class="cx"> PASS successfullyParsed is true
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomscripttestsconstructorattributesjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/script-tests/constructor-attributes.js (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/script-tests/constructor-attributes.js        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/LayoutTests/js/dom/script-tests/constructor-attributes.js        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -39,4 +39,4 @@
</span><span class="cx"> checkConstructor("TypeError.prototype");
</span><span class="cx"> checkConstructor("URIError.prototype");
</span><span class="cx">
</span><del>-checkConstructor("document.createTextNode('')");
</del><ins>+checkConstructor("document.createTextNode('').__proto__");
</ins></span></pre></div>
<a id="trunkLayoutTestsjsdomscripttestsdeletesyntaxjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/dom/script-tests/delete-syntax.js (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/script-tests/delete-syntax.js        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/LayoutTests/js/dom/script-tests/delete-syntax.js        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -91,4 +91,7 @@
</span><span class="cx"> ];
</span><span class="cx">
</span><span class="cx"> for (var i = 0; i < expectedPropertyNames.length; ++i)
</span><del>- shouldBeTrue("navigatorPropertyNames.indexOf('" + expectedPropertyNames[i] +"') != -1");
</del><ins>+ shouldBeTrue("navigatorPropertyNames.indexOf('" + expectedPropertyNames[i] +"') == -1");
+var navigatorPrototypePropertyNames = Object.getOwnPropertyNames(navigator.__proto__);
+for (var i = 0; i < expectedPropertyNames.length; ++i)
+ shouldBeTrue("navigatorPrototypePropertyNames.indexOf('" + expectedPropertyNames[i] +"') != -1");
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/ChangeLog        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -1,3 +1,30 @@
</span><ins>+2014-01-30 Oliver Hunt <oliver@apple.com>
+
+ Push DOM attributes into the prototype chain
+ https://bugs.webkit.org/show_bug.cgi?id=127969
+
+ Reviewed by Mark Lam.
+
+ This patch does the actual work of moving dom attributes up the
+ prototype chain. There are still a few class and edge cases
+ where we can't do this without impacting existing behaviour,
+ but they can be fixed separately in later patches.
+
+ * bindings/js/JSDOMBinding.h:
+ (WebCore::getStaticPropertySlotEntryWithoutCaching):
+ (WebCore::getStaticPropertySlotEntryWithoutCaching<JSDOMWrapper>):
+ * bindings/scripts/CodeGeneratorJS.pm:
+ (GenerateGetOwnPropertySlotBody):
+ (HasComplexGetOwnProperty):
+ (ConstructorShouldBeOnInstance):
+ (AttributeShouldBeOnInstance):
+ (InstanceAttributeCount):
+ (PrototypeAttributeCount):
+ (InstanceOverridesGetOwnPropertySlot):
+ (PrototypeOverridesGetOwnPropertySlot):
+ (GenerateAttributesHashTable):
+ (GenerateImplementation):
+
</ins><span class="cx"> 2014-02-06 Andreas Kling <akling@apple.com>
</span><span class="cx">
</span><span class="cx"> Remove display:run-in support.
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMBindingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMBinding.h (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -614,7 +614,10 @@
</span><span class="cx"> template <class ThisImp>
</span><span class="cx"> inline const JSC::HashEntry* getStaticValueSlotEntryWithoutCaching(JSC::ExecState* exec, JSC::PropertyName propertyName)
</span><span class="cx"> {
</span><del>- const JSC::HashEntry* entry = ThisImp::info()->propHashTable(exec)->entry(exec, propertyName);
</del><ins>+ const JSC::HashTable* table = ThisImp::info()->propHashTable(exec);
+ if (!table)
+ return getStaticValueSlotEntryWithoutCaching<typename ThisImp::Base>(exec, propertyName);
+ const JSC::HashEntry* entry = table->entry(exec, propertyName);
</ins><span class="cx"> if (!entry) // not found, forward to parent
</span><span class="cx"> return getStaticValueSlotEntryWithoutCaching<typename ThisImp::Base>(exec, propertyName);
</span><span class="cx"> return entry;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSStorageCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSStorageCustom.cpp (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSStorageCustom.cpp        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/js/JSStorageCustom.cpp        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -44,14 +44,14 @@
</span><span class="cx">
</span><span class="cx"> EncodedJSValue JSStorage::nameGetter(ExecState* exec, JSObject* slotBase, EncodedJSValue, PropertyName propertyName)
</span><span class="cx"> {
</span><del>- JSStorage* thisObj = jsCast<JSStorage*>(slotBase);
-
- JSValue prototype = slotBase->prototype();
- if (prototype.isObject() && asObject(prototype)->hasProperty(exec, propertyName))
- return JSValue::encode(asObject(prototype)->get(exec, propertyName));
-
</del><ins>+ JSStorage* thisObject = jsCast<JSStorage*>(slotBase);
+ JSValue prototype = thisObject->prototype();
+ PropertySlot slot(thisObject);
+ if (prototype.isObject() && asObject(prototype)->getPropertySlot(exec, propertyName, slot))
+ return JSValue::encode(slot.getValue(exec, propertyName));
+
</ins><span class="cx"> ExceptionCode ec = 0;
</span><del>- JSValue result = jsStringOrNull(exec, thisObj->impl().getItem(propertyNameToString(propertyName), ec));
</del><ins>+ JSValue result = jsStringOrNull(exec, thisObject->impl().getItem(propertyNameToString(propertyName), ec));
</ins><span class="cx"> setDOMException(exec, ec);
</span><span class="cx"> return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="lines">@@ -67,7 +67,7 @@
</span><span class="cx"> return false;
</span><span class="cx">
</span><span class="cx"> JSValue prototype = thisObject->prototype();
</span><del>- if (prototype.isObject() && asObject(prototype)->hasProperty(exec, propertyName))
</del><ins>+ if (prototype.isObject() && asObject(prototype)->getPropertySlot(exec, propertyName, slot))
</ins><span class="cx"> return false;
</span><span class="cx">
</span><span class="cx"> ExceptionCode ec = 0;
</span><span class="lines">@@ -107,11 +107,11 @@
</span><span class="cx"> PropertySlot slot(this);
</span><span class="cx"> if (getStaticValueSlot<JSStorage, Base>(exec, *s_info.propHashTable(exec), this, propertyName, slot))
</span><span class="cx"> return false;
</span><del>-
</del><ins>+
</ins><span class="cx"> JSValue prototype = this->prototype();
</span><del>- if (prototype.isObject() && asObject(prototype)->hasProperty(exec, propertyName))
</del><ins>+ if (prototype.isObject() && asObject(prototype)->getPropertySlot(exec, propertyName, slot))
</ins><span class="cx"> return false;
</span><del>-
</del><ins>+
</ins><span class="cx"> String stringValue = value.toString(exec)->value(exec);
</span><span class="cx"> if (exec->hadException())
</span><span class="cx"> return true;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -413,7 +413,7 @@
</span><span class="cx"> }
</span><span class="cx"> };
</span><span class="cx">
</span><del>- if (!$interface->extendedAttributes->{"CustomNamedGetter"}) {
</del><ins>+ if (!$interface->extendedAttributes->{"CustomNamedGetter"} and InstanceAttributeCount($interface) > 0) {
</ins><span class="cx"> &$manualLookupGetterGeneration();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -586,6 +586,111 @@
</span><span class="cx"> return 0;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+sub HasComplexGetOwnProperty
+{
+ my $interface = shift;
+
+ my $namedGetterFunction = GetNamedGetterFunction($interface);
+ my $indexedGetterFunction = GetIndexedGetterFunction($interface);
+ my $hasNumericIndexedGetter = $indexedGetterFunction ? $codeGenerator->IsNumericType($indexedGetterFunction->signature->type) : 0;
+
+ my $hasImpureNamedGetter = $namedGetterFunction
+ || $interface->extendedAttributes->{"CustomNamedGetter"}
+ || $interface->extendedAttributes->{"CustomGetOwnPropertySlot"};
+
+ my $hasComplexGetter = $indexedGetterFunction
+ || $interface->extendedAttributes->{"JSCustomGetOwnPropertySlotAndDescriptor"}
+ || $hasImpureNamedGetter;
+
+ return 1 if $interface->extendedAttributes->{"CheckSecurity"};
+ return 1 if IsDOMGlobalObject($interface);
+ return 1 if $hasComplexGetter;
+ return 0;
+}
+
+sub InterfaceRequiresAttributesOnInstance
+{
+ my $interface = shift;
+ my $interfaceName = $interface->name;
+ my $namedGetterFunction = GetNamedGetterFunction($interface);
+ my $indexedGetterFunction = GetIndexedGetterFunction($interface);
+ my $hasNumericIndexedGetter = $indexedGetterFunction ? $codeGenerator->IsNumericType($indexedGetterFunction->signature->type) : 0;
+
+ # FIXME: All these return 1 if ... should ideally be removed.
+ # Some of them are unavoidable due to DOM weirdness, in which case we should
+ # add an IDL attribute for them
+
+ # FIXME: We should rearrange how custom named getters and getOwnPropertySlot
+ # overrides are handled so that we get the correct semantics and lookup ordering
+ my $hasImpureNamedGetter = $namedGetterFunction
+ || $interface->extendedAttributes->{"CustomNamedGetter"}
+ || $interface->extendedAttributes->{"CustomGetOwnPropertySlot"};
+ return 1 if $hasImpureNamedGetter;
+
+ # FIXME: These two should be fixed by removing the custom override of message, etc
+ return 1 if $interfaceName =~ "Exception";
+ return 1 if $interfaceName =~ "Error";
+
+ return 1 if IsDOMGlobalObject($interface);
+
+ # Needed for compatibility with existing content
+ return 1 if $interfaceName =~ "Touch";
+
+ #FIXME: We currently clobber performance for a number of the list types
+ return 1 if $interfaceName =~ "List";
+
+ return 0;
+}
+
+sub ConstructorShouldBeOnInstance
+{
+ my $interface = shift;
+ return 1 if $interface->extendedAttributes->{"CheckSecurity"};
+ return HasComplexGetOwnProperty($interface);
+}
+
+sub AttributeShouldBeOnInstanceForCompatibility
+{
+ my $interface = shift;
+ my $attribute = shift;
+ my $interfaceName = $interface->name;
+ return 1 if ($attribute->signature->name =~ "touch");
+ return 0;
+}
+
+sub AttributeShouldBeOnInstance
+{
+ my $interface = shift;
+ my $attribute = shift;
+
+ return 1 if InterfaceRequiresAttributesOnInstance($interface);
+ return 1 if $attribute->signature->type =~ /Constructor$/;
+ return 1 if HasCustomGetter($attribute->signature->extendedAttributes);
+ return 1 if HasCustomSetter($attribute->signature->extendedAttributes);
+
+ # 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 "length"
+ # and so interfere with lookup ordering. I'm not sure what the correct solution is
+ # here.
+ return 1 if ($attribute->signature->name eq "length");
+
+ # It becomes hard to reason about attributes that require security checks if we push
+ # them down the prototype chain, so before we do these we'll need to carefully consider
+ # the possible pitfalls.
+ return 1 if $attribute->signature->extendedAttributes->{"CheckSecurityForNode"};
+
+ return 1 if AttributeShouldBeOnInstanceForCompatibility($interface, $attribute);
+
+ if ($interface->extendedAttributes->{"CheckSecurity"}) {
+ if ($attribute->signature->extendedAttributes->{"DoNotCheckSecurity"} or
+ $attribute->signature->extendedAttributes->{"DoNotCheckSecurityOnGetter"}) {
+ return 0;
+ }
+ return 1;
+ }
+ return 0;
+}
+
</ins><span class="cx"> sub GetIndexedGetterFunction
</span><span class="cx"> {
</span><span class="cx"> my $interface = shift;
</span><span class="lines">@@ -598,10 +703,32 @@
</span><span class="cx"> return GetSpecialAccessorFunctionForType($interface, "getter", "DOMString", 1);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+sub InstanceAttributeCount
+{
+ my $interface = shift;
+ my $count = 0;
+ foreach my $attribute (@{$interface->attributes}) {
+ $count = $count + AttributeShouldBeOnInstance($interface, $attribute);
+ }
+ $count = $count + 1 if ConstructorShouldBeOnInstance($interface);
+ return $count;
+}
+
+sub PrototypeAttributeCount
+{
+ my $interface = shift;
+ my $count = 0;
+ foreach my $attribute (@{$interface->attributes}) {
+ $count = $count + 1 if !AttributeShouldBeOnInstance($interface, $attribute);
+ }
+ $count = $count + 1 if !ConstructorShouldBeOnInstance($interface);
+ return $count;
+}
+
</ins><span class="cx"> sub InstanceOverridesGetOwnPropertySlot
</span><span class="cx"> {
</span><span class="cx"> my $interface = shift;
</span><del>- my $numAttributes = @{$interface->attributes};
</del><ins>+ my $numInstanceAttributes = InstanceAttributeCount($interface);
</ins><span class="cx">
</span><span class="cx"> my $namedGetterFunction = GetNamedGetterFunction($interface);
</span><span class="cx"> my $indexedGetterFunction = GetIndexedGetterFunction($interface);
</span><span class="lines">@@ -615,16 +742,17 @@
</span><span class="cx"> || $interface->extendedAttributes->{"JSCustomGetOwnPropertySlotAndDescriptor"}
</span><span class="cx"> || $hasImpureNamedGetter;
</span><span class="cx">
</span><del>- return $numAttributes > 0 || !$interface->extendedAttributes->{"NoInterfaceObject"} || $hasComplexGetter;
</del><ins>+ return $numInstanceAttributes > 0 || !$interface->extendedAttributes->{"NoInterfaceObject"} || $hasComplexGetter;
</ins><span class="cx">
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> sub PrototypeOverridesGetOwnPropertySlot
</span><span class="cx"> {
</span><span class="cx"> my $interface = shift;
</span><ins>+ my $numPrototypeAttributes = PrototypeAttributeCount($interface);
</ins><span class="cx"> my $numConstants = @{$interface->constants};
</span><span class="cx"> my $numFunctions = @{$interface->functions};
</span><del>- return $numFunctions > 0 || $numConstants > 0;
</del><ins>+ return $numFunctions > 0 || $numConstants > 0 || $numPrototypeAttributes > 0;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> sub InstanceOverridesPutImplementation
</span><span class="lines">@@ -1176,20 +1304,44 @@
</span><span class="cx">
</span><span class="cx"> sub GenerateAttributesHashTable
</span><span class="cx"> {
</span><del>- my ($object, $interface, $hashKeys, $hashSpecials, $hashValue1, $hashValue2, $conditionals, $entries) = @_;
</del><ins>+ my ($object, $interface, $isInstance, $hashKeys, $hashSpecials, $hashValue1, $hashValue2, $conditionals, $entries) = @_;
</ins><span class="cx">
</span><span class="cx"> # FIXME: These should be functions on $interface.
</span><span class="cx"> my $interfaceName = $interface->name;
</span><span class="cx"> my $className = "JS$interfaceName";
</span><span class="cx">
</span><span class="cx"> # - Add all attributes in a hashtable definition
</span><del>- my $numAttributes = @{$interface->attributes};
- $numAttributes++ if !$interface->extendedAttributes->{"NoInterfaceObject"};
</del><ins>+ my $numAttributes = 0;
+ if ($isInstance) {
+ $numAttributes = InstanceAttributeCount($interface);
+ } else {
+ $numAttributes = PrototypeAttributeCount($interface);
+ }
</ins><span class="cx">
</span><del>- return 0 if !$numAttributes;
</del><span class="cx">
</span><ins>+ if (ConstructorShouldBeOnInstance($interface) == $isInstance) {
+
+ if (!$interface->extendedAttributes->{"NoInterfaceObject"}) {
+ die if !$numAttributes;
+ push(@$hashKeys, "constructor");
+ my $getter = "js" . $interfaceName . "Constructor";
+ push(@$hashValue1, $getter);
+ if ($interface->extendedAttributes->{"ReplaceableConstructor"}) {
+ my $setter = "setJS" . $interfaceName . "Constructor";
+ push(@$hashValue2, $setter);
+ push(@$hashSpecials, "DontEnum | DontDelete");
+ } else {
+ push(@$hashValue2, "0");
+ push(@$hashSpecials, "DontEnum | ReadOnly");
+ }
+ }
+ }
+
+ return 0 if !$numAttributes;
+
</ins><span class="cx"> foreach my $attribute (@{$interface->attributes}) {
</span><span class="cx"> next if ($attribute->isStatic);
</span><ins>+ next if AttributeShouldBeOnInstance($interface, $attribute) != $isInstance;
</ins><span class="cx"> my $name = $attribute->signature->name;
</span><span class="cx"> push(@$hashKeys, $name);
</span><span class="cx">
</span><span class="lines">@@ -1220,19 +1372,6 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>- if (!$interface->extendedAttributes->{"NoInterfaceObject"}) {
- push(@$hashKeys, "constructor");
- my $getter = "js" . $interfaceName . "Constructor";
- push(@$hashValue1, $getter);
- if ($interface->extendedAttributes->{"ReplaceableConstructor"}) {
- my $setter = "setJS" . $interfaceName . "Constructor";
- push(@$hashValue2, $setter);
- push(@$hashSpecials, "DontEnum | DontDelete");
- } else {
- push(@$hashValue2, "0");
- push(@$hashSpecials, "DontEnum | ReadOnly");
- }
- }
</del><span class="cx"> return $numAttributes;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1577,17 +1716,17 @@
</span><span class="cx"> my %conditionals = ();
</span><span class="cx"> my $hashName = $className . "Table";
</span><span class="cx">
</span><del>- my $numAttributes = GenerateAttributesHashTable($object, $interface,
</del><ins>+ my $numInstanceAttributes = GenerateAttributesHashTable($object, $interface, 1,
</ins><span class="cx"> \@hashKeys, \@hashSpecials,
</span><span class="cx"> \@hashValue1, \@hashValue2,
</span><span class="cx"> \%conditionals);
</span><span class="cx">
</span><span class="cx"> my $numConstants = @{$interface->constants};
</span><span class="cx"> my $numFunctions = @{$interface->functions};
</span><del>- $object->GenerateHashTable($hashName, $numAttributes,
</del><ins>+ $object->GenerateHashTable($hashName, $numInstanceAttributes,
</ins><span class="cx"> \@hashKeys, \@hashSpecials,
</span><span class="cx"> \@hashValue1, \@hashValue2,
</span><del>- \%conditionals) if $numAttributes > 0;
</del><ins>+ \%conditionals) if $numInstanceAttributes > 0;
</ins><span class="cx">
</span><span class="cx"> # - Add all constants
</span><span class="cx"> if (!$interface->extendedAttributes->{"NoInterfaceObject"}) {
</span><span class="lines">@@ -1687,7 +1826,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> # - Add functions and constants to a hashtable definition
</span><del>- my $hashSize = $numFunctions + $numConstants;
</del><ins>+
</ins><span class="cx"> $hashName = $className . "PrototypeTable";
</span><span class="cx">
</span><span class="cx"> @hashKeys = ();
</span><span class="lines">@@ -1696,6 +1835,13 @@
</span><span class="cx"> @hashSpecials = ();
</span><span class="cx"> %conditionals = ();
</span><span class="cx">
</span><ins>+
+ my $numPrototypeAttributes = GenerateAttributesHashTable($object, $interface, 0,
+ \@hashKeys, \@hashSpecials,
+ \@hashValue1, \@hashValue2,
+ \%conditionals);
+ my $hashSize = $numFunctions + $numConstants + $numPrototypeAttributes;
+
</ins><span class="cx"> # FIXME: we should not need a function for every constant.
</span><span class="cx"> foreach my $constant (@{$interface->constants}) {
</span><span class="cx"> my $name = $constant->name;
</span><span class="lines">@@ -1763,11 +1909,12 @@
</span><span class="cx"> push(@implContent, "{\n");
</span><span class="cx"> push(@implContent, " ${className}Prototype* thisObject = jsCast<${className}Prototype*>(object);\n");
</span><span class="cx">
</span><del>- if ($numConstants eq 0 && $numFunctions eq 0) {
</del><ins>+ my $numPrototypeAttributes = PrototypeAttributeCount($interface);
+ if ($numConstants eq 0 && $numFunctions eq 0 && $numPrototypeAttributes eq 0) {
</ins><span class="cx"> push(@implContent, " return Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);\n");
</span><del>- } elsif ($numConstants eq 0) {
</del><ins>+ } elsif ($numConstants eq 0 && $numPrototypeAttributes eq 0) {
</ins><span class="cx"> push(@implContent, " return getStaticFunctionSlot<JSObject>(exec, " . prototypeHashTableAccessor($interface->extendedAttributes->{"JSNoStaticTables"}, $className) . ", thisObject, propertyName, slot);\n");
</span><del>- } elsif ($numFunctions eq 0) {
</del><ins>+ } elsif ($numFunctions eq 0 && $numPrototypeAttributes eq 0) {
</ins><span class="cx"> push(@implContent, " return getStaticValueSlot<${className}Prototype, JSObject>(exec, " . prototypeHashTableAccessor($interface->extendedAttributes->{"JSNoStaticTables"}, $className) . ", thisObject, propertyName, slot);\n");
</span><span class="cx"> } else {
</span><span class="cx"> push(@implContent, " return getStaticPropertySlot<${className}Prototype, JSObject>(exec, " . prototypeHashTableAccessor($interface->extendedAttributes->{"JSNoStaticTables"}, $className) . ", thisObject, propertyName, slot);\n");
</span><span class="lines">@@ -1786,7 +1933,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> # - Initialize static ClassInfo object
</span><del>- if ($numAttributes > 0 && $interface->extendedAttributes->{"JSNoStaticTables"}) {
</del><ins>+ if ($numInstanceAttributes > 0 && $interface->extendedAttributes->{"JSNoStaticTables"}) {
</ins><span class="cx"> push(@implContent, "static const HashTable& get${className}Table(VM& vm)\n");
</span><span class="cx"> push(@implContent, "{\n");
</span><span class="cx"> push(@implContent, " return getHashTableForGlobalData(vm, ${className}Table);\n");
</span><span class="lines">@@ -1795,12 +1942,12 @@
</span><span class="cx">
</span><span class="cx"> push(@implContent, "const ClassInfo $className" . "::s_info = { \"${visibleInterfaceName}\", &Base::s_info, ");
</span><span class="cx">
</span><del>- if ($numAttributes > 0 && !$interface->extendedAttributes->{"JSNoStaticTables"}) {
</del><ins>+ if ($numInstanceAttributes > 0 && !$interface->extendedAttributes->{"JSNoStaticTables"}) {
</ins><span class="cx"> push(@implContent, "&${className}Table");
</span><span class="cx"> } else {
</span><span class="cx"> push(@implContent, "0");
</span><span class="cx"> }
</span><del>- if ($numAttributes > 0 && $interface->extendedAttributes->{"JSNoStaticTables"}) {
</del><ins>+ if ($numInstanceAttributes > 0 && $interface->extendedAttributes->{"JSNoStaticTables"}) {
</ins><span class="cx"> push(@implContent, ", get${className}Table ");
</span><span class="cx"> } else {
</span><span class="cx"> push(@implContent, ", 0 ");
</span><span class="lines">@@ -1888,7 +2035,7 @@
</span><span class="cx"> push(@implContent, "{\n");
</span><span class="cx"> push(@implContent, " ${className}* thisObject = jsCast<${className}*>(object);\n");
</span><span class="cx"> push(@implContent, " ASSERT_GC_OBJECT_INHERITS(thisObject, info());\n");
</span><del>- push(@implContent, GenerateGetOwnPropertySlotBody($interface, $interfaceName, $className, $numAttributes > 0, 0));
</del><ins>+ push(@implContent, GenerateGetOwnPropertySlotBody($interface, $interfaceName, $className, $numInstanceAttributes > 0, 0));
</ins><span class="cx"> push(@implContent, "}\n\n");
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -1952,6 +2099,8 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> }
</span><ins>+ my $numAttributes = @{$interface->attributes};
+ $numAttributes = $numAttributes + 1 if !$interface->extendedAttributes->{"NoInterfaceObject"};
</ins><span class="cx"> if ($numAttributes > 0) {
</span><span class="cx"> foreach my $attribute (@{$interface->attributes}) {
</span><span class="cx"> my $name = $attribute->signature->name;
</span><span class="lines">@@ -2147,8 +2296,10 @@
</span><span class="cx"> if (!$interface->extendedAttributes->{"NoInterfaceObject"}) {
</span><span class="cx"> my $constructorFunctionName = "js" . $interfaceName . "Constructor";
</span><span class="cx">
</span><del>- push(@implContent, "EncodedJSValue ${constructorFunctionName}(ExecState* exec, JSObject*, EncodedJSValue thisValue, PropertyName)\n");
</del><ins>+ push(@implContent, "EncodedJSValue ${constructorFunctionName}(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName)\n");
</ins><span class="cx"> push(@implContent, "{\n");
</span><ins>+ push(@implContent, " UNUSED_PARAM(baseValue);\n");
+ push(@implContent, " UNUSED_PARAM(thisValue);\n");
</ins><span class="cx"> if ($interfaceName eq "DOMWindow") {
</span><span class="cx"> push(@implContent, " ${className}* domObject = jsDynamicCast<$className*>(JSValue::decode(thisValue));\n");
</span><span class="cx"> push(@implContent, " if (!domObject) {\n");
</span><span class="lines">@@ -2156,12 +2307,14 @@
</span><span class="cx"> push(@implContent, " domObject = shell->window();\n");
</span><span class="cx"> push(@implContent, " }\n");
</span><span class="cx"> } else {
</span><del>- push(@implContent, " ${className}* domObject = jsDynamicCast<$className*>(JSValue::decode(thisValue));\n");
</del><ins>+ push(@implContent, " ${className}* domObject = jsDynamicCast<${className}*>(JSValue::decode(thisValue));\n") if ConstructorShouldBeOnInstance($interface);
+ push(@implContent, " ${className}Prototype* domObject = jsDynamicCast<${className}Prototype*>(baseValue);\n") if !ConstructorShouldBeOnInstance($interface);
</ins><span class="cx"> }
</span><span class="cx"> push(@implContent, " if (!domObject)\n");
</span><span class="cx"> push(@implContent, " return throwVMTypeError(exec);\n");
</span><span class="cx">
</span><span class="cx"> if ($interface->extendedAttributes->{"CheckSecurity"}) {
</span><ins>+ die if !ConstructorShouldBeOnInstance($interface);
</ins><span class="cx"> push(@implContent, " if (!BindingSecurity::shouldAllowAccessToDOMWindow(exec, domObject->impl()))\n");
</span><span class="cx"> push(@implContent, " return JSValue::encode(jsUndefined());\n");
</span><span class="cx"> }
</span><span class="lines">@@ -2764,6 +2917,8 @@
</span><span class="cx"> $rootString .= " return false;\n";
</span><span class="cx"> $rootString .= " void* root = WebCore::root(element);\n";
</span><span class="cx"> } elsif ($interfaceName eq "CanvasRenderingContext") {
</span><ins>+ $implIncludes{"Element.h"} = 1;
+ $implIncludes{"JSNodeCustom.h"} = 1;
</ins><span class="cx"> $rootString = " void* root = WebCore::root(js${interfaceName}->impl().canvas());\n";
</span><span class="cx"> } elsif (GetGenerateIsReachable($interface) eq "ImplOwnerNodeRoot") {
</span><span class="cx"> $implIncludes{"Element.h"} = 1;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -36,8 +36,8 @@
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestActiveDOMObjectTableValues[] =
</span><span class="cx"> {
</span><ins>+ { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestActiveDOMObjectConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</ins><span class="cx"> { "excitingAttr", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestActiveDOMObjectExcitingAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</span><del>- { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestActiveDOMObjectConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</del><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><span class="lines">@@ -145,8 +145,10 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx">
</span><del>-EncodedJSValue jsTestActiveDOMObjectConstructor(ExecState* exec, JSObject*, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsTestActiveDOMObjectConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName)
</ins><span class="cx"> {
</span><ins>+ UNUSED_PARAM(baseValue);
+ UNUSED_PARAM(thisValue);
</ins><span class="cx"> JSTestActiveDOMObject* domObject = jsDynamicCast<JSTestActiveDOMObject*>(JSValue::decode(thisValue));
</span><span class="cx"> if (!domObject)
</span><span class="cx"> return throwVMTypeError(exec);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCustomNamedGettercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -144,8 +144,10 @@
</span><span class="cx"> return Base::getOwnPropertySlotByIndex(thisObject, exec, index, slot);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-EncodedJSValue jsTestCustomNamedGetterConstructor(ExecState* exec, JSObject*, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsTestCustomNamedGetterConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName)
</ins><span class="cx"> {
</span><ins>+ UNUSED_PARAM(baseValue);
+ UNUSED_PARAM(thisValue);
</ins><span class="cx"> JSTestCustomNamedGetter* domObject = jsDynamicCast<JSTestCustomNamedGetter*>(JSValue::decode(thisValue));
</span><span class="cx"> if (!domObject)
</span><span class="cx"> return throwVMTypeError(exec);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -34,17 +34,6 @@
</span><span class="cx">
</span><span class="cx"> /* Hash table for constructor */
</span><span class="cx">
</span><del>-static const HashTableValue JSTestEventConstructorTableValues[] =
-{
- { "attr1", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructorAttr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { "attr2", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructorAttr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructorConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { 0, 0, NoIntrinsic, 0, 0 }
-};
-
-static const HashTable JSTestEventConstructorTable = { 9, 7, true, JSTestEventConstructorTableValues, 0 };
-/* Hash table for constructor */
-
</del><span class="cx"> static const HashTableValue JSTestEventConstructorConstructorTableValues[] =
</span><span class="cx"> {
</span><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="lines">@@ -119,10 +108,13 @@
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestEventConstructorPrototypeTableValues[] =
</span><span class="cx"> {
</span><ins>+ { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructorConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "attr1", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructorAttr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "attr2", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestEventConstructorAttr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</ins><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-static const HashTable JSTestEventConstructorPrototypeTable = { 1, 0, false, JSTestEventConstructorPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestEventConstructorPrototypeTable = { 9, 7, true, JSTestEventConstructorPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestEventConstructorPrototype::s_info = { "TestEventConstructorPrototype", &Base::s_info, &JSTestEventConstructorPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestEventConstructorPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestEventConstructorPrototype::self(VM& vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -130,8 +122,14 @@
</span><span class="cx"> return getDOMPrototype<JSTestEventConstructor>(vm, globalObject);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-const ClassInfo JSTestEventConstructor::s_info = { "TestEventConstructor", &Base::s_info, &JSTestEventConstructorTable, 0 , CREATE_METHOD_TABLE(JSTestEventConstructor) };
</del><ins>+bool JSTestEventConstructorPrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
+{
+ JSTestEventConstructorPrototype* thisObject = jsCast<JSTestEventConstructorPrototype*>(object);
+ return getStaticPropertySlot<JSTestEventConstructorPrototype, JSObject>(exec, JSTestEventConstructorPrototypeTable, thisObject, propertyName, slot);
+}
</ins><span class="cx">
</span><ins>+const ClassInfo JSTestEventConstructor::s_info = { "TestEventConstructor", &Base::s_info, 0, 0 , CREATE_METHOD_TABLE(JSTestEventConstructor) };
+
</ins><span class="cx"> JSTestEventConstructor::JSTestEventConstructor(Structure* structure, JSDOMGlobalObject* globalObject, PassRefPtr<TestEventConstructor> impl)
</span><span class="cx"> : JSDOMWrapper(structure, globalObject)
</span><span class="cx"> , m_impl(impl.leakRef())
</span><span class="lines">@@ -164,7 +162,7 @@
</span><span class="cx"> {
</span><span class="cx"> JSTestEventConstructor* thisObject = jsCast<JSTestEventConstructor*>(object);
</span><span class="cx"> ASSERT_GC_OBJECT_INHERITS(thisObject, info());
</span><del>- return getStaticValueSlot<JSTestEventConstructor, Base>(exec, JSTestEventConstructorTable, thisObject, propertyName, slot);
</del><ins>+ return Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> EncodedJSValue jsTestEventConstructorAttr1(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
</span><span class="lines">@@ -193,9 +191,11 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx">
</span><del>-EncodedJSValue jsTestEventConstructorConstructor(ExecState* exec, JSObject*, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsTestEventConstructorConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName)
</ins><span class="cx"> {
</span><del>- JSTestEventConstructor* domObject = jsDynamicCast<JSTestEventConstructor*>(JSValue::decode(thisValue));
</del><ins>+ UNUSED_PARAM(baseValue);
+ UNUSED_PARAM(thisValue);
+ JSTestEventConstructorPrototype* domObject = jsDynamicCast<JSTestEventConstructorPrototype*>(baseValue);
</ins><span class="cx"> if (!domObject)
</span><span class="cx"> return throwVMTypeError(exec);
</span><span class="cx"> return JSValue::encode(JSTestEventConstructor::getConstructor(exec->vm(), domObject->globalObject()));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -104,6 +104,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> DECLARE_INFO;
</span><ins>+ static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&);
</ins><span class="cx"> static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
</span><span class="cx"> {
</span><span class="cx"> return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
</span><span class="lines">@@ -112,7 +113,7 @@
</span><span class="cx"> private:
</span><span class="cx"> JSTestEventConstructorPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure) : JSC::JSNonFinalObject(vm, structure) { }
</span><span class="cx"> protected:
</span><del>- static const unsigned StructureFlags = Base::StructureFlags;
</del><ins>+ static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | Base::StructureFlags;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> class JSTestEventConstructorConstructor : public DOMConstructorObject {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -169,8 +169,10 @@
</span><span class="cx"> return Base::getOwnPropertySlotByIndex(thisObject, exec, index, slot);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-EncodedJSValue jsTestEventTargetConstructor(ExecState* exec, JSObject*, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsTestEventTargetConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName)
</ins><span class="cx"> {
</span><ins>+ UNUSED_PARAM(baseValue);
+ UNUSED_PARAM(thisValue);
</ins><span class="cx"> JSTestEventTarget* domObject = jsDynamicCast<JSTestEventTarget*>(JSValue::decode(thisValue));
</span><span class="cx"> if (!domObject)
</span><span class="cx"> return throwVMTypeError(exec);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -35,11 +35,10 @@
</span><span class="cx"> static const HashTableValue JSTestExceptionTableValues[] =
</span><span class="cx"> {
</span><span class="cx"> { "name", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestExceptionName), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</span><del>- { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestExceptionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</del><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-static const HashTable JSTestExceptionTable = { 5, 3, true, JSTestExceptionTableValues, 0 };
</del><ins>+static const HashTable JSTestExceptionTable = { 2, 1, true, JSTestExceptionTableValues, 0 };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestExceptionConstructorTableValues[] =
</span><span class="lines">@@ -72,10 +71,11 @@
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestExceptionPrototypeTableValues[] =
</span><span class="cx"> {
</span><ins>+ { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestExceptionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</ins><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-static const HashTable JSTestExceptionPrototypeTable = { 1, 0, false, JSTestExceptionPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestExceptionPrototypeTable = { 2, 1, true, JSTestExceptionPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestExceptionPrototype::s_info = { "TestExceptionPrototype", &Base::s_info, &JSTestExceptionPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestExceptionPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestExceptionPrototype::self(VM& vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -83,6 +83,12 @@
</span><span class="cx"> return getDOMPrototype<JSTestException>(vm, globalObject);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+bool JSTestExceptionPrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
+{
+ JSTestExceptionPrototype* thisObject = jsCast<JSTestExceptionPrototype*>(object);
+ return getStaticPropertySlot<JSTestExceptionPrototype, JSObject>(exec, JSTestExceptionPrototypeTable, thisObject, propertyName, slot);
+}
+
</ins><span class="cx"> const ClassInfo JSTestException::s_info = { "TestException", &Base::s_info, &JSTestExceptionTable, 0 , CREATE_METHOD_TABLE(JSTestException) };
</span><span class="cx">
</span><span class="cx"> JSTestException::JSTestException(Structure* structure, JSDOMGlobalObject* globalObject, PassRefPtr<TestException> impl)
</span><span class="lines">@@ -133,9 +139,11 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx">
</span><del>-EncodedJSValue jsTestExceptionConstructor(ExecState* exec, JSObject*, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsTestExceptionConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName)
</ins><span class="cx"> {
</span><del>- JSTestException* domObject = jsDynamicCast<JSTestException*>(JSValue::decode(thisValue));
</del><ins>+ UNUSED_PARAM(baseValue);
+ UNUSED_PARAM(thisValue);
+ JSTestExceptionPrototype* domObject = jsDynamicCast<JSTestExceptionPrototype*>(baseValue);
</ins><span class="cx"> if (!domObject)
</span><span class="cx"> return throwVMTypeError(exec);
</span><span class="cx"> return JSValue::encode(JSTestException::getConstructor(exec->vm(), domObject->globalObject()));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestExceptionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -102,6 +102,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> DECLARE_INFO;
</span><ins>+ static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&);
</ins><span class="cx"> static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
</span><span class="cx"> {
</span><span class="cx"> return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
</span><span class="lines">@@ -110,7 +111,7 @@
</span><span class="cx"> private:
</span><span class="cx"> JSTestExceptionPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure) : JSC::JSNonFinalObject(vm, structure) { }
</span><span class="cx"> protected:
</span><del>- static const unsigned StructureFlags = Base::StructureFlags;
</del><ins>+ static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | Base::StructureFlags;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> class JSTestExceptionConstructor : public DOMConstructorObject {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -28,15 +28,6 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-/* Hash table */
-
-static const HashTableValue JSTestGenerateIsReachableTableValues[] =
-{
- { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGenerateIsReachableConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { 0, 0, NoIntrinsic, 0, 0 }
-};
-
-static const HashTable JSTestGenerateIsReachableTable = { 2, 1, true, JSTestGenerateIsReachableTableValues, 0 };
</del><span class="cx"> /* Hash table for constructor */
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestGenerateIsReachableConstructorTableValues[] =
</span><span class="lines">@@ -69,10 +60,11 @@
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestGenerateIsReachablePrototypeTableValues[] =
</span><span class="cx"> {
</span><ins>+ { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestGenerateIsReachableConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</ins><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-static const HashTable JSTestGenerateIsReachablePrototypeTable = { 1, 0, false, JSTestGenerateIsReachablePrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestGenerateIsReachablePrototypeTable = { 2, 1, true, JSTestGenerateIsReachablePrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestGenerateIsReachablePrototype::s_info = { "TestGenerateIsReachablePrototype", &Base::s_info, &JSTestGenerateIsReachablePrototypeTable, 0, CREATE_METHOD_TABLE(JSTestGenerateIsReachablePrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestGenerateIsReachablePrototype::self(VM& vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -80,8 +72,14 @@
</span><span class="cx"> return getDOMPrototype<JSTestGenerateIsReachable>(vm, globalObject);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-const ClassInfo JSTestGenerateIsReachable::s_info = { "TestGenerateIsReachable", &Base::s_info, &JSTestGenerateIsReachableTable, 0 , CREATE_METHOD_TABLE(JSTestGenerateIsReachable) };
</del><ins>+bool JSTestGenerateIsReachablePrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
+{
+ JSTestGenerateIsReachablePrototype* thisObject = jsCast<JSTestGenerateIsReachablePrototype*>(object);
+ return getStaticPropertySlot<JSTestGenerateIsReachablePrototype, JSObject>(exec, JSTestGenerateIsReachablePrototypeTable, thisObject, propertyName, slot);
+}
</ins><span class="cx">
</span><ins>+const ClassInfo JSTestGenerateIsReachable::s_info = { "TestGenerateIsReachable", &Base::s_info, 0, 0 , CREATE_METHOD_TABLE(JSTestGenerateIsReachable) };
+
</ins><span class="cx"> JSTestGenerateIsReachable::JSTestGenerateIsReachable(Structure* structure, JSDOMGlobalObject* globalObject, PassRefPtr<TestGenerateIsReachable> impl)
</span><span class="cx"> : JSDOMWrapper(structure, globalObject)
</span><span class="cx"> , m_impl(impl.leakRef())
</span><span class="lines">@@ -114,12 +112,14 @@
</span><span class="cx"> {
</span><span class="cx"> JSTestGenerateIsReachable* thisObject = jsCast<JSTestGenerateIsReachable*>(object);
</span><span class="cx"> ASSERT_GC_OBJECT_INHERITS(thisObject, info());
</span><del>- return getStaticValueSlot<JSTestGenerateIsReachable, Base>(exec, JSTestGenerateIsReachableTable, thisObject, propertyName, slot);
</del><ins>+ return Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-EncodedJSValue jsTestGenerateIsReachableConstructor(ExecState* exec, JSObject*, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsTestGenerateIsReachableConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName)
</ins><span class="cx"> {
</span><del>- JSTestGenerateIsReachable* domObject = jsDynamicCast<JSTestGenerateIsReachable*>(JSValue::decode(thisValue));
</del><ins>+ UNUSED_PARAM(baseValue);
+ UNUSED_PARAM(thisValue);
+ JSTestGenerateIsReachablePrototype* domObject = jsDynamicCast<JSTestGenerateIsReachablePrototype*>(baseValue);
</ins><span class="cx"> if (!domObject)
</span><span class="cx"> return throwVMTypeError(exec);
</span><span class="cx"> return JSValue::encode(JSTestGenerateIsReachable::getConstructor(exec->vm(), domObject->globalObject()));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachableh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.h (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.h        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.h        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -102,6 +102,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> DECLARE_INFO;
</span><ins>+ static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&);
</ins><span class="cx"> static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
</span><span class="cx"> {
</span><span class="cx"> return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
</span><span class="lines">@@ -110,7 +111,7 @@
</span><span class="cx"> private:
</span><span class="cx"> JSTestGenerateIsReachablePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure) : JSC::JSNonFinalObject(vm, structure) { }
</span><span class="cx"> protected:
</span><del>- static const unsigned StructureFlags = Base::StructureFlags;
</del><ins>+ static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | Base::StructureFlags;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> class JSTestGenerateIsReachableConstructor : public DOMConstructorObject {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -52,34 +52,15 @@
</span><span class="cx"> static const HashTableValue JSTestInterfaceTableValues[] =
</span><span class="cx"> {
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>- { "implementsStr1", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceImplementsStr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
-#endif
-#if ENABLE(Condition22) || ENABLE(Condition23)
- { "implementsStr2", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceImplementsStr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceImplementsStr2) },
-#endif
-#if ENABLE(Condition22) || ENABLE(Condition23)
</del><span class="cx"> { "implementsStr3", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceImplementsStr3), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceImplementsStr3) },
</span><span class="cx"> #endif
</span><del>-#if ENABLE(Condition22) || ENABLE(Condition23)
- { "implementsNode", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceImplementsNode), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceImplementsNode) },
-#endif
</del><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><del>- { "supplementalStr1", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceSupplementalStr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
-#endif
-#if ENABLE(Condition11) || ENABLE(Condition12)
- { "supplementalStr2", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceSupplementalStr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceSupplementalStr2) },
-#endif
-#if ENABLE(Condition11) || ENABLE(Condition12)
</del><span class="cx"> { "supplementalStr3", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceSupplementalStr3), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceSupplementalStr3) },
</span><span class="cx"> #endif
</span><del>-#if ENABLE(Condition11) || ENABLE(Condition12)
- { "supplementalNode", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceSupplementalNode), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceSupplementalNode) },
-#endif
- { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</del><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-static const HashTable JSTestInterfaceTable = { 33, 31, true, JSTestInterfaceTableValues, 0 };
</del><ins>+static const HashTable JSTestInterfaceTable = { 4, 3, true, JSTestInterfaceTableValues, 0 };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestInterfaceConstructorTableValues[] =
</span><span class="lines">@@ -187,7 +168,26 @@
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestInterfacePrototypeTableValues[] =
</span><span class="cx"> {
</span><ins>+ { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</ins><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><ins>+ { "implementsStr1", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceImplementsStr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+#endif
+#if ENABLE(Condition22) || ENABLE(Condition23)
+ { "implementsStr2", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceImplementsStr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceImplementsStr2) },
+#endif
+#if ENABLE(Condition22) || ENABLE(Condition23)
+ { "implementsNode", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceImplementsNode), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceImplementsNode) },
+#endif
+#if ENABLE(Condition11) || ENABLE(Condition12)
+ { "supplementalStr1", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceSupplementalStr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+#endif
+#if ENABLE(Condition11) || ENABLE(Condition12)
+ { "supplementalStr2", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceSupplementalStr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceSupplementalStr2) },
+#endif
+#if ENABLE(Condition11) || ENABLE(Condition12)
+ { "supplementalNode", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceSupplementalNode), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestInterfaceSupplementalNode) },
+#endif
+#if ENABLE(Condition22) || ENABLE(Condition23)
</ins><span class="cx"> { "IMPLEMENTSCONSTANT1", DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestInterfaceIMPLEMENTSCONSTANT1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="lines">@@ -220,7 +220,7 @@
</span><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-static const HashTable JSTestInterfacePrototypeTable = { 34, 31, true, JSTestInterfacePrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestInterfacePrototypeTable = { 65, 63, true, JSTestInterfacePrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestInterfacePrototype::s_info = { "TestInterfacePrototype", &Base::s_info, &JSTestInterfacePrototypeTable, 0, CREATE_METHOD_TABLE(JSTestInterfacePrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestInterfacePrototype::self(VM& vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -433,9 +433,11 @@
</span><span class="cx">
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-EncodedJSValue jsTestInterfaceConstructor(ExecState* exec, JSObject*, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsTestInterfaceConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName)
</ins><span class="cx"> {
</span><del>- JSTestInterface* domObject = jsDynamicCast<JSTestInterface*>(JSValue::decode(thisValue));
</del><ins>+ UNUSED_PARAM(baseValue);
+ UNUSED_PARAM(thisValue);
+ JSTestInterfacePrototype* domObject = jsDynamicCast<JSTestInterfacePrototype*>(baseValue);
</ins><span class="cx"> if (!domObject)
</span><span class="cx"> return throwVMTypeError(exec);
</span><span class="cx"> return JSValue::encode(JSTestInterface::getConstructor(exec->vm(), domObject->globalObject()));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -32,15 +32,6 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-/* Hash table */
-
-static const HashTableValue JSTestMediaQueryListListenerTableValues[] =
-{
- { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestMediaQueryListListenerConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { 0, 0, NoIntrinsic, 0, 0 }
-};
-
-static const HashTable JSTestMediaQueryListListenerTable = { 2, 1, true, JSTestMediaQueryListListenerTableValues, 0 };
</del><span class="cx"> /* Hash table for constructor */
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestMediaQueryListListenerConstructorTableValues[] =
</span><span class="lines">@@ -73,11 +64,12 @@
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestMediaQueryListListenerPrototypeTableValues[] =
</span><span class="cx"> {
</span><ins>+ { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestMediaQueryListListenerConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</ins><span class="cx"> { "method", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestMediaQueryListListenerPrototypeFunctionMethod), (intptr_t) (1) },
</span><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-static const HashTable JSTestMediaQueryListListenerPrototypeTable = { 2, 1, false, JSTestMediaQueryListListenerPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestMediaQueryListListenerPrototypeTable = { 4, 3, true, JSTestMediaQueryListListenerPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestMediaQueryListListenerPrototype::s_info = { "TestMediaQueryListListenerPrototype", &Base::s_info, &JSTestMediaQueryListListenerPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestMediaQueryListListenerPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestMediaQueryListListenerPrototype::self(VM& vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -88,10 +80,10 @@
</span><span class="cx"> bool JSTestMediaQueryListListenerPrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
</span><span class="cx"> {
</span><span class="cx"> JSTestMediaQueryListListenerPrototype* thisObject = jsCast<JSTestMediaQueryListListenerPrototype*>(object);
</span><del>- return getStaticFunctionSlot<JSObject>(exec, JSTestMediaQueryListListenerPrototypeTable, thisObject, propertyName, slot);
</del><ins>+ return getStaticPropertySlot<JSTestMediaQueryListListenerPrototype, JSObject>(exec, JSTestMediaQueryListListenerPrototypeTable, thisObject, propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-const ClassInfo JSTestMediaQueryListListener::s_info = { "TestMediaQueryListListener", &Base::s_info, &JSTestMediaQueryListListenerTable, 0 , CREATE_METHOD_TABLE(JSTestMediaQueryListListener) };
</del><ins>+const ClassInfo JSTestMediaQueryListListener::s_info = { "TestMediaQueryListListener", &Base::s_info, 0, 0 , CREATE_METHOD_TABLE(JSTestMediaQueryListListener) };
</ins><span class="cx">
</span><span class="cx"> JSTestMediaQueryListListener::JSTestMediaQueryListListener(Structure* structure, JSDOMGlobalObject* globalObject, PassRefPtr<TestMediaQueryListListener> impl)
</span><span class="cx"> : JSDOMWrapper(structure, globalObject)
</span><span class="lines">@@ -125,12 +117,14 @@
</span><span class="cx"> {
</span><span class="cx"> JSTestMediaQueryListListener* thisObject = jsCast<JSTestMediaQueryListListener*>(object);
</span><span class="cx"> ASSERT_GC_OBJECT_INHERITS(thisObject, info());
</span><del>- return getStaticValueSlot<JSTestMediaQueryListListener, Base>(exec, JSTestMediaQueryListListenerTable, thisObject, propertyName, slot);
</del><ins>+ return Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-EncodedJSValue jsTestMediaQueryListListenerConstructor(ExecState* exec, JSObject*, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsTestMediaQueryListListenerConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName)
</ins><span class="cx"> {
</span><del>- JSTestMediaQueryListListener* domObject = jsDynamicCast<JSTestMediaQueryListListener*>(JSValue::decode(thisValue));
</del><ins>+ UNUSED_PARAM(baseValue);
+ UNUSED_PARAM(thisValue);
+ JSTestMediaQueryListListenerPrototype* domObject = jsDynamicCast<JSTestMediaQueryListListenerPrototype*>(baseValue);
</ins><span class="cx"> if (!domObject)
</span><span class="cx"> return throwVMTypeError(exec);
</span><span class="cx"> return JSValue::encode(JSTestMediaQueryListListener::getConstructor(exec->vm(), domObject->globalObject()));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNamedConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -33,15 +33,6 @@
</span><span class="cx">
</span><span class="cx"> /* Hash table for constructor */
</span><span class="cx">
</span><del>-static const HashTableValue JSTestNamedConstructorTableValues[] =
-{
- { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestNamedConstructorConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { 0, 0, NoIntrinsic, 0, 0 }
-};
-
-static const HashTable JSTestNamedConstructorTable = { 2, 1, true, JSTestNamedConstructorTableValues, 0 };
-/* Hash table for constructor */
-
</del><span class="cx"> static const HashTableValue JSTestNamedConstructorConstructorTableValues[] =
</span><span class="cx"> {
</span><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="lines">@@ -116,10 +107,11 @@
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestNamedConstructorPrototypeTableValues[] =
</span><span class="cx"> {
</span><ins>+ { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestNamedConstructorConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</ins><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-static const HashTable JSTestNamedConstructorPrototypeTable = { 1, 0, false, JSTestNamedConstructorPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestNamedConstructorPrototypeTable = { 2, 1, true, JSTestNamedConstructorPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestNamedConstructorPrototype::s_info = { "TestNamedConstructorPrototype", &Base::s_info, &JSTestNamedConstructorPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestNamedConstructorPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestNamedConstructorPrototype::self(VM& vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -127,8 +119,14 @@
</span><span class="cx"> return getDOMPrototype<JSTestNamedConstructor>(vm, globalObject);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-const ClassInfo JSTestNamedConstructor::s_info = { "TestNamedConstructor", &Base::s_info, &JSTestNamedConstructorTable, 0 , CREATE_METHOD_TABLE(JSTestNamedConstructor) };
</del><ins>+bool JSTestNamedConstructorPrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
+{
+ JSTestNamedConstructorPrototype* thisObject = jsCast<JSTestNamedConstructorPrototype*>(object);
+ return getStaticPropertySlot<JSTestNamedConstructorPrototype, JSObject>(exec, JSTestNamedConstructorPrototypeTable, thisObject, propertyName, slot);
+}
</ins><span class="cx">
</span><ins>+const ClassInfo JSTestNamedConstructor::s_info = { "TestNamedConstructor", &Base::s_info, 0, 0 , CREATE_METHOD_TABLE(JSTestNamedConstructor) };
+
</ins><span class="cx"> JSTestNamedConstructor::JSTestNamedConstructor(Structure* structure, JSDOMGlobalObject* globalObject, PassRefPtr<TestNamedConstructor> impl)
</span><span class="cx"> : JSDOMWrapper(structure, globalObject)
</span><span class="cx"> , m_impl(impl.leakRef())
</span><span class="lines">@@ -161,12 +159,14 @@
</span><span class="cx"> {
</span><span class="cx"> JSTestNamedConstructor* thisObject = jsCast<JSTestNamedConstructor*>(object);
</span><span class="cx"> ASSERT_GC_OBJECT_INHERITS(thisObject, info());
</span><del>- return getStaticValueSlot<JSTestNamedConstructor, Base>(exec, JSTestNamedConstructorTable, thisObject, propertyName, slot);
</del><ins>+ return Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-EncodedJSValue jsTestNamedConstructorConstructor(ExecState* exec, JSObject*, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsTestNamedConstructorConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName)
</ins><span class="cx"> {
</span><del>- JSTestNamedConstructor* domObject = jsDynamicCast<JSTestNamedConstructor*>(JSValue::decode(thisValue));
</del><ins>+ UNUSED_PARAM(baseValue);
+ UNUSED_PARAM(thisValue);
+ JSTestNamedConstructorPrototype* domObject = jsDynamicCast<JSTestNamedConstructorPrototype*>(baseValue);
</ins><span class="cx"> if (!domObject)
</span><span class="cx"> return throwVMTypeError(exec);
</span><span class="cx"> return JSValue::encode(JSTestNamedConstructor::getConstructor(exec->vm(), domObject->globalObject()));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNamedConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.h (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.h        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.h        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -104,6 +104,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> DECLARE_INFO;
</span><ins>+ static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&);
</ins><span class="cx"> static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
</span><span class="cx"> {
</span><span class="cx"> return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
</span><span class="lines">@@ -112,7 +113,7 @@
</span><span class="cx"> private:
</span><span class="cx"> JSTestNamedConstructorPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure) : JSC::JSNonFinalObject(vm, structure) { }
</span><span class="cx"> protected:
</span><del>- static const unsigned StructureFlags = Base::StructureFlags;
</del><ins>+ static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | Base::StructureFlags;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> class JSTestNamedConstructorConstructor : public DOMConstructorObject {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -31,15 +31,6 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-/* Hash table */
-
-static const HashTableValue JSTestNodeTableValues[] =
-{
- { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestNodeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { 0, 0, NoIntrinsic, 0, 0 }
-};
-
-static const HashTable JSTestNodeTable = { 2, 1, true, JSTestNodeTableValues, 0 };
</del><span class="cx"> /* Hash table for constructor */
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestNodeConstructorTableValues[] =
</span><span class="lines">@@ -85,10 +76,11 @@
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestNodePrototypeTableValues[] =
</span><span class="cx"> {
</span><ins>+ { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestNodeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</ins><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-static const HashTable JSTestNodePrototypeTable = { 1, 0, false, JSTestNodePrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestNodePrototypeTable = { 2, 1, true, JSTestNodePrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestNodePrototype::s_info = { "TestNodePrototype", &Base::s_info, &JSTestNodePrototypeTable, 0, CREATE_METHOD_TABLE(JSTestNodePrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestNodePrototype::self(VM& vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -96,8 +88,14 @@
</span><span class="cx"> return getDOMPrototype<JSTestNode>(vm, globalObject);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-const ClassInfo JSTestNode::s_info = { "TestNode", &Base::s_info, &JSTestNodeTable, 0 , CREATE_METHOD_TABLE(JSTestNode) };
</del><ins>+bool JSTestNodePrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
+{
+ JSTestNodePrototype* thisObject = jsCast<JSTestNodePrototype*>(object);
+ return getStaticPropertySlot<JSTestNodePrototype, JSObject>(exec, JSTestNodePrototypeTable, thisObject, propertyName, slot);
+}
</ins><span class="cx">
</span><ins>+const ClassInfo JSTestNode::s_info = { "TestNode", &Base::s_info, 0, 0 , CREATE_METHOD_TABLE(JSTestNode) };
+
</ins><span class="cx"> JSTestNode::JSTestNode(Structure* structure, JSDOMGlobalObject* globalObject, PassRefPtr<TestNode> impl)
</span><span class="cx"> : JSNode(structure, globalObject, impl)
</span><span class="cx"> {
</span><span class="lines">@@ -118,12 +116,14 @@
</span><span class="cx"> {
</span><span class="cx"> JSTestNode* thisObject = jsCast<JSTestNode*>(object);
</span><span class="cx"> ASSERT_GC_OBJECT_INHERITS(thisObject, info());
</span><del>- return getStaticValueSlot<JSTestNode, Base>(exec, JSTestNodeTable, thisObject, propertyName, slot);
</del><ins>+ return Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-EncodedJSValue jsTestNodeConstructor(ExecState* exec, JSObject*, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsTestNodeConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName)
</ins><span class="cx"> {
</span><del>- JSTestNode* domObject = jsDynamicCast<JSTestNode*>(JSValue::decode(thisValue));
</del><ins>+ UNUSED_PARAM(baseValue);
+ UNUSED_PARAM(thisValue);
+ JSTestNodePrototype* domObject = jsDynamicCast<JSTestNodePrototype*>(baseValue);
</ins><span class="cx"> if (!domObject)
</span><span class="cx"> return throwVMTypeError(exec);
</span><span class="cx"> return JSValue::encode(JSTestNode::getConstructor(exec->vm(), domObject->globalObject()));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.h (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.h        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.h        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -73,6 +73,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> DECLARE_INFO;
</span><ins>+ static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&);
</ins><span class="cx"> static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
</span><span class="cx"> {
</span><span class="cx"> return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
</span><span class="lines">@@ -81,7 +82,7 @@
</span><span class="cx"> private:
</span><span class="cx"> JSTestNodePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure) : JSC::JSNonFinalObject(vm, structure) { }
</span><span class="cx"> protected:
</span><del>- static const unsigned StructureFlags = JSC::OverridesVisitChildren | Base::StructureFlags;
</del><ins>+ static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | JSC::OverridesVisitChildren | Base::StructureFlags;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> class JSTestNodeConstructor : public DOMConstructorObject {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -77,55 +77,9 @@
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestObjTableValues[] =
</span><span class="cx"> {
</span><del>- { "readOnlyLongAttr", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { "readOnlyStringAttr", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { "readOnlyTestObjAttr", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyTestObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</del><span class="cx"> { "TestSubObjEnabledBySetting", DontEnum, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjTestSubObjEnabledBySettingConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjTestSubObjEnabledBySettingConstructor) },
</span><del>- { "enumAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjEnumAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjEnumAttr) },
- { "byteAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjByteAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjByteAttr) },
- { "octetAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjOctetAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjOctetAttr) },
- { "shortAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjShortAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjShortAttr) },
- { "unsignedShortAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUnsignedShortAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUnsignedShortAttr) },
- { "longAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjLongAttr) },
- { "longLongAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjLongLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjLongLongAttr) },
- { "unsignedLongLongAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUnsignedLongLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUnsignedLongLongAttr) },
- { "stringAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttr) },
- { "testObjAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjTestObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjTestObjAttr) },
- { "XMLObjAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjXMLObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjXMLObjAttr) },
- { "create", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCreate), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjCreate) },
- { "reflectedStringAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedStringAttr) },
- { "reflectedIntegralAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedIntegralAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedIntegralAttr) },
- { "reflectedUnsignedIntegralAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedUnsignedIntegralAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedUnsignedIntegralAttr) },
- { "reflectedBooleanAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedBooleanAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedBooleanAttr) },
- { "reflectedURLAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedURLAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedURLAttr) },
- { "reflectedStringAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedStringAttr) },
- { "reflectedCustomIntegralAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomIntegralAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedCustomIntegralAttr) },
- { "reflectedCustomBooleanAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomBooleanAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedCustomBooleanAttr) },
- { "reflectedCustomURLAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomURLAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedCustomURLAttr) },
- { "typedArrayAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjTypedArrayAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjTypedArrayAttr) },
- { "attrWithGetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttrWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAttrWithGetterException) },
- { "attrWithSetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAttrWithSetterException) },
- { "stringAttrWithGetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttrWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttrWithGetterException) },
- { "stringAttrWithSetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttrWithSetterException) },
</del><span class="cx"> { "customAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCustomAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjCustomAttr) },
</span><del>- { "withScriptStateAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptStateAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptStateAttribute) },
- { "withScriptExecutionContextAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAttribute) },
- { "withScriptStateAttributeRaises", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptStateAttributeRaises), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptStateAttributeRaises) },
- { "withScriptExecutionContextAttributeRaises", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAttributeRaises), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAttributeRaises) },
- { "withScriptExecutionContextAndScriptStateAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAndScriptStateAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAndScriptStateAttribute) },
- { "withScriptExecutionContextAndScriptStateAttributeRaises", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises) },
- { "withScriptExecutionContextAndScriptStateWithSpacesAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute) },
- { "withScriptArgumentsAndCallStackAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptArgumentsAndCallStackAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptArgumentsAndCallStackAttribute) },
</del><span class="cx"> #if ENABLE(Condition1)
</span><del>- { "conditionalAttr1", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr1) },
-#endif
-#if ENABLE(Condition1) && ENABLE(Condition2)
- { "conditionalAttr2", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr2) },
-#endif
-#if ENABLE(Condition1) || ENABLE(Condition2)
- { "conditionalAttr3", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr3), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr3) },
-#endif
-#if ENABLE(Condition1)
</del><span class="cx"> { "conditionalAttr4", DontEnum, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr4Constructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr4Constructor) },
</span><span class="cx"> #endif
</span><span class="cx"> #if ENABLE(Condition1) && ENABLE(Condition2)
</span><span class="lines">@@ -134,31 +88,11 @@
</span><span class="cx"> #if ENABLE(Condition1) || ENABLE(Condition2)
</span><span class="cx"> { "conditionalAttr6", DontEnum, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr6Constructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr6Constructor) },
</span><span class="cx"> #endif
</span><del>- { "cachedAttribute1", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCachedAttribute1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { "cachedAttribute2", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCachedAttribute2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { "anyAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAnyAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAnyAttribute) },
</del><span class="cx"> { "contentDocument", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjContentDocument), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</span><del>- { "mutablePoint", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjMutablePoint), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjMutablePoint) },
- { "immutablePoint", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjImmutablePoint), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjImmutablePoint) },
- { "strawberry", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStrawberry), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStrawberry) },
- { "strictFloat", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStrictFloat), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStrictFloat) },
- { "description", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjDescription), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { "id", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjId), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjId) },
- { "hash", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjHash), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { "replaceableAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReplaceableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReplaceableAttribute) },
- { "nullableDoubleAttribute", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableDoubleAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { "nullableLongAttribute", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableLongAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { "nullableBooleanAttribute", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableBooleanAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { "nullableStringAttribute", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableStringAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { "nullableLongSettableAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableLongSettableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableLongSettableAttribute) },
- { "nullableStringValue", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableStringValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableStringValue) },
- { "attribute", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { "attributeWithReservedEnumType", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttributeWithReservedEnumType), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAttributeWithReservedEnumType) },
- { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</del><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-static const HashTable JSTestObjTable = { 266, 255, true, JSTestObjTableValues, 0 };
</del><ins>+static const HashTable JSTestObjTable = { 17, 15, true, JSTestObjTableValues, 0 };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestObjConstructorTableValues[] =
</span><span class="lines">@@ -254,7 +188,73 @@
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestObjPrototypeTableValues[] =
</span><span class="cx"> {
</span><ins>+ { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "readOnlyLongAttr", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "readOnlyStringAttr", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "readOnlyTestObjAttr", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyTestObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "enumAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjEnumAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjEnumAttr) },
+ { "byteAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjByteAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjByteAttr) },
+ { "octetAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjOctetAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjOctetAttr) },
+ { "shortAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjShortAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjShortAttr) },
+ { "unsignedShortAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUnsignedShortAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUnsignedShortAttr) },
+ { "longAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjLongAttr) },
+ { "longLongAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjLongLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjLongLongAttr) },
+ { "unsignedLongLongAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUnsignedLongLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUnsignedLongLongAttr) },
+ { "stringAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttr) },
+ { "testObjAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjTestObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjTestObjAttr) },
+ { "XMLObjAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjXMLObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjXMLObjAttr) },
+ { "create", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCreate), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjCreate) },
+ { "reflectedStringAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedStringAttr) },
+ { "reflectedIntegralAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedIntegralAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedIntegralAttr) },
+ { "reflectedUnsignedIntegralAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedUnsignedIntegralAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedUnsignedIntegralAttr) },
+ { "reflectedBooleanAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedBooleanAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedBooleanAttr) },
+ { "reflectedURLAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedURLAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedURLAttr) },
+ { "reflectedStringAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedStringAttr) },
+ { "reflectedCustomIntegralAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomIntegralAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedCustomIntegralAttr) },
+ { "reflectedCustomBooleanAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomBooleanAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedCustomBooleanAttr) },
+ { "reflectedCustomURLAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomURLAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedCustomURLAttr) },
+ { "typedArrayAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjTypedArrayAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjTypedArrayAttr) },
+ { "attrWithGetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttrWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAttrWithGetterException) },
+ { "attrWithSetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAttrWithSetterException) },
+ { "stringAttrWithGetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttrWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttrWithGetterException) },
+ { "stringAttrWithSetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttrWithSetterException) },
+ { "withScriptStateAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptStateAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptStateAttribute) },
+ { "withScriptExecutionContextAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAttribute) },
+ { "withScriptStateAttributeRaises", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptStateAttributeRaises), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptStateAttributeRaises) },
+ { "withScriptExecutionContextAttributeRaises", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAttributeRaises), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAttributeRaises) },
+ { "withScriptExecutionContextAndScriptStateAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAndScriptStateAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAndScriptStateAttribute) },
+ { "withScriptExecutionContextAndScriptStateAttributeRaises", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises) },
+ { "withScriptExecutionContextAndScriptStateWithSpacesAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute) },
+ { "withScriptArgumentsAndCallStackAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptArgumentsAndCallStackAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptArgumentsAndCallStackAttribute) },
</ins><span class="cx"> #if ENABLE(Condition1)
</span><ins>+ { "conditionalAttr1", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr1) },
+#endif
+#if ENABLE(Condition1) && ENABLE(Condition2)
+ { "conditionalAttr2", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr2) },
+#endif
+#if ENABLE(Condition1) || ENABLE(Condition2)
+ { "conditionalAttr3", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr3), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr3) },
+#endif
+ { "cachedAttribute1", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCachedAttribute1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "cachedAttribute2", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCachedAttribute2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "anyAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAnyAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAnyAttribute) },
+ { "mutablePoint", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjMutablePoint), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjMutablePoint) },
+ { "immutablePoint", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjImmutablePoint), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjImmutablePoint) },
+ { "strawberry", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStrawberry), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStrawberry) },
+ { "strictFloat", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStrictFloat), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStrictFloat) },
+ { "description", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjDescription), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "id", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjId), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjId) },
+ { "hash", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjHash), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "replaceableAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReplaceableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReplaceableAttribute) },
+ { "nullableDoubleAttribute", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableDoubleAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "nullableLongAttribute", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableLongAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "nullableBooleanAttribute", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableBooleanAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "nullableStringAttribute", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableStringAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "nullableLongSettableAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableLongSettableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableLongSettableAttribute) },
+ { "nullableStringValue", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableStringValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableStringValue) },
+ { "attribute", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "attributeWithReservedEnumType", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttributeWithReservedEnumType), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAttributeWithReservedEnumType) },
+#if ENABLE(Condition1)
</ins><span class="cx"> { "CONDITIONAL_CONST", DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCONDITIONAL_CONST), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</span><span class="cx"> #endif
</span><span class="cx"> { "CONST_VALUE_0", DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCONST_VALUE_0), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</span><span class="lines">@@ -341,7 +341,7 @@
</span><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-static const HashTable JSTestObjPrototypeTable = { 267, 255, true, JSTestObjPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestObjPrototypeTable = { 530, 511, true, JSTestObjPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestObjPrototype::s_info = { "TestObjectPrototype", &Base::s_info, &JSTestObjPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestObjPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestObjPrototype::self(VM& vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -1307,9 +1307,11 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx">
</span><del>-EncodedJSValue jsTestObjConstructor(ExecState* exec, JSObject*, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsTestObjConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName)
</ins><span class="cx"> {
</span><del>- JSTestObj* domObject = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
</del><ins>+ UNUSED_PARAM(baseValue);
+ UNUSED_PARAM(thisValue);
+ JSTestObjPrototype* domObject = jsDynamicCast<JSTestObjPrototype*>(baseValue);
</ins><span class="cx"> if (!domObject)
</span><span class="cx"> return throwVMTypeError(exec);
</span><span class="cx"> return JSValue::encode(JSTestObj::getConstructor(exec->vm(), domObject->globalObject()));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -34,15 +34,6 @@
</span><span class="cx">
</span><span class="cx"> /* Hash table for constructor */
</span><span class="cx">
</span><del>-static const HashTableValue JSTestOverloadedConstructorsTableValues[] =
-{
- { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestOverloadedConstructorsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { 0, 0, NoIntrinsic, 0, 0 }
-};
-
-static const HashTable JSTestOverloadedConstructorsTable = { 2, 1, true, JSTestOverloadedConstructorsTableValues, 0 };
-/* Hash table for constructor */
-
</del><span class="cx"> static const HashTableValue JSTestOverloadedConstructorsConstructorTableValues[] =
</span><span class="cx"> {
</span><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="lines">@@ -144,10 +135,11 @@
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestOverloadedConstructorsPrototypeTableValues[] =
</span><span class="cx"> {
</span><ins>+ { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestOverloadedConstructorsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</ins><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-static const HashTable JSTestOverloadedConstructorsPrototypeTable = { 1, 0, false, JSTestOverloadedConstructorsPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestOverloadedConstructorsPrototypeTable = { 2, 1, true, JSTestOverloadedConstructorsPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestOverloadedConstructorsPrototype::s_info = { "TestOverloadedConstructorsPrototype", &Base::s_info, &JSTestOverloadedConstructorsPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestOverloadedConstructorsPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestOverloadedConstructorsPrototype::self(VM& vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -155,8 +147,14 @@
</span><span class="cx"> return getDOMPrototype<JSTestOverloadedConstructors>(vm, globalObject);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-const ClassInfo JSTestOverloadedConstructors::s_info = { "TestOverloadedConstructors", &Base::s_info, &JSTestOverloadedConstructorsTable, 0 , CREATE_METHOD_TABLE(JSTestOverloadedConstructors) };
</del><ins>+bool JSTestOverloadedConstructorsPrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
+{
+ JSTestOverloadedConstructorsPrototype* thisObject = jsCast<JSTestOverloadedConstructorsPrototype*>(object);
+ return getStaticPropertySlot<JSTestOverloadedConstructorsPrototype, JSObject>(exec, JSTestOverloadedConstructorsPrototypeTable, thisObject, propertyName, slot);
+}
</ins><span class="cx">
</span><ins>+const ClassInfo JSTestOverloadedConstructors::s_info = { "TestOverloadedConstructors", &Base::s_info, 0, 0 , CREATE_METHOD_TABLE(JSTestOverloadedConstructors) };
+
</ins><span class="cx"> JSTestOverloadedConstructors::JSTestOverloadedConstructors(Structure* structure, JSDOMGlobalObject* globalObject, PassRefPtr<TestOverloadedConstructors> impl)
</span><span class="cx"> : JSDOMWrapper(structure, globalObject)
</span><span class="cx"> , m_impl(impl.leakRef())
</span><span class="lines">@@ -189,12 +187,14 @@
</span><span class="cx"> {
</span><span class="cx"> JSTestOverloadedConstructors* thisObject = jsCast<JSTestOverloadedConstructors*>(object);
</span><span class="cx"> ASSERT_GC_OBJECT_INHERITS(thisObject, info());
</span><del>- return getStaticValueSlot<JSTestOverloadedConstructors, Base>(exec, JSTestOverloadedConstructorsTable, thisObject, propertyName, slot);
</del><ins>+ return Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-EncodedJSValue jsTestOverloadedConstructorsConstructor(ExecState* exec, JSObject*, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsTestOverloadedConstructorsConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName)
</ins><span class="cx"> {
</span><del>- JSTestOverloadedConstructors* domObject = jsDynamicCast<JSTestOverloadedConstructors*>(JSValue::decode(thisValue));
</del><ins>+ UNUSED_PARAM(baseValue);
+ UNUSED_PARAM(thisValue);
+ JSTestOverloadedConstructorsPrototype* domObject = jsDynamicCast<JSTestOverloadedConstructorsPrototype*>(baseValue);
</ins><span class="cx"> if (!domObject)
</span><span class="cx"> return throwVMTypeError(exec);
</span><span class="cx"> return JSValue::encode(JSTestOverloadedConstructors::getConstructor(exec->vm(), domObject->globalObject()));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.h (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.h        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.h        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -102,6 +102,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> DECLARE_INFO;
</span><ins>+ static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&);
</ins><span class="cx"> static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
</span><span class="cx"> {
</span><span class="cx"> return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
</span><span class="lines">@@ -110,7 +111,7 @@
</span><span class="cx"> private:
</span><span class="cx"> JSTestOverloadedConstructorsPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure) : JSC::JSNonFinalObject(vm, structure) { }
</span><span class="cx"> protected:
</span><del>- static const unsigned StructureFlags = Base::StructureFlags;
</del><ins>+ static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | Base::StructureFlags;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> class JSTestOverloadedConstructorsConstructor : public DOMConstructorObject {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -35,20 +35,6 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-/* Hash table */
-
-static const HashTableValue JSTestSerializedScriptValueInterfaceTableValues[] =
-{
- { "value", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializedScriptValueInterfaceValue) },
- { "readonlyValue", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceReadonlyValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { "cachedValue", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceCachedValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializedScriptValueInterfaceCachedValue) },
- { "ports", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfacePorts), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { "cachedReadonlyValue", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceCachedReadonlyValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { 0, 0, NoIntrinsic, 0, 0 }
-};
-
-static const HashTable JSTestSerializedScriptValueInterfaceTable = { 17, 15, true, JSTestSerializedScriptValueInterfaceTableValues, 0 };
</del><span class="cx"> /* Hash table for constructor */
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestSerializedScriptValueInterfaceConstructorTableValues[] =
</span><span class="lines">@@ -81,10 +67,16 @@
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestSerializedScriptValueInterfacePrototypeTableValues[] =
</span><span class="cx"> {
</span><ins>+ { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "value", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializedScriptValueInterfaceValue) },
+ { "readonlyValue", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceReadonlyValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "cachedValue", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceCachedValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestSerializedScriptValueInterfaceCachedValue) },
+ { "ports", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfacePorts), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "cachedReadonlyValue", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestSerializedScriptValueInterfaceCachedReadonlyValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</ins><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-static const HashTable JSTestSerializedScriptValueInterfacePrototypeTable = { 1, 0, false, JSTestSerializedScriptValueInterfacePrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestSerializedScriptValueInterfacePrototypeTable = { 17, 15, true, JSTestSerializedScriptValueInterfacePrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestSerializedScriptValueInterfacePrototype::s_info = { "TestSerializedScriptValueInterfacePrototype", &Base::s_info, &JSTestSerializedScriptValueInterfacePrototypeTable, 0, CREATE_METHOD_TABLE(JSTestSerializedScriptValueInterfacePrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestSerializedScriptValueInterfacePrototype::self(VM& vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -92,8 +84,14 @@
</span><span class="cx"> return getDOMPrototype<JSTestSerializedScriptValueInterface>(vm, globalObject);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-const ClassInfo JSTestSerializedScriptValueInterface::s_info = { "TestSerializedScriptValueInterface", &Base::s_info, &JSTestSerializedScriptValueInterfaceTable, 0 , CREATE_METHOD_TABLE(JSTestSerializedScriptValueInterface) };
</del><ins>+bool JSTestSerializedScriptValueInterfacePrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
+{
+ JSTestSerializedScriptValueInterfacePrototype* thisObject = jsCast<JSTestSerializedScriptValueInterfacePrototype*>(object);
+ return getStaticPropertySlot<JSTestSerializedScriptValueInterfacePrototype, JSObject>(exec, JSTestSerializedScriptValueInterfacePrototypeTable, thisObject, propertyName, slot);
+}
</ins><span class="cx">
</span><ins>+const ClassInfo JSTestSerializedScriptValueInterface::s_info = { "TestSerializedScriptValueInterface", &Base::s_info, 0, 0 , CREATE_METHOD_TABLE(JSTestSerializedScriptValueInterface) };
+
</ins><span class="cx"> JSTestSerializedScriptValueInterface::JSTestSerializedScriptValueInterface(Structure* structure, JSDOMGlobalObject* globalObject, PassRefPtr<TestSerializedScriptValueInterface> impl)
</span><span class="cx"> : JSDOMWrapper(structure, globalObject)
</span><span class="cx"> , m_impl(impl.leakRef())
</span><span class="lines">@@ -126,7 +124,7 @@
</span><span class="cx"> {
</span><span class="cx"> JSTestSerializedScriptValueInterface* thisObject = jsCast<JSTestSerializedScriptValueInterface*>(object);
</span><span class="cx"> ASSERT_GC_OBJECT_INHERITS(thisObject, info());
</span><del>- return getStaticValueSlot<JSTestSerializedScriptValueInterface, Base>(exec, JSTestSerializedScriptValueInterfaceTable, thisObject, propertyName, slot);
</del><ins>+ return Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> EncodedJSValue jsTestSerializedScriptValueInterfaceValue(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
</span><span class="lines">@@ -200,9 +198,11 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx">
</span><del>-EncodedJSValue jsTestSerializedScriptValueInterfaceConstructor(ExecState* exec, JSObject*, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsTestSerializedScriptValueInterfaceConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName)
</ins><span class="cx"> {
</span><del>- JSTestSerializedScriptValueInterface* domObject = jsDynamicCast<JSTestSerializedScriptValueInterface*>(JSValue::decode(thisValue));
</del><ins>+ UNUSED_PARAM(baseValue);
+ UNUSED_PARAM(thisValue);
+ JSTestSerializedScriptValueInterfacePrototype* domObject = jsDynamicCast<JSTestSerializedScriptValueInterfacePrototype*>(baseValue);
</ins><span class="cx"> if (!domObject)
</span><span class="cx"> return throwVMTypeError(exec);
</span><span class="cx"> return JSValue::encode(JSTestSerializedScriptValueInterface::getConstructor(exec->vm(), domObject->globalObject()));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -108,6 +108,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> DECLARE_INFO;
</span><ins>+ static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&);
</ins><span class="cx"> static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
</span><span class="cx"> {
</span><span class="cx"> return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
</span><span class="lines">@@ -116,7 +117,7 @@
</span><span class="cx"> private:
</span><span class="cx"> JSTestSerializedScriptValueInterfacePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure) : JSC::JSNonFinalObject(vm, structure) { }
</span><span class="cx"> protected:
</span><del>- static const unsigned StructureFlags = JSC::OverridesVisitChildren | Base::StructureFlags;
</del><ins>+ static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | JSC::OverridesVisitChildren | Base::StructureFlags;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> class JSTestSerializedScriptValueInterfaceConstructor : public DOMConstructorObject {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -47,17 +47,10 @@
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestTypedefsTableValues[] =
</span><span class="cx"> {
</span><del>- { "unsignedLongLongAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsUnsignedLongLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsUnsignedLongLongAttr) },
- { "immutableSerializedScriptValue", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsImmutableSerializedScriptValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsImmutableSerializedScriptValue) },
- { "attrWithGetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsAttrWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsAttrWithGetterException) },
- { "attrWithSetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsAttrWithSetterException) },
- { "stringAttrWithGetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsStringAttrWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsStringAttrWithGetterException) },
- { "stringAttrWithSetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsStringAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsStringAttrWithSetterException) },
- { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</del><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-static const HashTable JSTestTypedefsTable = { 18, 15, true, JSTestTypedefsTableValues, 0 };
</del><ins>+static const HashTable JSTestTypedefsTable = { 2, 1, false, JSTestTypedefsTableValues, 0 };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestTypedefsConstructorTableValues[] =
</span><span class="lines">@@ -112,6 +105,13 @@
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSTestTypedefsPrototypeTableValues[] =
</span><span class="cx"> {
</span><ins>+ { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "unsignedLongLongAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsUnsignedLongLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsUnsignedLongLongAttr) },
+ { "immutableSerializedScriptValue", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsImmutableSerializedScriptValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsImmutableSerializedScriptValue) },
+ { "attrWithGetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsAttrWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsAttrWithGetterException) },
+ { "attrWithSetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsAttrWithSetterException) },
+ { "stringAttrWithGetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsStringAttrWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsStringAttrWithGetterException) },
+ { "stringAttrWithSetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestTypedefsStringAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestTypedefsStringAttrWithSetterException) },
</ins><span class="cx"> { "func", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestTypedefsPrototypeFunctionFunc), (intptr_t) (0) },
</span><span class="cx"> { "setShadow", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestTypedefsPrototypeFunctionSetShadow), (intptr_t) (3) },
</span><span class="cx"> { "methodWithSequenceArg", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestTypedefsPrototypeFunctionMethodWithSequenceArg), (intptr_t) (1) },
</span><span class="lines">@@ -125,7 +125,7 @@
</span><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-static const HashTable JSTestTypedefsPrototypeTable = { 33, 31, false, JSTestTypedefsPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestTypedefsPrototypeTable = { 66, 63, true, JSTestTypedefsPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestTypedefsPrototype::s_info = { "TestTypedefsPrototype", &Base::s_info, &JSTestTypedefsPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestTypedefsPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestTypedefsPrototype::self(VM& vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -136,7 +136,7 @@
</span><span class="cx"> bool JSTestTypedefsPrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
</span><span class="cx"> {
</span><span class="cx"> JSTestTypedefsPrototype* thisObject = jsCast<JSTestTypedefsPrototype*>(object);
</span><del>- return getStaticFunctionSlot<JSObject>(exec, JSTestTypedefsPrototypeTable, thisObject, propertyName, slot);
</del><ins>+ return getStaticPropertySlot<JSTestTypedefsPrototype, JSObject>(exec, JSTestTypedefsPrototypeTable, thisObject, propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> const ClassInfo JSTestTypedefs::s_info = { "TestTypedefs", &Base::s_info, &JSTestTypedefsTable, 0 , CREATE_METHOD_TABLE(JSTestTypedefs) };
</span><span class="lines">@@ -266,9 +266,11 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx">
</span><del>-EncodedJSValue jsTestTypedefsConstructor(ExecState* exec, JSObject*, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsTestTypedefsConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName)
</ins><span class="cx"> {
</span><del>- JSTestTypedefs* domObject = jsDynamicCast<JSTestTypedefs*>(JSValue::decode(thisValue));
</del><ins>+ UNUSED_PARAM(baseValue);
+ UNUSED_PARAM(thisValue);
+ JSTestTypedefsPrototype* domObject = jsDynamicCast<JSTestTypedefsPrototype*>(baseValue);
</ins><span class="cx"> if (!domObject)
</span><span class="cx"> return throwVMTypeError(exec);
</span><span class="cx"> return JSValue::encode(JSTestTypedefs::getConstructor(exec->vm(), domObject->globalObject()));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSattributecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -30,16 +30,6 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-/* Hash table */
-
-static const HashTableValue JSattributeTableValues[] =
-{
- { "readonly", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsattributeReadonly), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsattributeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { 0, 0, NoIntrinsic, 0, 0 }
-};
-
-static const HashTable JSattributeTable = { 4, 3, true, JSattributeTableValues, 0 };
</del><span class="cx"> /* Hash table for constructor */
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSattributeConstructorTableValues[] =
</span><span class="lines">@@ -72,10 +62,12 @@
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSattributePrototypeTableValues[] =
</span><span class="cx"> {
</span><ins>+ { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsattributeConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
+ { "readonly", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsattributeReadonly), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</ins><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-static const HashTable JSattributePrototypeTable = { 1, 0, false, JSattributePrototypeTableValues, 0 };
</del><ins>+static const HashTable JSattributePrototypeTable = { 4, 3, true, JSattributePrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSattributePrototype::s_info = { "attributePrototype", &Base::s_info, &JSattributePrototypeTable, 0, CREATE_METHOD_TABLE(JSattributePrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSattributePrototype::self(VM& vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -83,8 +75,14 @@
</span><span class="cx"> return getDOMPrototype<JSattribute>(vm, globalObject);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-const ClassInfo JSattribute::s_info = { "attribute", &Base::s_info, &JSattributeTable, 0 , CREATE_METHOD_TABLE(JSattribute) };
</del><ins>+bool JSattributePrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
+{
+ JSattributePrototype* thisObject = jsCast<JSattributePrototype*>(object);
+ return getStaticPropertySlot<JSattributePrototype, JSObject>(exec, JSattributePrototypeTable, thisObject, propertyName, slot);
+}
</ins><span class="cx">
</span><ins>+const ClassInfo JSattribute::s_info = { "attribute", &Base::s_info, 0, 0 , CREATE_METHOD_TABLE(JSattribute) };
+
</ins><span class="cx"> JSattribute::JSattribute(Structure* structure, JSDOMGlobalObject* globalObject, PassRefPtr<attribute> impl)
</span><span class="cx"> : JSDOMWrapper(structure, globalObject)
</span><span class="cx"> , m_impl(impl.leakRef())
</span><span class="lines">@@ -117,7 +115,7 @@
</span><span class="cx"> {
</span><span class="cx"> JSattribute* thisObject = jsCast<JSattribute*>(object);
</span><span class="cx"> ASSERT_GC_OBJECT_INHERITS(thisObject, info());
</span><del>- return getStaticValueSlot<JSattribute, Base>(exec, JSattributeTable, thisObject, propertyName, slot);
</del><ins>+ return Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> EncodedJSValue jsattributeReadonly(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
</span><span class="lines">@@ -133,9 +131,11 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx">
</span><del>-EncodedJSValue jsattributeConstructor(ExecState* exec, JSObject*, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsattributeConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName)
</ins><span class="cx"> {
</span><del>- JSattribute* domObject = jsDynamicCast<JSattribute*>(JSValue::decode(thisValue));
</del><ins>+ UNUSED_PARAM(baseValue);
+ UNUSED_PARAM(thisValue);
+ JSattributePrototype* domObject = jsDynamicCast<JSattributePrototype*>(baseValue);
</ins><span class="cx"> if (!domObject)
</span><span class="cx"> return throwVMTypeError(exec);
</span><span class="cx"> return JSValue::encode(JSattribute::getConstructor(exec->vm(), domObject->globalObject()));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSattributeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -102,6 +102,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> DECLARE_INFO;
</span><ins>+ static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&);
</ins><span class="cx"> static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
</span><span class="cx"> {
</span><span class="cx"> return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
</span><span class="lines">@@ -110,7 +111,7 @@
</span><span class="cx"> private:
</span><span class="cx"> JSattributePrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure) : JSC::JSNonFinalObject(vm, structure) { }
</span><span class="cx"> protected:
</span><del>- static const unsigned StructureFlags = Base::StructureFlags;
</del><ins>+ static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | Base::StructureFlags;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> class JSattributeConstructor : public DOMConstructorObject {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSreadonlycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -28,15 +28,6 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-/* Hash table */
-
-static const HashTableValue JSreadonlyTableValues[] =
-{
- { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsreadonlyConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
- { 0, 0, NoIntrinsic, 0, 0 }
-};
-
-static const HashTable JSreadonlyTable = { 2, 1, true, JSreadonlyTableValues, 0 };
</del><span class="cx"> /* Hash table for constructor */
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSreadonlyConstructorTableValues[] =
</span><span class="lines">@@ -69,10 +60,11 @@
</span><span class="cx">
</span><span class="cx"> static const HashTableValue JSreadonlyPrototypeTableValues[] =
</span><span class="cx"> {
</span><ins>+ { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsreadonlyConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
</ins><span class="cx"> { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx">
</span><del>-static const HashTable JSreadonlyPrototypeTable = { 1, 0, false, JSreadonlyPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSreadonlyPrototypeTable = { 2, 1, true, JSreadonlyPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSreadonlyPrototype::s_info = { "readonlyPrototype", &Base::s_info, &JSreadonlyPrototypeTable, 0, CREATE_METHOD_TABLE(JSreadonlyPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSreadonlyPrototype::self(VM& vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -80,8 +72,14 @@
</span><span class="cx"> return getDOMPrototype<JSreadonly>(vm, globalObject);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-const ClassInfo JSreadonly::s_info = { "readonly", &Base::s_info, &JSreadonlyTable, 0 , CREATE_METHOD_TABLE(JSreadonly) };
</del><ins>+bool JSreadonlyPrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
+{
+ JSreadonlyPrototype* thisObject = jsCast<JSreadonlyPrototype*>(object);
+ return getStaticPropertySlot<JSreadonlyPrototype, JSObject>(exec, JSreadonlyPrototypeTable, thisObject, propertyName, slot);
+}
</ins><span class="cx">
</span><ins>+const ClassInfo JSreadonly::s_info = { "readonly", &Base::s_info, 0, 0 , CREATE_METHOD_TABLE(JSreadonly) };
+
</ins><span class="cx"> JSreadonly::JSreadonly(Structure* structure, JSDOMGlobalObject* globalObject, PassRefPtr<readonly> impl)
</span><span class="cx"> : JSDOMWrapper(structure, globalObject)
</span><span class="cx"> , m_impl(impl.leakRef())
</span><span class="lines">@@ -114,12 +112,14 @@
</span><span class="cx"> {
</span><span class="cx"> JSreadonly* thisObject = jsCast<JSreadonly*>(object);
</span><span class="cx"> ASSERT_GC_OBJECT_INHERITS(thisObject, info());
</span><del>- return getStaticValueSlot<JSreadonly, Base>(exec, JSreadonlyTable, thisObject, propertyName, slot);
</del><ins>+ return Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-EncodedJSValue jsreadonlyConstructor(ExecState* exec, JSObject*, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsreadonlyConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue thisValue, PropertyName)
</ins><span class="cx"> {
</span><del>- JSreadonly* domObject = jsDynamicCast<JSreadonly*>(JSValue::decode(thisValue));
</del><ins>+ UNUSED_PARAM(baseValue);
+ UNUSED_PARAM(thisValue);
+ JSreadonlyPrototype* domObject = jsDynamicCast<JSreadonlyPrototype*>(baseValue);
</ins><span class="cx"> if (!domObject)
</span><span class="cx"> return throwVMTypeError(exec);
</span><span class="cx"> return JSValue::encode(JSreadonly::getConstructor(exec->vm(), domObject->globalObject()));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSreadonlyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.h (163561 => 163562)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.h        2014-02-06 21:35:48 UTC (rev 163561)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.h        2014-02-06 21:53:31 UTC (rev 163562)
</span><span class="lines">@@ -102,6 +102,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> DECLARE_INFO;
</span><ins>+ static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&);
</ins><span class="cx"> static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
</span><span class="cx"> {
</span><span class="cx"> return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
</span><span class="lines">@@ -110,7 +111,7 @@
</span><span class="cx"> private:
</span><span class="cx"> JSreadonlyPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure) : JSC::JSNonFinalObject(vm, structure) { }
</span><span class="cx"> protected:
</span><del>- static const unsigned StructureFlags = Base::StructureFlags;
</del><ins>+ static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | Base::StructureFlags;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> class JSreadonlyConstructor : public DOMConstructorObject {
</span></span></pre>
</div>
</div>
</body>
</html>