<!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>[208412] 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/208412">208412</a></dd>
<dt>Author</dt> <dd>utatane.tea@gmail.com</dd>
<dt>Date</dt> <dd>2016-11-04 18:15:17 -0700 (Fri, 04 Nov 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[DOMJIT] Add DOMJIT::Signature annotation to Document::getElementById
https://bugs.webkit.org/show_bug.cgi?id=164356

Reviewed by Filip Pizlo.

Source/WebCore:

This patch implements DOMJIT::Signature annotation for getElementById.
Since getElementById is also implemented in DocumentFragment, we implement
the branchIfDocumentFragment/branchIfNotDocumentFragment for that.

In dromaeo, we have a test like this.

test( &quot;getElementById&quot;, function(){
    for ( var i = 0; i &lt; num * 30; i++ ) {
        ret = document.getElementById(&quot;testA&quot; + num).nodeType;
        ret = document.getElementById(&quot;testB&quot; + num).nodeType;
        ret = document.getElementById(&quot;testC&quot; + num).nodeType;
        ret = document.getElementById(&quot;testD&quot; + num).nodeType;
        ret = document.getElementById(&quot;testE&quot; + num).nodeType;
        ret = document.getElementById(&quot;testF&quot; + num).nodeType;
    }
});

In the above test, JSC already knows the following things.

1. Since nodeType is now handled as CallDOMGetter, we know that it is pure.
2. getElementById look up becomes PureGetById since document is impure object. But it is kept as PureGetById. So it does not write DOMState.
3. `&quot;testA&quot; + num` will be converted to constant string.
4. CallDOM for getElementById said it just reads(DOMState:DOM). And it saids that it returns the same value as long as DOMState is not clobbered.
5. CheckCell leading CallDOM ensures the inlined getElementById node. (CallDOM node).

The key thing is that no node clobbers DOMState during the loop. So CallDOM &amp; CallDOMGetter can be hoisted.
This improves dom-query significantly. Dromaeo dom-query getElementById becomes 40x faster (247796 v.s. 6197).
Dromaeo dom-query getElementById (not in document) becomes 89x faster (630317.8 v.s. 7066.).

Tests: js/dom/domjit-function-get-element-by-id-changed.html
       js/dom/domjit-function-get-element-by-id-licm.html
       js/dom/domjit-function-get-element-by-id.html

* dom/NonElementParentNode.idl:
* domjit/DOMJITCheckDOM.h:
(WebCore::DOMJIT::TypeChecker&lt;DocumentFragment&gt;::branchIfFail):
* domjit/DOMJITHelpers.h:
(WebCore::DOMJIT::branchIfDocumentFragment):
(WebCore::DOMJIT::branchIfNotDocumentFragment):

LayoutTests:

* js/dom/domjit-function-get-element-by-id-changed-expected.txt: Added.
* js/dom/domjit-function-get-element-by-id-changed.html: Added.
* js/dom/domjit-function-get-element-by-id-expected.txt: Added.
* js/dom/domjit-function-get-element-by-id-licm-expected.txt: Added.
* js/dom/domjit-function-get-element-by-id-licm.html: Added.
* js/dom/domjit-function-get-element-by-id.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoredomNonElementParentNodeidl">trunk/Source/WebCore/dom/NonElementParentNode.idl</a></li>
<li><a href="#trunkSourceWebCoredomjitDOMJITCheckDOMh">trunk/Source/WebCore/domjit/DOMJITCheckDOM.h</a></li>
<li><a href="#trunkSourceWebCoredomjitDOMJITHelpersh">trunk/Source/WebCore/domjit/DOMJITHelpers.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsjsdomdomjitfunctiongetelementbyidchangedexpectedtxt">trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-changed-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomdomjitfunctiongetelementbyidchangedhtml">trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-changed.html</a></li>
<li><a href="#trunkLayoutTestsjsdomdomjitfunctiongetelementbyidexpectedtxt">trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomdomjitfunctiongetelementbyidlicmexpectedtxt">trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-licm-expected.txt</a></li>
<li><a href="#trunkLayoutTestsjsdomdomjitfunctiongetelementbyidlicmhtml">trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-licm.html</a></li>
<li><a href="#trunkLayoutTestsjsdomdomjitfunctiongetelementbyidhtml">trunk/LayoutTests/js/dom/domjit-function-get-element-by-id.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (208411 => 208412)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-11-05 00:55:43 UTC (rev 208411)
+++ trunk/LayoutTests/ChangeLog        2016-11-05 01:15:17 UTC (rev 208412)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2016-11-04  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
+
+        [DOMJIT] Add DOMJIT::Signature annotation to Document::getElementById
+        https://bugs.webkit.org/show_bug.cgi?id=164356
+
+        Reviewed by Filip Pizlo.
+
+        * js/dom/domjit-function-get-element-by-id-changed-expected.txt: Added.
+        * js/dom/domjit-function-get-element-by-id-changed.html: Added.
+        * js/dom/domjit-function-get-element-by-id-expected.txt: Added.
+        * js/dom/domjit-function-get-element-by-id-licm-expected.txt: Added.
+        * js/dom/domjit-function-get-element-by-id-licm.html: Added.
+        * js/dom/domjit-function-get-element-by-id.html: Added.
+
</ins><span class="cx"> 2016-11-04  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Layout viewport wrong with RTL documents
</span></span></pre></div>
<a id="trunkLayoutTestsjsdomdomjitfunctiongetelementbyidchangedexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-changed-expected.txt (0 => 208412)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-changed-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-changed-expected.txt        2016-11-05 01:15:17 UTC (rev 208412)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+Test LICM-ed DOMJIT function getElementById will work correctly when the function is replaced.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsdomdomjitfunctiongetelementbyidchangedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-changed.html (0 => 208412)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-changed.html                                (rev 0)
+++ trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-changed.html        2016-11-05 01:15:17 UTC (rev 208412)
</span><span class="lines">@@ -0,0 +1,44 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;div id=&quot;description&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
+
+&lt;div id=&quot;parentNode&quot;&gt;
+&lt;div id=&quot;previousSibling&quot;&gt;&lt;/div&gt;&lt;div id=&quot;target&quot;&gt;&lt;div id=&quot;firstChild&quot;&gt;&lt;/div&gt;&lt;div id=&quot;lastChild&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;nextSibling&quot;&gt;&lt;/div&gt;
+&lt;/div&gt;
+
+&lt;script&gt;
+description('Test LICM-ed DOMJIT function getElementById will work correctly when the function is replaced.');
+
+function test(flag) {
+    var ret = 0;
+    var text = document.createTextNode('Cocoa');
+    for (var i = 0; i &lt; 1e4; ++i) {
+        ret = document.getElementById(&quot;target&quot;).nodeType;
+        ret = document.getElementById(&quot;target&quot;).nodeType;
+        if (i === 100 &amp;&amp; flag)
+            document.getElementById = function (id) { return text; };
+        ret = document.getElementById(&quot;target&quot;).nodeType;
+        ret = document.getElementById(&quot;target&quot;).nodeType;
+    }
+    return ret;
+}
+var result;
+(function () {
+    for (var i = 0; i &lt; 100; ++i) {
+        result = test(false);
+        shouldBe(`result`, `1`, true);
+    }
+    var original = document.getElementById;
+    result = test(true);
+    document.getElementById = original;
+    shouldBe(`result`, `Node.TEXT_NODE`, true);
+}());
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsdomdomjitfunctiongetelementbyidexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-expected.txt (0 => 208412)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-expected.txt        2016-11-05 01:15:17 UTC (rev 208412)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+Test DOMJIT function getElementById will be LICM-ed.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsdomdomjitfunctiongetelementbyidlicmexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-licm-expected.txt (0 => 208412)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-licm-expected.txt                                (rev 0)
+++ trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-licm-expected.txt        2016-11-05 01:15:17 UTC (rev 208412)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+Test DOMJIT function getElementById will be LICM-ed.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsjsdomdomjitfunctiongetelementbyidlicmhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-licm.html (0 => 208412)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-licm.html                                (rev 0)
+++ trunk/LayoutTests/js/dom/domjit-function-get-element-by-id-licm.html        2016-11-05 01:15:17 UTC (rev 208412)
</span><span class="lines">@@ -0,0 +1,37 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;div id=&quot;description&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
+
+&lt;div id=&quot;parentNode&quot;&gt;
+&lt;div id=&quot;previousSibling&quot;&gt;&lt;/div&gt;&lt;div id=&quot;target&quot;&gt;&lt;div id=&quot;firstChild&quot;&gt;&lt;/div&gt;&lt;div id=&quot;lastChild&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;nextSibling&quot;&gt;&lt;/div&gt;
+&lt;/div&gt;
+
+&lt;script&gt;
+description('Test DOMJIT function getElementById will be LICM-ed.');
+
+function test() {
+    var ret = 0;
+    for (var i = 0; i &lt; 1e4; ++i) {
+        ret = document.getElementById(&quot;target&quot;).nodeType;
+        ret = document.getElementById(&quot;target&quot;).nodeType;
+        ret = document.getElementById(&quot;target&quot;).nodeType;
+        ret = document.getElementById(&quot;target&quot;).nodeType;
+    }
+    return ret;
+}
+var result;
+(function () {
+    for (var i = 0; i &lt; 100; ++i) {
+        result = test();
+        shouldBe(`result`, `1`, true);
+    }
+}());
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsjsdomdomjitfunctiongetelementbyidhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/js/dom/domjit-function-get-element-by-id.html (0 => 208412)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/js/dom/domjit-function-get-element-by-id.html                                (rev 0)
+++ trunk/LayoutTests/js/dom/domjit-function-get-element-by-id.html        2016-11-05 01:15:17 UTC (rev 208412)
</span><span class="lines">@@ -0,0 +1,40 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;div id=&quot;description&quot;&gt;&lt;/div&gt;
+&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
+
+&lt;div id=&quot;parentNode&quot;&gt;
+&lt;div id=&quot;previousSibling&quot;&gt;&lt;/div&gt;&lt;div id=&quot;target&quot;&gt;&lt;div id=&quot;firstChild&quot;&gt;&lt;/div&gt;&lt;div id=&quot;lastChild&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div id=&quot;nextSibling&quot;&gt;&lt;/div&gt;
+&lt;/div&gt;
+
+&lt;script&gt;
+description('Test DOMJIT function getElementById will be LICM-ed.');
+
+function test(doc, id) {
+    var ret = 0;
+    for (var i = 0; i &lt; 1e4; ++i) {
+        ret = doc.getElementById(id).nodeType;
+    }
+    return ret;
+}
+var result;
+(function () {
+    var fragment = document.createDocumentFragment();
+    var div = document.createElement('div');
+    div.setAttribute('id', 'target2');
+    fragment.appendChild(div);
+    for (var i = 0; i &lt; 100; ++i) {
+        result = test(document, 'target');
+        shouldBe(`result`, `1`, true);
+        result = test(fragment, 'target2');
+        shouldBe(`result`, `1`, true);
+    }
+}());
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (208411 => 208412)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-11-05 00:55:43 UTC (rev 208411)
+++ trunk/Source/WebCore/ChangeLog        2016-11-05 01:15:17 UTC (rev 208412)
</span><span class="lines">@@ -1,3 +1,50 @@
</span><ins>+2016-11-04  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
+
+        [DOMJIT] Add DOMJIT::Signature annotation to Document::getElementById
+        https://bugs.webkit.org/show_bug.cgi?id=164356
+
+        Reviewed by Filip Pizlo.
+
+        This patch implements DOMJIT::Signature annotation for getElementById.
+        Since getElementById is also implemented in DocumentFragment, we implement
+        the branchIfDocumentFragment/branchIfNotDocumentFragment for that.
+
+        In dromaeo, we have a test like this.
+
+        test( &quot;getElementById&quot;, function(){
+            for ( var i = 0; i &lt; num * 30; i++ ) {
+                ret = document.getElementById(&quot;testA&quot; + num).nodeType;
+                ret = document.getElementById(&quot;testB&quot; + num).nodeType;
+                ret = document.getElementById(&quot;testC&quot; + num).nodeType;
+                ret = document.getElementById(&quot;testD&quot; + num).nodeType;
+                ret = document.getElementById(&quot;testE&quot; + num).nodeType;
+                ret = document.getElementById(&quot;testF&quot; + num).nodeType;
+            }
+        });
+
+        In the above test, JSC already knows the following things.
+
+        1. Since nodeType is now handled as CallDOMGetter, we know that it is pure.
+        2. getElementById look up becomes PureGetById since document is impure object. But it is kept as PureGetById. So it does not write DOMState.
+        3. `&quot;testA&quot; + num` will be converted to constant string.
+        4. CallDOM for getElementById said it just reads(DOMState:DOM). And it saids that it returns the same value as long as DOMState is not clobbered.
+        5. CheckCell leading CallDOM ensures the inlined getElementById node. (CallDOM node).
+
+        The key thing is that no node clobbers DOMState during the loop. So CallDOM &amp; CallDOMGetter can be hoisted.
+        This improves dom-query significantly. Dromaeo dom-query getElementById becomes 40x faster (247796 v.s. 6197).
+        Dromaeo dom-query getElementById (not in document) becomes 89x faster (630317.8 v.s. 7066.).
+
+        Tests: js/dom/domjit-function-get-element-by-id-changed.html
+               js/dom/domjit-function-get-element-by-id-licm.html
+               js/dom/domjit-function-get-element-by-id.html
+
+        * dom/NonElementParentNode.idl:
+        * domjit/DOMJITCheckDOM.h:
+        (WebCore::DOMJIT::TypeChecker&lt;DocumentFragment&gt;::branchIfFail):
+        * domjit/DOMJITHelpers.h:
+        (WebCore::DOMJIT::branchIfDocumentFragment):
+        (WebCore::DOMJIT::branchIfNotDocumentFragment):
+
</ins><span class="cx"> 2016-11-04  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Rename unscaledUnobscuredVisibleContentSize and unscaledVisibleContentSizeIncludingObscuredArea for attempted clarity
</span></span></pre></div>
<a id="trunkSourceWebCoredomNonElementParentNodeidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/NonElementParentNode.idl (208411 => 208412)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/NonElementParentNode.idl        2016-11-05 00:55:43 UTC (rev 208411)
+++ trunk/Source/WebCore/dom/NonElementParentNode.idl        2016-11-05 01:15:17 UTC (rev 208412)
</span><span class="lines">@@ -28,5 +28,5 @@
</span><span class="cx"> [
</span><span class="cx">     NoInterfaceObject,
</span><span class="cx"> ] interface NonElementParentNode {
</span><del>-    Element getElementById([RequiresExistingAtomicString] DOMString elementId);
</del><ins>+    [DOMJIT=ReadDOM] Element? getElementById([RequiresExistingAtomicString] DOMString elementId);
</ins><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoredomjitDOMJITCheckDOMh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/domjit/DOMJITCheckDOM.h (208411 => 208412)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/domjit/DOMJITCheckDOM.h        2016-11-05 00:55:43 UTC (rev 208411)
+++ trunk/Source/WebCore/domjit/DOMJITCheckDOM.h        2016-11-05 01:15:17 UTC (rev 208412)
</span><span class="lines">@@ -58,6 +58,14 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> template&lt;&gt;
</span><ins>+struct TypeChecker&lt;DocumentFragment&gt; {
+    static CCallHelpers::Jump branchIfFail(CCallHelpers&amp; jit, GPRReg dom)
+    {
+        return DOMJIT::branchIfNotDocumentFragment(jit, dom);
+    }
+};
+
+template&lt;&gt;
</ins><span class="cx"> struct TypeChecker&lt;Event&gt; {
</span><span class="cx">     static CCallHelpers::Jump branchIfFail(CCallHelpers&amp; jit, GPRReg dom)
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceWebCoredomjitDOMJITHelpersh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/domjit/DOMJITHelpers.h (208411 => 208412)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/domjit/DOMJITHelpers.h        2016-11-05 00:55:43 UTC (rev 208411)
+++ trunk/Source/WebCore/domjit/DOMJITHelpers.h        2016-11-05 01:15:17 UTC (rev 208412)
</span><span class="lines">@@ -152,6 +152,16 @@
</span><span class="cx">         CCallHelpers::TrustedImm32(JSC::JSType(JSElementType)));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline CCallHelpers::Jump branchIfDocumentFragment(CCallHelpers&amp; jit, GPRReg target)
+{
+    return jit.branchIfType(target, JSC::JSType(JSDocumentFragmentNodeType));
+}
+
+inline CCallHelpers::Jump branchIfNotDocumentFragment(CCallHelpers&amp; jit, GPRReg target)
+{
+    return jit.branchIfNotType(target, JSC::JSType(JSDocumentFragmentNodeType));
+}
+
</ins><span class="cx"> inline CCallHelpers::Jump branchIfDocumentWrapper(CCallHelpers&amp; jit, GPRReg target)
</span><span class="cx"> {
</span><span class="cx">     return jit.branchIfType(target, JSC::JSType(JSDocumentWrapperType));
</span></span></pre>
</div>
</div>

</body>
</html>