<!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 <oliver@apple.com>
+
+ 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 <a.badowski@samsung.com>
</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("This test ensures that we will call a custom setter when the setter is in the prototype chain");
+
+// 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 = "testInput"
+
+shouldBe("testObject.input", "'testInput'")
+shouldBe("RegExp.input", "'testInput'")
</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 "PASS" messages, followed by "TEST COMPLETE".
+
+
+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>+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script src="../resources/js-test-pre.js"></script>
+</head>
+<body>
+<script src="script-tests/static-put-in-prototype-chain.js"></script>
+<script src="../resources/js-test-post.js"></script>
+</body>
+</html>
</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 <oliver@apple.com>
+
+ 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 <mark.lam@apple.com>
</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 = "false";
+
</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 "WARNING: Number of arguments missing for $key/$val\n" 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/) ? "set" . jsc_ucfirst($val) : "0";
</del><ins>+ my $put = "0";
+ if (!($att =~ m/ReadOnly/)) {
+ $put = "set" . jsc_ucfirst($val);
+ }
+ $hasSetter = "true";
</ins><span class="cx"> push(@values, { "type" => "Property", "get" => $get, "put" => $put });
</span><span class="cx"> } else {
</span><span class="cx"> push(@values, { "type" => "Lexer", "value" => $val });
</span><span class="lines">@@ -287,6 +293,6 @@
</span><span class="cx"> print " { 0, 0, NoIntrinsic, 0, 0 }\n";
</span><span class="cx"> print "};\n\n";
</span><span class="cx"> print "extern const struct HashTable $name =\n";
</span><del>- print " \{ $compactSize, $compactHashSizeMask, $nameEntries, 0 \};\n";
</del><ins>+ print " \{ $compactSize, $compactHashSizeMask, $hasSetter, $nameEntries, 0 \};\n";
</ins><span class="cx"> print "} // namespace\n";
</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& arrayConstructorTable(CallFrame* callFrame) { return *callFrame->vm().arrayConstructorTable; }
- static const HashTable& arrayPrototypeTable(CallFrame* callFrame) { return *callFrame->vm().arrayPrototypeTable; }
- static const HashTable& booleanPrototypeTable(CallFrame* callFrame) { return *callFrame->vm().booleanPrototypeTable; }
- static const HashTable& dataViewTable(CallFrame* callFrame) { return *callFrame->vm().dataViewTable; }
- static const HashTable& dateTable(CallFrame* callFrame) { return *callFrame->vm().dateTable; }
- static const HashTable& dateConstructorTable(CallFrame* callFrame) { return *callFrame->vm().dateConstructorTable; }
- static const HashTable& errorPrototypeTable(CallFrame* callFrame) { return *callFrame->vm().errorPrototypeTable; }
- static const HashTable& globalObjectTable(CallFrame* callFrame) { return *callFrame->vm().globalObjectTable; }
- static const HashTable& jsonTable(CallFrame* callFrame) { return *callFrame->vm().jsonTable; }
- static const HashTable& numberConstructorTable(CallFrame* callFrame) { return *callFrame->vm().numberConstructorTable; }
- static const HashTable& numberPrototypeTable(CallFrame* callFrame) { return *callFrame->vm().numberPrototypeTable; }
- static const HashTable& objectConstructorTable(CallFrame* callFrame) { return *callFrame->vm().objectConstructorTable; }
- static const HashTable& privateNamePrototypeTable(CallFrame* callFrame) { return *callFrame->vm().privateNamePrototypeTable; }
- static const HashTable& regExpTable(CallFrame* callFrame) { return *callFrame->vm().regExpTable; }
- static const HashTable& regExpConstructorTable(CallFrame* callFrame) { return *callFrame->vm().regExpConstructorTable; }
- static const HashTable& regExpPrototypeTable(CallFrame* callFrame) { return *callFrame->vm().regExpPrototypeTable; }
- static const HashTable& stringConstructorTable(CallFrame* callFrame) { return *callFrame->vm().stringConstructorTable; }
</del><ins>+ static const HashTable& arrayConstructorTable(VM& vm) { return *vm.arrayConstructorTable; }
+ static const HashTable& arrayPrototypeTable(VM& vm) { return *vm.arrayPrototypeTable; }
+ static const HashTable& booleanPrototypeTable(VM& vm) { return *vm.booleanPrototypeTable; }
+ static const HashTable& dataViewTable(VM& vm) { return *vm.dataViewTable; }
+ static const HashTable& dateTable(VM& vm) { return *vm.dateTable; }
+ static const HashTable& dateConstructorTable(VM& vm) { return *vm.dateConstructorTable; }
+ static const HashTable& errorPrototypeTable(VM& vm) { return *vm.errorPrototypeTable; }
+ static const HashTable& globalObjectTable(VM& vm) { return *vm.globalObjectTable; }
+ static const HashTable& jsonTable(VM& vm) { return *vm.jsonTable; }
+ static const HashTable& numberConstructorTable(VM& vm) { return *vm.numberConstructorTable; }
+ static const HashTable& numberPrototypeTable(VM& vm) { return *vm.numberPrototypeTable; }
+ static const HashTable& objectConstructorTable(VM& vm) { return *vm.objectConstructorTable; }
+ static const HashTable& privateNamePrototypeTable(VM& vm) { return *vm.privateNamePrototypeTable; }
+ static const HashTable& regExpTable(VM& vm) { return *vm.regExpTable; }
+ static const HashTable& regExpConstructorTable(VM& vm) { return *vm.regExpConstructorTable; }
+ static const HashTable& regExpPrototypeTable(VM& vm) { return *vm.regExpPrototypeTable; }
+ static const HashTable& stringConstructorTable(VM& vm) { return *vm.stringConstructorTable; }
</ins><span class="cx"> #if ENABLE(PROMISES)
</span><del>- static const HashTable& promisePrototypeTable(CallFrame* callFrame) { return *callFrame->vm().promisePrototypeTable; }
- static const HashTable& promiseConstructorTable(CallFrame* callFrame) { return *callFrame->vm().promiseConstructorTable; }
</del><ins>+ static const HashTable& promisePrototypeTable(VM& vm) { return *vm.promisePrototypeTable; }
+ static const HashTable& promiseConstructorTable(VM& 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<CallFrame*>(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 &slot)
</span><span class="cx"> {
</span><del>- return getStaticFunctionSlot<InternalFunction>(exec, ExecState::arrayConstructorTable(exec), jsCast<ArrayConstructor*>(object), propertyName, slot);
</del><ins>+ return getStaticFunctionSlot<InternalFunction>(exec, ExecState::arrayConstructorTable(exec->vm()), jsCast<ArrayConstructor*>(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& slot)
</span><span class="cx"> {
</span><del>- return getStaticFunctionSlot<JSArray>(exec, ExecState::arrayPrototypeTable(exec), jsCast<ArrayPrototype*>(object), propertyName, slot);
</del><ins>+ return getStaticFunctionSlot<JSArray>(exec, ExecState::arrayPrototypeTable(exec->vm()), jsCast<ArrayPrototype*>(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 &slot)
</span><span class="cx"> {
</span><del>- return getStaticFunctionSlot<BooleanObject>(exec, ExecState::booleanPrototypeTable(exec), jsCast<BooleanPrototype*>(object), propertyName, slot);
</del><ins>+ return getStaticFunctionSlot<BooleanObject>(exec, ExecState::booleanPrototypeTable(exec->vm()), jsCast<BooleanPrototype*>(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 &classPropHashTableGetterFunction(exec);
</del><ins>+ return &classPropHashTableGetterFunction(exec->vm());
</ins><span class="cx">
</span><span class="cx"> return staticPropHashTable;
</span><span class="cx"> }
</span><del>-
</del><ins>+
+ const HashTable* propHashTable(VM& vm) const
+ {
+ if (classPropHashTableGetterFunction)
+ return &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->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&) const;
+
</ins><span class="cx"> const HashTable* staticPropHashTable;
</span><del>- typedef const HashTable& (*ClassPropHashTableGetterFunction)(ExecState*);
</del><ins>+ typedef const HashTable& (*ClassPropHashTableGetterFunction)(VM&);
</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 &slot)
</span><span class="cx"> {
</span><del>- return getStaticFunctionSlot<InternalFunction>(exec, ExecState::dateConstructorTable(exec), jsCast<DateConstructor*>(object), propertyName, slot);
</del><ins>+ return getStaticFunctionSlot<InternalFunction>(exec, ExecState::dateConstructorTable(exec->vm()), jsCast<DateConstructor*>(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& slot)
</span><span class="cx"> {
</span><del>- return getStaticFunctionSlot<JSObject>(exec, ExecState::dateTable(exec), jsCast<DatePrototype*>(object), propertyName, slot);
</del><ins>+ return getStaticFunctionSlot<JSObject>(exec, ExecState::dateTable(exec->vm()), jsCast<DatePrototype*>(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 &slot)
</span><span class="cx"> {
</span><del>- return getStaticFunctionSlot<ErrorInstance>(exec, ExecState::errorPrototypeTable(exec), jsCast<ErrorPrototype*>(object), propertyName, slot);
</del><ins>+ return getStaticFunctionSlot<ErrorInstance>(exec, ExecState::errorPrototypeTable(exec->vm()), jsCast<ErrorPrototype*>(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& slot)
</span><span class="cx"> {
</span><span class="cx"> return getStaticFunctionSlot<JSObject>(
</span><del>- exec, ExecState::dataViewTable(exec), jsCast<JSDataViewPrototype*>(object),
</del><ins>+ exec, ExecState::dataViewTable(exec->vm()), jsCast<JSDataViewPrototype*>(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& slot)
</span><span class="cx"> {
</span><span class="cx"> JSGlobalObject* thisObject = jsCast<JSGlobalObject*>(object);
</span><del>- if (getStaticFunctionSlot<Base>(exec, ExecState::globalObjectTable(exec), thisObject, propertyName, slot))
</del><ins>+ if (getStaticFunctionSlot<Base>(exec, ExecState::globalObjectTable(exec->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& slot)
</span><span class="cx"> {
</span><del>- return getStaticFunctionSlot<JSObject>(exec, ExecState::jsonTable(exec), jsCast<JSONObject*>(object), propertyName, slot);
</del><ins>+ return getStaticFunctionSlot<JSObject>(exec, ExecState::jsonTable(exec->vm()), jsCast<JSONObject*>(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->classInfo();
+ if (info->hasStaticSetterOrReadonlyProperties(vm)) {
+ if (const HashEntry* entry = obj->findPropertyHashEntry(exec, propertyName)) {
+ putEntry(exec, entry, obj, propertyName, value, slot);
+ return;
+ }
+ }
</ins><span class="cx"> prototype = obj->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& slot)
</span><span class="cx"> {
</span><del>- return getStaticFunctionSlot<InternalFunction>(exec, ExecState::promiseConstructorTable(exec), jsCast<JSPromiseConstructor*>(object), propertyName, slot);
</del><ins>+ return getStaticFunctionSlot<InternalFunction>(exec, ExecState::promiseConstructorTable(exec->vm()), jsCast<JSPromiseConstructor*>(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& slot)
</span><span class="cx"> {
</span><del>- return getStaticFunctionSlot<JSObject>(exec, ExecState::promisePrototypeTable(exec), jsCast<JSPromisePrototype*>(object), propertyName, slot);
</del><ins>+ return getStaticFunctionSlot<JSObject>(exec, ExecState::promisePrototypeTable(exec->vm()), jsCast<JSPromisePrototype*>(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& slot)
</del><ins>+ inline void putEntry(ExecState* exec, const HashEntry* entry, JSObject* base, PropertyName propertyName, JSValue value, PutPropertySlot& slot)
</ins><span class="cx"> {
</span><span class="cx"> // If this is a function put it as an override property.
</span><del>- if (entry->attributes() & Function)
- slot.base()->putDirect(exec->vm(), propertyName, value);
- else if (!(entry->attributes() & ReadOnly)) {
- entry->propertyPutter()(exec, JSValue::encode(slot.thisValue()), JSValue::encode(value));
- slot.setCustomProperty(slot.base(), entry->propertyPutter());
</del><ins>+ if (entry->attributes() & Function) {
+ if (JSObject* thisObject = jsDynamicCast<JSObject*>(slot.thisValue()))
+ thisObject->putDirect(exec->vm(), propertyName, value);
+ } else if (!(entry->attributes() & ReadOnly)) {
+ entry->propertyPutter()(exec, JSValue::encode(base), JSValue::encode(value));
+ slot.setCustomProperty(base, entry->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& table, PutPropertySlot& slot)
</del><ins>+ inline bool lookupPut(ExecState* exec, PropertyName propertyName, JSObject* base, JSValue value, const HashTable& table, PutPropertySlot& 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 "put".
- * It calls lookupPut<ThisImp>() 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 <class ThisImp, class ParentImp>
- inline void lookupPut(ExecState* exec, PropertyName propertyName, JSValue value, const HashTable& table, ThisImp* thisObj, PutPropertySlot& 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 &slot)
</span><span class="cx"> {
</span><del>- return getStaticFunctionSlot<Base>(exec, ExecState::privateNamePrototypeTable(exec), jsCast<NamePrototype*>(object), propertyName, slot);
</del><ins>+ return getStaticFunctionSlot<Base>(exec, ExecState::privateNamePrototypeTable(exec->vm()), jsCast<NamePrototype*>(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& slot)
</span><span class="cx"> {
</span><del>- return getStaticValueSlot<NumberConstructor, InternalFunction>(exec, ExecState::numberConstructorTable(exec), jsCast<NumberConstructor*>(object), propertyName, slot);
</del><ins>+ return getStaticValueSlot<NumberConstructor, InternalFunction>(exec, ExecState::numberConstructorTable(exec->vm()), jsCast<NumberConstructor*>(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& slot)
-{
- lookupPut<NumberConstructor, InternalFunction>(exec, propertyName, value, ExecState::numberConstructorTable(exec), jsCast<NumberConstructor*>(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&);
-
</del><span class="cx"> static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&);
</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 &slot)
</span><span class="cx"> {
</span><del>- return getStaticFunctionSlot<NumberObject>(exec, ExecState::numberPrototypeTable(exec), jsCast<NumberPrototype*>(object), propertyName, slot);
</del><ins>+ return getStaticFunctionSlot<NumberObject>(exec, ExecState::numberPrototypeTable(exec->vm()), jsCast<NumberPrototype*>(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 &slot)
</span><span class="cx"> {
</span><del>- return getStaticFunctionSlot<JSObject>(exec, ExecState::objectConstructorTable(exec), jsCast<ObjectConstructor*>(object), propertyName, slot);
</del><ins>+ return getStaticFunctionSlot<JSObject>(exec, ExecState::objectConstructorTable(exec->vm()), jsCast<ObjectConstructor*>(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& slot)
</span><span class="cx"> {
</span><del>- return getStaticValueSlot<RegExpConstructor, InternalFunction>(exec, ExecState::regExpConstructorTable(exec), jsCast<RegExpConstructor*>(object), propertyName, slot);
</del><ins>+ return getStaticValueSlot<RegExpConstructor, InternalFunction>(exec, ExecState::regExpConstructorTable(exec->vm()), jsCast<RegExpConstructor*>(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)->getRightContext(exec));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void RegExpConstructor::put(JSCell* cell, ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot& slot)
-{
- lookupPut<RegExpConstructor, InternalFunction>(exec, propertyName, value, ExecState::regExpConstructorTable(exec), jsCast<RegExpConstructor*>(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)))->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&);
-
</del><span class="cx"> static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&);
</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->getLastIndex());
</span><span class="cx"> return true;
</span><span class="cx"> }
</span><del>- return getStaticValueSlot<RegExpObject, JSObject>(exec, ExecState::regExpTable(exec), jsCast<RegExpObject*>(object), propertyName, slot);
</del><ins>+ return getStaticValueSlot<RegExpObject, JSObject>(exec, ExecState::regExpTable(exec->vm()), jsCast<RegExpObject*>(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)->setLastIndex(exec, value, slot.isStrictMode());
</span><span class="cx"> return;
</span><span class="cx"> }
</span><del>- lookupPut<RegExpObject, JSObject>(exec, propertyName, value, ExecState::regExpTable(exec), jsCast<RegExpObject*>(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 &slot)
</span><span class="cx"> {
</span><del>- return getStaticFunctionSlot<RegExpObject>(exec, ExecState::regExpPrototypeTable(exec), jsCast<RegExpPrototype*>(object), propertyName, slot);
</del><ins>+ return getStaticFunctionSlot<RegExpObject>(exec, ExecState::regExpPrototypeTable(exec->vm()), jsCast<RegExpPrototype*>(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 &slot)
</span><span class="cx"> {
</span><del>- return getStaticFunctionSlot<InternalFunction>(exec, ExecState::stringConstructorTable(exec), jsCast<StringConstructor*>(object), propertyName, slot);
</del><ins>+ return getStaticFunctionSlot<InternalFunction>(exec, ExecState::stringConstructorTable(exec->vm()), jsCast<StringConstructor*>(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->hasStaticSetterOrReadonlyProperties(vm))
+ , m_hasReadOnlyOrGetterSetterPropertiesExcludingProto(classInfo->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 <= JSFinalObject::maxInlineCapacity());
</span><span class="cx"> ASSERT(static_cast<PropertyOffset>(inlineCapacity) < firstOutOfLineOffset);
</span><span class="cx"> ASSERT(!typeInfo.structureHasRareData());
</span><ins>+ ASSERT(hasReadOnlyOrGetterSetterPropertiesExcludingProto() || !m_classInfo->hasStaticSetterOrReadonlyProperties(vm));
+ ASSERT(hasGetterSetterProperties() || !m_classInfo->hasStaticSetterOrReadonlyProperties(vm));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> const ClassInfo Structure::s_info = { "Structure", 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->hasStaticSetterOrReadonlyProperties(vm))
+ , m_hasReadOnlyOrGetterSetterPropertiesExcludingProto(m_classInfo->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->hasStaticSetterOrReadonlyProperties(vm));
+ ASSERT(hasGetterSetterProperties() || !m_classInfo->hasStaticSetterOrReadonlyProperties(vm));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> Structure::Structure(VM& vm, const Structure* previous)
</span><span class="lines">@@ -231,6 +235,8 @@
</span><span class="cx"> previous->notifyTransitionFromThisStructure();
</span><span class="cx"> if (previous->m_globalObject)
</span><span class="cx"> m_globalObject.set(vm, this, previous->m_globalObject.get());
</span><ins>+ ASSERT(hasReadOnlyOrGetterSetterPropertiesExcludingProto() || !m_classInfo->hasStaticSetterOrReadonlyProperties(vm));
+ ASSERT(hasGetterSetterProperties() || !m_classInfo->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->attributes |= iter->attributes & Accessor ? DontDelete : (DontDelete | ReadOnly);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ ASSERT(transition->hasReadOnlyOrGetterSetterPropertiesExcludingProto() || !transition->classInfo()->hasStaticSetterOrReadonlyProperties(vm));
+ ASSERT(transition->hasGetterSetterProperties() || !transition->classInfo()->hasStaticSetterOrReadonlyProperties(vm));
</ins><span class="cx"> transition->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& vm) const
+{
+ for (const ClassInfo* ci = this; ci; ci = ci->parentClass) {
+ if (const HashTable* table = ci->propHashTable(vm)) {
+ if (table->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 <oliver@apple.com>
+
+ 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 <hyatt@apple.com>
</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->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 "get${className}Table(exec)";
</del><ins>+ return "get${className}Table(exec->vm())";
</ins><span class="cx"> } else {
</span><span class="cx"> return "${className}Table";
</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 "get${className}PrototypeTable(exec)";
</del><ins>+ return "get${className}PrototypeTable(exec->vm())";
</ins><span class="cx"> } else {
</span><span class="cx"> return "${className}PrototypeTable";
</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 "get${constructorClassName}Table(exec)";
</del><ins>+ return "get${constructorClassName}Table(exec->vm())";
</ins><span class="cx"> } else {
</span><span class="cx"> return "${constructorClassName}Table";
</span><span class="cx"> }
</span><span class="lines">@@ -627,6 +627,21 @@
</span><span class="cx"> return $numFunctions > 0 || $numConstants > 0;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+sub InstanceOverridesPutImplementation
+{
+ my $interface = shift;
+ return $interface->extendedAttributes->{"CustomNamedSetter"}
+ || $interface->extendedAttributes->{"CustomIndexedSetter"};
+}
+
+sub InstanceOverridesPutDeclaration
+{
+ my $interface = shift;
+ return $interface->extendedAttributes->{"CustomPutFunction"}
+ || $interface->extendedAttributes->{"CustomNamedSetter"}
+ || $interface->extendedAttributes->{"CustomIndexedSetter"};
+}
+
</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{"JSC::InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero"} = 1;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- # Check if we have any writable properties
- my $hasReadWriteProperties = 0;
- foreach (@{$interface->attributes}) {
- if (!IsReadonly($_) && !$_->isStatic) {
- $hasReadWriteProperties = 1;
- }
- }
</del><ins>+ my $overridesPut = InstanceOverridesPutDeclaration($interface);
</ins><span class="cx">
</span><del>- my $hasComplexSetter =
- $interface->extendedAttributes->{"CustomPutFunction"}
- || $interface->extendedAttributes->{"CustomNamedSetter"}
- || $interface->extendedAttributes->{"CustomIndexedSetter"};
-
- my $hasSetter = $hasReadWriteProperties || $hasComplexSetter;
-
</del><span class="cx"> # Getters
</span><del>- if ($hasSetter) {
</del><ins>+ if ($overridesPut) {
</ins><span class="cx"> push(@headerContent, " static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&);\n");
</span><del>- push(@headerContent, " static void putByIndex(JSC::JSCell*, JSC::ExecState*, unsigned propertyName, JSC::JSValue, bool shouldThrow);\n") if ($hasComplexSetter);
</del><ins>+ push(@headerContent, " static void putByIndex(JSC::JSCell*, JSC::ExecState*, unsigned propertyName, JSC::JSValue, bool shouldThrow);\n");
</ins><span class="cx"> push(@headerContent, " bool putDelegate(JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&);\n") if $interface->extendedAttributes->{"CustomNamedSetter"};
</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->extendedAttributes->{"JSNoStaticTables"}) {
</span><del>- push(@implContent, "static const HashTable& get${className}PrototypeTable(ExecState* exec)\n");
</del><ins>+ push(@implContent, "static const HashTable& get${className}PrototypeTable(VM& vm)\n");
</ins><span class="cx"> push(@implContent, "{\n");
</span><del>- push(@implContent, " return getHashTableForGlobalData(exec->vm(), ${className}PrototypeTable);\n");
</del><ins>+ push(@implContent, " return getHashTableForGlobalData(vm, ${className}PrototypeTable);\n");
</ins><span class="cx"> push(@implContent, "}\n\n");
</span><span class="cx"> push(@implContent, "const ClassInfo ${className}Prototype::s_info = { \"${visibleInterfaceName}Prototype\", &Base::s_info, 0, get${className}PrototypeTable, CREATE_METHOD_TABLE(${className}Prototype) };\n\n");
</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 > 0 && $interface->extendedAttributes->{"JSNoStaticTables"}) {
</span><del>- push(@implContent, "static const HashTable& get${className}Table(ExecState* exec)\n");
</del><ins>+ push(@implContent, "static const HashTable& get${className}Table(VM& vm)\n");
</ins><span class="cx"> push(@implContent, "{\n");
</span><del>- push(@implContent, " return getHashTableForGlobalData(exec->vm(), ${className}Table);\n");
</del><ins>+ push(@implContent, " return getHashTableForGlobalData(vm, ${className}Table);\n");
</ins><span class="cx"> push(@implContent, "}\n\n");
</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) && !$attribute->isStatic;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- my $hasSetter = $hasReadWriteProperties
- || $interface->extendedAttributes->{"CustomNamedSetter"}
- || $interface->extendedAttributes->{"CustomIndexedSetter"};
</del><ins>+ my $overridesPutImplementation = InstanceOverridesPutImplementation($interface);
+ my $hasSetter = $hasReadWriteProperties;
</ins><span class="cx">
</span><del>- if ($hasSetter) {
- if (!$interface->extendedAttributes->{"CustomPutFunction"}) {
</del><ins>+ if ($hasSetter || $overridesPutImplementation) {
+ if ($overridesPutImplementation) {
</ins><span class="cx"> push(@implContent, "void ${className}::put(JSCell* cell, ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot& slot)\n");
</span><span class="cx"> push(@implContent, "{\n");
</span><span class="cx"> push(@implContent, " ${className}* thisObject = jsCast<${className}*>(cell);\n");
</span><span class="lines">@@ -2194,11 +2195,8 @@
</span><span class="cx"> push(@implContent, " return;\n");
</span><span class="cx"> }
</span><span class="cx">
</span><del>- if ($hasReadWriteProperties) {
- push(@implContent, " lookupPut<$className, Base>(exec, propertyName, value, " . hashTableAccessor($interface->extendedAttributes->{"JSNoStaticTables"}, $className) . ", thisObject, slot);\n");
- } else {
- push(@implContent, " Base::put(thisObject, exec, propertyName, value, slot);\n");
- }
</del><ins>+ push(@implContent, " Base::put(thisObject, exec, propertyName, value, slot);\n");
+
</ins><span class="cx"> push(@implContent, "}\n\n");
</span><span class="cx">
</span><span class="cx"> if ($interface->extendedAttributes->{"CustomIndexedSetter"} || $interface->extendedAttributes->{"CustomNamedSetter"}) {
</span><span class="lines">@@ -3774,6 +3772,7 @@
</span><span class="cx"> # Start outputing the hashtables
</span><span class="cx"> my $nameEntries = "${name}Values";
</span><span class="cx"> $nameEntries =~ s/:/_/g;
</span><ins>+ my $hasSetter = "false";
</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 = "static_cast<NativeFunction>";
</span><span class="cx"> } else {
</span><span class="cx"> $targetType = "static_cast<PropertySlot::GetValueFunc>";
</span><ins>+ $hasSetter = "true";
</ins><span class="cx"> }
</span><span class="cx"> push(@implContent, " { \"$key\", @$specials[$i], NoIntrinsic, (intptr_t)" . $targetType . "(@$value1[$i]), (intptr_t)@$value2[$i] },\n");
</span><span class="cx"> push(@implContent, "#endif\n") if $conditional;
</span><span class="lines">@@ -3819,7 +3819,7 @@
</span><span class="cx"> push(@implContent, " { 0, 0, NoIntrinsic, 0, 0 }\n");
</span><span class="cx"> push(@implContent, "};\n\n");
</span><span class="cx"> my $compactSizeMask = $numEntries - 1;
</span><del>- push(@implContent, "static const HashTable $name = { $compactSize, $compactSizeMask, $nameEntries, 0 };\n");
</del><ins>+ push(@implContent, "static const HashTable $name = { $compactSize, $compactSizeMask, $hasSetter, $nameEntries, 0 };\n");
</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, "}\n\n");
</span><span class="cx"> } else {
</span><span class="cx"> if ($interface->extendedAttributes->{"JSNoStaticTables"}) {
</span><del>- push(@$outputArray, "static const HashTable& get${constructorClassName}Table(ExecState* exec)\n");
</del><ins>+ push(@$outputArray, "static const HashTable& get${constructorClassName}Table(VM& vm)\n");
</ins><span class="cx"> push(@$outputArray, "{\n");
</span><del>- push(@$outputArray, " return getHashTableForGlobalData(exec->vm(), ${constructorClassName}Table);\n");
</del><ins>+ push(@$outputArray, " return getHashTableForGlobalData(vm, ${constructorClassName}Table);\n");
</ins><span class="cx"> push(@$outputArray, "}\n\n");
</span><span class="cx"> push(@$outputArray, "const ClassInfo ${constructorClassName}::s_info = { \"${visibleInterfaceName}Constructor\", &Base::s_info, 0, get${constructorClassName}Table, CREATE_METHOD_TABLE($constructorClassName) };\n\n");
</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 = { "TestActiveDOMObjectConstructor", &Base::s_info, &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 = { "TestActiveDOMObjectPrototype", &Base::s_info, &JSTestActiveDOMObjectPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestActiveDOMObjectPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestActiveDOMObjectPrototype::self(VM& 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 = { "TestCustomNamedGetterConstructor", &Base::s_info, &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 = { "TestCustomNamedGetterPrototype", &Base::s_info, &JSTestCustomNamedGetterPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestCustomNamedGetterPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestCustomNamedGetterPrototype::self(VM& 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<JSTestEventConstructorConstructor*>(exec->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 = { "TestEventConstructorPrototype", &Base::s_info, &JSTestEventConstructorPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestEventConstructorPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestEventConstructorPrototype::self(VM& vm, JSGlobalObject* globalObject)
</span></span></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 = { "TestEventTargetConstructor", &Base::s_info, &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 = { "TestEventTargetPrototype", &Base::s_info, &JSTestEventTargetPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestEventTargetPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestEventTargetPrototype::self(VM& 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 = { "TestExceptionConstructor", &Base::s_info, &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 = { "TestExceptionPrototype", &Base::s_info, &JSTestExceptionPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestExceptionPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestExceptionPrototype::self(VM& vm, JSGlobalObject* globalObject)
</span></span></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 = { "TestGenerateIsReachableConstructor", &Base::s_info, &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 = { "TestGenerateIsReachablePrototype", &Base::s_info, &JSTestGenerateIsReachablePrototypeTable, 0, CREATE_METHOD_TABLE(JSTestGenerateIsReachablePrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestGenerateIsReachablePrototype::self(VM& vm, JSGlobalObject* globalObject)
</span></span></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 = { "TestInterfacePrototype", &Base::s_info, &JSTestInterfacePrototypeTable, 0, CREATE_METHOD_TABLE(JSTestInterfacePrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestInterfacePrototype::self(VM& vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -449,7 +449,7 @@
</span><span class="cx"> ASSERT_GC_OBJECT_INHERITS(thisObject, info());
</span><span class="cx"> if (thisObject->putDelegate(exec, propertyName, value, slot))
</span><span class="cx"> return;
</span><del>- lookupPut<JSTestInterface, Base>(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 = { "TestMediaQueryListListenerConstructor", &Base::s_info, &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 = { "TestMediaQueryListListenerPrototype", &Base::s_info, &JSTestMediaQueryListListenerPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestMediaQueryListListenerPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestMediaQueryListListenerPrototype::self(VM& vm, JSGlobalObject* globalObject)
</span></span></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 = { "TestNamedConstructorConstructor", &Base::s_info, &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 = { "TestNamedConstructorPrototype", &Base::s_info, &JSTestNamedConstructorPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestNamedConstructorPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestNamedConstructorPrototype::self(VM& vm, JSGlobalObject* globalObject)
</span></span></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<JSTestNodeConstructor*>(exec->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 = { "TestNodePrototype", &Base::s_info, &JSTestNodePrototypeTable, 0, CREATE_METHOD_TABLE(JSTestNodePrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestNodePrototype::self(VM& vm, JSGlobalObject* globalObject)
</span></span></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 = { "TestObjectPrototype", &Base::s_info, &JSTestObjPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestObjPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestObjPrototype::self(VM& vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -1317,13 +1317,6 @@
</span><span class="cx"> return JSValue::encode(JSTestObj::getConstructor(exec->vm(), domObject->globalObject()));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void JSTestObj::put(JSCell* cell, ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot& slot)
-{
- JSTestObj* thisObject = jsCast<JSTestObj*>(cell);
- ASSERT_GC_OBJECT_INHERITS(thisObject, info());
- lookupPut<JSTestObj, Base>(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&, JSC::JSGlobalObject*);
</span><span class="cx"> static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&);
</span><del>- static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&);
</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<JSTestOverloadedConstructorsConstructor*>(exec->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 = { "TestOverloadedConstructorsPrototype", &Base::s_info, &JSTestOverloadedConstructorsPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestOverloadedConstructorsPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestOverloadedConstructorsPrototype::self(VM& vm, JSGlobalObject* globalObject)
</span></span></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 = { "TestSerializedScriptValueInterfaceConstructor", &Base::s_info, &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 = { "TestSerializedScriptValueInterfacePrototype", &Base::s_info, &JSTestSerializedScriptValueInterfacePrototypeTable, 0, CREATE_METHOD_TABLE(JSTestSerializedScriptValueInterfacePrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestSerializedScriptValueInterfacePrototype::self(VM& vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -210,13 +210,6 @@
</span><span class="cx"> return JSValue::encode(JSTestSerializedScriptValueInterface::getConstructor(exec->vm(), domObject->globalObject()));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void JSTestSerializedScriptValueInterface::put(JSCell* cell, ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot& slot)
-{
- JSTestSerializedScriptValueInterface* thisObject = jsCast<JSTestSerializedScriptValueInterface*>(cell);
- ASSERT_GC_OBJECT_INHERITS(thisObject, info());
- lookupPut<JSTestSerializedScriptValueInterface, Base>(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&, JSC::JSGlobalObject*);
</span><span class="cx"> static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&);
</span><del>- static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&);
</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<JSTestTypedefsConstructor*>(exec->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 = { "TestTypedefsPrototype", &Base::s_info, &JSTestTypedefsPrototypeTable, 0, CREATE_METHOD_TABLE(JSTestTypedefsPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSTestTypedefsPrototype::self(VM& vm, JSGlobalObject* globalObject)
</span><span class="lines">@@ -276,13 +276,6 @@
</span><span class="cx"> return JSValue::encode(JSTestTypedefs::getConstructor(exec->vm(), domObject->globalObject()));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void JSTestTypedefs::put(JSCell* cell, ExecState* exec, PropertyName propertyName, JSValue value, PutPropertySlot& slot)
-{
- JSTestTypedefs* thisObject = jsCast<JSTestTypedefs*>(cell);
- ASSERT_GC_OBJECT_INHERITS(thisObject, info());
- lookupPut<JSTestTypedefs, Base>(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&, JSC::JSGlobalObject*);
</span><span class="cx"> static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&);
</span><del>- static void put(JSC::JSCell*, JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&);
</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 = { "attributeConstructor", &Base::s_info, &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 = { "attributePrototype", &Base::s_info, &JSattributePrototypeTable, 0, CREATE_METHOD_TABLE(JSattributePrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSattributePrototype::self(VM& vm, JSGlobalObject* globalObject)
</span></span></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 = { "readonlyConstructor", &Base::s_info, &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 = { "readonlyPrototype", &Base::s_info, &JSreadonlyPrototypeTable, 0, CREATE_METHOD_TABLE(JSreadonlyPrototype) };
</span><span class="cx">
</span><span class="cx"> JSObject* JSreadonlyPrototype::self(VM& vm, JSGlobalObject* globalObject)
</span></span></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>