<!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>[196303] 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/196303">196303</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2016-02-08 21:15:06 -0800 (Mon, 08 Feb 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Attribute getters should not require an explicit 'this' value for Window properties
https://bugs.webkit.org/show_bug.cgi?id=153968

Reviewed by Darin Adler.

LayoutTests/imported/w3c:

Rebaseline W3C test now that more checks are passing.

* web-platform-tests/html/dom/interfaces-expected.txt:

Source/WebCore:

Attribute getters should not require an explicit 'this' value for
Window properties. This is because the Window interface is marked
as [ImplicitThis]:
- http://heycam.github.io/webidl/#ImplicitThis
- https://www.w3.org/Bugs/Public/show_bug.cgi?id=29421

This matches the behavior of Firefox and the expectations of the W3C
web-platform-tests.

No new tests, already covered by existing tests.

* bindings/scripts/CodeGeneratorJS.pm:
In attribute getters of an interface marked as [ImplicitThis],
if 'thisValue' is undefined or null, fall back to using the
global object as 'thisValue'.

* bindings/scripts/IDLAttributes.txt:
Add support for [ImplicitThis]:
http://heycam.github.io/webidl/#ImplicitThis

* bindings/scripts/test/JS/JSTestEventConstructor.cpp:
* bindings/scripts/test/JS/JSTestException.cpp:
* bindings/scripts/test/JS/JSTestInterface.cpp:
* bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
* bindings/scripts/test/JS/JSTestNode.cpp:
* bindings/scripts/test/JS/JSTestNondeterministic.cpp:
* bindings/scripts/test/JS/JSTestObj.cpp:
* bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
* bindings/scripts/test/JS/JSTestTypedefs.cpp:
* bindings/scripts/test/JS/JSattribute.cpp:
Rebaseline bindings tests.

* page/DOMWindow.idl:
Mark Window as [ImplicitThis]:
http://heycam.github.io/webidl/#ImplicitThis

LayoutTests:

Rebaseline existing tests now that more checks are passing.

* fast/dom/Window/getOwnPropertyDescriptor-other-window-expected.txt:
* fast/dom/Window/getOwnPropertyDescriptor-other-window.html:
* js/getOwnPropertyDescriptor-window-attributes-expected.txt:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastdomWindowgetOwnPropertyDescriptorotherwindowexpectedtxt">trunk/LayoutTests/fast/dom/Window/getOwnPropertyDescriptor-other-window-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastdomWindowgetOwnPropertyDescriptorotherwindowhtml">trunk/LayoutTests/fast/dom/Window/getOwnPropertyDescriptor-other-window.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cChangeLog">trunk/LayoutTests/imported/w3c/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestshtmldominterfacesexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsgetOwnPropertyDescriptorwindowattributesexpectedtxt">trunk/LayoutTests/js/getOwnPropertyDescriptor-window-attributes-expected.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsIDLAttributestxt">trunk/Source/WebCore/bindings/scripts/IDLAttributes.txt</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjectcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministiccpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSattributecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp</a></li>
<li><a href="#trunkSourceWebCorepageDOMWindowidl">trunk/Source/WebCore/page/DOMWindow.idl</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/LayoutTests/ChangeLog        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2016-02-08  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Attribute getters should not require an explicit 'this' value for Window properties
+        https://bugs.webkit.org/show_bug.cgi?id=153968
+
+        Reviewed by Darin Adler.
+
+        Rebaseline existing tests now that more checks are passing.
+
+        * fast/dom/Window/getOwnPropertyDescriptor-other-window-expected.txt:
+        * fast/dom/Window/getOwnPropertyDescriptor-other-window.html:
+        * js/getOwnPropertyDescriptor-window-attributes-expected.txt:
+
</ins><span class="cx"> 2016-02-08  Nan Wang  &lt;n_wang@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         AX: crash at WebCore::Range::selectNodeContents(WebCore::Node*, int&amp;)
</span></span></pre></div>
<a id="trunkLayoutTestsfastdomWindowgetOwnPropertyDescriptorotherwindowexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/Window/getOwnPropertyDescriptor-other-window-expected.txt (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/Window/getOwnPropertyDescriptor-other-window-expected.txt        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/LayoutTests/fast/dom/Window/getOwnPropertyDescriptor-other-window-expected.txt        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -10,7 +10,7 @@
</span><span class="cx"> PASS descriptor.enumerable is true
</span><span class="cx"> PASS descriptor.configurable is false
</span><span class="cx"> PASS descriptor.get.call(otherWindow).toString() is &quot;about:blank&quot;
</span><del>-FAIL descriptor.get.call().toString() should be about:blank. Threw exception TypeError: The DOMWindow.location getter can only be used on instances of DOMWindow
</del><ins>+PASS descriptor.get.call() is descriptor.get.call(window)
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestsfastdomWindowgetOwnPropertyDescriptorotherwindowhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/Window/getOwnPropertyDescriptor-other-window.html (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/Window/getOwnPropertyDescriptor-other-window.html        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/LayoutTests/fast/dom/Window/getOwnPropertyDescriptor-other-window.html        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -15,7 +15,7 @@
</span><span class="cx"> shouldBeTrue(&quot;descriptor.enumerable&quot;);
</span><span class="cx"> shouldBeFalse(&quot;descriptor.configurable&quot;);
</span><span class="cx"> shouldBeEqualToString(&quot;descriptor.get.call(otherWindow).toString()&quot;, &quot;about:blank&quot;);
</span><del>-shouldBeEqualToString(&quot;descriptor.get.call().toString()&quot;, &quot;about:blank&quot;);
</del><ins>+shouldBe(&quot;descriptor.get.call()&quot;, &quot;descriptor.get.call(window)&quot;);
</ins><span class="cx"> &lt;/script&gt;
</span><span class="cx"> &lt;script src=&quot;../../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
</span><span class="cx"> &lt;/body&gt;
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/ChangeLog (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/ChangeLog        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/LayoutTests/imported/w3c/ChangeLog        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2016-02-08  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Attribute getters should not require an explicit 'this' value for Window properties
+        https://bugs.webkit.org/show_bug.cgi?id=153968
+
+        Reviewed by Darin Adler.
+
+        Rebaseline W3C test now that more checks are passing.
+
+        * web-platform-tests/html/dom/interfaces-expected.txt:
+
</ins><span class="cx"> 2016-02-04  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Object.getOwnPropertyDescriptor() returns incomplete descriptor for instance properties
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestshtmldominterfacesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces-expected.txt (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces-expected.txt        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces-expected.txt        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -3800,30 +3800,30 @@
</span><span class="cx"> PASS Window interface object name 
</span><span class="cx"> FAIL Window interface: existence and properties of interface prototype object assert_equals: Class name for prototype of Window.prototype is not &quot;WindowProperties&quot; expected &quot;[object WindowProperties]&quot; but got &quot;[object Object]&quot;
</span><span class="cx"> FAIL Window interface: existence and properties of interface prototype object's &quot;constructor&quot; property assert_own_property: Window.prototype does not have own property &quot;constructor&quot; expected property &quot;constructor&quot; missing
</span><del>-FAIL Window interface: attribute self The DOMWindow.self getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute name The DOMWindow.name getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute history The DOMWindow.history getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute locationbar The DOMWindow.locationbar getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute menubar The DOMWindow.menubar getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute personalbar The DOMWindow.personalbar getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute scrollbars The DOMWindow.scrollbars getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute statusbar The DOMWindow.statusbar getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute toolbar The DOMWindow.toolbar getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute status The DOMWindow.status getter can only be used on instances of DOMWindow
</del><ins>+FAIL Window interface: attribute self assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute name assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute history assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute locationbar assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute menubar assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute personalbar assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute scrollbars assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute statusbar assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute toolbar assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute status assert_true: property must be configurable expected true got false
</ins><span class="cx"> FAIL Window interface: operation close() assert_equals: property should be writable if and only if not unforgeable expected true but got false
</span><del>-FAIL Window interface: attribute closed The DOMWindow.closed getter can only be used on instances of DOMWindow
</del><ins>+FAIL Window interface: attribute closed assert_true: property must be configurable expected true got false
</ins><span class="cx"> FAIL Window interface: operation stop() desc is not an Object. (evaluating '&quot;get&quot; in desc')
</span><span class="cx"> FAIL Window interface: operation focus() assert_equals: property should be writable if and only if not unforgeable expected true but got false
</span><span class="cx"> FAIL Window interface: operation blur() assert_equals: property should be writable if and only if not unforgeable expected true but got false
</span><del>-FAIL Window interface: attribute frames The DOMWindow.frames getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute length The DOMWindow.length getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute opener The DOMWindow.opener getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute parent The DOMWindow.parent getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute frameElement The DOMWindow.frameElement getter can only be used on instances of DOMWindow
</del><ins>+FAIL Window interface: attribute frames assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute length assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute opener assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute parent assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute frameElement assert_true: property must be configurable expected true got false
</ins><span class="cx"> FAIL Window interface: operation open(DOMString,DOMString,DOMString,boolean) desc is not an Object. (evaluating '&quot;get&quot; in desc')
</span><del>-FAIL Window interface: attribute navigator The DOMWindow.navigator getter can only be used on instances of DOMWindow
</del><ins>+FAIL Window interface: attribute navigator assert_true: property must be configurable expected true got false
</ins><span class="cx"> FAIL Window interface: attribute external assert_own_property: The global object must have a property &quot;external&quot; expected property &quot;external&quot; missing
</span><del>-FAIL Window interface: attribute applicationCache The DOMWindow.applicationCache getter can only be used on instances of DOMWindow
</del><ins>+FAIL Window interface: attribute applicationCache assert_true: property must be configurable expected true got false
</ins><span class="cx"> FAIL Window interface: operation alert() desc is not an Object. (evaluating '&quot;get&quot; in desc')
</span><span class="cx"> FAIL Window interface: operation confirm(DOMString) desc is not an Object. (evaluating '&quot;get&quot; in desc')
</span><span class="cx"> FAIL Window interface: operation prompt(DOMString,DOMString) desc is not an Object. (evaluating '&quot;get&quot; in desc')
</span><span class="lines">@@ -3832,82 +3832,82 @@
</span><span class="cx"> FAIL Window interface: operation postMessage(any,DOMString,[object Object]) assert_equals: property should be writable if and only if not unforgeable expected true but got false
</span><span class="cx"> FAIL Window interface: operation captureEvents() desc is not an Object. (evaluating '&quot;get&quot; in desc')
</span><span class="cx"> FAIL Window interface: operation releaseEvents() desc is not an Object. (evaluating '&quot;get&quot; in desc')
</span><del>-FAIL Window interface: attribute onabort The DOMWindow.onabort getter can only be used on instances of DOMWindow
</del><ins>+FAIL Window interface: attribute onabort assert_true: property must be configurable expected true got false
</ins><span class="cx"> FAIL Window interface: attribute onautocomplete assert_own_property: The global object must have a property &quot;onautocomplete&quot; expected property &quot;onautocomplete&quot; missing
</span><span class="cx"> FAIL Window interface: attribute onautocompleteerror assert_own_property: The global object must have a property &quot;onautocompleteerror&quot; expected property &quot;onautocompleteerror&quot; missing
</span><del>-FAIL Window interface: attribute onblur The DOMWindow.onblur getter can only be used on instances of DOMWindow
</del><ins>+FAIL Window interface: attribute onblur assert_true: property must be configurable expected true got false
</ins><span class="cx"> FAIL Window interface: attribute oncancel assert_own_property: The global object must have a property &quot;oncancel&quot; expected property &quot;oncancel&quot; missing
</span><del>-FAIL Window interface: attribute oncanplay The DOMWindow.oncanplay getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute oncanplaythrough The DOMWindow.oncanplaythrough getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onchange The DOMWindow.onchange getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onclick The DOMWindow.onclick getter can only be used on instances of DOMWindow
</del><ins>+FAIL Window interface: attribute oncanplay assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute oncanplaythrough assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onchange assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onclick assert_true: property must be configurable expected true got false
</ins><span class="cx"> FAIL Window interface: attribute onclose assert_own_property: The global object must have a property &quot;onclose&quot; expected property &quot;onclose&quot; missing
</span><del>-FAIL Window interface: attribute oncontextmenu The DOMWindow.oncontextmenu getter can only be used on instances of DOMWindow
</del><ins>+FAIL Window interface: attribute oncontextmenu assert_true: property must be configurable expected true got false
</ins><span class="cx"> FAIL Window interface: attribute oncuechange assert_own_property: The global object must have a property &quot;oncuechange&quot; expected property &quot;oncuechange&quot; missing
</span><del>-FAIL Window interface: attribute ondblclick The DOMWindow.ondblclick getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute ondrag The DOMWindow.ondrag getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute ondragend The DOMWindow.ondragend getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute ondragenter The DOMWindow.ondragenter getter can only be used on instances of DOMWindow
</del><ins>+FAIL Window interface: attribute ondblclick assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute ondrag assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute ondragend assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute ondragenter assert_true: property must be configurable expected true got false
</ins><span class="cx"> FAIL Window interface: attribute ondragexit assert_own_property: The global object must have a property &quot;ondragexit&quot; expected property &quot;ondragexit&quot; missing
</span><del>-FAIL Window interface: attribute ondragleave The DOMWindow.ondragleave getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute ondragover The DOMWindow.ondragover getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute ondragstart The DOMWindow.ondragstart getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute ondrop The DOMWindow.ondrop getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute ondurationchange The DOMWindow.ondurationchange getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onemptied The DOMWindow.onemptied getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onended The DOMWindow.onended getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onerror The DOMWindow.onerror getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onfocus The DOMWindow.onfocus getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute oninput The DOMWindow.oninput getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute oninvalid The DOMWindow.oninvalid getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onkeydown The DOMWindow.onkeydown getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onkeypress The DOMWindow.onkeypress getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onkeyup The DOMWindow.onkeyup getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onload The DOMWindow.onload getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onloadeddata The DOMWindow.onloadeddata getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onloadedmetadata The DOMWindow.onloadedmetadata getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onloadstart The DOMWindow.onloadstart getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onmousedown The DOMWindow.onmousedown getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onmouseenter assert_equals: Gets on a global should not require an explicit this expected (undefined) undefined but got (object) null
-FAIL Window interface: attribute onmouseleave assert_equals: Gets on a global should not require an explicit this expected (undefined) undefined but got (object) null
-FAIL Window interface: attribute onmousemove The DOMWindow.onmousemove getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onmouseout The DOMWindow.onmouseout getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onmouseover The DOMWindow.onmouseover getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onmouseup The DOMWindow.onmouseup getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onmousewheel The DOMWindow.onmousewheel getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onpause The DOMWindow.onpause getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onplay The DOMWindow.onplay getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onplaying The DOMWindow.onplaying getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onprogress The DOMWindow.onprogress getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onratechange The DOMWindow.onratechange getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onreset The DOMWindow.onreset getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onresize The DOMWindow.onresize getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onscroll The DOMWindow.onscroll getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onseeked The DOMWindow.onseeked getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onseeking The DOMWindow.onseeking getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onselect The DOMWindow.onselect getter can only be used on instances of DOMWindow
</del><ins>+FAIL Window interface: attribute ondragleave assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute ondragover assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute ondragstart assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute ondrop assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute ondurationchange assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onemptied assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onended assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onerror assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onfocus assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute oninput assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute oninvalid assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onkeydown assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onkeypress assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onkeyup assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onload assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onloadeddata assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onloadedmetadata assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onloadstart assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onmousedown assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onmouseenter assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onmouseleave assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onmousemove assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onmouseout assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onmouseover assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onmouseup assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onmousewheel assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onpause assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onplay assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onplaying assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onprogress assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onratechange assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onreset assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onresize assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onscroll assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onseeked assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onseeking assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onselect assert_true: property must be configurable expected true got false
</ins><span class="cx"> FAIL Window interface: attribute onshow assert_own_property: The global object must have a property &quot;onshow&quot; expected property &quot;onshow&quot; missing
</span><span class="cx"> FAIL Window interface: attribute onsort assert_own_property: The global object must have a property &quot;onsort&quot; expected property &quot;onsort&quot; missing
</span><del>-FAIL Window interface: attribute onstalled The DOMWindow.onstalled getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onsubmit The DOMWindow.onsubmit getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onsuspend The DOMWindow.onsuspend getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute ontimeupdate The DOMWindow.ontimeupdate getter can only be used on instances of DOMWindow
</del><ins>+FAIL Window interface: attribute onstalled assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onsubmit assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onsuspend assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute ontimeupdate assert_true: property must be configurable expected true got false
</ins><span class="cx"> FAIL Window interface: attribute ontoggle assert_own_property: The global object must have a property &quot;ontoggle&quot; expected property &quot;ontoggle&quot; missing
</span><del>-FAIL Window interface: attribute onvolumechange The DOMWindow.onvolumechange getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onwaiting The DOMWindow.onwaiting getter can only be used on instances of DOMWindow
</del><ins>+FAIL Window interface: attribute onvolumechange assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onwaiting assert_true: property must be configurable expected true got false
</ins><span class="cx"> FAIL Window interface: attribute onafterprint assert_own_property: The global object must have a property &quot;onafterprint&quot; expected property &quot;onafterprint&quot; missing
</span><span class="cx"> FAIL Window interface: attribute onbeforeprint assert_own_property: The global object must have a property &quot;onbeforeprint&quot; expected property &quot;onbeforeprint&quot; missing
</span><del>-FAIL Window interface: attribute onbeforeunload The DOMWindow.onbeforeunload getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onhashchange The DOMWindow.onhashchange getter can only be used on instances of DOMWindow
</del><ins>+FAIL Window interface: attribute onbeforeunload assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onhashchange assert_true: property must be configurable expected true got false
</ins><span class="cx"> FAIL Window interface: attribute onlanguagechange assert_own_property: The global object must have a property &quot;onlanguagechange&quot; expected property &quot;onlanguagechange&quot; missing
</span><del>-FAIL Window interface: attribute onmessage The DOMWindow.onmessage getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onoffline The DOMWindow.onoffline getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute ononline The DOMWindow.ononline getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onpagehide The DOMWindow.onpagehide getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onpageshow The DOMWindow.onpageshow getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onpopstate The DOMWindow.onpopstate getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onstorage The DOMWindow.onstorage getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute onunload The DOMWindow.onunload getter can only be used on instances of DOMWindow
</del><ins>+FAIL Window interface: attribute onmessage assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onoffline assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute ononline assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onpagehide assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onpageshow assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onpopstate assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onstorage assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute onunload assert_true: property must be configurable expected true got false
</ins><span class="cx"> FAIL Window interface: operation btoa(DOMString) desc is not an Object. (evaluating '&quot;get&quot; in desc')
</span><span class="cx"> FAIL Window interface: operation atob(DOMString) desc is not an Object. (evaluating '&quot;get&quot; in desc')
</span><span class="cx"> FAIL Window interface: operation setTimeout(Function,long,any) desc is not an Object. (evaluating '&quot;get&quot; in desc')
</span><span class="lines">@@ -3917,8 +3917,8 @@
</span><span class="cx"> FAIL Window interface: operation setInterval(DOMString,long,any) desc is not an Object. (evaluating '&quot;get&quot; in desc')
</span><span class="cx"> FAIL Window interface: operation clearInterval(long) desc is not an Object. (evaluating '&quot;get&quot; in desc')
</span><span class="cx"> FAIL Window interface: operation createImageBitmap(ImageBitmapSource,long,long,long,long) assert_own_property: global object missing non-static operation expected property &quot;createImageBitmap&quot; missing
</span><del>-FAIL Window interface: attribute sessionStorage The DOMWindow.sessionStorage getter can only be used on instances of DOMWindow
-FAIL Window interface: attribute localStorage The DOMWindow.localStorage getter can only be used on instances of DOMWindow
</del><ins>+FAIL Window interface: attribute sessionStorage assert_true: property must be configurable expected true got false
+FAIL Window interface: attribute localStorage assert_true: property must be configurable expected true got false
</ins><span class="cx"> PASS Window must be primary interface of window 
</span><span class="cx"> PASS Stringification of window 
</span><span class="cx"> PASS Window interface: window must have own property &quot;window&quot; 
</span></span></pre></div>
<a id="trunkLayoutTestsjsgetOwnPropertyDescriptorwindowattributesexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/js/getOwnPropertyDescriptor-window-attributes-expected.txt (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/getOwnPropertyDescriptor-window-attributes-expected.txt        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/LayoutTests/js/getOwnPropertyDescriptor-window-attributes-expected.txt        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -10,7 +10,7 @@
</span><span class="cx"> FAIL descriptor.configurable should be true. Was false.
</span><span class="cx"> PASS descriptor.get.call(nonWindowObject) threw exception TypeError: The DOMWindow.screen getter can only be used on instances of DOMWindow.
</span><span class="cx"> PASS descriptor.get.call(window) === window.screen is true
</span><del>-FAIL descriptor.get.call() === window.screen should be true. Threw exception TypeError: The DOMWindow.screen getter can only be used on instances of DOMWindow
</del><ins>+PASS descriptor.get.call() === window.screen is true
</ins><span class="cx"> 
</span><span class="cx"> * Window.navigator
</span><span class="cx"> PASS descriptor.get is an instance of Function
</span><span class="lines">@@ -19,7 +19,7 @@
</span><span class="cx"> FAIL descriptor.configurable should be true. Was false.
</span><span class="cx"> PASS descriptor.get.call(nonWindowObject) threw exception TypeError: The DOMWindow.navigator getter can only be used on instances of DOMWindow.
</span><span class="cx"> PASS descriptor.get.call(window) === window.navigator is true
</span><del>-FAIL descriptor.get.call() === window.navigator should be true. Threw exception TypeError: The DOMWindow.navigator getter can only be used on instances of DOMWindow
</del><ins>+PASS descriptor.get.call() === window.navigator is true
</ins><span class="cx"> 
</span><span class="cx"> * Window.frameElement
</span><span class="cx"> PASS descriptor.get is an instance of Function
</span><span class="lines">@@ -28,7 +28,7 @@
</span><span class="cx"> FAIL descriptor.configurable should be true. Was false.
</span><span class="cx"> PASS descriptor.get.call(nonWindowObject) threw exception TypeError: The DOMWindow.frameElement getter can only be used on instances of DOMWindow.
</span><span class="cx"> PASS descriptor.get.call(window) === window.frameElement is true
</span><del>-FAIL descriptor.get.call() === window.frameElement should be true. Threw exception TypeError: The DOMWindow.frameElement getter can only be used on instances of DOMWindow
</del><ins>+PASS descriptor.get.call() === window.frameElement is true
</ins><span class="cx"> 
</span><span class="cx"> * Window.name
</span><span class="cx"> PASS descriptor.get is an instance of Function
</span><span class="lines">@@ -37,7 +37,7 @@
</span><span class="cx"> FAIL descriptor.configurable should be true. Was false.
</span><span class="cx"> PASS descriptor.get.call(nonWindowObject) threw exception TypeError: The DOMWindow.name getter can only be used on instances of DOMWindow.
</span><span class="cx"> PASS descriptor.get.call(window) === window.name is true
</span><del>-FAIL descriptor.get.call() === window.name should be true. Threw exception TypeError: The DOMWindow.name getter can only be used on instances of DOMWindow
</del><ins>+PASS descriptor.get.call() === window.name is true
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/Source/WebCore/ChangeLog        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -1,3 +1,46 @@
</span><ins>+2016-02-08  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Attribute getters should not require an explicit 'this' value for Window properties
+        https://bugs.webkit.org/show_bug.cgi?id=153968
+
+        Reviewed by Darin Adler.
+
+        Attribute getters should not require an explicit 'this' value for
+        Window properties. This is because the Window interface is marked
+        as [ImplicitThis]:
+        - http://heycam.github.io/webidl/#ImplicitThis
+        - https://www.w3.org/Bugs/Public/show_bug.cgi?id=29421
+
+        This matches the behavior of Firefox and the expectations of the W3C
+        web-platform-tests.
+
+        No new tests, already covered by existing tests.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        In attribute getters of an interface marked as [ImplicitThis],
+        if 'thisValue' is undefined or null, fall back to using the
+        global object as 'thisValue'.
+
+        * bindings/scripts/IDLAttributes.txt:
+        Add support for [ImplicitThis]:
+        http://heycam.github.io/webidl/#ImplicitThis
+
+        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
+        * bindings/scripts/test/JS/JSTestException.cpp:
+        * bindings/scripts/test/JS/JSTestInterface.cpp:
+        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
+        * bindings/scripts/test/JS/JSTestNode.cpp:
+        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
+        * bindings/scripts/test/JS/JSTestObj.cpp:
+        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
+        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
+        * bindings/scripts/test/JS/JSattribute.cpp:
+        Rebaseline bindings tests.
+
+        * page/DOMWindow.idl:
+        Mark Window as [ImplicitThis]:
+        http://heycam.github.io/webidl/#ImplicitThis
+
</ins><span class="cx"> 2016-02-08  Nan Wang  &lt;n_wang@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         AX: crash at WebCore::Range::selectNodeContents(WebCore::Node*, int&amp;)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -2284,11 +2284,15 @@
</span><span class="cx">             push(@implContent, &quot;    UNUSED_PARAM(state);\n&quot;);
</span><span class="cx">             push(@implContent, &quot;    UNUSED_PARAM(slotBase);\n&quot;);
</span><span class="cx">             push(@implContent, &quot;    UNUSED_PARAM(thisValue);\n&quot;);
</span><ins>+
</ins><span class="cx">             if (!$attribute-&gt;isStatic || $attribute-&gt;signature-&gt;type =~ /Constructor$/) {
</span><del>-                if ($interface-&gt;extendedAttributes-&gt;{&quot;CustomProxyToJSObject&quot;}) {
-                    push(@implContent, &quot;    auto* castedThis = to${className}(JSValue::decode(thisValue));\n&quot;);
</del><ins>+                push(@implContent, &quot;    JSValue decodedThisValue = JSValue::decode(thisValue);\n&quot;);
+                my $castingFunction = $interface-&gt;extendedAttributes-&gt;{&quot;CustomProxyToJSObject&quot;} ? &quot;to${className}&quot; : GetCastingHelperForThisObject($interface);
+                # http://heycam.github.io/webidl/#ImplicitThis
+                if ($interface-&gt;extendedAttributes-&gt;{&quot;ImplicitThis&quot;}) {
+                    push(@implContent, &quot;    auto* castedThis = decodedThisValue.isUndefinedOrNull() ? $castingFunction(state-&gt;thisValue().toThis(state, NotStrictMode)) : $castingFunction(decodedThisValue);\n&quot;);
</ins><span class="cx">                 } else {
</span><del>-                    push(@implContent, &quot;    ${className}* castedThis = &quot; . GetCastingHelperForThisObject($interface) . &quot;(JSValue::decode(thisValue));\n&quot;);
</del><ins>+                    push(@implContent, &quot;    auto* castedThis = $castingFunction(decodedThisValue);\n&quot;);
</ins><span class="cx">                 }
</span><span class="cx">                 push(@implContent, &quot;    if (UNLIKELY(!castedThis)) {\n&quot;);
</span><span class="cx">                 if ($attribute-&gt;signature-&gt;extendedAttributes-&gt;{&quot;LenientThis&quot;}) {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsIDLAttributestxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/IDLAttributes.txt (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/IDLAttributes.txt        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/Source/WebCore/bindings/scripts/IDLAttributes.txt        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -71,6 +71,7 @@
</span><span class="cx"> ImplementationLacksVTable
</span><span class="cx"> ImplementationNamespace=*
</span><span class="cx"> ImplementedAs=*
</span><ins>+ImplicitThis
</ins><span class="cx"> InitializedByEventConstructor
</span><span class="cx"> InterfaceName=*
</span><span class="cx"> IsWeakCallback
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -149,7 +149,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestActiveDOMObject* castedThis = jsDynamicCast&lt;JSTestActiveDOMObject*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestActiveDOMObject*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestActiveDOMObject&quot;, &quot;excitingAttr&quot;);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -161,7 +161,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestEventConstructor* castedThis = jsDynamicCast&lt;JSTestEventConstructor*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestEventConstructor*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestEventConstructor&quot;, &quot;attr1&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -176,7 +177,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestEventConstructor* castedThis = jsDynamicCast&lt;JSTestEventConstructor*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestEventConstructor*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestEventConstructor&quot;, &quot;attr2&quot;);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -139,7 +139,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestException* castedThis = jsDynamicCast&lt;JSTestException*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestException*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestException&quot;, &quot;name&quot;);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -433,7 +433,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestInterface* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestInterface&quot;, &quot;implementsStr1&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -450,7 +451,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestInterface* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestInterface&quot;, &quot;implementsStr2&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -467,7 +469,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestInterface* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestInterface&quot;, &quot;implementsStr3&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -482,7 +485,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestInterface* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestInterface&quot;, &quot;implementsNode&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -523,7 +527,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestInterface* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestInterface&quot;, &quot;supplementalStr1&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -540,7 +545,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestInterface* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestInterface&quot;, &quot;supplementalStr2&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -557,7 +563,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestInterface* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestInterface&quot;, &quot;supplementalStr3&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -572,7 +579,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestInterface* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestInterface&quot;, &quot;supplementalNode&quot;);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -130,7 +130,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestJSBuiltinConstructor* castedThis = jsDynamicCast&lt;JSTestJSBuiltinConstructor*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestJSBuiltinConstructor*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestJSBuiltinConstructor&quot;, &quot;testAttributeCustom&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -143,7 +144,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestJSBuiltinConstructor* castedThis = jsDynamicCast&lt;JSTestJSBuiltinConstructor*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestJSBuiltinConstructor*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestJSBuiltinConstructor&quot;, &quot;testAttributeRWCustom&quot;);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -121,7 +121,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestNode* castedThis = jsDynamicCast&lt;JSTestNode*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestNode*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestNode&quot;, &quot;name&quot;);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministiccpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -142,7 +142,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestNondeterministic&quot;, &quot;nondeterministicReadonlyAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -177,7 +178,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestNondeterministic&quot;, &quot;nondeterministicWriteableAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -212,7 +214,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestNondeterministic&quot;, &quot;nondeterministicExceptionAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -247,7 +250,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestNondeterministic&quot;, &quot;nondeterministicGetterExceptionAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -286,7 +290,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestNondeterministic&quot;, &quot;nondeterministicSetterExceptionAttr&quot;);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -747,7 +747,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;readOnlyLongAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -762,7 +763,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;readOnlyStringAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -777,7 +779,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;readOnlyTestObjAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -812,7 +815,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;TestSubObj&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -825,7 +829,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;TestSubObjEnabledBySetting&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -843,7 +848,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;enumAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -858,7 +864,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;byteAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -873,7 +880,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;octetAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -888,7 +896,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;shortAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -903,7 +912,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;unsignedShortAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -918,7 +928,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;longAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -933,7 +944,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;longLongAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -948,7 +960,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;unsignedLongLongAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -963,7 +976,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;stringAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -978,7 +992,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;testObjAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -993,7 +1008,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="cx">     }
</span><span class="lines">@@ -1008,7 +1024,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;XMLObjAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1023,7 +1040,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;create&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1038,7 +1056,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;readOnlySymbolAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1063,7 +1082,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;reflectedStringAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1078,7 +1098,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;reflectedIntegralAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1093,7 +1114,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;reflectedUnsignedIntegralAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1108,7 +1130,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;reflectedBooleanAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1123,7 +1146,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;reflectedURLAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1138,7 +1162,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;reflectedStringAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1153,7 +1178,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;reflectedCustomIntegralAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1168,7 +1194,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;reflectedCustomBooleanAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1183,7 +1210,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;reflectedCustomURLAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1198,7 +1226,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;typedArrayAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1213,7 +1242,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;attrWithGetterException&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1230,7 +1260,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;attrWithGetterExceptionWithMessage&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1247,7 +1278,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;attrWithSetterException&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1262,7 +1294,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;attrWithSetterExceptionWithMessage&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1277,7 +1310,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;stringAttrWithGetterException&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1294,7 +1328,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;stringAttrWithSetterException&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1309,7 +1344,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;strictTypeCheckingAttribute&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1324,7 +1360,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;customAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1337,7 +1374,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;onfoo&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1351,7 +1389,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;withScriptStateAttribute&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1366,7 +1405,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;withCallWithAndSetterCallWithAttribute&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1381,7 +1421,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;withScriptExecutionContextAttribute&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1399,7 +1440,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;withScriptStateAttributeRaises&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1416,7 +1458,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;withScriptExecutionContextAttributeRaises&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1436,7 +1479,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;withScriptExecutionContextAndScriptStateAttribute&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1454,7 +1498,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;withScriptExecutionContextAndScriptStateAttributeRaises&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1474,7 +1519,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;withScriptExecutionContextAndScriptStateWithSpacesAttribute&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1492,7 +1538,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;withScriptArgumentsAndCallStackAttribute&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1508,7 +1555,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;conditionalAttr1&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1525,7 +1573,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;conditionalAttr2&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1542,7 +1591,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;conditionalAttr3&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1559,7 +1609,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;conditionalAttr4&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1574,7 +1625,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;conditionalAttr5&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1589,7 +1641,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;conditionalAttr6&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1603,7 +1656,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;cachedAttribute1&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1621,7 +1675,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;cachedAttribute2&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1639,7 +1694,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;anyAttribute&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1654,7 +1710,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;contentDocument&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1668,7 +1725,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;mutablePoint&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1683,7 +1741,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;immutablePoint&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1698,7 +1757,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;strawberry&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1713,7 +1773,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;strictFloat&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1728,7 +1789,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;description&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1743,7 +1805,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;id&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1758,7 +1821,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;hash&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1773,7 +1837,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;replaceableAttribute&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1788,7 +1853,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;nullableDoubleAttribute&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1803,7 +1869,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;nullableLongAttribute&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1818,7 +1885,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;nullableBooleanAttribute&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1833,7 +1901,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;nullableStringAttribute&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1848,7 +1917,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;nullableLongSettableAttribute&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1863,7 +1933,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;nullableStringValue&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1880,7 +1951,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;attribute&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1895,7 +1967,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;attributeWithReservedEnumType&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1910,7 +1983,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;putForwardsAttribute&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -1925,7 +1999,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestObj&quot;, &quot;putForwardsNullableAttribute&quot;);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -132,7 +132,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestSerializedScriptValueInterface* castedThis = jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestSerializedScriptValueInterface&quot;, &quot;value&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -147,7 +148,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestSerializedScriptValueInterface* castedThis = jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestSerializedScriptValueInterface&quot;, &quot;readonlyValue&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -162,7 +164,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestSerializedScriptValueInterface* castedThis = jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestSerializedScriptValueInterface&quot;, &quot;cachedValue&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -180,7 +183,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestSerializedScriptValueInterface* castedThis = jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestSerializedScriptValueInterface&quot;, &quot;ports&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -195,7 +199,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestSerializedScriptValueInterface* castedThis = jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestSerializedScriptValueInterface&quot;, &quot;cachedReadonlyValue&quot;);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -215,7 +215,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestTypedefs* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestTypedefs&quot;, &quot;unsignedLongLongAttr&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -230,7 +231,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestTypedefs* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestTypedefs&quot;, &quot;immutableSerializedScriptValue&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -245,7 +247,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestTypedefs* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestTypedefs&quot;, &quot;TestSubObj&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -258,7 +261,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestTypedefs* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestTypedefs&quot;, &quot;attrWithGetterException&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -275,7 +279,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestTypedefs* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestTypedefs&quot;, &quot;attrWithSetterException&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -290,7 +295,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestTypedefs* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestTypedefs&quot;, &quot;stringAttrWithGetterException&quot;);
</span><span class="cx">     }
</span><span class="lines">@@ -307,7 +313,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSTestTypedefs* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;TestTypedefs&quot;, &quot;stringAttrWithSetterException&quot;);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSattributecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -117,7 +117,8 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(slotBase);
</span><span class="cx">     UNUSED_PARAM(thisValue);
</span><del>-    JSattribute* castedThis = jsDynamicCast&lt;JSattribute*&gt;(JSValue::decode(thisValue));
</del><ins>+    JSValue decodedThisValue = JSValue::decode(thisValue);
+    auto* castedThis = jsDynamicCast&lt;JSattribute*&gt;(decodedThisValue);
</ins><span class="cx">     if (UNLIKELY(!castedThis)) {
</span><span class="cx">         return throwGetterTypeError(*state, &quot;attribute&quot;, &quot;readonly&quot;);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorepageDOMWindowidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/DOMWindow.idl (196302 => 196303)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/DOMWindow.idl        2016-02-09 03:46:37 UTC (rev 196302)
+++ trunk/Source/WebCore/page/DOMWindow.idl        2016-02-09 05:15:06 UTC (rev 196303)
</span><span class="lines">@@ -25,6 +25,7 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> [
</span><ins>+    ImplicitThis,
</ins><span class="cx">     CheckSecurity,
</span><span class="cx">     JSCustomDefineOwnProperty,
</span><span class="cx">     CustomDeleteProperty,
</span></span></pre>
</div>
</div>

</body>
</html>