<!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>[162713] 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/162713">162713</a></dd>
<dt>Author</dt> <dd>oliver@apple.com</dd>
<dt>Date</dt> <dd>2014-01-24 12:03:34 -0800 (Fri, 24 Jan 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Generic JSObject::put should handle static properties in the classinfo hierarchy
https://bugs.webkit.org/show_bug.cgi?id=127523

Reviewed by Geoffrey Garen.

Source/JavaScriptCore:

This patch makes JSObject::put correctly call static setters
defined by the ClassInfo.

To make this not clobber performance, the ClassInfo HashTable
now includes a flag to indicate that it contains setters. This
required updating the lut generator so that it tracked (and emitted)
this.

The rest of the change was making a number of the methods take
a VM rather than an ExecState*, so that Structure could set the
getter/setter flags during construction (if necessary).

This also means most objects do not need to perform a lookupPut
manually anymore, so most custom ::put's are no longer needed.
DOMWindow is the only exception as it has interesting security
related semantics.

* create_hash_table:
* interpreter/CallFrame.h:
(JSC::ExecState::arrayConstructorTable):
(JSC::ExecState::arrayPrototypeTable):
(JSC::ExecState::booleanPrototypeTable):
(JSC::ExecState::dataViewTable):
(JSC::ExecState::dateTable):
(JSC::ExecState::dateConstructorTable):
(JSC::ExecState::errorPrototypeTable):
(JSC::ExecState::globalObjectTable):
(JSC::ExecState::jsonTable):
(JSC::ExecState::numberConstructorTable):
(JSC::ExecState::numberPrototypeTable):
(JSC::ExecState::objectConstructorTable):
(JSC::ExecState::privateNamePrototypeTable):
(JSC::ExecState::regExpTable):
(JSC::ExecState::regExpConstructorTable):
(JSC::ExecState::regExpPrototypeTable):
(JSC::ExecState::stringConstructorTable):
(JSC::ExecState::promisePrototypeTable):
(JSC::ExecState::promiseConstructorTable):
* runtime/ArrayConstructor.cpp:
(JSC::ArrayConstructor::getOwnPropertySlot):
* runtime/ArrayPrototype.cpp:
(JSC::ArrayPrototype::getOwnPropertySlot):
* runtime/BooleanPrototype.cpp:
(JSC::BooleanPrototype::getOwnPropertySlot):
* runtime/ClassInfo.h:
(JSC::ClassInfo::propHashTable):
* runtime/DateConstructor.cpp:
(JSC::DateConstructor::getOwnPropertySlot):
* runtime/DatePrototype.cpp:
(JSC::DatePrototype::getOwnPropertySlot):
* runtime/ErrorPrototype.cpp:
(JSC::ErrorPrototype::getOwnPropertySlot):
* runtime/JSDataViewPrototype.cpp:
(JSC::JSDataViewPrototype::getOwnPropertySlot):
* runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::getOwnPropertySlot):
* runtime/JSONObject.cpp:
(JSC::JSONObject::getOwnPropertySlot):
* runtime/JSObject.cpp:
(JSC::JSObject::put):
(JSC::JSObject::deleteProperty):
* runtime/JSPromiseConstructor.cpp:
(JSC::JSPromiseConstructor::getOwnPropertySlot):
* runtime/JSPromisePrototype.cpp:
(JSC::JSPromisePrototype::getOwnPropertySlot):
* runtime/Lookup.h:
(JSC::HashTable::copy):
(JSC::putEntry):
(JSC::lookupPut):
* runtime/NamePrototype.cpp:
(JSC::NamePrototype::getOwnPropertySlot):
* runtime/NumberConstructor.cpp:
(JSC::NumberConstructor::getOwnPropertySlot):
* runtime/NumberConstructor.h:
* runtime/NumberPrototype.cpp:
(JSC::NumberPrototype::getOwnPropertySlot):
* runtime/ObjectConstructor.cpp:
(JSC::ObjectConstructor::getOwnPropertySlot):
* runtime/RegExpConstructor.cpp:
(JSC::RegExpConstructor::getOwnPropertySlot):
* runtime/RegExpConstructor.h:
* runtime/RegExpObject.cpp:
(JSC::RegExpObject::getOwnPropertySlot):
(JSC::RegExpObject::put):
* runtime/RegExpPrototype.cpp:
(JSC::RegExpPrototype::getOwnPropertySlot):
* runtime/StringConstructor.cpp:
(JSC::StringConstructor::getOwnPropertySlot):
* runtime/Structure.cpp:
(JSC::Structure::Structure):
(JSC::Structure::freezeTransition):
(JSC::ClassInfo::hasStaticSetterOrReadonlyProperties):

Source/WebCore:

Update the bindings generator to emit the flag indicating the presence
of setters, and remove the many (now unnecessary) put overrides.
Tested with run-jsc-benchmarks and shows neutral performance. A few of the
micro benchmarks actually get a significant performance increase which
is nice.

* bindings/js/JSDOMWindowCustom.cpp:
(WebCore::JSDOMWindow::put):
    We still need a custom call to lookupPut here in order
    to get the magic security semantics of the window object.
* bindings/scripts/CodeGeneratorJS.pm:
(hashTableAccessor):
(prototypeHashTableAccessor):
(constructorHashTableAccessor):
(GenerateImplementation):
(GenerateHashTable):
(GenerateConstructorHelperMethods):

* bindings/js/JSDOMWindowCustom.cpp:
(WebCore::JSDOMWindow::put):
* bindings/scripts/CodeGeneratorJS.pm:
(hashTableAccessor):
(prototypeHashTableAccessor):
(constructorHashTableAccessor):
(InstanceOverridesPutImplementation):
(InstanceOverridesPutDeclaration):
(GenerateHeader):
(GenerateImplementation):
(GenerateHashTable):
(GenerateConstructorHelperMethods):
* bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
* bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
* bindings/scripts/test/JS/JSTestEventConstructor.cpp:
* bindings/scripts/test/JS/JSTestEventTarget.cpp:
* bindings/scripts/test/JS/JSTestException.cpp:
* bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
* bindings/scripts/test/JS/JSTestInterface.cpp:
(WebCore::JSTestInterface::put):
* bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
* bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
* bindings/scripts/test/JS/JSTestNode.cpp:
* bindings/scripts/test/JS/JSTestObj.cpp:
* bindings/scripts/test/JS/JSTestObj.h:
* bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
* bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
* bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
* bindings/scripts/test/JS/JSTestTypedefs.cpp:
* bindings/scripts/test/JS/JSTestTypedefs.h:
* bindings/scripts/test/JS/JSattribute.cpp:
* bindings/scripts/test/JS/JSreadonly.cpp:
* html/canvas/WebGLRenderingContext.idl:
  Remove bogus attribute, as it has never been in the spec and should not
  have been added.

LayoutTests:

Yay tests!

* fast/canvas/webgl/constants.html:
  Remove incorrect constant
* js/script-tests/static-put-in-prototype-chain.js: Added.
* js/static-put-in-prototype-chain-expected.txt: Added.
* js/static-put-in-prototype-chain.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastcanvaswebglconstantshtml">trunk/LayoutTests/fast/canvas/webgl/constants.html</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorecreate_hash_table">trunk/Source/JavaScriptCore/create_hash_table</a></li>
<li><a href="#trunkSourceJavaScriptCoreinterpreterCallFrameh">trunk/Source/JavaScriptCore/interpreter/CallFrame.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeArrayConstructorcpp">trunk/Source/JavaScriptCore/runtime/ArrayConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeArrayPrototypecpp">trunk/Source/JavaScriptCore/runtime/ArrayPrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeBooleanPrototypecpp">trunk/Source/JavaScriptCore/runtime/BooleanPrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeClassInfoh">trunk/Source/JavaScriptCore/runtime/ClassInfo.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeDateConstructorcpp">trunk/Source/JavaScriptCore/runtime/DateConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeDatePrototypecpp">trunk/Source/JavaScriptCore/runtime/DatePrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeErrorPrototypecpp">trunk/Source/JavaScriptCore/runtime/ErrorPrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSDataViewPrototypecpp">trunk/Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSGlobalObjectcpp">trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSONObjectcpp">trunk/Source/JavaScriptCore/runtime/JSONObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSObjectcpp">trunk/Source/JavaScriptCore/runtime/JSObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSPromiseConstructorcpp">trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSPromisePrototypecpp">trunk/Source/JavaScriptCore/runtime/JSPromisePrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeLookuph">trunk/Source/JavaScriptCore/runtime/Lookup.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeNamePrototypecpp">trunk/Source/JavaScriptCore/runtime/NamePrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeNumberConstructorcpp">trunk/Source/JavaScriptCore/runtime/NumberConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeNumberConstructorh">trunk/Source/JavaScriptCore/runtime/NumberConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeNumberPrototypecpp">trunk/Source/JavaScriptCore/runtime/NumberPrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeObjectConstructorcpp">trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeRegExpConstructorcpp">trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeRegExpConstructorh">trunk/Source/JavaScriptCore/runtime/RegExpConstructor.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeRegExpObjectcpp">trunk/Source/JavaScriptCore/runtime/RegExpObject.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeRegExpPrototypecpp">trunk/Source/JavaScriptCore/runtime/RegExpPrototype.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeStringConstructorcpp">trunk/Source/JavaScriptCore/runtime/StringConstructor.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeStructurecpp">trunk/Source/JavaScriptCore/runtime/Structure.cpp</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMWindowCustomcpp">trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjectcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCustomNamedGettercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachablecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp</a></li>
<li><a href="#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="#trunkSourceWebCorebindingsscriptstestJSJSTestTypedefsh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSattributecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSreadonlycpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlcanvasWebGLRenderingContextidl">trunk/Source/WebCore/html/canvas/WebGLRenderingContext.idl</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsjsscripttestsstaticputinprototypechainjs">trunk/LayoutTests/js/script-tests/static-put-in-prototype-chain.js</a></li>
<li><a href="#trunkLayoutTestsjsstaticputinprototypechainexpectedtxt">trunk/LayoutTests/js/static-put-in-prototype-chain-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsstaticputinprototypechainhtml">trunk/LayoutTests/js/static-put-in-prototype-chain.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/LayoutTests/ChangeLog        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2014-01-24  Oliver Hunt  &lt;oliver@apple.com&gt;
+
+        Generic JSObject::put should handle static properties in the classinfo hierarchy
+        https://bugs.webkit.org/show_bug.cgi?id=127523
+
+        Reviewed by Geoffrey Garen.
+
+        Yay tests!
+
+        * fast/canvas/webgl/constants.html:
+          Remove incorrect constant
+        * js/script-tests/static-put-in-prototype-chain.js: Added.
+        * js/static-put-in-prototype-chain-expected.txt: Added.
+        * js/static-put-in-prototype-chain.html: Added.
+
</ins><span class="cx"> 2014-01-24  Andrzej Badowski  &lt;a.badowski@samsung.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [EFL] Add expectations for two flaky media layout tests
</span></span></pre></div>
<a id="trunkLayoutTestsfastcanvaswebglconstantshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/canvas/webgl/constants.html (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/canvas/webgl/constants.html        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/LayoutTests/fast/canvas/webgl/constants.html        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -212,7 +212,6 @@
</span><span class="cx"> INT                            : 0x1404,
</span><span class="cx"> UNSIGNED_INT                   : 0x1405,
</span><span class="cx"> FLOAT                          : 0x1406,
</span><del>-HALF_FLOAT_OES                 : 0x8D61,
</del><span class="cx">     
</span><span class="cx">     /* PixelFormat */
</span><span class="cx"> DEPTH_COMPONENT                : 0x1902,
</span></span></pre></div>
<a id="trunkLayoutTestsjsscripttestsstaticputinprototypechainjs"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/script-tests/static-put-in-prototype-chain.js (0 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/script-tests/static-put-in-prototype-chain.js                                (rev 0)
+++ trunk/LayoutTests/js/script-tests/static-put-in-prototype-chain.js        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -0,0 +1,12 @@
</span><ins>+description(&quot;This test ensures that we will call a custom setter when the setter is in the prototype chain&quot;);
+
+// The RegExp Object is a convenient constructor with a custom setter.
+// This will also test the weird behaviour in which the RegExp constructor
+// setters are expected to act on the base object (e.g. the constructor object)
+// rather than the this value.
+var testObject = {__proto__: RegExp }
+
+testObject.input = &quot;testInput&quot;
+
+shouldBe(&quot;testObject.input&quot;, &quot;'testInput'&quot;)
+shouldBe(&quot;RegExp.input&quot;, &quot;'testInput'&quot;)
</ins></span></pre></div>
<a id="trunkLayoutTestsjsstaticputinprototypechainexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/static-put-in-prototype-chain-expected.txt (0 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/static-put-in-prototype-chain-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/static-put-in-prototype-chain-expected.txt        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+This test ensures that we will call a custom setter when the setter is in the prototype chain
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS testObject.input is 'testInput'
+PASS RegExp.input is 'testInput'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsstaticputinprototypechainhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/static-put-in-prototype-chain.html (0 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/static-put-in-prototype-chain.html                                (rev 0)
+++ trunk/LayoutTests/js/static-put-in-prototype-chain.html        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;script-tests/static-put-in-prototype-chain.js&quot;&gt;&lt;/script&gt;
+&lt;script src=&quot;../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -1,3 +1,103 @@
</span><ins>+2014-01-24  Oliver Hunt  &lt;oliver@apple.com&gt;
+
+        Generic JSObject::put should handle static properties in the classinfo hierarchy
+        https://bugs.webkit.org/show_bug.cgi?id=127523
+
+        Reviewed by Geoffrey Garen.
+
+        This patch makes JSObject::put correctly call static setters
+        defined by the ClassInfo.
+
+        To make this not clobber performance, the ClassInfo HashTable
+        now includes a flag to indicate that it contains setters. This
+        required updating the lut generator so that it tracked (and emitted)
+        this.
+
+        The rest of the change was making a number of the methods take
+        a VM rather than an ExecState*, so that Structure could set the
+        getter/setter flags during construction (if necessary).
+
+        This also means most objects do not need to perform a lookupPut
+        manually anymore, so most custom ::put's are no longer needed.
+        DOMWindow is the only exception as it has interesting security
+        related semantics.
+
+        * create_hash_table:
+        * interpreter/CallFrame.h:
+        (JSC::ExecState::arrayConstructorTable):
+        (JSC::ExecState::arrayPrototypeTable):
+        (JSC::ExecState::booleanPrototypeTable):
+        (JSC::ExecState::dataViewTable):
+        (JSC::ExecState::dateTable):
+        (JSC::ExecState::dateConstructorTable):
+        (JSC::ExecState::errorPrototypeTable):
+        (JSC::ExecState::globalObjectTable):
+        (JSC::ExecState::jsonTable):
+        (JSC::ExecState::numberConstructorTable):
+        (JSC::ExecState::numberPrototypeTable):
+        (JSC::ExecState::objectConstructorTable):
+        (JSC::ExecState::privateNamePrototypeTable):
+        (JSC::ExecState::regExpTable):
+        (JSC::ExecState::regExpConstructorTable):
+        (JSC::ExecState::regExpPrototypeTable):
+        (JSC::ExecState::stringConstructorTable):
+        (JSC::ExecState::promisePrototypeTable):
+        (JSC::ExecState::promiseConstructorTable):
+        * runtime/ArrayConstructor.cpp:
+        (JSC::ArrayConstructor::getOwnPropertySlot):
+        * runtime/ArrayPrototype.cpp:
+        (JSC::ArrayPrototype::getOwnPropertySlot):
+        * runtime/BooleanPrototype.cpp:
+        (JSC::BooleanPrototype::getOwnPropertySlot):
+        * runtime/ClassInfo.h:
+        (JSC::ClassInfo::propHashTable):
+        * runtime/DateConstructor.cpp:
+        (JSC::DateConstructor::getOwnPropertySlot):
+        * runtime/DatePrototype.cpp:
+        (JSC::DatePrototype::getOwnPropertySlot):
+        * runtime/ErrorPrototype.cpp:
+        (JSC::ErrorPrototype::getOwnPropertySlot):
+        * runtime/JSDataViewPrototype.cpp:
+        (JSC::JSDataViewPrototype::getOwnPropertySlot):
+        * runtime/JSGlobalObject.cpp:
+        (JSC::JSGlobalObject::getOwnPropertySlot):
+        * runtime/JSONObject.cpp:
+        (JSC::JSONObject::getOwnPropertySlot):
+        * runtime/JSObject.cpp:
+        (JSC::JSObject::put):
+        (JSC::JSObject::deleteProperty):
+        * runtime/JSPromiseConstructor.cpp:
+        (JSC::JSPromiseConstructor::getOwnPropertySlot):
+        * runtime/JSPromisePrototype.cpp:
+        (JSC::JSPromisePrototype::getOwnPropertySlot):
+        * runtime/Lookup.h:
+        (JSC::HashTable::copy):
+        (JSC::putEntry):
+        (JSC::lookupPut):
+        * runtime/NamePrototype.cpp:
+        (JSC::NamePrototype::getOwnPropertySlot):
+        * runtime/NumberConstructor.cpp:
+        (JSC::NumberConstructor::getOwnPropertySlot):
+        * runtime/NumberConstructor.h:
+        * runtime/NumberPrototype.cpp:
+        (JSC::NumberPrototype::getOwnPropertySlot):
+        * runtime/ObjectConstructor.cpp:
+        (JSC::ObjectConstructor::getOwnPropertySlot):
+        * runtime/RegExpConstructor.cpp:
+        (JSC::RegExpConstructor::getOwnPropertySlot):
+        * runtime/RegExpConstructor.h:
+        * runtime/RegExpObject.cpp:
+        (JSC::RegExpObject::getOwnPropertySlot):
+        (JSC::RegExpObject::put):
+        * runtime/RegExpPrototype.cpp:
+        (JSC::RegExpPrototype::getOwnPropertySlot):
+        * runtime/StringConstructor.cpp:
+        (JSC::StringConstructor::getOwnPropertySlot):
+        * runtime/Structure.cpp:
+        (JSC::Structure::Structure):
+        (JSC::Structure::freezeTransition):
+        (JSC::ClassInfo::hasStaticSetterOrReadonlyProperties):
+
</ins><span class="cx"> 2014-01-24  Mark Lam  &lt;mark.lam@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Removing the need for Debugger* and m_shouldPause op_debug check.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorecreate_hash_table"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/create_hash_table (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/create_hash_table        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/create_hash_table        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -42,6 +42,8 @@
</span><span class="cx"> my @values = ();
</span><span class="cx"> my @hashes = ();
</span><span class="cx"> 
</span><ins>+my $hasSetter = &quot;false&quot;;
+
</ins><span class="cx"> my $inside = 0;
</span><span class="cx"> my $name;
</span><span class="cx"> my $pefectHashSize;
</span><span class="lines">@@ -90,7 +92,11 @@
</span><span class="cx">             #printf STDERR &quot;WARNING: Number of arguments missing for $key/$val\n&quot; if (length($param) == 0);
</span><span class="cx">         } elsif (length($att)) {
</span><span class="cx">             my $get = $val;
</span><del>-            my $put = !($att =~ m/ReadOnly/) ? &quot;set&quot; . jsc_ucfirst($val) : &quot;0&quot;;
</del><ins>+            my $put = &quot;0&quot;;
+            if (!($att =~ m/ReadOnly/)) {
+                $put = &quot;set&quot; . jsc_ucfirst($val);
+            }
+            $hasSetter = &quot;true&quot;;
</ins><span class="cx">             push(@values, { &quot;type&quot; =&gt; &quot;Property&quot;, &quot;get&quot; =&gt; $get, &quot;put&quot; =&gt; $put });
</span><span class="cx">         } else {
</span><span class="cx">             push(@values, { &quot;type&quot; =&gt; &quot;Lexer&quot;, &quot;value&quot; =&gt; $val });        
</span><span class="lines">@@ -287,6 +293,6 @@
</span><span class="cx">     print &quot;   { 0, 0, NoIntrinsic, 0, 0 }\n&quot;;
</span><span class="cx">     print &quot;};\n\n&quot;;
</span><span class="cx">     print &quot;extern const struct HashTable $name =\n&quot;;
</span><del>-    print &quot;    \{ $compactSize, $compactHashSizeMask, $nameEntries, 0 \};\n&quot;;
</del><ins>+    print &quot;    \{ $compactSize, $compactHashSizeMask, $hasSetter, $nameEntries, 0 \};\n&quot;;
</ins><span class="cx">     print &quot;} // namespace\n&quot;;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreinterpreterCallFrameh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/interpreter/CallFrame.h (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/interpreter/CallFrame.h        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/interpreter/CallFrame.h        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -84,26 +84,26 @@
</span><span class="cx"> #ifndef NDEBUG
</span><span class="cx">         void dumpCaller();
</span><span class="cx"> #endif
</span><del>-        static const HashTable&amp; arrayConstructorTable(CallFrame* callFrame) { return *callFrame-&gt;vm().arrayConstructorTable; }
-        static const HashTable&amp; arrayPrototypeTable(CallFrame* callFrame) { return *callFrame-&gt;vm().arrayPrototypeTable; }
-        static const HashTable&amp; booleanPrototypeTable(CallFrame* callFrame) { return *callFrame-&gt;vm().booleanPrototypeTable; }
-        static const HashTable&amp; dataViewTable(CallFrame* callFrame) { return *callFrame-&gt;vm().dataViewTable; }
-        static const HashTable&amp; dateTable(CallFrame* callFrame) { return *callFrame-&gt;vm().dateTable; }
-        static const HashTable&amp; dateConstructorTable(CallFrame* callFrame) { return *callFrame-&gt;vm().dateConstructorTable; }
-        static const HashTable&amp; errorPrototypeTable(CallFrame* callFrame) { return *callFrame-&gt;vm().errorPrototypeTable; }
-        static const HashTable&amp; globalObjectTable(CallFrame* callFrame) { return *callFrame-&gt;vm().globalObjectTable; }
-        static const HashTable&amp; jsonTable(CallFrame* callFrame) { return *callFrame-&gt;vm().jsonTable; }
-        static const HashTable&amp; numberConstructorTable(CallFrame* callFrame) { return *callFrame-&gt;vm().numberConstructorTable; }
-        static const HashTable&amp; numberPrototypeTable(CallFrame* callFrame) { return *callFrame-&gt;vm().numberPrototypeTable; }
-        static const HashTable&amp; objectConstructorTable(CallFrame* callFrame) { return *callFrame-&gt;vm().objectConstructorTable; }
-        static const HashTable&amp; privateNamePrototypeTable(CallFrame* callFrame) { return *callFrame-&gt;vm().privateNamePrototypeTable; }
-        static const HashTable&amp; regExpTable(CallFrame* callFrame) { return *callFrame-&gt;vm().regExpTable; }
-        static const HashTable&amp; regExpConstructorTable(CallFrame* callFrame) { return *callFrame-&gt;vm().regExpConstructorTable; }
-        static const HashTable&amp; regExpPrototypeTable(CallFrame* callFrame) { return *callFrame-&gt;vm().regExpPrototypeTable; }
-        static const HashTable&amp; stringConstructorTable(CallFrame* callFrame) { return *callFrame-&gt;vm().stringConstructorTable; }
</del><ins>+        static const HashTable&amp; arrayConstructorTable(VM&amp; vm) { return *vm.arrayConstructorTable; }
+        static const HashTable&amp; arrayPrototypeTable(VM&amp; vm) { return *vm.arrayPrototypeTable; }
+        static const HashTable&amp; booleanPrototypeTable(VM&amp; vm) { return *vm.booleanPrototypeTable; }
+        static const HashTable&amp; dataViewTable(VM&amp; vm) { return *vm.dataViewTable; }
+        static const HashTable&amp; dateTable(VM&amp; vm) { return *vm.dateTable; }
+        static const HashTable&amp; dateConstructorTable(VM&amp; vm) { return *vm.dateConstructorTable; }
+        static const HashTable&amp; errorPrototypeTable(VM&amp; vm) { return *vm.errorPrototypeTable; }
+        static const HashTable&amp; globalObjectTable(VM&amp; vm) { return *vm.globalObjectTable; }
+        static const HashTable&amp; jsonTable(VM&amp; vm) { return *vm.jsonTable; }
+        static const HashTable&amp; numberConstructorTable(VM&amp; vm) { return *vm.numberConstructorTable; }
+        static const HashTable&amp; numberPrototypeTable(VM&amp; vm) { return *vm.numberPrototypeTable; }
+        static const HashTable&amp; objectConstructorTable(VM&amp; vm) { return *vm.objectConstructorTable; }
+        static const HashTable&amp; privateNamePrototypeTable(VM&amp; vm) { return *vm.privateNamePrototypeTable; }
+        static const HashTable&amp; regExpTable(VM&amp; vm) { return *vm.regExpTable; }
+        static const HashTable&amp; regExpConstructorTable(VM&amp; vm) { return *vm.regExpConstructorTable; }
+        static const HashTable&amp; regExpPrototypeTable(VM&amp; vm) { return *vm.regExpPrototypeTable; }
+        static const HashTable&amp; stringConstructorTable(VM&amp; vm) { return *vm.stringConstructorTable; }
</ins><span class="cx"> #if ENABLE(PROMISES)
</span><del>-        static const HashTable&amp; promisePrototypeTable(CallFrame* callFrame) { return *callFrame-&gt;vm().promisePrototypeTable; }
-        static const HashTable&amp; promiseConstructorTable(CallFrame* callFrame) { return *callFrame-&gt;vm().promiseConstructorTable; }
</del><ins>+        static const HashTable&amp; promisePrototypeTable(VM&amp; vm) { return *vm.promisePrototypeTable; }
+        static const HashTable&amp; promiseConstructorTable(VM&amp; vm) { return *vm.promiseConstructorTable; }
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">         static CallFrame* create(Register* callFrameBase) { return static_cast&lt;CallFrame*&gt;(callFrameBase); }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeArrayConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ArrayConstructor.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ArrayConstructor.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/ArrayConstructor.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -68,7 +68,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool ArrayConstructor::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot &amp;slot)
</span><span class="cx"> {
</span><del>-    return getStaticFunctionSlot&lt;InternalFunction&gt;(exec, ExecState::arrayConstructorTable(exec), jsCast&lt;ArrayConstructor*&gt;(object), propertyName, slot);
</del><ins>+    return getStaticFunctionSlot&lt;InternalFunction&gt;(exec, ExecState::arrayConstructorTable(exec-&gt;vm()), jsCast&lt;ArrayConstructor*&gt;(object), propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // ------------------------------ Functions ---------------------------
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeArrayPrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ArrayPrototype.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ArrayPrototype.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/ArrayPrototype.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -144,7 +144,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool ArrayPrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><del>-    return getStaticFunctionSlot&lt;JSArray&gt;(exec, ExecState::arrayPrototypeTable(exec), jsCast&lt;ArrayPrototype*&gt;(object), propertyName, slot);
</del><ins>+    return getStaticFunctionSlot&lt;JSArray&gt;(exec, ExecState::arrayPrototypeTable(exec-&gt;vm()), jsCast&lt;ArrayPrototype*&gt;(object), propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // ------------------------------ Array Functions ----------------------------
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeBooleanPrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/BooleanPrototype.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/BooleanPrototype.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/BooleanPrototype.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -65,7 +65,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool BooleanPrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot &amp;slot)
</span><span class="cx"> {
</span><del>-    return getStaticFunctionSlot&lt;BooleanObject&gt;(exec, ExecState::booleanPrototypeTable(exec), jsCast&lt;BooleanPrototype*&gt;(object), propertyName, slot);
</del><ins>+    return getStaticFunctionSlot&lt;BooleanObject&gt;(exec, ExecState::booleanPrototypeTable(exec-&gt;vm()), jsCast&lt;BooleanPrototype*&gt;(object), propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // ------------------------------ Functions ---------------------------
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeClassInfoh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ClassInfo.h (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ClassInfo.h        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/ClassInfo.h        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -157,11 +157,19 @@
</span><span class="cx">     const HashTable* propHashTable(ExecState* exec) const
</span><span class="cx">     {
</span><span class="cx">         if (classPropHashTableGetterFunction)
</span><del>-            return &amp;classPropHashTableGetterFunction(exec);
</del><ins>+            return &amp;classPropHashTableGetterFunction(exec-&gt;vm());
</ins><span class="cx"> 
</span><span class="cx">         return staticPropHashTable;
</span><span class="cx">     }
</span><del>-        
</del><ins>+
+    const HashTable* propHashTable(VM&amp; vm) const
+    {
+        if (classPropHashTableGetterFunction)
+            return &amp;classPropHashTableGetterFunction(vm);
+
+        return staticPropHashTable;
+    }
+
</ins><span class="cx">     bool isSubClassOf(const ClassInfo* other) const
</span><span class="cx">     {
</span><span class="cx">         for (const ClassInfo* ci = this; ci; ci = ci-&gt;parentClass) {
</span><span class="lines">@@ -180,8 +188,10 @@
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    bool hasStaticSetterOrReadonlyProperties(VM&amp;) const;
+
</ins><span class="cx">     const HashTable* staticPropHashTable;
</span><del>-    typedef const HashTable&amp; (*ClassPropHashTableGetterFunction)(ExecState*);
</del><ins>+    typedef const HashTable&amp; (*ClassPropHashTableGetterFunction)(VM&amp;);
</ins><span class="cx">     const ClassPropHashTableGetterFunction classPropHashTableGetterFunction;
</span><span class="cx"> 
</span><span class="cx">     MethodTable methodTable;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeDateConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/DateConstructor.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/DateConstructor.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/DateConstructor.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -88,7 +88,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool DateConstructor::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot &amp;slot)
</span><span class="cx"> {
</span><del>-    return getStaticFunctionSlot&lt;InternalFunction&gt;(exec, ExecState::dateConstructorTable(exec), jsCast&lt;DateConstructor*&gt;(object), propertyName, slot);
</del><ins>+    return getStaticFunctionSlot&lt;InternalFunction&gt;(exec, ExecState::dateConstructorTable(exec-&gt;vm()), jsCast&lt;DateConstructor*&gt;(object), propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // ECMA 15.9.3
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeDatePrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/DatePrototype.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/DatePrototype.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/DatePrototype.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -516,7 +516,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool DatePrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><del>-    return getStaticFunctionSlot&lt;JSObject&gt;(exec, ExecState::dateTable(exec), jsCast&lt;DatePrototype*&gt;(object), propertyName, slot);
</del><ins>+    return getStaticFunctionSlot&lt;JSObject&gt;(exec, ExecState::dateTable(exec-&gt;vm()), jsCast&lt;DatePrototype*&gt;(object), propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // Functions
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeErrorPrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ErrorPrototype.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ErrorPrototype.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/ErrorPrototype.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -63,7 +63,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool ErrorPrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot &amp;slot)
</span><span class="cx"> {
</span><del>-    return getStaticFunctionSlot&lt;ErrorInstance&gt;(exec, ExecState::errorPrototypeTable(exec), jsCast&lt;ErrorPrototype*&gt;(object), propertyName, slot);
</del><ins>+    return getStaticFunctionSlot&lt;ErrorInstance&gt;(exec, ExecState::errorPrototypeTable(exec-&gt;vm()), jsCast&lt;ErrorPrototype*&gt;(object), propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // ------------------------------ Functions ---------------------------
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSDataViewPrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -87,7 +87,7 @@
</span><span class="cx">     JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><span class="cx">     return getStaticFunctionSlot&lt;JSObject&gt;(
</span><del>-        exec, ExecState::dataViewTable(exec), jsCast&lt;JSDataViewPrototype*&gt;(object),
</del><ins>+        exec, ExecState::dataViewTable(exec-&gt;vm()), jsCast&lt;JSDataViewPrototype*&gt;(object),
</ins><span class="cx">         propertyName, slot);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSGlobalObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/JSGlobalObject.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -698,7 +698,7 @@
</span><span class="cx"> bool JSGlobalObject::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><span class="cx">     JSGlobalObject* thisObject = jsCast&lt;JSGlobalObject*&gt;(object);
</span><del>-    if (getStaticFunctionSlot&lt;Base&gt;(exec, ExecState::globalObjectTable(exec), thisObject, propertyName, slot))
</del><ins>+    if (getStaticFunctionSlot&lt;Base&gt;(exec, ExecState::globalObjectTable(exec-&gt;vm()), thisObject, propertyName, slot))
</ins><span class="cx">         return true;
</span><span class="cx">     return symbolTableGet(thisObject, propertyName, slot);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSONObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSONObject.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSONObject.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/JSONObject.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -601,7 +601,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool JSONObject::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><del>-    return getStaticFunctionSlot&lt;JSObject&gt;(exec, ExecState::jsonTable(exec), jsCast&lt;JSONObject*&gt;(object), propertyName, slot);
</del><ins>+    return getStaticFunctionSlot&lt;JSObject&gt;(exec, ExecState::jsonTable(exec-&gt;vm()), jsCast&lt;JSONObject*&gt;(object), propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> class Walker {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSObject.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSObject.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/JSObject.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -394,7 +394,13 @@
</span><span class="cx">             // prototypes it should be replaced, so break here.
</span><span class="cx">             break;
</span><span class="cx">         }
</span><del>-
</del><ins>+        const ClassInfo* info = obj-&gt;classInfo();
+        if (info-&gt;hasStaticSetterOrReadonlyProperties(vm)) {
+            if (const HashEntry* entry = obj-&gt;findPropertyHashEntry(exec, propertyName)) {
+                putEntry(exec, entry, obj, propertyName, value, slot);
+                return;
+            }
+        }
</ins><span class="cx">         prototype = obj-&gt;prototype();
</span><span class="cx">         if (prototype.isNull())
</span><span class="cx">             break;
</span><span class="lines">@@ -1269,7 +1275,7 @@
</span><span class="cx">             return false; // this builtin property can't be deleted
</span><span class="cx"> 
</span><span class="cx">         PutPropertySlot slot(thisObject);
</span><del>-        putEntry(exec, entry, propertyName, jsUndefined(), slot);
</del><ins>+        putEntry(exec, entry, thisObject, propertyName, jsUndefined(), slot);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return true;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSPromiseConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -161,7 +161,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool JSPromiseConstructor::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><del>-    return getStaticFunctionSlot&lt;InternalFunction&gt;(exec, ExecState::promiseConstructorTable(exec), jsCast&lt;JSPromiseConstructor*&gt;(object), propertyName, slot);
</del><ins>+    return getStaticFunctionSlot&lt;InternalFunction&gt;(exec, ExecState::promiseConstructorTable(exec-&gt;vm()), jsCast&lt;JSPromiseConstructor*&gt;(object), propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL JSPromiseConstructorFuncCast(ExecState* exec)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSPromisePrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSPromisePrototype.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSPromisePrototype.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/JSPromisePrototype.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -86,7 +86,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool JSPromisePrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><del>-    return getStaticFunctionSlot&lt;JSObject&gt;(exec, ExecState::promisePrototypeTable(exec), jsCast&lt;JSPromisePrototype*&gt;(object), propertyName, slot);
</del><ins>+    return getStaticFunctionSlot&lt;JSObject&gt;(exec, ExecState::promisePrototypeTable(exec-&gt;vm()), jsCast&lt;JSPromisePrototype*&gt;(object), propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL JSPromisePrototypeFuncThen(ExecState* exec)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeLookuph"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Lookup.h (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Lookup.h        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/Lookup.h        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -110,6 +110,7 @@
</span><span class="cx"> 
</span><span class="cx">         int compactSize;
</span><span class="cx">         int compactHashSizeMask;
</span><ins>+        bool hasSetterOrReadonlyProperties;
</ins><span class="cx"> 
</span><span class="cx">         const HashTableValue* values; // Fixed values generated by script.
</span><span class="cx">         mutable const HashEntry* table; // Table allocated at runtime.
</span><span class="lines">@@ -117,7 +118,7 @@
</span><span class="cx">         ALWAYS_INLINE HashTable copy() const
</span><span class="cx">         {
</span><span class="cx">             // Don't copy dynamic table since it's thread specific.
</span><del>-            HashTable result = { compactSize, compactHashSizeMask, values, 0 };
</del><ins>+            HashTable result = { compactSize, compactHashSizeMask, hasSetterOrReadonlyProperties, values, 0 };
</ins><span class="cx">             return result;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -291,14 +292,15 @@
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    inline void putEntry(ExecState* exec, const HashEntry* entry, PropertyName propertyName, JSValue value, PutPropertySlot&amp; slot)
</del><ins>+    inline void putEntry(ExecState* exec, const HashEntry* entry, JSObject* base, PropertyName propertyName, JSValue value, PutPropertySlot&amp; slot)
</ins><span class="cx">     {
</span><span class="cx">         // If this is a function put it as an override property.
</span><del>-        if (entry-&gt;attributes() &amp; Function)
-            slot.base()-&gt;putDirect(exec-&gt;vm(), propertyName, value);
-        else if (!(entry-&gt;attributes() &amp; ReadOnly)) {
-            entry-&gt;propertyPutter()(exec, JSValue::encode(slot.thisValue()), JSValue::encode(value));
-            slot.setCustomProperty(slot.base(), entry-&gt;propertyPutter());
</del><ins>+        if (entry-&gt;attributes() &amp; Function) {
+            if (JSObject* thisObject = jsDynamicCast&lt;JSObject*&gt;(slot.thisValue()))
+                thisObject-&gt;putDirect(exec-&gt;vm(), propertyName, value);
+        } else if (!(entry-&gt;attributes() &amp; ReadOnly)) {
+            entry-&gt;propertyPutter()(exec, JSValue::encode(base), JSValue::encode(value));
+            slot.setCustomProperty(base, entry-&gt;propertyPutter());
</ins><span class="cx">         } else if (slot.isStrictMode())
</span><span class="cx">             throwTypeError(exec, StrictModeReadonlyPropertyWriteError);
</span><span class="cx">     }
</span><span class="lines">@@ -308,30 +310,16 @@
</span><span class="cx">      * It looks up a hash entry for the property to be set.  If an entry
</span><span class="cx">      * is found it sets the value and returns true, else it returns false.
</span><span class="cx">      */
</span><del>-    inline bool lookupPut(ExecState* exec, PropertyName propertyName, JSValue value, const HashTable&amp; table, PutPropertySlot&amp; slot)
</del><ins>+    inline bool lookupPut(ExecState* exec, PropertyName propertyName, JSObject* base, JSValue value, const HashTable&amp; table, PutPropertySlot&amp; slot)
</ins><span class="cx">     {
</span><span class="cx">         const HashEntry* entry = table.entry(exec, propertyName);
</span><del>-        
</del><ins>+
</ins><span class="cx">         if (!entry)
</span><span class="cx">             return false;
</span><span class="cx"> 
</span><del>-        putEntry(exec, entry, propertyName, value, slot);
</del><ins>+        putEntry(exec, entry, base, propertyName, value, slot);
</ins><span class="cx">         return true;
</span><span class="cx">     }
</span><del>-
-    /**
-     * This one is for &quot;put&quot;.
-     * It calls lookupPut&lt;ThisImp&gt;() to set the value.  If that call
-     * returns false (meaning no entry in the hash table was found),
-     * then it calls put() on the ParentImp class.
-     */
-    template &lt;class ThisImp, class ParentImp&gt;
-    inline void lookupPut(ExecState* exec, PropertyName propertyName, JSValue value, const HashTable&amp; table, ThisImp* thisObj, PutPropertySlot&amp; slot)
-    {
-        if (!lookupPut(exec, propertyName, value, table, slot))
-            ParentImp::put(thisObj, exec, propertyName, value, slot); // not found: forward to parent
-    }
-
</del><span class="cx"> } // namespace JSC
</span><span class="cx"> 
</span><span class="cx"> #endif // Lookup_h
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeNamePrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/NamePrototype.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/NamePrototype.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/NamePrototype.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool NamePrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot &amp;slot)
</span><span class="cx"> {
</span><del>-    return getStaticFunctionSlot&lt;Base&gt;(exec, ExecState::privateNamePrototypeTable(exec), jsCast&lt;NamePrototype*&gt;(object), propertyName, slot);
</del><ins>+    return getStaticFunctionSlot&lt;Base&gt;(exec, ExecState::privateNamePrototypeTable(exec-&gt;vm()), jsCast&lt;NamePrototype*&gt;(object), propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // ------------------------------ Functions ---------------------------
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeNumberConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/NumberConstructor.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/NumberConstructor.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/NumberConstructor.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -74,14 +74,9 @@
</span><span class="cx"> 
</span><span class="cx"> bool NumberConstructor::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><del>-    return getStaticValueSlot&lt;NumberConstructor, InternalFunction&gt;(exec, ExecState::numberConstructorTable(exec), jsCast&lt;NumberConstructor*&gt;(object), propertyName, slot);
</del><ins>+    return getStaticValueSlot&lt;NumberConstructor, InternalFunction&gt;(exec, ExecState::numberConstructorTable(exec-&gt;vm()), jsCast&lt;NumberConstructor*&gt;(object), propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NumberConstructor::put(JSCell* cell, ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot&amp; slot)
-{
-    lookupPut&lt;NumberConstructor, InternalFunction&gt;(exec, propertyName, value, ExecState::numberConstructorTable(exec), jsCast&lt;NumberConstructor*&gt;(cell), slot);
-}
-
</del><span class="cx"> static EncodedJSValue numberConstructorNaNValue(ExecState*, EncodedJSValue, EncodedJSValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     return JSValue::encode(jsNaN());
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeNumberConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/NumberConstructor.h (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/NumberConstructor.h        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/NumberConstructor.h        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -38,8 +38,6 @@
</span><span class="cx">             return constructor;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        static void put(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&amp;);
-
</del><span class="cx">         static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&amp;);
</span><span class="cx">         JSValue getValueProperty(ExecState*, int token) const;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeNumberPrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/NumberPrototype.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/NumberPrototype.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/NumberPrototype.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -85,7 +85,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool NumberPrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot &amp;slot)
</span><span class="cx"> {
</span><del>-    return getStaticFunctionSlot&lt;NumberObject&gt;(exec, ExecState::numberPrototypeTable(exec), jsCast&lt;NumberPrototype*&gt;(object), propertyName, slot);
</del><ins>+    return getStaticFunctionSlot&lt;NumberObject&gt;(exec, ExecState::numberPrototypeTable(exec-&gt;vm()), jsCast&lt;NumberPrototype*&gt;(object), propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // ------------------------------ Functions ---------------------------
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeObjectConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/ObjectConstructor.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -96,7 +96,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool ObjectConstructor::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot &amp;slot)
</span><span class="cx"> {
</span><del>-    return getStaticFunctionSlot&lt;JSObject&gt;(exec, ExecState::objectConstructorTable(exec), jsCast&lt;ObjectConstructor*&gt;(object), propertyName, slot);
</del><ins>+    return getStaticFunctionSlot&lt;JSObject&gt;(exec, ExecState::objectConstructorTable(exec-&gt;vm()), jsCast&lt;ObjectConstructor*&gt;(object), propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static ALWAYS_INLINE JSObject* constructObject(ExecState* exec)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeRegExpConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/RegExpConstructor.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -155,7 +155,7 @@
</span><span class="cx">     
</span><span class="cx"> bool RegExpConstructor::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><del>-    return getStaticValueSlot&lt;RegExpConstructor, InternalFunction&gt;(exec, ExecState::regExpConstructorTable(exec), jsCast&lt;RegExpConstructor*&gt;(object), propertyName, slot);
</del><ins>+    return getStaticValueSlot&lt;RegExpConstructor, InternalFunction&gt;(exec, ExecState::regExpConstructorTable(exec-&gt;vm()), jsCast&lt;RegExpConstructor*&gt;(object), propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static inline RegExpConstructor* asRegExpConstructor(EncodedJSValue value)
</span><span class="lines">@@ -238,11 +238,6 @@
</span><span class="cx">     return JSValue::encode(asRegExpConstructor(slotBase)-&gt;getRightContext(exec));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RegExpConstructor::put(JSCell* cell, ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot&amp; slot)
-{
-    lookupPut&lt;RegExpConstructor, InternalFunction&gt;(exec, propertyName, value, ExecState::regExpConstructorTable(exec), jsCast&lt;RegExpConstructor*&gt;(cell), slot);
-}
-
</del><span class="cx"> void setRegExpConstructorInput(ExecState* exec, EncodedJSValue baseObject, EncodedJSValue value)
</span><span class="cx"> {
</span><span class="cx">     asRegExpConstructor(asObject(JSValue::decode(baseObject)))-&gt;setInput(exec, JSValue::decode(value).toString(exec));
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeRegExpConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/RegExpConstructor.h (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/RegExpConstructor.h        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/RegExpConstructor.h        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -48,8 +48,6 @@
</span><span class="cx">             return Structure::create(vm, globalObject, prototype, TypeInfo(ObjectType, StructureFlags), info());
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        static void put(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&amp;);
-
</del><span class="cx">         static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&amp;);
</span><span class="cx"> 
</span><span class="cx">         DECLARE_INFO;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeRegExpObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/RegExpObject.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/RegExpObject.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/RegExpObject.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -97,7 +97,7 @@
</span><span class="cx">         slot.setValue(regExp, attributes, regExp-&gt;getLastIndex());
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><del>-    return getStaticValueSlot&lt;RegExpObject, JSObject&gt;(exec, ExecState::regExpTable(exec), jsCast&lt;RegExpObject*&gt;(object), propertyName, slot);
</del><ins>+    return getStaticValueSlot&lt;RegExpObject, JSObject&gt;(exec, ExecState::regExpTable(exec-&gt;vm()), jsCast&lt;RegExpObject*&gt;(object), propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool RegExpObject::deleteProperty(JSCell* cell, ExecState* exec, PropertyName propertyName)
</span><span class="lines">@@ -297,7 +297,7 @@
</span><span class="cx">         asRegExpObject(cell)-&gt;setLastIndex(exec, value, slot.isStrictMode());
</span><span class="cx">         return;
</span><span class="cx">     }
</span><del>-    lookupPut&lt;RegExpObject, JSObject&gt;(exec, propertyName, value, ExecState::regExpTable(exec), jsCast&lt;RegExpObject*&gt;(cell), slot);
</del><ins>+    Base::put(cell, exec, propertyName, value, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue RegExpObject::exec(ExecState* exec, JSString* string)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeRegExpPrototypecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/RegExpPrototype.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/RegExpPrototype.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/RegExpPrototype.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -67,7 +67,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool RegExpPrototype::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot &amp;slot)
</span><span class="cx"> {
</span><del>-    return getStaticFunctionSlot&lt;RegExpObject&gt;(exec, ExecState::regExpPrototypeTable(exec), jsCast&lt;RegExpPrototype*&gt;(object), propertyName, slot);
</del><ins>+    return getStaticFunctionSlot&lt;RegExpObject&gt;(exec, ExecState::regExpPrototypeTable(exec-&gt;vm()), jsCast&lt;RegExpPrototype*&gt;(object), propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // ------------------------------ Functions ---------------------------
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeStringConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/StringConstructor.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/StringConstructor.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/StringConstructor.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -62,7 +62,7 @@
</span><span class="cx"> 
</span><span class="cx"> bool StringConstructor::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot &amp;slot)
</span><span class="cx"> {
</span><del>-    return getStaticFunctionSlot&lt;InternalFunction&gt;(exec, ExecState::stringConstructorTable(exec), jsCast&lt;StringConstructor*&gt;(object), propertyName, slot);
</del><ins>+    return getStaticFunctionSlot&lt;InternalFunction&gt;(exec, ExecState::stringConstructorTable(exec-&gt;vm()), jsCast&lt;StringConstructor*&gt;(object), propertyName, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // ------------------------------ Functions --------------------------------
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeStructurecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Structure.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Structure.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/JavaScriptCore/runtime/Structure.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -165,8 +165,8 @@
</span><span class="cx">     , m_inlineCapacity(inlineCapacity)
</span><span class="cx">     , m_dictionaryKind(NoneDictionaryKind)
</span><span class="cx">     , m_isPinnedPropertyTable(false)
</span><del>-    , m_hasGetterSetterProperties(false)
-    , m_hasReadOnlyOrGetterSetterPropertiesExcludingProto(false)
</del><ins>+    , m_hasGetterSetterProperties(classInfo-&gt;hasStaticSetterOrReadonlyProperties(vm))
+    , m_hasReadOnlyOrGetterSetterPropertiesExcludingProto(classInfo-&gt;hasStaticSetterOrReadonlyProperties(vm))
</ins><span class="cx">     , m_hasNonEnumerableProperties(false)
</span><span class="cx">     , m_attributesInPrevious(0)
</span><span class="cx">     , m_specificFunctionThrashCount(0)
</span><span class="lines">@@ -177,6 +177,8 @@
</span><span class="cx">     ASSERT(inlineCapacity &lt;= JSFinalObject::maxInlineCapacity());
</span><span class="cx">     ASSERT(static_cast&lt;PropertyOffset&gt;(inlineCapacity) &lt; firstOutOfLineOffset);
</span><span class="cx">     ASSERT(!typeInfo.structureHasRareData());
</span><ins>+    ASSERT(hasReadOnlyOrGetterSetterPropertiesExcludingProto() || !m_classInfo-&gt;hasStaticSetterOrReadonlyProperties(vm));
+    ASSERT(hasGetterSetterProperties() || !m_classInfo-&gt;hasStaticSetterOrReadonlyProperties(vm));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> const ClassInfo Structure::s_info = { &quot;Structure&quot;, 0, 0, 0, CREATE_METHOD_TABLE(Structure) };
</span><span class="lines">@@ -192,8 +194,8 @@
</span><span class="cx">     , m_inlineCapacity(0)
</span><span class="cx">     , m_dictionaryKind(NoneDictionaryKind)
</span><span class="cx">     , m_isPinnedPropertyTable(false)
</span><del>-    , m_hasGetterSetterProperties(false)
-    , m_hasReadOnlyOrGetterSetterPropertiesExcludingProto(false)
</del><ins>+    , m_hasGetterSetterProperties(m_classInfo-&gt;hasStaticSetterOrReadonlyProperties(vm))
+    , m_hasReadOnlyOrGetterSetterPropertiesExcludingProto(m_classInfo-&gt;hasStaticSetterOrReadonlyProperties(vm))
</ins><span class="cx">     , m_hasNonEnumerableProperties(false)
</span><span class="cx">     , m_attributesInPrevious(0)
</span><span class="cx">     , m_specificFunctionThrashCount(0)
</span><span class="lines">@@ -201,6 +203,8 @@
</span><span class="cx">     , m_didTransition(false)
</span><span class="cx">     , m_staticFunctionReified(false)
</span><span class="cx"> {
</span><ins>+    ASSERT(hasReadOnlyOrGetterSetterPropertiesExcludingProto() || !m_classInfo-&gt;hasStaticSetterOrReadonlyProperties(vm));
+    ASSERT(hasGetterSetterProperties() || !m_classInfo-&gt;hasStaticSetterOrReadonlyProperties(vm));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> Structure::Structure(VM&amp; vm, const Structure* previous)
</span><span class="lines">@@ -231,6 +235,8 @@
</span><span class="cx">     previous-&gt;notifyTransitionFromThisStructure();
</span><span class="cx">     if (previous-&gt;m_globalObject)
</span><span class="cx">         m_globalObject.set(vm, this, previous-&gt;m_globalObject.get());
</span><ins>+    ASSERT(hasReadOnlyOrGetterSetterPropertiesExcludingProto() || !m_classInfo-&gt;hasStaticSetterOrReadonlyProperties(vm));
+    ASSERT(hasGetterSetterProperties() || !m_classInfo-&gt;hasStaticSetterOrReadonlyProperties(vm));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void Structure::destroy(JSCell* cell)
</span><span class="lines">@@ -565,6 +571,8 @@
</span><span class="cx">             iter-&gt;attributes |= iter-&gt;attributes &amp; Accessor ? DontDelete : (DontDelete | ReadOnly);
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    ASSERT(transition-&gt;hasReadOnlyOrGetterSetterPropertiesExcludingProto() || !transition-&gt;classInfo()-&gt;hasStaticSetterOrReadonlyProperties(vm));
+    ASSERT(transition-&gt;hasGetterSetterProperties() || !transition-&gt;classInfo()-&gt;hasStaticSetterOrReadonlyProperties(vm));
</ins><span class="cx">     transition-&gt;checkOffsetConsistency();
</span><span class="cx">     return transition;
</span><span class="cx"> }
</span><span class="lines">@@ -1156,4 +1164,15 @@
</span><span class="cx"> 
</span><span class="cx"> #endif // DO_PROPERTYMAP_CONSTENCY_CHECK
</span><span class="cx"> 
</span><ins>+bool ClassInfo::hasStaticSetterOrReadonlyProperties(VM&amp; vm) const
+{
+    for (const ClassInfo* ci = this; ci; ci = ci-&gt;parentClass) {
+        if (const HashTable* table = ci-&gt;propHashTable(vm)) {
+            if (table-&gt;hasSetterOrReadonlyProperties)
+                return true;
+        }
+    }
+    return false;
+}
+
</ins><span class="cx"> } // namespace JSC
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/ChangeLog        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -1,3 +1,64 @@
</span><ins>+2014-01-24  Oliver Hunt  &lt;oliver@apple.com&gt;
+
+        Generic JSObject::put should handle static properties in the classinfo hierarchy
+        https://bugs.webkit.org/show_bug.cgi?id=127523
+
+        Reviewed by Geoffrey Garen.
+
+        Update the bindings generator to emit the flag indicating the presence
+        of setters, and remove the many (now unnecessary) put overrides.
+        Tested with run-jsc-benchmarks and shows neutral performance. A few of the
+        micro benchmarks actually get a significant performance increase which
+        is nice.
+
+        * bindings/js/JSDOMWindowCustom.cpp:
+        (WebCore::JSDOMWindow::put):
+            We still need a custom call to lookupPut here in order
+            to get the magic security semantics of the window object.
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (hashTableAccessor):
+        (prototypeHashTableAccessor):
+        (constructorHashTableAccessor):
+        (GenerateImplementation):
+        (GenerateHashTable):
+        (GenerateConstructorHelperMethods):
+
+        * bindings/js/JSDOMWindowCustom.cpp:
+        (WebCore::JSDOMWindow::put):
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (hashTableAccessor):
+        (prototypeHashTableAccessor):
+        (constructorHashTableAccessor):
+        (InstanceOverridesPutImplementation):
+        (InstanceOverridesPutDeclaration):
+        (GenerateHeader):
+        (GenerateImplementation):
+        (GenerateHashTable):
+        (GenerateConstructorHelperMethods):
+        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
+        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
+        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
+        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
+        * bindings/scripts/test/JS/JSTestException.cpp:
+        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
+        * bindings/scripts/test/JS/JSTestInterface.cpp:
+        (WebCore::JSTestInterface::put):
+        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
+        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
+        * bindings/scripts/test/JS/JSTestNode.cpp:
+        * bindings/scripts/test/JS/JSTestObj.cpp:
+        * bindings/scripts/test/JS/JSTestObj.h:
+        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
+        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
+        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
+        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
+        * bindings/scripts/test/JS/JSTestTypedefs.h:
+        * bindings/scripts/test/JS/JSattribute.cpp:
+        * bindings/scripts/test/JS/JSreadonly.cpp:
+        * html/canvas/WebGLRenderingContext.idl:
+          Remove bogus attribute, as it has never been in the spec and should not
+          have been added.
+
</ins><span class="cx"> 2014-01-24  David Hyatt  &lt;hyatt@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [New Multicolumn] Eliminate RenderMultiColumnBlock
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMWindowCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -344,7 +344,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (lookupPut(exec, propertyName, value, *s_info.propHashTable(exec), slot))
</del><ins>+    if (lookupPut(exec, propertyName, thisObject, value, *s_info.propHashTable(exec), slot))
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     if (BindingSecurity::shouldAllowAccessToDOMWindow(exec, thisObject-&gt;impl()))
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -339,7 +339,7 @@
</span><span class="cx">     my $noStaticTables = shift;
</span><span class="cx">     my $className = shift;
</span><span class="cx">     if ($noStaticTables) {
</span><del>-        return &quot;get${className}Table(exec)&quot;;
</del><ins>+        return &quot;get${className}Table(exec-&gt;vm())&quot;;
</ins><span class="cx">     } else {
</span><span class="cx">         return &quot;${className}Table&quot;;
</span><span class="cx">     }
</span><span class="lines">@@ -350,7 +350,7 @@
</span><span class="cx">     my $noStaticTables = shift;
</span><span class="cx">     my $className = shift;
</span><span class="cx">     if ($noStaticTables) {
</span><del>-        return &quot;get${className}PrototypeTable(exec)&quot;;
</del><ins>+        return &quot;get${className}PrototypeTable(exec-&gt;vm())&quot;;
</ins><span class="cx">     } else {
</span><span class="cx">         return &quot;${className}PrototypeTable&quot;;
</span><span class="cx">     }
</span><span class="lines">@@ -361,7 +361,7 @@
</span><span class="cx">     my $noStaticTables = shift;
</span><span class="cx">     my $constructorClassName = shift;
</span><span class="cx">     if ($noStaticTables) {
</span><del>-        return &quot;get${constructorClassName}Table(exec)&quot;;
</del><ins>+        return &quot;get${constructorClassName}Table(exec-&gt;vm())&quot;;
</ins><span class="cx">     } else {
</span><span class="cx">         return &quot;${constructorClassName}Table&quot;;
</span><span class="cx">     }
</span><span class="lines">@@ -627,6 +627,21 @@
</span><span class="cx">     return $numFunctions &gt; 0 || $numConstants &gt; 0;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+sub InstanceOverridesPutImplementation
+{
+    my $interface = shift;
+    return $interface-&gt;extendedAttributes-&gt;{&quot;CustomNamedSetter&quot;}
+        || $interface-&gt;extendedAttributes-&gt;{&quot;CustomIndexedSetter&quot;};
+}
+
+sub InstanceOverridesPutDeclaration
+{
+    my $interface = shift;
+    return $interface-&gt;extendedAttributes-&gt;{&quot;CustomPutFunction&quot;}
+        || $interface-&gt;extendedAttributes-&gt;{&quot;CustomNamedSetter&quot;}
+        || $interface-&gt;extendedAttributes-&gt;{&quot;CustomIndexedSetter&quot;};
+}
+
</ins><span class="cx"> sub GenerateHeader
</span><span class="cx"> {
</span><span class="cx">     my $object = shift;
</span><span class="lines">@@ -776,25 +791,12 @@
</span><span class="cx">         $structureFlags{&quot;JSC::InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero&quot;} = 1;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    # Check if we have any writable properties
-    my $hasReadWriteProperties = 0;
-    foreach (@{$interface-&gt;attributes}) {
-        if (!IsReadonly($_) &amp;&amp; !$_-&gt;isStatic) {
-            $hasReadWriteProperties = 1;
-        }
-    }
</del><ins>+    my $overridesPut = InstanceOverridesPutDeclaration($interface);
</ins><span class="cx"> 
</span><del>-    my $hasComplexSetter =
-        $interface-&gt;extendedAttributes-&gt;{&quot;CustomPutFunction&quot;}
-        || $interface-&gt;extendedAttributes-&gt;{&quot;CustomNamedSetter&quot;}
-        || $interface-&gt;extendedAttributes-&gt;{&quot;CustomIndexedSetter&quot;};
-        
-    my $hasSetter = $hasReadWriteProperties || $hasComplexSetter;
-
</del><span class="cx">     # Getters
</span><del>-    if ($hasSetter) {
</del><ins>+    if ($overridesPut) {
</ins><span class="cx">         push(@headerContent, &quot;    static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&amp;);\n&quot;);
</span><del>-        push(@headerContent, &quot;    static void putByIndex(JSC::JSCell*, JSC::ExecState*, unsigned propertyName, JSC::JSValue, bool shouldThrow);\n&quot;) if ($hasComplexSetter);
</del><ins>+        push(@headerContent, &quot;    static void putByIndex(JSC::JSCell*, JSC::ExecState*, unsigned propertyName, JSC::JSValue, bool shouldThrow);\n&quot;);
</ins><span class="cx">         push(@headerContent, &quot;    bool putDelegate(JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&amp;);\n&quot;) if $interface-&gt;extendedAttributes-&gt;{&quot;CustomNamedSetter&quot;};
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -1742,9 +1744,9 @@
</span><span class="cx">                                \%conditionals);
</span><span class="cx"> 
</span><span class="cx">     if ($interface-&gt;extendedAttributes-&gt;{&quot;JSNoStaticTables&quot;}) {
</span><del>-        push(@implContent, &quot;static const HashTable&amp; get${className}PrototypeTable(ExecState* exec)\n&quot;);
</del><ins>+        push(@implContent, &quot;static const HashTable&amp; get${className}PrototypeTable(VM&amp; vm)\n&quot;);
</ins><span class="cx">         push(@implContent, &quot;{\n&quot;);
</span><del>-        push(@implContent, &quot;    return getHashTableForGlobalData(exec-&gt;vm(), ${className}PrototypeTable);\n&quot;);
</del><ins>+        push(@implContent, &quot;    return getHashTableForGlobalData(vm, ${className}PrototypeTable);\n&quot;);
</ins><span class="cx">         push(@implContent, &quot;}\n\n&quot;);
</span><span class="cx">         push(@implContent, &quot;const ClassInfo ${className}Prototype::s_info = { \&quot;${visibleInterfaceName}Prototype\&quot;, &amp;Base::s_info, 0, get${className}PrototypeTable, CREATE_METHOD_TABLE(${className}Prototype) };\n\n&quot;);
</span><span class="cx">     } else {
</span><span class="lines">@@ -1786,9 +1788,9 @@
</span><span class="cx"> 
</span><span class="cx">     # - Initialize static ClassInfo object
</span><span class="cx">     if ($numAttributes &gt; 0 &amp;&amp; $interface-&gt;extendedAttributes-&gt;{&quot;JSNoStaticTables&quot;}) {
</span><del>-        push(@implContent, &quot;static const HashTable&amp; get${className}Table(ExecState* exec)\n&quot;);
</del><ins>+        push(@implContent, &quot;static const HashTable&amp; get${className}Table(VM&amp; vm)\n&quot;);
</ins><span class="cx">         push(@implContent, &quot;{\n&quot;);
</span><del>-        push(@implContent, &quot;    return getHashTableForGlobalData(exec-&gt;vm(), ${className}Table);\n&quot;);
</del><ins>+        push(@implContent, &quot;    return getHashTableForGlobalData(vm, ${className}Table);\n&quot;);
</ins><span class="cx">         push(@implContent, &quot;}\n\n&quot;);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -2172,12 +2174,11 @@
</span><span class="cx">             $hasReadWriteProperties = 1 if !IsReadonly($attribute) &amp;&amp; !$attribute-&gt;isStatic;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        my $hasSetter = $hasReadWriteProperties
-        || $interface-&gt;extendedAttributes-&gt;{&quot;CustomNamedSetter&quot;}
-        || $interface-&gt;extendedAttributes-&gt;{&quot;CustomIndexedSetter&quot;};
</del><ins>+        my $overridesPutImplementation = InstanceOverridesPutImplementation($interface);
+        my $hasSetter = $hasReadWriteProperties;
</ins><span class="cx"> 
</span><del>-        if ($hasSetter) {
-            if (!$interface-&gt;extendedAttributes-&gt;{&quot;CustomPutFunction&quot;}) {
</del><ins>+        if ($hasSetter || $overridesPutImplementation) {
+            if ($overridesPutImplementation) {
</ins><span class="cx">                 push(@implContent, &quot;void ${className}::put(JSCell* cell, ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot&amp; slot)\n&quot;);
</span><span class="cx">                 push(@implContent, &quot;{\n&quot;);
</span><span class="cx">                 push(@implContent, &quot;    ${className}* thisObject = jsCast&lt;${className}*&gt;(cell);\n&quot;);
</span><span class="lines">@@ -2194,11 +2195,8 @@
</span><span class="cx">                     push(@implContent, &quot;        return;\n&quot;);
</span><span class="cx">                 }
</span><span class="cx"> 
</span><del>-                if ($hasReadWriteProperties) {
-                    push(@implContent, &quot;    lookupPut&lt;$className, Base&gt;(exec, propertyName, value, &quot; . hashTableAccessor($interface-&gt;extendedAttributes-&gt;{&quot;JSNoStaticTables&quot;}, $className) . &quot;, thisObject, slot);\n&quot;);
-                } else {
-                    push(@implContent, &quot;    Base::put(thisObject, exec, propertyName, value, slot);\n&quot;);
-                }
</del><ins>+                push(@implContent, &quot;    Base::put(thisObject, exec, propertyName, value, slot);\n&quot;);
+
</ins><span class="cx">                 push(@implContent, &quot;}\n\n&quot;);
</span><span class="cx"> 
</span><span class="cx">                 if ($interface-&gt;extendedAttributes-&gt;{&quot;CustomIndexedSetter&quot;} || $interface-&gt;extendedAttributes-&gt;{&quot;CustomNamedSetter&quot;}) {
</span><span class="lines">@@ -3774,6 +3772,7 @@
</span><span class="cx">     # Start outputing the hashtables
</span><span class="cx">     my $nameEntries = &quot;${name}Values&quot;;
</span><span class="cx">     $nameEntries =~ s/:/_/g;
</span><ins>+    my $hasSetter = &quot;false&quot;;
</ins><span class="cx"> 
</span><span class="cx">     if (($name =~ /Prototype/) or ($name =~ /Constructor/)) {
</span><span class="cx">         my $type = $name;
</span><span class="lines">@@ -3811,6 +3810,7 @@
</span><span class="cx">             $targetType = &quot;static_cast&lt;NativeFunction&gt;&quot;;
</span><span class="cx">         } else {
</span><span class="cx">             $targetType = &quot;static_cast&lt;PropertySlot::GetValueFunc&gt;&quot;;
</span><ins>+            $hasSetter = &quot;true&quot;;
</ins><span class="cx">         }
</span><span class="cx">         push(@implContent, &quot;    { \&quot;$key\&quot;, @$specials[$i], NoIntrinsic, (intptr_t)&quot; . $targetType . &quot;(@$value1[$i]), (intptr_t)@$value2[$i] },\n&quot;);
</span><span class="cx">         push(@implContent, &quot;#endif\n&quot;) if $conditional;
</span><span class="lines">@@ -3819,7 +3819,7 @@
</span><span class="cx">     push(@implContent, &quot;    { 0, 0, NoIntrinsic, 0, 0 }\n&quot;);
</span><span class="cx">     push(@implContent, &quot;};\n\n&quot;);
</span><span class="cx">     my $compactSizeMask = $numEntries - 1;
</span><del>-    push(@implContent, &quot;static const HashTable $name = { $compactSize, $compactSizeMask, $nameEntries, 0 };\n&quot;);
</del><ins>+    push(@implContent, &quot;static const HashTable $name = { $compactSize, $compactSizeMask, $hasSetter, $nameEntries, 0 };\n&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> sub WriteData
</span><span class="lines">@@ -4249,9 +4249,9 @@
</span><span class="cx">         push(@$outputArray, &quot;}\n\n&quot;);
</span><span class="cx">     } else {
</span><span class="cx">         if ($interface-&gt;extendedAttributes-&gt;{&quot;JSNoStaticTables&quot;}) {
</span><del>-            push(@$outputArray, &quot;static const HashTable&amp; get${constructorClassName}Table(ExecState* exec)\n&quot;);
</del><ins>+            push(@$outputArray, &quot;static const HashTable&amp; get${constructorClassName}Table(VM&amp; vm)\n&quot;);
</ins><span class="cx">             push(@$outputArray, &quot;{\n&quot;);
</span><del>-            push(@$outputArray, &quot;    return getHashTableForGlobalData(exec-&gt;vm(), ${constructorClassName}Table);\n&quot;);
</del><ins>+            push(@$outputArray, &quot;    return getHashTableForGlobalData(vm, ${constructorClassName}Table);\n&quot;);
</ins><span class="cx">             push(@$outputArray, &quot;}\n\n&quot;);
</span><span class="cx">             push(@$outputArray, &quot;const ClassInfo ${constructorClassName}::s_info = { \&quot;${visibleInterfaceName}Constructor\&quot;, &amp;Base::s_info, 0, get${constructorClassName}Table, CREATE_METHOD_TABLE($constructorClassName) };\n\n&quot;);
</span><span class="cx">         } else {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -41,7 +41,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestActiveDOMObjectTable = { 4, 3, JSTestActiveDOMObjectTableValues, 0 };
</del><ins>+static const HashTable JSTestActiveDOMObjectTable = { 4, 3, true, JSTestActiveDOMObjectTableValues, 0 };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestActiveDOMObjectConstructorTableValues[] =
</span><span class="lines">@@ -49,7 +49,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestActiveDOMObjectConstructorTable = { 1, 0, JSTestActiveDOMObjectConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestActiveDOMObjectConstructorTable = { 1, 0, false, JSTestActiveDOMObjectConstructorTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestActiveDOMObjectConstructor::s_info = { &quot;TestActiveDOMObjectConstructor&quot;, &amp;Base::s_info, &amp;JSTestActiveDOMObjectConstructorTable, 0, CREATE_METHOD_TABLE(JSTestActiveDOMObjectConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestActiveDOMObjectConstructor::JSTestActiveDOMObjectConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -79,7 +79,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestActiveDOMObjectPrototypeTable = { 4, 3, JSTestActiveDOMObjectPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestActiveDOMObjectPrototypeTable = { 4, 3, false, JSTestActiveDOMObjectPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestActiveDOMObjectPrototype::s_info = { &quot;TestActiveDOMObjectPrototype&quot;, &amp;Base::s_info, &amp;JSTestActiveDOMObjectPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestActiveDOMObjectPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestActiveDOMObjectPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCustomNamedGettercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestCustomNamedGetterTable = { 2, 1, JSTestCustomNamedGetterTableValues, 0 };
</del><ins>+static const HashTable JSTestCustomNamedGetterTable = { 2, 1, true, JSTestCustomNamedGetterTableValues, 0 };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestCustomNamedGetterConstructorTableValues[] =
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestCustomNamedGetterConstructorTable = { 1, 0, JSTestCustomNamedGetterConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestCustomNamedGetterConstructorTable = { 1, 0, false, JSTestCustomNamedGetterConstructorTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestCustomNamedGetterConstructor::s_info = { &quot;TestCustomNamedGetterConstructor&quot;, &amp;Base::s_info, &amp;JSTestCustomNamedGetterConstructorTable, 0, CREATE_METHOD_TABLE(JSTestCustomNamedGetterConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestCustomNamedGetterConstructor::JSTestCustomNamedGetterConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -77,7 +77,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestCustomNamedGetterPrototypeTable = { 2, 1, JSTestCustomNamedGetterPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestCustomNamedGetterPrototypeTable = { 2, 1, false, JSTestCustomNamedGetterPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestCustomNamedGetterPrototype::s_info = { &quot;TestCustomNamedGetterPrototype&quot;, &amp;Base::s_info, &amp;JSTestCustomNamedGetterPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestCustomNamedGetterPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestCustomNamedGetterPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -42,7 +42,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestEventConstructorTable = { 9, 7, JSTestEventConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestEventConstructorTable = { 9, 7, true, JSTestEventConstructorTableValues, 0 };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestEventConstructorConstructorTableValues[] =
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestEventConstructorConstructorTable = { 1, 0, JSTestEventConstructorConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestEventConstructorConstructorTable = { 1, 0, false, JSTestEventConstructorConstructorTableValues, 0 };
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL JSTestEventConstructorConstructor::constructJSTestEventConstructor(ExecState* exec)
</span><span class="cx"> {
</span><span class="cx">     JSTestEventConstructorConstructor* jsConstructor = jsCast&lt;JSTestEventConstructorConstructor*&gt;(exec-&gt;callee());
</span><span class="lines">@@ -122,7 +122,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestEventConstructorPrototypeTable = { 1, 0, JSTestEventConstructorPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestEventConstructorPrototypeTable = { 1, 0, false, JSTestEventConstructorPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestEventConstructorPrototype::s_info = { &quot;TestEventConstructorPrototype&quot;, &amp;Base::s_info, &amp;JSTestEventConstructorPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestEventConstructorPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestEventConstructorPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -46,7 +46,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestEventTargetTable = { 2, 1, JSTestEventTargetTableValues, 0 };
</del><ins>+static const HashTable JSTestEventTargetTable = { 2, 1, true, JSTestEventTargetTableValues, 0 };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestEventTargetConstructorTableValues[] =
</span><span class="lines">@@ -54,7 +54,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestEventTargetConstructorTable = { 1, 0, JSTestEventTargetConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestEventTargetConstructorTable = { 1, 0, false, JSTestEventTargetConstructorTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestEventTargetConstructor::s_info = { &quot;TestEventTargetConstructor&quot;, &amp;Base::s_info, &amp;JSTestEventTargetConstructorTable, 0, CREATE_METHOD_TABLE(JSTestEventTargetConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestEventTargetConstructor::JSTestEventTargetConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -86,7 +86,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestEventTargetPrototypeTable = { 8, 7, JSTestEventTargetPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestEventTargetPrototypeTable = { 8, 7, false, JSTestEventTargetPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestEventTargetPrototype::s_info = { &quot;TestEventTargetPrototype&quot;, &amp;Base::s_info, &amp;JSTestEventTargetPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestEventTargetPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestEventTargetPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestExceptionTable = { 5, 3, JSTestExceptionTableValues, 0 };
</del><ins>+static const HashTable JSTestExceptionTable = { 5, 3, 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">@@ -47,7 +47,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestExceptionConstructorTable = { 1, 0, JSTestExceptionConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestExceptionConstructorTable = { 1, 0, false, JSTestExceptionConstructorTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestExceptionConstructor::s_info = { &quot;TestExceptionConstructor&quot;, &amp;Base::s_info, &amp;JSTestExceptionConstructorTable, 0, CREATE_METHOD_TABLE(JSTestExceptionConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestExceptionConstructor::JSTestExceptionConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -75,7 +75,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestExceptionPrototypeTable = { 1, 0, JSTestExceptionPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestExceptionPrototypeTable = { 1, 0, false, JSTestExceptionPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestExceptionPrototype::s_info = { &quot;TestExceptionPrototype&quot;, &amp;Base::s_info, &amp;JSTestExceptionPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestExceptionPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestExceptionPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -36,7 +36,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestGenerateIsReachableTable = { 2, 1, JSTestGenerateIsReachableTableValues, 0 };
</del><ins>+static const HashTable JSTestGenerateIsReachableTable = { 2, 1, true, JSTestGenerateIsReachableTableValues, 0 };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestGenerateIsReachableConstructorTableValues[] =
</span><span class="lines">@@ -44,7 +44,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestGenerateIsReachableConstructorTable = { 1, 0, JSTestGenerateIsReachableConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestGenerateIsReachableConstructorTable = { 1, 0, false, JSTestGenerateIsReachableConstructorTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestGenerateIsReachableConstructor::s_info = { &quot;TestGenerateIsReachableConstructor&quot;, &amp;Base::s_info, &amp;JSTestGenerateIsReachableConstructorTable, 0, CREATE_METHOD_TABLE(JSTestGenerateIsReachableConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestGenerateIsReachableConstructor::JSTestGenerateIsReachableConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestGenerateIsReachablePrototypeTable = { 1, 0, JSTestGenerateIsReachablePrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestGenerateIsReachablePrototypeTable = { 1, 0, false, JSTestGenerateIsReachablePrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestGenerateIsReachablePrototype::s_info = { &quot;TestGenerateIsReachablePrototype&quot;, &amp;Base::s_info, &amp;JSTestGenerateIsReachablePrototypeTable, 0, CREATE_METHOD_TABLE(JSTestGenerateIsReachablePrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestGenerateIsReachablePrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -79,7 +79,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestInterfaceTable = { 33, 31, JSTestInterfaceTableValues, 0 };
</del><ins>+static const HashTable JSTestInterfaceTable = { 33, 31, 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">@@ -117,7 +117,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestInterfaceConstructorTable = { 11, 7, JSTestInterfaceConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestInterfaceConstructorTable = { 11, 7, true, JSTestInterfaceConstructorTableValues, 0 };
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx"> COMPILE_ASSERT(1 == TestInterface::IMPLEMENTSCONSTANT1, TestInterfaceEnumIMPLEMENTSCONSTANT1IsWrongUseDoNotCheckConstants);
</span><span class="lines">@@ -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, JSTestInterfacePrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestInterfacePrototypeTable = { 34, 31, true, JSTestInterfacePrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestInterfacePrototype::s_info = { &quot;TestInterfacePrototype&quot;, &amp;Base::s_info, &amp;JSTestInterfacePrototypeTable, 0, CREATE_METHOD_TABLE(JSTestInterfacePrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestInterfacePrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -449,7 +449,7 @@
</span><span class="cx">     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
</span><span class="cx">     if (thisObject-&gt;putDelegate(exec, propertyName, value, slot))
</span><span class="cx">         return;
</span><del>-    lookupPut&lt;JSTestInterface, Base&gt;(exec, propertyName, value, JSTestInterfaceTable, thisObject, slot);
</del><ins>+    Base::put(thisObject, exec, propertyName, value, slot);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JSTestInterface::putByIndex(JSCell* cell, ExecState* exec, unsigned index, JSValue value, bool shouldThrow)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestMediaQueryListListenerTable = { 2, 1, JSTestMediaQueryListListenerTableValues, 0 };
</del><ins>+static const HashTable JSTestMediaQueryListListenerTable = { 2, 1, true, JSTestMediaQueryListListenerTableValues, 0 };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestMediaQueryListListenerConstructorTableValues[] =
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestMediaQueryListListenerConstructorTable = { 1, 0, JSTestMediaQueryListListenerConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestMediaQueryListListenerConstructorTable = { 1, 0, false, JSTestMediaQueryListListenerConstructorTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestMediaQueryListListenerConstructor::s_info = { &quot;TestMediaQueryListListenerConstructor&quot;, &amp;Base::s_info, &amp;JSTestMediaQueryListListenerConstructorTable, 0, CREATE_METHOD_TABLE(JSTestMediaQueryListListenerConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestMediaQueryListListenerConstructor::JSTestMediaQueryListListenerConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -77,7 +77,7 @@
</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, JSTestMediaQueryListListenerPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestMediaQueryListListenerPrototypeTable = { 2, 1, false, JSTestMediaQueryListListenerPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestMediaQueryListListenerPrototype::s_info = { &quot;TestMediaQueryListListenerPrototype&quot;, &amp;Base::s_info, &amp;JSTestMediaQueryListListenerPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestMediaQueryListListenerPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestMediaQueryListListenerPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNamedConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestNamedConstructorTable = { 2, 1, JSTestNamedConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestNamedConstructorTable = { 2, 1, true, JSTestNamedConstructorTableValues, 0 };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestNamedConstructorConstructorTableValues[] =
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestNamedConstructorConstructorTable = { 1, 0, JSTestNamedConstructorConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestNamedConstructorConstructorTable = { 1, 0, false, JSTestNamedConstructorConstructorTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestNamedConstructorConstructor::s_info = { &quot;TestNamedConstructorConstructor&quot;, &amp;Base::s_info, &amp;JSTestNamedConstructorConstructorTable, 0, CREATE_METHOD_TABLE(JSTestNamedConstructorConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestNamedConstructorConstructor::JSTestNamedConstructorConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -119,7 +119,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestNamedConstructorPrototypeTable = { 1, 0, JSTestNamedConstructorPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestNamedConstructorPrototypeTable = { 1, 0, false, JSTestNamedConstructorPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestNamedConstructorPrototype::s_info = { &quot;TestNamedConstructorPrototype&quot;, &amp;Base::s_info, &amp;JSTestNamedConstructorPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestNamedConstructorPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestNamedConstructorPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestNodeTable = { 2, 1, JSTestNodeTableValues, 0 };
</del><ins>+static const HashTable JSTestNodeTable = { 2, 1, true, JSTestNodeTableValues, 0 };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestNodeConstructorTableValues[] =
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestNodeConstructorTable = { 1, 0, JSTestNodeConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestNodeConstructorTable = { 1, 0, false, JSTestNodeConstructorTableValues, 0 };
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL JSTestNodeConstructor::constructJSTestNode(ExecState* exec)
</span><span class="cx"> {
</span><span class="cx">     JSTestNodeConstructor* castedThis = jsCast&lt;JSTestNodeConstructor*&gt;(exec-&gt;callee());
</span><span class="lines">@@ -88,7 +88,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestNodePrototypeTable = { 1, 0, JSTestNodePrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestNodePrototypeTable = { 1, 0, false, JSTestNodePrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestNodePrototype::s_info = { &quot;TestNodePrototype&quot;, &amp;Base::s_info, &amp;JSTestNodePrototypeTable, 0, CREATE_METHOD_TABLE(JSTestNodePrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestNodePrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -158,7 +158,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestObjTable = { 266, 255, JSTestObjTableValues, 0 };
</del><ins>+static const HashTable JSTestObjTable = { 266, 255, 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">@@ -193,7 +193,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestObjConstructorTable = { 39, 31, JSTestObjConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestObjConstructorTable = { 39, 31, true, JSTestObjConstructorTableValues, 0 };
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition1)
</span><span class="cx"> COMPILE_ASSERT(0 == TestObj::CONDITIONAL_CONST, TestObjEnumCONDITIONAL_CONSTIsWrongUseDoNotCheckConstants);
</span><span class="lines">@@ -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, JSTestObjPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestObjPrototypeTable = { 267, 255, true, JSTestObjPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestObjPrototype::s_info = { &quot;TestObjectPrototype&quot;, &amp;Base::s_info, &amp;JSTestObjPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestObjPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestObjPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -1317,13 +1317,6 @@
</span><span class="cx">     return JSValue::encode(JSTestObj::getConstructor(exec-&gt;vm(), domObject-&gt;globalObject()));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void JSTestObj::put(JSCell* cell, ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot&amp; slot)
-{
-    JSTestObj* thisObject = jsCast&lt;JSTestObj*&gt;(cell);
-    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
-    lookupPut&lt;JSTestObj, Base&gt;(exec, propertyName, value, JSTestObjTable, thisObject, slot);
-}
-
</del><span class="cx"> void setJSTestObjConstructorStaticStringAttr(ExecState* exec, EncodedJSValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><span class="cx">     JSValue value = JSValue::decode(encodedValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -41,7 +41,6 @@
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&amp;);
</span><del>-    static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&amp;);
</del><span class="cx">     static void destroy(JSC::JSCell*);
</span><span class="cx">     ~JSTestObj();
</span><span class="cx">     DECLARE_INFO;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -40,7 +40,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestOverloadedConstructorsTable = { 2, 1, JSTestOverloadedConstructorsTableValues, 0 };
</del><ins>+static const HashTable JSTestOverloadedConstructorsTable = { 2, 1, true, JSTestOverloadedConstructorsTableValues, 0 };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestOverloadedConstructorsConstructorTableValues[] =
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestOverloadedConstructorsConstructorTable = { 1, 0, JSTestOverloadedConstructorsConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestOverloadedConstructorsConstructorTable = { 1, 0, false, JSTestOverloadedConstructorsConstructorTableValues, 0 };
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL JSTestOverloadedConstructorsConstructor::constructJSTestOverloadedConstructors1(ExecState* exec)
</span><span class="cx"> {
</span><span class="cx">     JSTestOverloadedConstructorsConstructor* castedThis = jsCast&lt;JSTestOverloadedConstructorsConstructor*&gt;(exec-&gt;callee());
</span><span class="lines">@@ -147,7 +147,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestOverloadedConstructorsPrototypeTable = { 1, 0, JSTestOverloadedConstructorsPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestOverloadedConstructorsPrototypeTable = { 1, 0, false, JSTestOverloadedConstructorsPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestOverloadedConstructorsPrototype::s_info = { &quot;TestOverloadedConstructorsPrototype&quot;, &amp;Base::s_info, &amp;JSTestOverloadedConstructorsPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestOverloadedConstructorsPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestOverloadedConstructorsPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestSerializedScriptValueInterfaceTable = { 17, 15, JSTestSerializedScriptValueInterfaceTableValues, 0 };
</del><ins>+static const HashTable JSTestSerializedScriptValueInterfaceTable = { 17, 15, true, JSTestSerializedScriptValueInterfaceTableValues, 0 };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestSerializedScriptValueInterfaceConstructorTableValues[] =
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestSerializedScriptValueInterfaceConstructorTable = { 1, 0, JSTestSerializedScriptValueInterfaceConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestSerializedScriptValueInterfaceConstructorTable = { 1, 0, false, JSTestSerializedScriptValueInterfaceConstructorTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestSerializedScriptValueInterfaceConstructor::s_info = { &quot;TestSerializedScriptValueInterfaceConstructor&quot;, &amp;Base::s_info, &amp;JSTestSerializedScriptValueInterfaceConstructorTable, 0, CREATE_METHOD_TABLE(JSTestSerializedScriptValueInterfaceConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestSerializedScriptValueInterfaceConstructor::JSTestSerializedScriptValueInterfaceConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -84,7 +84,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestSerializedScriptValueInterfacePrototypeTable = { 1, 0, JSTestSerializedScriptValueInterfacePrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestSerializedScriptValueInterfacePrototypeTable = { 1, 0, false, JSTestSerializedScriptValueInterfacePrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestSerializedScriptValueInterfacePrototype::s_info = { &quot;TestSerializedScriptValueInterfacePrototype&quot;, &amp;Base::s_info, &amp;JSTestSerializedScriptValueInterfacePrototypeTable, 0, CREATE_METHOD_TABLE(JSTestSerializedScriptValueInterfacePrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestSerializedScriptValueInterfacePrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -210,13 +210,6 @@
</span><span class="cx">     return JSValue::encode(JSTestSerializedScriptValueInterface::getConstructor(exec-&gt;vm(), domObject-&gt;globalObject()));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void JSTestSerializedScriptValueInterface::put(JSCell* cell, ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot&amp; slot)
-{
-    JSTestSerializedScriptValueInterface* thisObject = jsCast&lt;JSTestSerializedScriptValueInterface*&gt;(cell);
-    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
-    lookupPut&lt;JSTestSerializedScriptValueInterface, Base&gt;(exec, propertyName, value, JSTestSerializedScriptValueInterfaceTable, thisObject, slot);
-}
-
</del><span class="cx"> void setJSTestSerializedScriptValueInterfaceValue(ExecState* exec, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><span class="cx">     JSValue value = JSValue::decode(encodedValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -43,7 +43,6 @@
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&amp;);
</span><del>-    static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&amp;);
</del><span class="cx">     static void destroy(JSC::JSCell*);
</span><span class="cx">     ~JSTestSerializedScriptValueInterface();
</span><span class="cx">     DECLARE_INFO;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -57,7 +57,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestTypedefsTable = { 18, 15, JSTestTypedefsTableValues, 0 };
</del><ins>+static const HashTable JSTestTypedefsTable = { 18, 15, true, 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">@@ -66,7 +66,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSTestTypedefsConstructorTable = { 1, 0, JSTestTypedefsConstructorTableValues, 0 };
</del><ins>+static const HashTable JSTestTypedefsConstructorTable = { 1, 0, true, JSTestTypedefsConstructorTableValues, 0 };
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL JSTestTypedefsConstructor::constructJSTestTypedefs(ExecState* exec)
</span><span class="cx"> {
</span><span class="cx">     JSTestTypedefsConstructor* castedThis = jsCast&lt;JSTestTypedefsConstructor*&gt;(exec-&gt;callee());
</span><span class="lines">@@ -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, JSTestTypedefsPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSTestTypedefsPrototypeTable = { 33, 31, false, JSTestTypedefsPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSTestTypedefsPrototype::s_info = { &quot;TestTypedefsPrototype&quot;, &amp;Base::s_info, &amp;JSTestTypedefsPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestTypedefsPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSTestTypedefsPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -276,13 +276,6 @@
</span><span class="cx">     return JSValue::encode(JSTestTypedefs::getConstructor(exec-&gt;vm(), domObject-&gt;globalObject()));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void JSTestTypedefs::put(JSCell* cell, ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot&amp; slot)
-{
-    JSTestTypedefs* thisObject = jsCast&lt;JSTestTypedefs*&gt;(cell);
-    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
-    lookupPut&lt;JSTestTypedefs, Base&gt;(exec, propertyName, value, JSTestTypedefsTable, thisObject, slot);
-}
-
</del><span class="cx"> void setJSTestTypedefsUnsignedLongLongAttr(ExecState* exec, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><span class="cx">     JSValue value = JSValue::decode(encodedValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestTypedefsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -41,7 +41,6 @@
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&amp;);
</span><del>-    static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&amp;);
</del><span class="cx">     static void destroy(JSC::JSCell*);
</span><span class="cx">     ~JSTestTypedefs();
</span><span class="cx">     DECLARE_INFO;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSattributecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSattributeTable = { 4, 3, JSattributeTableValues, 0 };
</del><ins>+static const HashTable JSattributeTable = { 4, 3, true, JSattributeTableValues, 0 };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSattributeConstructorTableValues[] =
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSattributeConstructorTable = { 1, 0, JSattributeConstructorTableValues, 0 };
</del><ins>+static const HashTable JSattributeConstructorTable = { 1, 0, false, JSattributeConstructorTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSattributeConstructor::s_info = { &quot;attributeConstructor&quot;, &amp;Base::s_info, &amp;JSattributeConstructorTable, 0, CREATE_METHOD_TABLE(JSattributeConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSattributeConstructor::JSattributeConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -75,7 +75,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSattributePrototypeTable = { 1, 0, JSattributePrototypeTableValues, 0 };
</del><ins>+static const HashTable JSattributePrototypeTable = { 1, 0, false, JSattributePrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSattributePrototype::s_info = { &quot;attributePrototype&quot;, &amp;Base::s_info, &amp;JSattributePrototypeTable, 0, CREATE_METHOD_TABLE(JSattributePrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSattributePrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSreadonlycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -36,7 +36,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSreadonlyTable = { 2, 1, JSreadonlyTableValues, 0 };
</del><ins>+static const HashTable JSreadonlyTable = { 2, 1, true, JSreadonlyTableValues, 0 };
</ins><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSreadonlyConstructorTableValues[] =
</span><span class="lines">@@ -44,7 +44,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSreadonlyConstructorTable = { 1, 0, JSreadonlyConstructorTableValues, 0 };
</del><ins>+static const HashTable JSreadonlyConstructorTable = { 1, 0, false, JSreadonlyConstructorTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSreadonlyConstructor::s_info = { &quot;readonlyConstructor&quot;, &amp;Base::s_info, &amp;JSreadonlyConstructorTable, 0, CREATE_METHOD_TABLE(JSreadonlyConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSreadonlyConstructor::JSreadonlyConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
</span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx">     { 0, 0, NoIntrinsic, 0, 0 }
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-static const HashTable JSreadonlyPrototypeTable = { 1, 0, JSreadonlyPrototypeTableValues, 0 };
</del><ins>+static const HashTable JSreadonlyPrototypeTable = { 1, 0, false, JSreadonlyPrototypeTableValues, 0 };
</ins><span class="cx"> const ClassInfo JSreadonlyPrototype::s_info = { &quot;readonlyPrototype&quot;, &amp;Base::s_info, &amp;JSreadonlyPrototypeTable, 0, CREATE_METHOD_TABLE(JSreadonlyPrototype) };
</span><span class="cx"> 
</span><span class="cx"> JSObject* JSreadonlyPrototype::self(VM&amp; vm, JSGlobalObject* globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlcanvasWebGLRenderingContextidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/canvas/WebGLRenderingContext.idl (162712 => 162713)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/canvas/WebGLRenderingContext.idl        2014-01-24 19:55:33 UTC (rev 162712)
+++ trunk/Source/WebCore/html/canvas/WebGLRenderingContext.idl        2014-01-24 20:03:34 UTC (rev 162713)
</span><span class="lines">@@ -237,7 +237,6 @@
</span><span class="cx">     const GLenum INT                            = 0x1404;
</span><span class="cx">     const GLenum UNSIGNED_INT                   = 0x1405;
</span><span class="cx">     const GLenum FLOAT                          = 0x1406;
</span><del>-    const GLenum HALF_FLOAT_OES                 = 0x8D61;
</del><span class="cx"> 
</span><span class="cx">     /* PixelFormat */
</span><span class="cx">     const GLenum DEPTH_COMPONENT                = 0x1902;
</span></span></pre>
</div>
</div>

</body>
</html>