<!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>[207869] trunk/Source</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/207869">207869</a></dd>
<dt>Author</dt> <dd>utatane.tea@gmail.com</dd>
<dt>Date</dt> <dd>2016-10-25 22:43:04 -0700 (Tue, 25 Oct 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[DOMJIT] Tell IDL result type to DFG to drop type checks in AI
https://bugs.webkit.org/show_bug.cgi?id=163900

Reviewed by Sam Weinig.

Source/JavaScriptCore:

The IDL tells the conservative result type. While we use the heap prediction
for prediction propagation phase in DOMJIT getter (it is offered by get_by_id!),
we leverage the type told by IDL to produce the abstract value with the proven type
in AI. It effectively drops unnecessary type checks followed by CallDOM operations.

For example, when you write the code like,

    if (node.nodeType === 9) {
        // document.
    }

Previously, we inserted a Int32 check for the result of node.nodeType.
It is dropped now.

We annotate the DOMJIT getter in jsc.cpp to ensure that the unnecessary type checks
are correctly dropped when executing JSTests/stress/domjit-getter.js.

* dfg/DFGAbstractInterpreterInlines.h:
(JSC::DFG::AbstractInterpreter&lt;AbstractStateType&gt;::executeEffects):
* domjit/DOMJITGetterSetter.h:
(JSC::DOMJIT::GetterSetter::GetterSetter):
(JSC::DOMJIT::GetterSetter::resultType):
* jsc.cpp:
(WTF::DOMJITGetter::DOMJITNodeDOMJIT::DOMJITNodeDOMJIT):
(WTF::DOMJITGetterComplex::DOMJITNodeDOMJIT::DOMJITNodeDOMJIT):

Source/WebCore:

Add TestDOMJIT.idl for bindings generation tests.

* bindings/scripts/CodeGeneratorJS.pm:
(GetResultTypeFilter):
(GenerateImplementation):
* bindings/scripts/test/JS/JSTestDOMJIT.cpp: Added.
(WebCore::JSTestDOMJITPrototype::create):
(WebCore::JSTestDOMJITPrototype::createStructure):
(WebCore::JSTestDOMJITPrototype::JSTestDOMJITPrototype):
(WebCore::JSTestDOMJITConstructor::prototypeForStructure):
(WebCore::JSTestDOMJITConstructor::initializeProperties):
(WebCore::JSTestDOMJITPrototype::finishCreation):
(WebCore::JSTestDOMJIT::JSTestDOMJIT):
(WebCore::JSTestDOMJIT::createPrototype):
(WebCore::JSTestDOMJIT::prototype):
(WebCore::BindingCaller&lt;JSTestDOMJIT&gt;::castForAttribute):
(WebCore::jsTestDOMJITAnyAttr):
(WebCore::jsTestDOMJITAnyAttrGetter):
(WebCore::TestDOMJITAnyAttrDOMJIT::TestDOMJITAnyAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITAnyAttr):
(WebCore::jsTestDOMJITBooleanAttr):
(WebCore::jsTestDOMJITBooleanAttrGetter):
(WebCore::TestDOMJITBooleanAttrDOMJIT::TestDOMJITBooleanAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITBooleanAttr):
(WebCore::jsTestDOMJITByteAttr):
(WebCore::jsTestDOMJITByteAttrGetter):
(WebCore::TestDOMJITByteAttrDOMJIT::TestDOMJITByteAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITByteAttr):
(WebCore::jsTestDOMJITOctetAttr):
(WebCore::jsTestDOMJITOctetAttrGetter):
(WebCore::TestDOMJITOctetAttrDOMJIT::TestDOMJITOctetAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITOctetAttr):
(WebCore::jsTestDOMJITShortAttr):
(WebCore::jsTestDOMJITShortAttrGetter):
(WebCore::TestDOMJITShortAttrDOMJIT::TestDOMJITShortAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITShortAttr):
(WebCore::jsTestDOMJITUnsignedShortAttr):
(WebCore::jsTestDOMJITUnsignedShortAttrGetter):
(WebCore::TestDOMJITUnsignedShortAttrDOMJIT::TestDOMJITUnsignedShortAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnsignedShortAttr):
(WebCore::jsTestDOMJITLongAttr):
(WebCore::jsTestDOMJITLongAttrGetter):
(WebCore::TestDOMJITLongAttrDOMJIT::TestDOMJITLongAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITLongAttr):
(WebCore::jsTestDOMJITUnsignedLongAttr):
(WebCore::jsTestDOMJITUnsignedLongAttrGetter):
(WebCore::TestDOMJITUnsignedLongAttrDOMJIT::TestDOMJITUnsignedLongAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnsignedLongAttr):
(WebCore::jsTestDOMJITLongLongAttr):
(WebCore::jsTestDOMJITLongLongAttrGetter):
(WebCore::TestDOMJITLongLongAttrDOMJIT::TestDOMJITLongLongAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITLongLongAttr):
(WebCore::jsTestDOMJITUnsignedLongLongAttr):
(WebCore::jsTestDOMJITUnsignedLongLongAttrGetter):
(WebCore::TestDOMJITUnsignedLongLongAttrDOMJIT::TestDOMJITUnsignedLongLongAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnsignedLongLongAttr):
(WebCore::jsTestDOMJITFloatAttr):
(WebCore::jsTestDOMJITFloatAttrGetter):
(WebCore::TestDOMJITFloatAttrDOMJIT::TestDOMJITFloatAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITFloatAttr):
(WebCore::jsTestDOMJITUnrestrictedFloatAttr):
(WebCore::jsTestDOMJITUnrestrictedFloatAttrGetter):
(WebCore::TestDOMJITUnrestrictedFloatAttrDOMJIT::TestDOMJITUnrestrictedFloatAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnrestrictedFloatAttr):
(WebCore::jsTestDOMJITDoubleAttr):
(WebCore::jsTestDOMJITDoubleAttrGetter):
(WebCore::TestDOMJITDoubleAttrDOMJIT::TestDOMJITDoubleAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITDoubleAttr):
(WebCore::jsTestDOMJITUnrestrictedDoubleAttr):
(WebCore::jsTestDOMJITUnrestrictedDoubleAttrGetter):
(WebCore::TestDOMJITUnrestrictedDoubleAttrDOMJIT::TestDOMJITUnrestrictedDoubleAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnrestrictedDoubleAttr):
(WebCore::jsTestDOMJITDomStringAttr):
(WebCore::jsTestDOMJITDomStringAttrGetter):
(WebCore::TestDOMJITDomStringAttrDOMJIT::TestDOMJITDomStringAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITDomStringAttr):
(WebCore::jsTestDOMJITByteStringAttr):
(WebCore::jsTestDOMJITByteStringAttrGetter):
(WebCore::TestDOMJITByteStringAttrDOMJIT::TestDOMJITByteStringAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITByteStringAttr):
(WebCore::jsTestDOMJITUsvStringAttr):
(WebCore::jsTestDOMJITUsvStringAttrGetter):
(WebCore::TestDOMJITUsvStringAttrDOMJIT::TestDOMJITUsvStringAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUsvStringAttr):
(WebCore::jsTestDOMJITNodeAttr):
(WebCore::jsTestDOMJITNodeAttrGetter):
(WebCore::TestDOMJITNodeAttrDOMJIT::TestDOMJITNodeAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITNodeAttr):
(WebCore::jsTestDOMJITBooleanNullableAttr):
(WebCore::jsTestDOMJITBooleanNullableAttrGetter):
(WebCore::TestDOMJITBooleanNullableAttrDOMJIT::TestDOMJITBooleanNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITBooleanNullableAttr):
(WebCore::jsTestDOMJITByteNullableAttr):
(WebCore::jsTestDOMJITByteNullableAttrGetter):
(WebCore::TestDOMJITByteNullableAttrDOMJIT::TestDOMJITByteNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITByteNullableAttr):
(WebCore::jsTestDOMJITOctetNullableAttr):
(WebCore::jsTestDOMJITOctetNullableAttrGetter):
(WebCore::TestDOMJITOctetNullableAttrDOMJIT::TestDOMJITOctetNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITOctetNullableAttr):
(WebCore::jsTestDOMJITShortNullableAttr):
(WebCore::jsTestDOMJITShortNullableAttrGetter):
(WebCore::TestDOMJITShortNullableAttrDOMJIT::TestDOMJITShortNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITShortNullableAttr):
(WebCore::jsTestDOMJITUnsignedShortNullableAttr):
(WebCore::jsTestDOMJITUnsignedShortNullableAttrGetter):
(WebCore::TestDOMJITUnsignedShortNullableAttrDOMJIT::TestDOMJITUnsignedShortNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnsignedShortNullableAttr):
(WebCore::jsTestDOMJITLongNullableAttr):
(WebCore::jsTestDOMJITLongNullableAttrGetter):
(WebCore::TestDOMJITLongNullableAttrDOMJIT::TestDOMJITLongNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITLongNullableAttr):
(WebCore::jsTestDOMJITUnsignedLongNullableAttr):
(WebCore::jsTestDOMJITUnsignedLongNullableAttrGetter):
(WebCore::TestDOMJITUnsignedLongNullableAttrDOMJIT::TestDOMJITUnsignedLongNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnsignedLongNullableAttr):
(WebCore::jsTestDOMJITLongLongNullableAttr):
(WebCore::jsTestDOMJITLongLongNullableAttrGetter):
(WebCore::TestDOMJITLongLongNullableAttrDOMJIT::TestDOMJITLongLongNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITLongLongNullableAttr):
(WebCore::jsTestDOMJITUnsignedLongLongNullableAttr):
(WebCore::jsTestDOMJITUnsignedLongLongNullableAttrGetter):
(WebCore::TestDOMJITUnsignedLongLongNullableAttrDOMJIT::TestDOMJITUnsignedLongLongNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnsignedLongLongNullableAttr):
(WebCore::jsTestDOMJITFloatNullableAttr):
(WebCore::jsTestDOMJITFloatNullableAttrGetter):
(WebCore::TestDOMJITFloatNullableAttrDOMJIT::TestDOMJITFloatNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITFloatNullableAttr):
(WebCore::jsTestDOMJITUnrestrictedFloatNullableAttr):
(WebCore::jsTestDOMJITUnrestrictedFloatNullableAttrGetter):
(WebCore::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnrestrictedFloatNullableAttr):
(WebCore::jsTestDOMJITDoubleNullableAttr):
(WebCore::jsTestDOMJITDoubleNullableAttrGetter):
(WebCore::TestDOMJITDoubleNullableAttrDOMJIT::TestDOMJITDoubleNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITDoubleNullableAttr):
(WebCore::jsTestDOMJITUnrestrictedDoubleNullableAttr):
(WebCore::jsTestDOMJITUnrestrictedDoubleNullableAttrGetter):
(WebCore::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUnrestrictedDoubleNullableAttr):
(WebCore::jsTestDOMJITDomStringNullableAttr):
(WebCore::jsTestDOMJITDomStringNullableAttrGetter):
(WebCore::TestDOMJITDomStringNullableAttrDOMJIT::TestDOMJITDomStringNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITDomStringNullableAttr):
(WebCore::jsTestDOMJITByteStringNullableAttr):
(WebCore::jsTestDOMJITByteStringNullableAttrGetter):
(WebCore::TestDOMJITByteStringNullableAttrDOMJIT::TestDOMJITByteStringNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITByteStringNullableAttr):
(WebCore::jsTestDOMJITUsvStringNullableAttr):
(WebCore::jsTestDOMJITUsvStringNullableAttrGetter):
(WebCore::TestDOMJITUsvStringNullableAttrDOMJIT::TestDOMJITUsvStringNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITUsvStringNullableAttr):
(WebCore::jsTestDOMJITNodeNullableAttr):
(WebCore::jsTestDOMJITNodeNullableAttrGetter):
(WebCore::TestDOMJITNodeNullableAttrDOMJIT::TestDOMJITNodeNullableAttrDOMJIT):
(WebCore::domJITGetterSetterForTestDOMJITNodeNullableAttr):
(WebCore::jsTestDOMJITConstructor):
(WebCore::setJSTestDOMJITConstructor):
(WebCore::JSTestDOMJIT::getConstructor):
(WebCore::JSTestDOMJIT::visitChildren):
* bindings/scripts/test/JS/JSTestDOMJIT.h: Added.
(WebCore::JSTestDOMJIT::create):
(WebCore::JSTestDOMJIT::createStructure):
(WebCore::JSTestDOMJIT::wrapped):
(WebCore::JSTestDOMJIT::finishCreation):
* bindings/scripts/test/TestDOMJIT.idl: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGAbstractInterpreterInlinesh">trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredomjitDOMJITGetterSetterh">trunk/Source/JavaScriptCore/domjit/DOMJITGetterSetter.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejsccpp">trunk/Source/JavaScriptCore/jsc.cpp</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>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestDOMJITcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestDOMJITh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestTestDOMJITidl">trunk/Source/WebCore/bindings/scripts/test/TestDOMJIT.idl</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (207868 => 207869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-10-26 05:12:36 UTC (rev 207868)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-10-26 05:43:04 UTC (rev 207869)
</span><span class="lines">@@ -1,3 +1,36 @@
</span><ins>+2016-10-25  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
+
+        [DOMJIT] Tell IDL result type to DFG to drop type checks in AI
+        https://bugs.webkit.org/show_bug.cgi?id=163900
+
+        Reviewed by Sam Weinig.
+
+        The IDL tells the conservative result type. While we use the heap prediction
+        for prediction propagation phase in DOMJIT getter (it is offered by get_by_id!),
+        we leverage the type told by IDL to produce the abstract value with the proven type
+        in AI. It effectively drops unnecessary type checks followed by CallDOM operations.
+
+        For example, when you write the code like,
+
+            if (node.nodeType === 9) {
+                // document.
+            }
+
+        Previously, we inserted a Int32 check for the result of node.nodeType.
+        It is dropped now.
+
+        We annotate the DOMJIT getter in jsc.cpp to ensure that the unnecessary type checks
+        are correctly dropped when executing JSTests/stress/domjit-getter.js.
+
+        * dfg/DFGAbstractInterpreterInlines.h:
+        (JSC::DFG::AbstractInterpreter&lt;AbstractStateType&gt;::executeEffects):
+        * domjit/DOMJITGetterSetter.h:
+        (JSC::DOMJIT::GetterSetter::GetterSetter):
+        (JSC::DOMJIT::GetterSetter::resultType):
+        * jsc.cpp:
+        (WTF::DOMJITGetter::DOMJITNodeDOMJIT::DOMJITNodeDOMJIT):
+        (WTF::DOMJITGetterComplex::DOMJITNodeDOMJIT::DOMJITNodeDOMJIT):
+
</ins><span class="cx"> 2016-10-25  Mark Lam  &lt;mark.lam@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         String.prototype.replace() should throw an OutOfMemoryError when using too much memory.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGAbstractInterpreterInlinesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h (207868 => 207869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h        2016-10-26 05:12:36 UTC (rev 207868)
+++ trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h        2016-10-26 05:43:04 UTC (rev 207869)
</span><span class="lines">@@ -2290,10 +2290,11 @@
</span><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx">     case CallDOM: {
</span><del>-        DOMJIT::CallDOMPatchpoint* patchpoint = node-&gt;callDOMData()-&gt;patchpoint;
</del><ins>+        CallDOMData* callDOMData = node-&gt;callDOMData();
+        DOMJIT::CallDOMPatchpoint* patchpoint = callDOMData-&gt;patchpoint;
</ins><span class="cx">         if (patchpoint-&gt;effect.writes)
</span><span class="cx">             clobberWorld(node-&gt;origin.semantic, clobberLimit);
</span><del>-        forNode(node).makeBytecodeTop();
</del><ins>+        forNode(node).setType(m_graph, callDOMData-&gt;domJIT-&gt;resultType());
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx">     case CheckArray: {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredomjitDOMJITGetterSetterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/domjit/DOMJITGetterSetter.h (207868 => 207869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/domjit/DOMJITGetterSetter.h        2016-10-26 05:12:36 UTC (rev 207868)
+++ trunk/Source/JavaScriptCore/domjit/DOMJITGetterSetter.h        2016-10-26 05:43:04 UTC (rev 207869)
</span><span class="lines">@@ -37,10 +37,11 @@
</span><span class="cx">     typedef PropertySlot::GetValueFunc CustomGetter;
</span><span class="cx">     typedef PutPropertySlot::PutValueFunc CustomSetter;
</span><span class="cx"> 
</span><del>-    GetterSetter(CustomGetter getter, CustomSetter setter, const ClassInfo* classInfo)
</del><ins>+    GetterSetter(CustomGetter getter, CustomSetter setter, const ClassInfo* classInfo, SpeculatedType resultType)
</ins><span class="cx">         : m_getter(getter)
</span><span class="cx">         , m_setter(setter)
</span><span class="cx">         , m_thisClassInfo(classInfo)
</span><ins>+        , m_resultType(resultType)
</ins><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -49,6 +50,7 @@
</span><span class="cx">     CustomGetter getter() const { return m_getter; }
</span><span class="cx">     CustomSetter setter() const { return m_setter; }
</span><span class="cx">     const ClassInfo* thisClassInfo() const { return m_thisClassInfo; }
</span><ins>+    SpeculatedType resultType() const { return m_resultType; }
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(JIT)
</span><span class="cx">     virtual Ref&lt;DOMJIT::CallDOMPatchpoint&gt; callDOM() = 0;
</span><span class="lines">@@ -59,6 +61,7 @@
</span><span class="cx">     CustomGetter m_getter;
</span><span class="cx">     CustomSetter m_setter;
</span><span class="cx">     const ClassInfo* m_thisClassInfo;
</span><ins>+    SpeculatedType m_resultType;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejsccpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jsc.cpp (207868 => 207869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jsc.cpp        2016-10-26 05:12:36 UTC (rev 207868)
+++ trunk/Source/JavaScriptCore/jsc.cpp        2016-10-26 05:43:04 UTC (rev 207869)
</span><span class="lines">@@ -616,7 +616,7 @@
</span><span class="cx">     class DOMJITNodeDOMJIT : public DOMJIT::GetterSetter {
</span><span class="cx">     public:
</span><span class="cx">         DOMJITNodeDOMJIT()
</span><del>-            : DOMJIT::GetterSetter(DOMJITGetter::customGetter, nullptr, DOMJITNode::info())
</del><ins>+            : DOMJIT::GetterSetter(DOMJITGetter::customGetter, nullptr, DOMJITNode::info(), SpecInt32Only)
</ins><span class="cx">         {
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -701,7 +701,7 @@
</span><span class="cx">     class DOMJITNodeDOMJIT : public DOMJIT::GetterSetter {
</span><span class="cx">     public:
</span><span class="cx">         DOMJITNodeDOMJIT()
</span><del>-            : DOMJIT::GetterSetter(DOMJITGetterComplex::customGetter, nullptr, DOMJITNode::info())
</del><ins>+            : DOMJIT::GetterSetter(DOMJITGetterComplex::customGetter, nullptr, DOMJITNode::info(), SpecInt32Only)
</ins><span class="cx">         {
</span><span class="cx">         }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (207868 => 207869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-10-26 05:12:36 UTC (rev 207868)
+++ trunk/Source/WebCore/ChangeLog        2016-10-26 05:43:04 UTC (rev 207869)
</span><span class="lines">@@ -1,3 +1,177 @@
</span><ins>+2016-10-25  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
+
+        [DOMJIT] Tell IDL result type to DFG to drop type checks in AI
+        https://bugs.webkit.org/show_bug.cgi?id=163900
+
+        Reviewed by Sam Weinig.
+
+        Add TestDOMJIT.idl for bindings generation tests.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GetResultTypeFilter):
+        (GenerateImplementation):
+        * bindings/scripts/test/JS/JSTestDOMJIT.cpp: Added.
+        (WebCore::JSTestDOMJITPrototype::create):
+        (WebCore::JSTestDOMJITPrototype::createStructure):
+        (WebCore::JSTestDOMJITPrototype::JSTestDOMJITPrototype):
+        (WebCore::JSTestDOMJITConstructor::prototypeForStructure):
+        (WebCore::JSTestDOMJITConstructor::initializeProperties):
+        (WebCore::JSTestDOMJITPrototype::finishCreation):
+        (WebCore::JSTestDOMJIT::JSTestDOMJIT):
+        (WebCore::JSTestDOMJIT::createPrototype):
+        (WebCore::JSTestDOMJIT::prototype):
+        (WebCore::BindingCaller&lt;JSTestDOMJIT&gt;::castForAttribute):
+        (WebCore::jsTestDOMJITAnyAttr):
+        (WebCore::jsTestDOMJITAnyAttrGetter):
+        (WebCore::TestDOMJITAnyAttrDOMJIT::TestDOMJITAnyAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITAnyAttr):
+        (WebCore::jsTestDOMJITBooleanAttr):
+        (WebCore::jsTestDOMJITBooleanAttrGetter):
+        (WebCore::TestDOMJITBooleanAttrDOMJIT::TestDOMJITBooleanAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITBooleanAttr):
+        (WebCore::jsTestDOMJITByteAttr):
+        (WebCore::jsTestDOMJITByteAttrGetter):
+        (WebCore::TestDOMJITByteAttrDOMJIT::TestDOMJITByteAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITByteAttr):
+        (WebCore::jsTestDOMJITOctetAttr):
+        (WebCore::jsTestDOMJITOctetAttrGetter):
+        (WebCore::TestDOMJITOctetAttrDOMJIT::TestDOMJITOctetAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITOctetAttr):
+        (WebCore::jsTestDOMJITShortAttr):
+        (WebCore::jsTestDOMJITShortAttrGetter):
+        (WebCore::TestDOMJITShortAttrDOMJIT::TestDOMJITShortAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITShortAttr):
+        (WebCore::jsTestDOMJITUnsignedShortAttr):
+        (WebCore::jsTestDOMJITUnsignedShortAttrGetter):
+        (WebCore::TestDOMJITUnsignedShortAttrDOMJIT::TestDOMJITUnsignedShortAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnsignedShortAttr):
+        (WebCore::jsTestDOMJITLongAttr):
+        (WebCore::jsTestDOMJITLongAttrGetter):
+        (WebCore::TestDOMJITLongAttrDOMJIT::TestDOMJITLongAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITLongAttr):
+        (WebCore::jsTestDOMJITUnsignedLongAttr):
+        (WebCore::jsTestDOMJITUnsignedLongAttrGetter):
+        (WebCore::TestDOMJITUnsignedLongAttrDOMJIT::TestDOMJITUnsignedLongAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongAttr):
+        (WebCore::jsTestDOMJITLongLongAttr):
+        (WebCore::jsTestDOMJITLongLongAttrGetter):
+        (WebCore::TestDOMJITLongLongAttrDOMJIT::TestDOMJITLongLongAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITLongLongAttr):
+        (WebCore::jsTestDOMJITUnsignedLongLongAttr):
+        (WebCore::jsTestDOMJITUnsignedLongLongAttrGetter):
+        (WebCore::TestDOMJITUnsignedLongLongAttrDOMJIT::TestDOMJITUnsignedLongLongAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongLongAttr):
+        (WebCore::jsTestDOMJITFloatAttr):
+        (WebCore::jsTestDOMJITFloatAttrGetter):
+        (WebCore::TestDOMJITFloatAttrDOMJIT::TestDOMJITFloatAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITFloatAttr):
+        (WebCore::jsTestDOMJITUnrestrictedFloatAttr):
+        (WebCore::jsTestDOMJITUnrestrictedFloatAttrGetter):
+        (WebCore::TestDOMJITUnrestrictedFloatAttrDOMJIT::TestDOMJITUnrestrictedFloatAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedFloatAttr):
+        (WebCore::jsTestDOMJITDoubleAttr):
+        (WebCore::jsTestDOMJITDoubleAttrGetter):
+        (WebCore::TestDOMJITDoubleAttrDOMJIT::TestDOMJITDoubleAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITDoubleAttr):
+        (WebCore::jsTestDOMJITUnrestrictedDoubleAttr):
+        (WebCore::jsTestDOMJITUnrestrictedDoubleAttrGetter):
+        (WebCore::TestDOMJITUnrestrictedDoubleAttrDOMJIT::TestDOMJITUnrestrictedDoubleAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedDoubleAttr):
+        (WebCore::jsTestDOMJITDomStringAttr):
+        (WebCore::jsTestDOMJITDomStringAttrGetter):
+        (WebCore::TestDOMJITDomStringAttrDOMJIT::TestDOMJITDomStringAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITDomStringAttr):
+        (WebCore::jsTestDOMJITByteStringAttr):
+        (WebCore::jsTestDOMJITByteStringAttrGetter):
+        (WebCore::TestDOMJITByteStringAttrDOMJIT::TestDOMJITByteStringAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITByteStringAttr):
+        (WebCore::jsTestDOMJITUsvStringAttr):
+        (WebCore::jsTestDOMJITUsvStringAttrGetter):
+        (WebCore::TestDOMJITUsvStringAttrDOMJIT::TestDOMJITUsvStringAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUsvStringAttr):
+        (WebCore::jsTestDOMJITNodeAttr):
+        (WebCore::jsTestDOMJITNodeAttrGetter):
+        (WebCore::TestDOMJITNodeAttrDOMJIT::TestDOMJITNodeAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITNodeAttr):
+        (WebCore::jsTestDOMJITBooleanNullableAttr):
+        (WebCore::jsTestDOMJITBooleanNullableAttrGetter):
+        (WebCore::TestDOMJITBooleanNullableAttrDOMJIT::TestDOMJITBooleanNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITBooleanNullableAttr):
+        (WebCore::jsTestDOMJITByteNullableAttr):
+        (WebCore::jsTestDOMJITByteNullableAttrGetter):
+        (WebCore::TestDOMJITByteNullableAttrDOMJIT::TestDOMJITByteNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITByteNullableAttr):
+        (WebCore::jsTestDOMJITOctetNullableAttr):
+        (WebCore::jsTestDOMJITOctetNullableAttrGetter):
+        (WebCore::TestDOMJITOctetNullableAttrDOMJIT::TestDOMJITOctetNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITOctetNullableAttr):
+        (WebCore::jsTestDOMJITShortNullableAttr):
+        (WebCore::jsTestDOMJITShortNullableAttrGetter):
+        (WebCore::TestDOMJITShortNullableAttrDOMJIT::TestDOMJITShortNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITShortNullableAttr):
+        (WebCore::jsTestDOMJITUnsignedShortNullableAttr):
+        (WebCore::jsTestDOMJITUnsignedShortNullableAttrGetter):
+        (WebCore::TestDOMJITUnsignedShortNullableAttrDOMJIT::TestDOMJITUnsignedShortNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnsignedShortNullableAttr):
+        (WebCore::jsTestDOMJITLongNullableAttr):
+        (WebCore::jsTestDOMJITLongNullableAttrGetter):
+        (WebCore::TestDOMJITLongNullableAttrDOMJIT::TestDOMJITLongNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITLongNullableAttr):
+        (WebCore::jsTestDOMJITUnsignedLongNullableAttr):
+        (WebCore::jsTestDOMJITUnsignedLongNullableAttrGetter):
+        (WebCore::TestDOMJITUnsignedLongNullableAttrDOMJIT::TestDOMJITUnsignedLongNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongNullableAttr):
+        (WebCore::jsTestDOMJITLongLongNullableAttr):
+        (WebCore::jsTestDOMJITLongLongNullableAttrGetter):
+        (WebCore::TestDOMJITLongLongNullableAttrDOMJIT::TestDOMJITLongLongNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITLongLongNullableAttr):
+        (WebCore::jsTestDOMJITUnsignedLongLongNullableAttr):
+        (WebCore::jsTestDOMJITUnsignedLongLongNullableAttrGetter):
+        (WebCore::TestDOMJITUnsignedLongLongNullableAttrDOMJIT::TestDOMJITUnsignedLongLongNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnsignedLongLongNullableAttr):
+        (WebCore::jsTestDOMJITFloatNullableAttr):
+        (WebCore::jsTestDOMJITFloatNullableAttrGetter):
+        (WebCore::TestDOMJITFloatNullableAttrDOMJIT::TestDOMJITFloatNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITFloatNullableAttr):
+        (WebCore::jsTestDOMJITUnrestrictedFloatNullableAttr):
+        (WebCore::jsTestDOMJITUnrestrictedFloatNullableAttrGetter):
+        (WebCore::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedFloatNullableAttr):
+        (WebCore::jsTestDOMJITDoubleNullableAttr):
+        (WebCore::jsTestDOMJITDoubleNullableAttrGetter):
+        (WebCore::TestDOMJITDoubleNullableAttrDOMJIT::TestDOMJITDoubleNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITDoubleNullableAttr):
+        (WebCore::jsTestDOMJITUnrestrictedDoubleNullableAttr):
+        (WebCore::jsTestDOMJITUnrestrictedDoubleNullableAttrGetter):
+        (WebCore::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUnrestrictedDoubleNullableAttr):
+        (WebCore::jsTestDOMJITDomStringNullableAttr):
+        (WebCore::jsTestDOMJITDomStringNullableAttrGetter):
+        (WebCore::TestDOMJITDomStringNullableAttrDOMJIT::TestDOMJITDomStringNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITDomStringNullableAttr):
+        (WebCore::jsTestDOMJITByteStringNullableAttr):
+        (WebCore::jsTestDOMJITByteStringNullableAttrGetter):
+        (WebCore::TestDOMJITByteStringNullableAttrDOMJIT::TestDOMJITByteStringNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITByteStringNullableAttr):
+        (WebCore::jsTestDOMJITUsvStringNullableAttr):
+        (WebCore::jsTestDOMJITUsvStringNullableAttrGetter):
+        (WebCore::TestDOMJITUsvStringNullableAttrDOMJIT::TestDOMJITUsvStringNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITUsvStringNullableAttr):
+        (WebCore::jsTestDOMJITNodeNullableAttr):
+        (WebCore::jsTestDOMJITNodeNullableAttrGetter):
+        (WebCore::TestDOMJITNodeNullableAttrDOMJIT::TestDOMJITNodeNullableAttrDOMJIT):
+        (WebCore::domJITGetterSetterForTestDOMJITNodeNullableAttr):
+        (WebCore::jsTestDOMJITConstructor):
+        (WebCore::setJSTestDOMJITConstructor):
+        (WebCore::JSTestDOMJIT::getConstructor):
+        (WebCore::JSTestDOMJIT::visitChildren):
+        * bindings/scripts/test/JS/JSTestDOMJIT.h: Added.
+        (WebCore::JSTestDOMJIT::create):
+        (WebCore::JSTestDOMJIT::createStructure):
+        (WebCore::JSTestDOMJIT::wrapped):
+        (WebCore::JSTestDOMJIT::finishCreation):
+        * bindings/scripts/test/TestDOMJIT.idl: Added.
+
</ins><span class="cx"> 2016-10-25  Brent Fulgham  &lt;bfulgham@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Win] Unreviewed build fix.
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (207868 => 207869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-10-26 05:12:36 UTC (rev 207868)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-10-26 05:43:04 UTC (rev 207869)
</span><span class="lines">@@ -2491,6 +2491,42 @@
</span><span class="cx">     push(@implContent, &quot;    putDirectWithoutTransition(vm, vm.propertyNames-&gt;unscopablesSymbol, &amp;unscopables, DontEnum | ReadOnly);\n&quot;);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+sub GetResultTypeFilter
+{
+    my ($signature) = @_;
+    my $idlType = $signature-&gt;idlType;
+
+    my %TypeFilters = (
+        &quot;any&quot; =&gt; &quot;SpecHeapTop&quot;,
+        &quot;boolean&quot; =&gt; &quot;SpecBoolean&quot;,
+        &quot;byte&quot; =&gt; &quot;SpecInt32Only&quot;,
+        &quot;octet&quot; =&gt; &quot;SpecInt32Only&quot;,
+        &quot;short&quot; =&gt; &quot;SpecInt32Only&quot;,
+        &quot;unsigned short&quot; =&gt; &quot;SpecInt32Only&quot;,
+        &quot;long&quot; =&gt; &quot;SpecInt32Only&quot;,
+        &quot;unsigned long&quot; =&gt; &quot;SpecBytecodeNumber&quot;,
+        &quot;long long&quot; =&gt; &quot;SpecBytecodeNumber&quot;,
+        &quot;unsigned long long&quot; =&gt; &quot;SpecBytecodeNumber&quot;,
+        &quot;float&quot; =&gt; &quot;SpecBytecodeNumber&quot;,
+        &quot;unrestricted float&quot; =&gt; &quot;SpecBytecodeNumber&quot;,
+        &quot;double&quot; =&gt; &quot;SpecBytecodeNumber&quot;,
+        &quot;unrestricted double&quot; =&gt; &quot;SpecBytecodeNumber&quot;,
+        &quot;DOMString&quot; =&gt; &quot;SpecString&quot;,
+        &quot;ByteString&quot; =&gt; &quot;SpecString&quot;,
+        &quot;USVString&quot; =&gt; &quot;SpecString&quot;,
+    );
+
+    if (exists $TypeFilters{$idlType-&gt;name}) {
+        my $resultType = &quot;JSC::$TypeFilters{$idlType-&gt;name}&quot;;
+        if ($idlType-&gt;isNullable) {
+            die &quot;\&quot;any\&quot; type must not become nullable.&quot; if $idlType-&gt;name eq &quot;any&quot;;
+            $resultType = &quot;($resultType | JSC::SpecOther)&quot;;
+        }
+        return $resultType;
+    }
+    return &quot;SpecHeapTop&quot;;
+}
+
</ins><span class="cx"> sub GenerateImplementation
</span><span class="cx"> {
</span><span class="cx">     my ($object, $interface, $enumerations, $dictionaries) = @_;
</span><span class="lines">@@ -3268,8 +3304,9 @@
</span><span class="cx">                 my $domJITClassName = $generatorName . &quot;DOMJIT&quot;;
</span><span class="cx">                 my $getter = GetAttributeGetterName($interface, $generatorName, $attribute);
</span><span class="cx">                 my $setter = IsReadonly($attribute) ? &quot;nullptr&quot; : GetAttributeSetterName($interface, $generatorName, $attribute);
</span><ins>+                my $resultType = GetResultTypeFilter($attribute-&gt;signature);
</ins><span class="cx">                 push(@implContent, &quot;$domJITClassName::$domJITClassName()\n&quot;);
</span><del>-                push(@implContent, &quot;    : JSC::DOMJIT::GetterSetter($getter, $setter, ${className}::info())\n&quot;);
</del><ins>+                push(@implContent, &quot;    : JSC::DOMJIT::GetterSetter($getter, $setter, ${className}::info(), $resultType)\n&quot;);
</ins><span class="cx">                 push(@implContent, &quot;{\n&quot;);
</span><span class="cx">                 push(@implContent, &quot;}\n\n&quot;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestDOMJITcpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp (0 => 207869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.cpp        2016-10-26 05:43:04 UTC (rev 207869)
</span><span class="lines">@@ -0,0 +1,1171 @@
</span><ins>+/*
+    This file is part of the WebKit open source project.
+    This file has been generated by generate-bindings.pl. DO NOT MODIFY!
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include &quot;config.h&quot;
+#include &quot;JSTestDOMJIT.h&quot;
+
+#include &quot;JSByteString.h&quot;
+#include &quot;JSDOMBinding.h&quot;
+#include &quot;JSDOMConstructor.h&quot;
+#include &quot;JSDOMConvert.h&quot;
+#include &lt;wtf/GetPtr.h&gt;
+#include &lt;wtf/NeverDestroyed.h&gt;
+
+using namespace JSC;
+
+namespace WebCore {
+
+// Attributes
+
+JSC::EncodedJSValue jsTestDOMJITAnyAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITBooleanAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITByteAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITOctetAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITShortAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnsignedShortAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITLongAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnsignedLongAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITLongLongAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnsignedLongLongAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITFloatAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnrestrictedFloatAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITDoubleAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnrestrictedDoubleAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITDomStringAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITByteStringAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUsvStringAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITNodeAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITBooleanNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITByteNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITOctetNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITShortNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnsignedShortNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITLongNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnsignedLongNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITLongLongNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnsignedLongLongNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITFloatNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnrestrictedFloatNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITDoubleNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUnrestrictedDoubleNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITDomStringNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITByteStringNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITUsvStringNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITNodeNullableAttr(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestDOMJITConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+bool setJSTestDOMJITConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
+
+class JSTestDOMJITPrototype : public JSC::JSNonFinalObject {
+public:
+    using Base = JSC::JSNonFinalObject;
+    static JSTestDOMJITPrototype* create(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure)
+    {
+        JSTestDOMJITPrototype* ptr = new (NotNull, JSC::allocateCell&lt;JSTestDOMJITPrototype&gt;(vm.heap)) JSTestDOMJITPrototype(vm, globalObject, structure);
+        ptr-&gt;finishCreation(vm);
+        return ptr;
+    }
+
+    DECLARE_INFO;
+    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
+    {
+        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
+    }
+
+private:
+    JSTestDOMJITPrototype(JSC::VM&amp; vm, JSC::JSGlobalObject*, JSC::Structure* structure)
+        : JSC::JSNonFinalObject(vm, structure)
+    {
+    }
+
+    void finishCreation(JSC::VM&amp;);
+};
+
+using JSTestDOMJITConstructor = JSDOMConstructorNotConstructable&lt;JSTestDOMJIT&gt;;
+
+template&lt;&gt; JSValue JSTestDOMJITConstructor::prototypeForStructure(JSC::VM&amp; vm, const JSDOMGlobalObject&amp; globalObject)
+{
+    return JSNode::getConstructor(vm, &amp;globalObject);
+}
+
+template&lt;&gt; void JSTestDOMJITConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
+{
+    putDirect(vm, vm.propertyNames-&gt;prototype, JSTestDOMJIT::prototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
+    putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestDOMJIT&quot;))), ReadOnly | DontEnum);
+    putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
+}
+
+template&lt;&gt; const ClassInfo JSTestDOMJITConstructor::s_info = { &quot;TestDOMJIT&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestDOMJITConstructor) };
+
+/* Hash table for prototype */
+
+static const HashTableValue JSTestDOMJITPrototypeTableValues[] =
+{
+    { &quot;constructor&quot;, DontEnum, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestDOMJITConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestDOMJITConstructor) } },
+    { &quot;anyAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITAnyAttr), (intptr_t) (0) } },
+    { &quot;booleanAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITBooleanAttr), (intptr_t) (0) } },
+    { &quot;byteAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITByteAttr), (intptr_t) (0) } },
+    { &quot;octetAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITOctetAttr), (intptr_t) (0) } },
+    { &quot;shortAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITShortAttr), (intptr_t) (0) } },
+    { &quot;unsignedShortAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITUnsignedShortAttr), (intptr_t) (0) } },
+    { &quot;longAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITLongAttr), (intptr_t) (0) } },
+    { &quot;unsignedLongAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITUnsignedLongAttr), (intptr_t) (0) } },
+    { &quot;longLongAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITLongLongAttr), (intptr_t) (0) } },
+    { &quot;unsignedLongLongAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITUnsignedLongLongAttr), (intptr_t) (0) } },
+    { &quot;floatAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITFloatAttr), (intptr_t) (0) } },
+    { &quot;unrestrictedFloatAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITUnrestrictedFloatAttr), (intptr_t) (0) } },
+    { &quot;doubleAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITDoubleAttr), (intptr_t) (0) } },
+    { &quot;unrestrictedDoubleAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITUnrestrictedDoubleAttr), (intptr_t) (0) } },
+    { &quot;domStringAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITDomStringAttr), (intptr_t) (0) } },
+    { &quot;byteStringAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITByteStringAttr), (intptr_t) (0) } },
+    { &quot;usvStringAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITUsvStringAttr), (intptr_t) (0) } },
+    { &quot;nodeAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITNodeAttr), (intptr_t) (0) } },
+    { &quot;booleanNullableAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITBooleanNullableAttr), (intptr_t) (0) } },
+    { &quot;byteNullableAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITByteNullableAttr), (intptr_t) (0) } },
+    { &quot;octetNullableAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITOctetNullableAttr), (intptr_t) (0) } },
+    { &quot;shortNullableAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITShortNullableAttr), (intptr_t) (0) } },
+    { &quot;unsignedShortNullableAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITUnsignedShortNullableAttr), (intptr_t) (0) } },
+    { &quot;longNullableAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITLongNullableAttr), (intptr_t) (0) } },
+    { &quot;unsignedLongNullableAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITUnsignedLongNullableAttr), (intptr_t) (0) } },
+    { &quot;longLongNullableAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITLongLongNullableAttr), (intptr_t) (0) } },
+    { &quot;unsignedLongLongNullableAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITUnsignedLongLongNullableAttr), (intptr_t) (0) } },
+    { &quot;floatNullableAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITFloatNullableAttr), (intptr_t) (0) } },
+    { &quot;unrestrictedFloatNullableAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITUnrestrictedFloatNullableAttr), (intptr_t) (0) } },
+    { &quot;doubleNullableAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITDoubleNullableAttr), (intptr_t) (0) } },
+    { &quot;unrestrictedDoubleNullableAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITUnrestrictedDoubleNullableAttr), (intptr_t) (0) } },
+    { &quot;domStringNullableAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITDomStringNullableAttr), (intptr_t) (0) } },
+    { &quot;byteStringNullableAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITByteStringNullableAttr), (intptr_t) (0) } },
+    { &quot;usvStringNullableAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITUsvStringNullableAttr), (intptr_t) (0) } },
+    { &quot;nodeNullableAttr&quot;, ReadOnly | CustomAccessor | DOMJITAttribute, NoIntrinsic, { (intptr_t)static_cast&lt;DOMJITGetterSetterGenerator&gt;(domJITGetterSetterForTestDOMJITNodeNullableAttr), (intptr_t) (0) } },
+};
+
+const ClassInfo JSTestDOMJITPrototype::s_info = { &quot;TestDOMJITPrototype&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestDOMJITPrototype) };
+
+void JSTestDOMJITPrototype::finishCreation(VM&amp; vm)
+{
+    Base::finishCreation(vm);
+    reifyStaticProperties(vm, JSTestDOMJITPrototypeTableValues, *this);
+}
+
+const ClassInfo JSTestDOMJIT::s_info = { &quot;TestDOMJIT&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestDOMJIT) };
+
+JSTestDOMJIT::JSTestDOMJIT(Structure* structure, JSDOMGlobalObject&amp; globalObject, Ref&lt;TestDOMJIT&gt;&amp;&amp; impl)
+    : JSNode(structure, globalObject, WTFMove(impl))
+{
+}
+
+JSObject* JSTestDOMJIT::createPrototype(VM&amp; vm, JSGlobalObject* globalObject)
+{
+    return JSTestDOMJITPrototype::create(vm, globalObject, JSTestDOMJITPrototype::createStructure(vm, globalObject, JSNode::prototype(vm, globalObject)));
+}
+
+JSObject* JSTestDOMJIT::prototype(VM&amp; vm, JSGlobalObject* globalObject)
+{
+    return getDOMPrototype&lt;JSTestDOMJIT&gt;(vm, globalObject);
+}
+
+template&lt;&gt; inline JSTestDOMJIT* BindingCaller&lt;JSTestDOMJIT&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)
+{
+    return jsDynamicCast&lt;JSTestDOMJIT*&gt;(JSValue::decode(thisValue));
+}
+
+static inline JSValue jsTestDOMJITAnyAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITAnyAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITAnyAttrGetter&gt;(state, thisValue, &quot;anyAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITAnyAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLAny&gt;(impl.anyAttr());
+    return result;
+}
+
+TestDOMJITAnyAttrDOMJIT::TestDOMJITAnyAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITAnyAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecHeapTop)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITAnyAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITAnyAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITBooleanAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITBooleanAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITBooleanAttrGetter&gt;(state, thisValue, &quot;booleanAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITBooleanAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLBoolean&gt;(impl.booleanAttr());
+    return result;
+}
+
+TestDOMJITBooleanAttrDOMJIT::TestDOMJITBooleanAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITBooleanAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecBoolean)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITBooleanAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITBooleanAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITByteAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITByteAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITByteAttrGetter&gt;(state, thisValue, &quot;byteAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITByteAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLByte&gt;(impl.byteAttr());
+    return result;
+}
+
+TestDOMJITByteAttrDOMJIT::TestDOMJITByteAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITByteAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecInt32Only)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITByteAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITOctetAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITOctetAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITOctetAttrGetter&gt;(state, thisValue, &quot;octetAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITOctetAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLOctet&gt;(impl.octetAttr());
+    return result;
+}
+
+TestDOMJITOctetAttrDOMJIT::TestDOMJITOctetAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITOctetAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecInt32Only)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITOctetAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITOctetAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITShortAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITShortAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITShortAttrGetter&gt;(state, thisValue, &quot;shortAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITShortAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLShort&gt;(impl.shortAttr());
+    return result;
+}
+
+TestDOMJITShortAttrDOMJIT::TestDOMJITShortAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITShortAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecInt32Only)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITShortAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITShortAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnsignedShortAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITUnsignedShortAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITUnsignedShortAttrGetter&gt;(state, thisValue, &quot;unsignedShortAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITUnsignedShortAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLUnsignedShort&gt;(impl.unsignedShortAttr());
+    return result;
+}
+
+TestDOMJITUnsignedShortAttrDOMJIT::TestDOMJITUnsignedShortAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedShortAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecInt32Only)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedShortAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITUnsignedShortAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITLongAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITLongAttrGetter&gt;(state, thisValue, &quot;longAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITLongAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLLong&gt;(impl.longAttr());
+    return result;
+}
+
+TestDOMJITLongAttrDOMJIT::TestDOMJITLongAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITLongAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecInt32Only)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITLongAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnsignedLongAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITUnsignedLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITUnsignedLongAttrGetter&gt;(state, thisValue, &quot;unsignedLongAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITUnsignedLongAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLUnsignedLong&gt;(impl.unsignedLongAttr());
+    return result;
+}
+
+TestDOMJITUnsignedLongAttrDOMJIT::TestDOMJITUnsignedLongAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedLongAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecBytecodeNumber)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITUnsignedLongAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITLongLongAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITLongLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITLongLongAttrGetter&gt;(state, thisValue, &quot;longLongAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITLongLongAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLLongLong&gt;(impl.longLongAttr());
+    return result;
+}
+
+TestDOMJITLongLongAttrDOMJIT::TestDOMJITLongLongAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITLongLongAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecBytecodeNumber)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongLongAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITLongLongAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnsignedLongLongAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITUnsignedLongLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITUnsignedLongLongAttrGetter&gt;(state, thisValue, &quot;unsignedLongLongAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITUnsignedLongLongAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLUnsignedLongLong&gt;(impl.unsignedLongLongAttr());
+    return result;
+}
+
+TestDOMJITUnsignedLongLongAttrDOMJIT::TestDOMJITUnsignedLongLongAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedLongLongAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecBytecodeNumber)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongLongAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITUnsignedLongLongAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITFloatAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITFloatAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITFloatAttrGetter&gt;(state, thisValue, &quot;floatAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITFloatAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLFloat&gt;(impl.floatAttr());
+    return result;
+}
+
+TestDOMJITFloatAttrDOMJIT::TestDOMJITFloatAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITFloatAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecBytecodeNumber)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITFloatAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITFloatAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnrestrictedFloatAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITUnrestrictedFloatAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITUnrestrictedFloatAttrGetter&gt;(state, thisValue, &quot;unrestrictedFloatAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITUnrestrictedFloatAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLUnrestrictedFloat&gt;(impl.unrestrictedFloatAttr());
+    return result;
+}
+
+TestDOMJITUnrestrictedFloatAttrDOMJIT::TestDOMJITUnrestrictedFloatAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnrestrictedFloatAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecBytecodeNumber)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedFloatAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITUnrestrictedFloatAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITDoubleAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITDoubleAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITDoubleAttrGetter&gt;(state, thisValue, &quot;doubleAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITDoubleAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLDouble&gt;(impl.doubleAttr());
+    return result;
+}
+
+TestDOMJITDoubleAttrDOMJIT::TestDOMJITDoubleAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITDoubleAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecBytecodeNumber)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDoubleAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITDoubleAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnrestrictedDoubleAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITUnrestrictedDoubleAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITUnrestrictedDoubleAttrGetter&gt;(state, thisValue, &quot;unrestrictedDoubleAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITUnrestrictedDoubleAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLUnrestrictedDouble&gt;(impl.unrestrictedDoubleAttr());
+    return result;
+}
+
+TestDOMJITUnrestrictedDoubleAttrDOMJIT::TestDOMJITUnrestrictedDoubleAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnrestrictedDoubleAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecBytecodeNumber)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedDoubleAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITUnrestrictedDoubleAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITDomStringAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITDomStringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITDomStringAttrGetter&gt;(state, thisValue, &quot;domStringAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITDomStringAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLDOMString&gt;(state, impl.domStringAttr());
+    return result;
+}
+
+TestDOMJITDomStringAttrDOMJIT::TestDOMJITDomStringAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITDomStringAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecString)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDomStringAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITDomStringAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITByteStringAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITByteStringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITByteStringAttrGetter&gt;(state, thisValue, &quot;byteStringAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITByteStringAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS(&amp;state, thisObject.globalObject(), impl.byteStringAttr());
+    return result;
+}
+
+TestDOMJITByteStringAttrDOMJIT::TestDOMJITByteStringAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITByteStringAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecString)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteStringAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITByteStringAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUsvStringAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITUsvStringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITUsvStringAttrGetter&gt;(state, thisValue, &quot;usvStringAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITUsvStringAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLUSVString&gt;(state, impl.usvStringAttr());
+    return result;
+}
+
+TestDOMJITUsvStringAttrDOMJIT::TestDOMJITUsvStringAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUsvStringAttr, nullptr, JSTestDOMJIT::info(), JSC::SpecString)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUsvStringAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITUsvStringAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITNodeAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITNodeAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITNodeAttrGetter&gt;(state, thisValue, &quot;nodeAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITNodeAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS(&amp;state, thisObject.globalObject(), impl.nodeAttr());
+    return result;
+}
+
+TestDOMJITNodeAttrDOMJIT::TestDOMJITNodeAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITNodeAttr, nullptr, JSTestDOMJIT::info(), SpecHeapTop)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITNodeAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITNodeAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITBooleanNullableAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITBooleanNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITBooleanNullableAttrGetter&gt;(state, thisValue, &quot;booleanNullableAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITBooleanNullableAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLNullable&lt;IDLBoolean&gt;&gt;(impl.booleanNullableAttr());
+    return result;
+}
+
+TestDOMJITBooleanNullableAttrDOMJIT::TestDOMJITBooleanNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITBooleanNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecBoolean | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITBooleanNullableAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITBooleanNullableAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITByteNullableAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITByteNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITByteNullableAttrGetter&gt;(state, thisValue, &quot;byteNullableAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITByteNullableAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLNullable&lt;IDLByte&gt;&gt;(impl.byteNullableAttr());
+    return result;
+}
+
+TestDOMJITByteNullableAttrDOMJIT::TestDOMJITByteNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITByteNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecInt32Only | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteNullableAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITByteNullableAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITOctetNullableAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITOctetNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITOctetNullableAttrGetter&gt;(state, thisValue, &quot;octetNullableAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITOctetNullableAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLNullable&lt;IDLOctet&gt;&gt;(impl.octetNullableAttr());
+    return result;
+}
+
+TestDOMJITOctetNullableAttrDOMJIT::TestDOMJITOctetNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITOctetNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecInt32Only | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITOctetNullableAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITOctetNullableAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITShortNullableAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITShortNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITShortNullableAttrGetter&gt;(state, thisValue, &quot;shortNullableAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITShortNullableAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLNullable&lt;IDLShort&gt;&gt;(impl.shortNullableAttr());
+    return result;
+}
+
+TestDOMJITShortNullableAttrDOMJIT::TestDOMJITShortNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITShortNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecInt32Only | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITShortNullableAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITShortNullableAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnsignedShortNullableAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITUnsignedShortNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITUnsignedShortNullableAttrGetter&gt;(state, thisValue, &quot;unsignedShortNullableAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITUnsignedShortNullableAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLNullable&lt;IDLUnsignedShort&gt;&gt;(impl.unsignedShortNullableAttr());
+    return result;
+}
+
+TestDOMJITUnsignedShortNullableAttrDOMJIT::TestDOMJITUnsignedShortNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedShortNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecInt32Only | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedShortNullableAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITUnsignedShortNullableAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITLongNullableAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITLongNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITLongNullableAttrGetter&gt;(state, thisValue, &quot;longNullableAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITLongNullableAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLNullable&lt;IDLLong&gt;&gt;(impl.longNullableAttr());
+    return result;
+}
+
+TestDOMJITLongNullableAttrDOMJIT::TestDOMJITLongNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITLongNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecInt32Only | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongNullableAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITLongNullableAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnsignedLongNullableAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITUnsignedLongNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITUnsignedLongNullableAttrGetter&gt;(state, thisValue, &quot;unsignedLongNullableAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITUnsignedLongNullableAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLNullable&lt;IDLUnsignedLong&gt;&gt;(impl.unsignedLongNullableAttr());
+    return result;
+}
+
+TestDOMJITUnsignedLongNullableAttrDOMJIT::TestDOMJITUnsignedLongNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedLongNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecBytecodeNumber | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongNullableAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITUnsignedLongNullableAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITLongLongNullableAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITLongLongNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITLongLongNullableAttrGetter&gt;(state, thisValue, &quot;longLongNullableAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITLongLongNullableAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLNullable&lt;IDLLongLong&gt;&gt;(impl.longLongNullableAttr());
+    return result;
+}
+
+TestDOMJITLongLongNullableAttrDOMJIT::TestDOMJITLongLongNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITLongLongNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecBytecodeNumber | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongLongNullableAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITLongLongNullableAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnsignedLongLongNullableAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITUnsignedLongLongNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITUnsignedLongLongNullableAttrGetter&gt;(state, thisValue, &quot;unsignedLongLongNullableAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITUnsignedLongLongNullableAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLNullable&lt;IDLUnsignedLongLong&gt;&gt;(impl.unsignedLongLongNullableAttr());
+    return result;
+}
+
+TestDOMJITUnsignedLongLongNullableAttrDOMJIT::TestDOMJITUnsignedLongLongNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnsignedLongLongNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecBytecodeNumber | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongLongNullableAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITUnsignedLongLongNullableAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITFloatNullableAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITFloatNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITFloatNullableAttrGetter&gt;(state, thisValue, &quot;floatNullableAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITFloatNullableAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLNullable&lt;IDLFloat&gt;&gt;(impl.floatNullableAttr());
+    return result;
+}
+
+TestDOMJITFloatNullableAttrDOMJIT::TestDOMJITFloatNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITFloatNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecBytecodeNumber | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITFloatNullableAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITFloatNullableAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnrestrictedFloatNullableAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITUnrestrictedFloatNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITUnrestrictedFloatNullableAttrGetter&gt;(state, thisValue, &quot;unrestrictedFloatNullableAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITUnrestrictedFloatNullableAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLNullable&lt;IDLUnrestrictedFloat&gt;&gt;(impl.unrestrictedFloatNullableAttr());
+    return result;
+}
+
+TestDOMJITUnrestrictedFloatNullableAttrDOMJIT::TestDOMJITUnrestrictedFloatNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnrestrictedFloatNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecBytecodeNumber | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedFloatNullableAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITUnrestrictedFloatNullableAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITDoubleNullableAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITDoubleNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITDoubleNullableAttrGetter&gt;(state, thisValue, &quot;doubleNullableAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITDoubleNullableAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLNullable&lt;IDLDouble&gt;&gt;(impl.doubleNullableAttr());
+    return result;
+}
+
+TestDOMJITDoubleNullableAttrDOMJIT::TestDOMJITDoubleNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITDoubleNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecBytecodeNumber | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDoubleNullableAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITDoubleNullableAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUnrestrictedDoubleNullableAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITUnrestrictedDoubleNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITUnrestrictedDoubleNullableAttrGetter&gt;(state, thisValue, &quot;unrestrictedDoubleNullableAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITUnrestrictedDoubleNullableAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLNullable&lt;IDLUnrestrictedDouble&gt;&gt;(impl.unrestrictedDoubleNullableAttr());
+    return result;
+}
+
+TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT::TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUnrestrictedDoubleNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecBytecodeNumber | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedDoubleNullableAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITDomStringNullableAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITDomStringNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITDomStringNullableAttrGetter&gt;(state, thisValue, &quot;domStringNullableAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITDomStringNullableAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLNullable&lt;IDLDOMString&gt;&gt;(state, impl.domStringNullableAttr());
+    return result;
+}
+
+TestDOMJITDomStringNullableAttrDOMJIT::TestDOMJITDomStringNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITDomStringNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecString | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDomStringNullableAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITDomStringNullableAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITByteStringNullableAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITByteStringNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITByteStringNullableAttrGetter&gt;(state, thisValue, &quot;byteStringNullableAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITByteStringNullableAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS(&amp;state, thisObject.globalObject(), impl.byteStringNullableAttr());
+    return result;
+}
+
+TestDOMJITByteStringNullableAttrDOMJIT::TestDOMJITByteStringNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITByteStringNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecString | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteStringNullableAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITByteStringNullableAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITUsvStringNullableAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITUsvStringNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITUsvStringNullableAttrGetter&gt;(state, thisValue, &quot;usvStringNullableAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITUsvStringNullableAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLNullable&lt;IDLUSVString&gt;&gt;(state, impl.usvStringNullableAttr());
+    return result;
+}
+
+TestDOMJITUsvStringNullableAttrDOMJIT::TestDOMJITUsvStringNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITUsvStringNullableAttr, nullptr, JSTestDOMJIT::info(), (JSC::SpecString | JSC::SpecOther))
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUsvStringNullableAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITUsvStringNullableAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+static inline JSValue jsTestDOMJITNodeNullableAttrGetter(ExecState&amp;, JSTestDOMJIT&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestDOMJITNodeNullableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestDOMJIT&gt;::attribute&lt;jsTestDOMJITNodeNullableAttrGetter&gt;(state, thisValue, &quot;nodeNullableAttr&quot;);
+}
+
+static inline JSValue jsTestDOMJITNodeNullableAttrGetter(ExecState&amp; state, JSTestDOMJIT&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS(&amp;state, thisObject.globalObject(), impl.nodeNullableAttr());
+    return result;
+}
+
+TestDOMJITNodeNullableAttrDOMJIT::TestDOMJITNodeNullableAttrDOMJIT()
+    : JSC::DOMJIT::GetterSetter(jsTestDOMJITNodeNullableAttr, nullptr, JSTestDOMJIT::info(), SpecHeapTop)
+{
+}
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITNodeNullableAttr()
+{
+    static NeverDestroyed&lt;TestDOMJITNodeNullableAttrDOMJIT&gt; compiler;
+    return &amp;compiler.get();
+}
+
+EncodedJSValue jsTestDOMJITConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    VM&amp; vm = state-&gt;vm();
+    auto throwScope = DECLARE_THROW_SCOPE(vm);
+    JSTestDOMJITPrototype* domObject = jsDynamicCast&lt;JSTestDOMJITPrototype*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!domObject))
+        return throwVMTypeError(state, throwScope);
+    return JSValue::encode(JSTestDOMJIT::getConstructor(state-&gt;vm(), domObject-&gt;globalObject()));
+}
+
+bool setJSTestDOMJITConstructor(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    VM&amp; vm = state-&gt;vm();
+    auto throwScope = DECLARE_THROW_SCOPE(vm);
+    JSValue value = JSValue::decode(encodedValue);
+    JSTestDOMJITPrototype* domObject = jsDynamicCast&lt;JSTestDOMJITPrototype*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!domObject)) {
+        throwVMTypeError(state, throwScope);
+        return false;
+    }
+    // Shadowing a built-in constructor
+    return domObject-&gt;putDirect(state-&gt;vm(), state-&gt;propertyNames().constructor, value);
+}
+
+JSValue JSTestDOMJIT::getConstructor(VM&amp; vm, const JSGlobalObject* globalObject)
+{
+    return getDOMConstructor&lt;JSTestDOMJITConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
+}
+
+void JSTestDOMJIT::visitChildren(JSCell* cell, SlotVisitor&amp; visitor)
+{
+    auto* thisObject = jsCast&lt;JSTestDOMJIT*&gt;(cell);
+    ASSERT_GC_OBJECT_INHERITS(thisObject, info());
+    Base::visitChildren(thisObject, visitor);
+    thisObject-&gt;wrapped().visitJSEventListeners(visitor);
+}
+
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestDOMJITh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.h (0 => 207869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.h                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestDOMJIT.h        2016-10-26 05:43:04 UTC (rev 207869)
</span><span class="lines">@@ -0,0 +1,426 @@
</span><ins>+/*
+    This file is part of the WebKit open source project.
+    This file has been generated by generate-bindings.pl. DO NOT MODIFY!
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#pragma once
+
+#include &quot;JSNode.h&quot;
+#include &quot;TestDOMJIT.h&quot;
+#include &lt;domjit/DOMJITGetterSetter.h&gt;
+
+namespace WebCore {
+
+class JSTestDOMJIT : public JSNode {
+public:
+    using Base = JSNode;
+    using DOMWrapped = TestDOMJIT;
+    static JSTestDOMJIT* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestDOMJIT&gt;&amp;&amp; impl)
+    {
+        JSTestDOMJIT* ptr = new (NotNull, JSC::allocateCell&lt;JSTestDOMJIT&gt;(globalObject-&gt;vm().heap)) JSTestDOMJIT(structure, *globalObject, WTFMove(impl));
+        ptr-&gt;finishCreation(globalObject-&gt;vm());
+        return ptr;
+    }
+
+    static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
+    static JSC::JSObject* prototype(JSC::VM&amp;, JSC::JSGlobalObject*);
+
+    DECLARE_INFO;
+
+    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
+    {
+        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::JSType(JSNodeType), StructureFlags), info());
+    }
+
+    static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
+    static void visitChildren(JSCell*, JSC::SlotVisitor&amp;);
+
+    TestDOMJIT&amp; wrapped() const
+    {
+        return static_cast&lt;TestDOMJIT&amp;&gt;(Base::wrapped());
+    }
+protected:
+    JSTestDOMJIT(JSC::Structure*, JSDOMGlobalObject&amp;, Ref&lt;TestDOMJIT&gt;&amp;&amp;);
+
+    void finishCreation(JSC::VM&amp; vm)
+    {
+        Base::finishCreation(vm);
+        ASSERT(inherits(info()));
+    }
+
+};
+
+
+// DOMJIT emitters for attributes
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITAnyAttr(void);
+class TestDOMJITAnyAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITAnyAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITBooleanAttr(void);
+class TestDOMJITBooleanAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITBooleanAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteAttr(void);
+class TestDOMJITByteAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITByteAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITOctetAttr(void);
+class TestDOMJITOctetAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITOctetAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITShortAttr(void);
+class TestDOMJITShortAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITShortAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedShortAttr(void);
+class TestDOMJITUnsignedShortAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnsignedShortAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongAttr(void);
+class TestDOMJITLongAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITLongAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongAttr(void);
+class TestDOMJITUnsignedLongAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnsignedLongAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongLongAttr(void);
+class TestDOMJITLongLongAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITLongLongAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongLongAttr(void);
+class TestDOMJITUnsignedLongLongAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnsignedLongLongAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITFloatAttr(void);
+class TestDOMJITFloatAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITFloatAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedFloatAttr(void);
+class TestDOMJITUnrestrictedFloatAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnrestrictedFloatAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDoubleAttr(void);
+class TestDOMJITDoubleAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITDoubleAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedDoubleAttr(void);
+class TestDOMJITUnrestrictedDoubleAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnrestrictedDoubleAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDomStringAttr(void);
+class TestDOMJITDomStringAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITDomStringAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteStringAttr(void);
+class TestDOMJITByteStringAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITByteStringAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUsvStringAttr(void);
+class TestDOMJITUsvStringAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUsvStringAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITNodeAttr(void);
+class TestDOMJITNodeAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITNodeAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITBooleanNullableAttr(void);
+class TestDOMJITBooleanNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITBooleanNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteNullableAttr(void);
+class TestDOMJITByteNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITByteNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITOctetNullableAttr(void);
+class TestDOMJITOctetNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITOctetNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITShortNullableAttr(void);
+class TestDOMJITShortNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITShortNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedShortNullableAttr(void);
+class TestDOMJITUnsignedShortNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnsignedShortNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongNullableAttr(void);
+class TestDOMJITLongNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITLongNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongNullableAttr(void);
+class TestDOMJITUnsignedLongNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnsignedLongNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITLongLongNullableAttr(void);
+class TestDOMJITLongLongNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITLongLongNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnsignedLongLongNullableAttr(void);
+class TestDOMJITUnsignedLongLongNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnsignedLongLongNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITFloatNullableAttr(void);
+class TestDOMJITFloatNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITFloatNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedFloatNullableAttr(void);
+class TestDOMJITUnrestrictedFloatNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnrestrictedFloatNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDoubleNullableAttr(void);
+class TestDOMJITDoubleNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITDoubleNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUnrestrictedDoubleNullableAttr(void);
+class TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUnrestrictedDoubleNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITDomStringNullableAttr(void);
+class TestDOMJITDomStringNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITDomStringNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITByteStringNullableAttr(void);
+class TestDOMJITByteStringNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITByteStringNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITUsvStringNullableAttr(void);
+class TestDOMJITUsvStringNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITUsvStringNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+JSC::DOMJIT::GetterSetter* domJITGetterSetterForTestDOMJITNodeNullableAttr(void);
+class TestDOMJITNodeNullableAttrDOMJIT : public JSC::DOMJIT::GetterSetter {
+public:
+    TestDOMJITNodeNullableAttrDOMJIT();
+#if ENABLE(JIT)
+    Ref&lt;JSC::DOMJIT::Patchpoint&gt; checkDOM() override;
+    Ref&lt;JSC::DOMJIT::CallDOMPatchpoint&gt; callDOM() override;
+#endif
+};
+
+template&lt;&gt; struct JSDOMWrapperConverterTraits&lt;TestDOMJIT&gt; {
+    using WrapperClass = JSTestDOMJIT;
+    using ToWrappedReturnType = TestDOMJIT*;
+};
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestTestDOMJITidl"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/TestDOMJIT.idl (0 => 207869)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/TestDOMJIT.idl                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/TestDOMJIT.idl        2016-10-26 05:43:04 UTC (rev 207869)
</span><span class="lines">@@ -0,0 +1,66 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary form, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Inc. (&quot;Apple&quot;) nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+interface TestDOMJIT : Node {
+    [DOMJIT] readonly attribute any anyAttr;
+    [DOMJIT] readonly attribute boolean booleanAttr;
+    [DOMJIT] readonly attribute byte byteAttr;
+    [DOMJIT] readonly attribute octet octetAttr;
+    [DOMJIT] readonly attribute short shortAttr;
+    [DOMJIT] readonly attribute unsigned short unsignedShortAttr;
+    [DOMJIT] readonly attribute long longAttr;
+    [DOMJIT] readonly attribute unsigned long unsignedLongAttr;
+    [DOMJIT] readonly attribute long long longLongAttr;
+    [DOMJIT] readonly attribute unsigned long long unsignedLongLongAttr;
+    [DOMJIT] readonly attribute float floatAttr;
+    [DOMJIT] readonly attribute unrestricted float unrestrictedFloatAttr;
+    [DOMJIT] readonly attribute double doubleAttr;
+    [DOMJIT] readonly attribute unrestricted double unrestrictedDoubleAttr;
+    [DOMJIT] readonly attribute DOMString domStringAttr;
+    [DOMJIT] readonly attribute ByteString byteStringAttr;
+    [DOMJIT] readonly attribute USVString usvStringAttr;
+    [DOMJIT] readonly attribute Node nodeAttr;
+
+    [DOMJIT] readonly attribute boolean? booleanNullableAttr;
+    [DOMJIT] readonly attribute byte? byteNullableAttr;
+    [DOMJIT] readonly attribute octet? octetNullableAttr;
+    [DOMJIT] readonly attribute short? shortNullableAttr;
+    [DOMJIT] readonly attribute unsigned short? unsignedShortNullableAttr;
+    [DOMJIT] readonly attribute long? longNullableAttr;
+    [DOMJIT] readonly attribute unsigned long? unsignedLongNullableAttr;
+    [DOMJIT] readonly attribute long long? longLongNullableAttr;
+    [DOMJIT] readonly attribute unsigned long long? unsignedLongLongNullableAttr;
+    [DOMJIT] readonly attribute float? floatNullableAttr;
+    [DOMJIT] readonly attribute unrestricted float? unrestrictedFloatNullableAttr;
+    [DOMJIT] readonly attribute double? doubleNullableAttr;
+    [DOMJIT] readonly attribute unrestricted double? unrestrictedDoubleNullableAttr;
+    [DOMJIT] readonly attribute DOMString? domStringNullableAttr;
+    [DOMJIT] readonly attribute ByteString? byteStringNullableAttr;
+    [DOMJIT] readonly attribute USVString? usvStringNullableAttr;
+    [DOMJIT] readonly attribute Node? nodeNullableAttr;
+};
</ins></span></pre>
</div>
</div>

</body>
</html>