<!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>[206779] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/206779">206779</a></dd>
<dt>Author</dt> <dd>utatane.tea@gmail.com</dd>
<dt>Date</dt> <dd>2016-10-04 12:34:52 -0700 (Tue, 04 Oct 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[DOMJIT] Introduce DOMJIT::GetterSetter to tell JIT information
https://bugs.webkit.org/show_bug.cgi?id=162916

Reviewed by Filip Pizlo.

Source/JavaScriptCore:

In this patch, we introduce DOMJIT::GetterSetter.
This class maintains information required to emit JIT code in DFG and FTL.
DOMJIT::GetterSetter has 2 virtual functions: checkDOM and callDOM.
These functions can return a DOMJIT::Patchpoint that allows us to inject
appropriate machine code during DFG and FTL phases. DFG and FTL will invoke
these functions to get a patchpoint. And this patchpoint will be used to
emit code corresponding to CheckDOM and CallDOM DFG nodes, which will be added
in subsqeunt patch.

We propagate DOMJIT::GetterSetter through PropertySlot, AccessCase, GetByIdVariant,
and GetByIdStatus along with CustomGetter to teach DFG that this custom access
code has a chance to be inlined with this DOMJIT::GetterSetter information.
Instead of propagating CustomGetterSetter holding DOMJIT::GetterSetter and CustomGetter,
we propagate CustomGetter and DOMJIT::GetterSetter. This is because of the current
CustomGetterSetter design that we reify CustomGetterSetters only when we need to reify
all the properties. This design allows us to avoid frequent CustomGetterSetter allocations
and structure transitions.

Currently, domJIT field is always nullptr since there is no DOMJITAttribute user.
When we add this, we will add code handling this DOMJIT::GetterSetter in DFG::ByteCodeParser.

* CMakeLists.txt:
* JavaScriptCore.xcodeproj/project.pbxproj:
* bytecode/GetByIdStatus.cpp:
(JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
* bytecode/GetByIdVariant.cpp:
(JSC::GetByIdVariant::GetByIdVariant):
(JSC::GetByIdVariant::operator=):
(JSC::GetByIdVariant::attemptToMerge):
(JSC::GetByIdVariant::dumpInContext):
* bytecode/GetByIdVariant.h:
(JSC::GetByIdVariant::domJIT):
(JSC::GetByIdVariant::intrinsic): Deleted.
* bytecode/PolymorphicAccess.cpp:
(JSC::AccessCase::get):
(JSC::AccessCase::clone):
* bytecode/PolymorphicAccess.h:
(JSC::AccessCase::domJIT):
(JSC::AccessCase::RareData::RareData):
* dfg/DFGNode.h:
* domjit/DOMJITGetterSetter.h: Added.
(JSC::DOMJIT::GetterSetter::GetterSetter):
(JSC::DOMJIT::GetterSetter::~GetterSetter):
(JSC::DOMJIT::GetterSetter::getter):
(JSC::DOMJIT::GetterSetter::setter):
(JSC::DOMJIT::GetterSetter::thisClassInfo):
* domjit/DOMJITPatchpoint.h: Added.
(JSC::DOMJIT::Patchpoint::create):
(JSC::DOMJIT::Patchpoint::setGenerator):
(JSC::DOMJIT::Patchpoint::generator):
* jit/Repatch.cpp:
(JSC::tryCacheGetByID):
* runtime/CustomGetterSetter.h:
* runtime/JSObject.h:
(JSC::JSObject::fillCustomGetterPropertySlot):
* runtime/Lookup.h:
(JSC::HashTableValue::domJIT):
(JSC::getStaticPropertySlotFromTable):
(JSC::putEntry):
(JSC::reifyStaticProperty):
* runtime/PropertySlot.h:
(JSC::PropertySlot::domJIT):
(JSC::PropertySlot::setCacheableCustom):

Source/WebCore:

* ForwardingHeaders/domjit/DOMJITGetterSetter.h: Added.
* PlatformEfl.cmake:
* PlatformGTK.cmake:
* PlatformMac.cmake:
* PlatformWin.cmake:

Source/WebKit2:

* CMakeLists.txt:

Tools:

* DumpRenderTree/CMakeLists.txt:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreCMakeListstxt">trunk/Source/JavaScriptCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj">trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeGetByIdStatuscpp">trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeGetByIdVariantcpp">trunk/Source/JavaScriptCore/bytecode/GetByIdVariant.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodeGetByIdVarianth">trunk/Source/JavaScriptCore/bytecode/GetByIdVariant.h</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodePolymorphicAccesscpp">trunk/Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCorebytecodePolymorphicAccessh">trunk/Source/JavaScriptCore/bytecode/PolymorphicAccess.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredfgDFGNodeh">trunk/Source/JavaScriptCore/dfg/DFGNode.h</a></li>
<li><a href="#trunkSourceJavaScriptCorejitRepatchcpp">trunk/Source/JavaScriptCore/jit/Repatch.cpp</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeCustomGetterSetterh">trunk/Source/JavaScriptCore/runtime/CustomGetterSetter.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeJSObjecth">trunk/Source/JavaScriptCore/runtime/JSObject.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimeLookuph">trunk/Source/JavaScriptCore/runtime/Lookup.h</a></li>
<li><a href="#trunkSourceJavaScriptCoreruntimePropertySloth">trunk/Source/JavaScriptCore/runtime/PropertySlot.h</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorePlatformEflcmake">trunk/Source/WebCore/PlatformEfl.cmake</a></li>
<li><a href="#trunkSourceWebCorePlatformGTKcmake">trunk/Source/WebCore/PlatformGTK.cmake</a></li>
<li><a href="#trunkSourceWebCorePlatformMaccmake">trunk/Source/WebCore/PlatformMac.cmake</a></li>
<li><a href="#trunkSourceWebCorePlatformWincmake">trunk/Source/WebCore/PlatformWin.cmake</a></li>
<li><a href="#trunkSourceWebKit2CMakeListstxt">trunk/Source/WebKit2/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsDumpRenderTreeCMakeListstxt">trunk/Tools/DumpRenderTree/CMakeLists.txt</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li>trunk/Source/JavaScriptCore/domjit/</li>
<li><a href="#trunkSourceJavaScriptCoredomjitDOMJITGetterSetterh">trunk/Source/JavaScriptCore/domjit/DOMJITGetterSetter.h</a></li>
<li><a href="#trunkSourceJavaScriptCoredomjitDOMJITPatchpointh">trunk/Source/JavaScriptCore/domjit/DOMJITPatchpoint.h</a></li>
<li>trunk/Source/WebCore/ForwardingHeaders/domjit/</li>
<li><a href="#trunkSourceWebCoreForwardingHeadersdomjitDOMJITGetterSetterh">trunk/Source/WebCore/ForwardingHeaders/domjit/DOMJITGetterSetter.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/CMakeLists.txt (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/CMakeLists.txt        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/JavaScriptCore/CMakeLists.txt        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -18,6 +18,7 @@
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/dfg&quot;
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/disassembler&quot;
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/disassembler/udis86&quot;
</span><ins>+    &quot;${JAVASCRIPTCORE_DIR}/domjit&quot;
</ins><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/ftl&quot;
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/heap&quot;
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/debugger&quot;
</span><span class="lines">@@ -1095,6 +1096,7 @@
</span><span class="cx">     debugger
</span><span class="cx">     dfg
</span><span class="cx">     disassembler
</span><ins>+    domjit
</ins><span class="cx">     heap
</span><span class="cx">     inspector
</span><span class="cx">     interpreter
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -1,3 +1,74 @@
</span><ins>+2016-10-04  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
+
+        [DOMJIT] Introduce DOMJIT::GetterSetter to tell JIT information
+        https://bugs.webkit.org/show_bug.cgi?id=162916
+
+        Reviewed by Filip Pizlo.
+
+        In this patch, we introduce DOMJIT::GetterSetter.
+        This class maintains information required to emit JIT code in DFG and FTL.
+        DOMJIT::GetterSetter has 2 virtual functions: checkDOM and callDOM.
+        These functions can return a DOMJIT::Patchpoint that allows us to inject
+        appropriate machine code during DFG and FTL phases. DFG and FTL will invoke
+        these functions to get a patchpoint. And this patchpoint will be used to
+        emit code corresponding to CheckDOM and CallDOM DFG nodes, which will be added
+        in subsqeunt patch.
+
+        We propagate DOMJIT::GetterSetter through PropertySlot, AccessCase, GetByIdVariant,
+        and GetByIdStatus along with CustomGetter to teach DFG that this custom access
+        code has a chance to be inlined with this DOMJIT::GetterSetter information.
+        Instead of propagating CustomGetterSetter holding DOMJIT::GetterSetter and CustomGetter,
+        we propagate CustomGetter and DOMJIT::GetterSetter. This is because of the current
+        CustomGetterSetter design that we reify CustomGetterSetters only when we need to reify
+        all the properties. This design allows us to avoid frequent CustomGetterSetter allocations
+        and structure transitions.
+
+        Currently, domJIT field is always nullptr since there is no DOMJITAttribute user.
+        When we add this, we will add code handling this DOMJIT::GetterSetter in DFG::ByteCodeParser.
+
+        * CMakeLists.txt:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * bytecode/GetByIdStatus.cpp:
+        (JSC::GetByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
+        * bytecode/GetByIdVariant.cpp:
+        (JSC::GetByIdVariant::GetByIdVariant):
+        (JSC::GetByIdVariant::operator=):
+        (JSC::GetByIdVariant::attemptToMerge):
+        (JSC::GetByIdVariant::dumpInContext):
+        * bytecode/GetByIdVariant.h:
+        (JSC::GetByIdVariant::domJIT):
+        (JSC::GetByIdVariant::intrinsic): Deleted.
+        * bytecode/PolymorphicAccess.cpp:
+        (JSC::AccessCase::get):
+        (JSC::AccessCase::clone):
+        * bytecode/PolymorphicAccess.h:
+        (JSC::AccessCase::domJIT):
+        (JSC::AccessCase::RareData::RareData):
+        * dfg/DFGNode.h:
+        * domjit/DOMJITGetterSetter.h: Added.
+        (JSC::DOMJIT::GetterSetter::GetterSetter):
+        (JSC::DOMJIT::GetterSetter::~GetterSetter):
+        (JSC::DOMJIT::GetterSetter::getter):
+        (JSC::DOMJIT::GetterSetter::setter):
+        (JSC::DOMJIT::GetterSetter::thisClassInfo):
+        * domjit/DOMJITPatchpoint.h: Added.
+        (JSC::DOMJIT::Patchpoint::create):
+        (JSC::DOMJIT::Patchpoint::setGenerator):
+        (JSC::DOMJIT::Patchpoint::generator):
+        * jit/Repatch.cpp:
+        (JSC::tryCacheGetByID):
+        * runtime/CustomGetterSetter.h:
+        * runtime/JSObject.h:
+        (JSC::JSObject::fillCustomGetterPropertySlot):
+        * runtime/Lookup.h:
+        (JSC::HashTableValue::domJIT):
+        (JSC::getStaticPropertySlotFromTable):
+        (JSC::putEntry):
+        (JSC::reifyStaticProperty):
+        * runtime/PropertySlot.h:
+        (JSC::PropertySlot::domJIT):
+        (JSC::PropertySlot::setCacheableCustom):
+
</ins><span class="cx"> 2016-09-27  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [JSC] Add a new byte code op_define_property instead of calling defineProperty
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreJavaScriptCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -271,7 +271,7 @@
</span><span class="cx">                 0F2DD8141AB3D8BE00BBB8E8 /* DFGArgumentsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2DD80F1AB3D8BE00BBB8E8 /* DFGArgumentsUtilities.h */; };
</span><span class="cx">                 0F2DD8151AB3D8BE00BBB8E8 /* DFGForAllKills.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2DD8101AB3D8BE00BBB8E8 /* DFGForAllKills.h */; };
</span><span class="cx">                 0F2E892C16D028AD009E4FD2 /* UnusedPointer.h in Headers */ = {isa = PBXBuildFile; fileRef = 65987F2F16828A7E003C2F8D /* UnusedPointer.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-                0F2E892D16D02BAF009E4FD2 /* DFGMinifiedID.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB4B51016B3A964003F696B /* DFGMinifiedID.h */; };
</del><ins>+                0F2E892D16D02BAF009E4FD2 /* DFGMinifiedID.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB4B51016B3A964003F696B /* DFGMinifiedID.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 0F2FC77216E12F710038D976 /* DFGDCEPhase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2FC77016E12F6F0038D976 /* DFGDCEPhase.cpp */; };
</span><span class="cx">                 0F2FC77316E12F740038D976 /* DFGDCEPhase.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2FC77116E12F6F0038D976 /* DFGDCEPhase.h */; };
</span><span class="cx">                 0F2FCCF918A60070001A27F8 /* DFGGraphSafepoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F2FCCF218A60070001A27F8 /* DFGGraphSafepoint.cpp */; };
</span><span class="lines">@@ -2067,6 +2067,9 @@
</span><span class="cx">                 E18E3A590DF9278C00D90B34 /* VM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E18E3A570DF9278C00D90B34 /* VM.cpp */; };
</span><span class="cx">                 E318CBC01B8AEF5100A2929D /* JSModuleNamespaceObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E318CBBE1B8AEF5100A2929D /* JSModuleNamespaceObject.cpp */; };
</span><span class="cx">                 E318CBC11B8AEF5100A2929D /* JSModuleNamespaceObject.h in Headers */ = {isa = PBXBuildFile; fileRef = E318CBBF1B8AEF5100A2929D /* JSModuleNamespaceObject.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                E328C6C71DA4304500D255FD /* MaxFrameExtentForSlowPathCall.h in Headers */ = {isa = PBXBuildFile; fileRef = 65860177185A8F5E00030EEE /* MaxFrameExtentForSlowPathCall.h */; settings = {ATTRIBUTES = (Private, ); }; };
+                E328C6C81DA4306100D255FD /* RegisterAtOffsetList.h in Headers */ = {isa = PBXBuildFile; fileRef = 6540C79D1B82D99D000F6B79 /* RegisterAtOffsetList.h */; settings = {ATTRIBUTES = (Private, ); }; };
+                E328C6C91DA432F900D255FD /* RegisterAtOffset.h in Headers */ = {isa = PBXBuildFile; fileRef = 6540C79F1B82D9CE000F6B79 /* RegisterAtOffset.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 E328DAE71D38D004001A2529 /* BytecodeGeneratorification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E3D264261D38C042000BE174 /* BytecodeGeneratorification.cpp */; };
</span><span class="cx">                 E328DAE81D38D005001A2529 /* BytecodeGeneratorification.h in Headers */ = {isa = PBXBuildFile; fileRef = E3D264271D38C042000BE174 /* BytecodeGeneratorification.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 E328DAE91D38D005001A2529 /* BytecodeGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = E3D264281D38C042000BE174 /* BytecodeGraph.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -2100,10 +2103,12 @@
</span><span class="cx">                 E39DA4A61B7E8B7C0084F33A /* JSModuleRecord.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E39DA4A41B7E8B7C0084F33A /* JSModuleRecord.cpp */; };
</span><span class="cx">                 E39DA4A71B7E8B7C0084F33A /* JSModuleRecord.h in Headers */ = {isa = PBXBuildFile; fileRef = E39DA4A51B7E8B7C0084F33A /* JSModuleRecord.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 E3A421431D6F58930007C617 /* PreciseJumpTargetsInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A421421D6F588F0007C617 /* PreciseJumpTargetsInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                E3C08E3C1DA41B810039478F /* DOMJITPatchpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = E3C08E3B1DA41B7B0039478F /* DOMJITPatchpoint.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 E3D239C81B829C1C00BBEF67 /* JSModuleEnvironment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E3D239C61B829C1C00BBEF67 /* JSModuleEnvironment.cpp */; };
</span><span class="cx">                 E3D239C91B829C1C00BBEF67 /* JSModuleEnvironment.h in Headers */ = {isa = PBXBuildFile; fileRef = E3D239C71B829C1C00BBEF67 /* JSModuleEnvironment.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 E3EF88741B66DF23003F26CB /* JSPropertyNameIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E3EF88721B66DF23003F26CB /* JSPropertyNameIterator.cpp */; };
</span><span class="cx">                 E3EF88751B66DF23003F26CB /* JSPropertyNameIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = E3EF88731B66DF23003F26CB /* JSPropertyNameIterator.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                E3FF75331D9CEA1800C7E16D /* DOMJITGetterSetter.h in Headers */ = {isa = PBXBuildFile; fileRef = E3FF752F1D9CEA1200C7E16D /* DOMJITGetterSetter.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 E49DC16B12EF293E00184A1F /* SourceProviderCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E49DC15512EF277200184A1F /* SourceProviderCache.cpp */; };
</span><span class="cx">                 E49DC16C12EF294E00184A1F /* SourceProviderCache.h in Headers */ = {isa = PBXBuildFile; fileRef = E49DC15112EF272200184A1F /* SourceProviderCache.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 E49DC16D12EF295300184A1F /* SourceProviderCacheItem.h in Headers */ = {isa = PBXBuildFile; fileRef = E49DC14912EF261A00184A1F /* SourceProviderCacheItem.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="lines">@@ -4397,6 +4402,7 @@
</span><span class="cx">                 E39DA4A41B7E8B7C0084F33A /* JSModuleRecord.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSModuleRecord.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 E39DA4A51B7E8B7C0084F33A /* JSModuleRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSModuleRecord.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 E3A421421D6F588F0007C617 /* PreciseJumpTargetsInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PreciseJumpTargetsInlines.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                E3C08E3B1DA41B7B0039478F /* DOMJITPatchpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMJITPatchpoint.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 E3D239C61B829C1C00BBEF67 /* JSModuleEnvironment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSModuleEnvironment.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 E3D239C71B829C1C00BBEF67 /* JSModuleEnvironment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSModuleEnvironment.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 E3D264261D38C042000BE174 /* BytecodeGeneratorification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BytecodeGeneratorification.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -4406,6 +4412,7 @@
</span><span class="cx">                 E3D2642A1D38C042000BE174 /* BytecodeRewriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BytecodeRewriter.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 E3EF88721B66DF23003F26CB /* JSPropertyNameIterator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPropertyNameIterator.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 E3EF88731B66DF23003F26CB /* JSPropertyNameIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSPropertyNameIterator.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                E3FF752F1D9CEA1200C7E16D /* DOMJITGetterSetter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMJITGetterSetter.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 E49DC14912EF261A00184A1F /* SourceProviderCacheItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceProviderCacheItem.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 E49DC15112EF272200184A1F /* SourceProviderCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SourceProviderCache.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 E49DC15512EF277200184A1F /* SourceProviderCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SourceProviderCache.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -4664,6 +4671,7 @@
</span><span class="cx">                                 650FDF8D09D0FCA700769E54 /* Derived Sources */,
</span><span class="cx">                                 86EC9DB31328DF44002B2AD7 /* dfg */,
</span><span class="cx">                                 0FF4272E158EBCCE004CB9FF /* disassembler */,
</span><ins>+                                E3FF752D1D9CE9EA00C7E16D /* domjit */,
</ins><span class="cx">                                 0867D69AFE84028FC02AAC07 /* Frameworks */,
</span><span class="cx">                                 0FEA09FC1705137F00BB722C /* ftl */,
</span><span class="cx">                                 142E312A134FF0A600AFADB5 /* heap */,
</span><span class="lines">@@ -7170,6 +7178,15 @@
</span><span class="cx">                         path = codegen;
</span><span class="cx">                         sourceTree = &quot;&lt;group&gt;&quot;;
</span><span class="cx">                 };
</span><ins>+                E3FF752D1D9CE9EA00C7E16D /* domjit */ = {
+                        isa = PBXGroup;
+                        children = (
+                                E3FF752F1D9CEA1200C7E16D /* DOMJITGetterSetter.h */,
+                                E3C08E3B1DA41B7B0039478F /* DOMJITPatchpoint.h */,
+                        );
+                        path = domjit;
+                        sourceTree = &quot;&lt;group&gt;&quot;;
+                };
</ins><span class="cx"> /* End PBXGroup section */
</span><span class="cx"> 
</span><span class="cx"> /* Begin PBXHeadersBuildPhase section */
</span><span class="lines">@@ -7228,6 +7245,7 @@
</span><span class="cx">                                 0FEC858A1BDACDC70080FF74 /* AirSpillEverything.h in Headers */,
</span><span class="cx">                                 0FEC858C1BDACDC70080FF74 /* AirStackSlot.h in Headers */,
</span><span class="cx">                                 0FEC858E1BDACDC70080FF74 /* AirTmp.h in Headers */,
</span><ins>+                                E328C6C81DA4306100D255FD /* RegisterAtOffsetList.h in Headers */,
</ins><span class="cx">                                 0FEC858F1BDACDC70080FF74 /* AirTmpInlines.h in Headers */,
</span><span class="cx">                                 0FEC85911BDACDC70080FF74 /* AirValidate.h in Headers */,
</span><span class="cx">                                 A5EA70E919F5B1010098F5EC /* AlternateDispatchableAgent.h in Headers */,
</span><span class="lines">@@ -7454,6 +7472,7 @@
</span><span class="cx">                                 0F2DD8121AB3D8BE00BBB8E8 /* DFGArgumentsEliminationPhase.h in Headers */,
</span><span class="cx">                                 0F2DD8141AB3D8BE00BBB8E8 /* DFGArgumentsUtilities.h in Headers */,
</span><span class="cx">                                 0F485322187750560083B687 /* DFGArithMode.h in Headers */,
</span><ins>+                                E3C08E3C1DA41B810039478F /* DOMJITPatchpoint.h in Headers */,
</ins><span class="cx">                                 0F05C3B41683CF9200BAF45B /* DFGArrayifySlowPathGenerator.h in Headers */,
</span><span class="cx">                                 0F63948515E4811B006A597C /* DFGArrayMode.h in Headers */,
</span><span class="cx">                                 A7D9A29517A0BC7400EE2618 /* DFGAtTailAbstractState.h in Headers */,
</span><span class="lines">@@ -7615,6 +7634,7 @@
</span><span class="cx">                                 0FC20CBA18556A3500C9E954 /* DFGSSALoweringPhase.h in Headers */,
</span><span class="cx">                                 0F9FB4F517FCB91700CB67F8 /* DFGStackLayoutPhase.h in Headers */,
</span><span class="cx">                                 0F4F29E018B6AD1C0057BC15 /* DFGStaticExecutionCountEstimationPhase.h in Headers */,
</span><ins>+                                E3FF75331D9CEA1800C7E16D /* DOMJITGetterSetter.h in Headers */,
</ins><span class="cx">                                 0F9E32641B05AB0400801ED5 /* DFGStoreBarrierInsertionPhase.h in Headers */,
</span><span class="cx">                                 0FC20CB61852E2C600C9E954 /* DFGStrengthReductionPhase.h in Headers */,
</span><span class="cx">                                 0F63947815DCE34B006A597C /* DFGStructureAbstractValue.h in Headers */,
</span><span class="lines">@@ -7839,6 +7859,7 @@
</span><span class="cx">                                 A57D23E61890CEBF0031C7FA /* InspectorDebuggerAgent.h in Headers */,
</span><span class="cx">                                 A5D0A1BB1862301B00C7B496 /* InspectorEnvironment.h in Headers */,
</span><span class="cx">                                 A5945595182479EB00CC3843 /* InspectorFrontendChannel.h in Headers */,
</span><ins>+                                E328C6C71DA4304500D255FD /* MaxFrameExtentForSlowPathCall.h in Headers */,
</ins><span class="cx">                                 A532438A18568335002ED692 /* InspectorFrontendDispatchers.h in Headers */,
</span><span class="cx">                                 99F1A7011B98FBEC00463B26 /* InspectorFrontendRouter.h in Headers */,
</span><span class="cx">                                 A5339EC61BB399A60054F005 /* InspectorHeapAgent.h in Headers */,
</span><span class="lines">@@ -8175,6 +8196,7 @@
</span><span class="cx">                                 0FCCAE4516D0CF7400D0C65B /* ParserError.h in Headers */,
</span><span class="cx">                                 DCF3D56A1CD29470003D5C65 /* LazyClassStructure.h in Headers */,
</span><span class="cx">                                 A77F1825164192C700640A47 /* ParserModes.h in Headers */,
</span><ins>+                                E328C6C91DA432F900D255FD /* RegisterAtOffset.h in Headers */,
</ins><span class="cx">                                 65303D641447B9E100D3F904 /* ParserTokens.h in Headers */,
</span><span class="cx">                                 0FF9CE741B9CD6D0004EDCA6 /* PolymorphicAccess.h in Headers */,
</span><span class="cx">                                 0FE834181A6EF97B00D04847 /* PolymorphicCallStubRoutine.h in Headers */,
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeGetByIdStatuscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -37,6 +37,9 @@
</span><span class="cx"> #include &lt;wtf/ListDump.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><ins>+namespace DOMJIT {
+class GetterSetter;
+}
</ins><span class="cx"> 
</span><span class="cx"> bool GetByIdStatus::appendVariant(const GetByIdVariant&amp; variant)
</span><span class="cx"> {
</span><span class="lines">@@ -215,6 +218,7 @@
</span><span class="cx">             case ComplexGetStatus::Inlineable: {
</span><span class="cx">                 std::unique_ptr&lt;CallLinkStatus&gt; callLinkStatus;
</span><span class="cx">                 JSFunction* intrinsicFunction = nullptr;
</span><ins>+                DOMJIT::GetterSetter* domJIT = nullptr;
</ins><span class="cx"> 
</span><span class="cx">                 switch (access.type()) {
</span><span class="cx">                 case AccessCase::Load:
</span><span class="lines">@@ -234,6 +238,12 @@
</span><span class="cx">                     }
</span><span class="cx">                     break;
</span><span class="cx">                 }
</span><ins>+                case AccessCase::CustomAccessorGetter: {
+                    domJIT = access.domJIT();
+                    if (!domJIT)
+                        return GetByIdStatus(slowPathState, true);
+                    break;
+                }
</ins><span class="cx">                 default: {
</span><span class="cx">                     // FIXME: It would be totally sweet to support more of these at some point in the
</span><span class="cx">                     // future. https://bugs.webkit.org/show_bug.cgi?id=133052
</span><span class="lines">@@ -244,7 +254,8 @@
</span><span class="cx">                 GetByIdVariant variant(
</span><span class="cx">                     StructureSet(structure), complexGetStatus.offset(),
</span><span class="cx">                     complexGetStatus.conditionSet(), WTFMove(callLinkStatus),
</span><del>-                    intrinsicFunction);
</del><ins>+                    intrinsicFunction,
+                    domJIT);
</ins><span class="cx"> 
</span><span class="cx">                 if (!result.appendVariant(variant))
</span><span class="cx">                     return GetByIdStatus(slowPathState, true);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeGetByIdVariantcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/GetByIdVariant.cpp (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/GetByIdVariant.cpp        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/JavaScriptCore/bytecode/GetByIdVariant.cpp        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -36,12 +36,14 @@
</span><span class="cx">     const StructureSet&amp; structureSet, PropertyOffset offset,
</span><span class="cx">     const ObjectPropertyConditionSet&amp; conditionSet,
</span><span class="cx">     std::unique_ptr&lt;CallLinkStatus&gt; callLinkStatus,
</span><del>-    JSFunction* intrinsicFunction)
</del><ins>+    JSFunction* intrinsicFunction,
+    DOMJIT::GetterSetter* domJIT)
</ins><span class="cx">     : m_structureSet(structureSet)
</span><span class="cx">     , m_conditionSet(conditionSet)
</span><span class="cx">     , m_offset(offset)
</span><span class="cx">     , m_callLinkStatus(WTFMove(callLinkStatus))
</span><span class="cx">     , m_intrinsicFunction(intrinsicFunction)
</span><ins>+    , m_domJIT(domJIT)
</ins><span class="cx"> {
</span><span class="cx">     if (!structureSet.size()) {
</span><span class="cx">         ASSERT(offset == invalidOffset);
</span><span class="lines">@@ -65,6 +67,7 @@
</span><span class="cx">     m_conditionSet = other.m_conditionSet;
</span><span class="cx">     m_offset = other.m_offset;
</span><span class="cx">     m_intrinsicFunction = other.m_intrinsicFunction;
</span><ins>+    m_domJIT = other.m_domJIT;
</ins><span class="cx">     if (other.m_callLinkStatus)
</span><span class="cx">         m_callLinkStatus = std::make_unique&lt;CallLinkStatus&gt;(*other.m_callLinkStatus);
</span><span class="cx">     else
</span><span class="lines">@@ -103,6 +106,9 @@
</span><span class="cx">     if (!canMergeIntrinsicStructures(other))
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><ins>+    if (m_domJIT != other.m_domJIT)
+        return false;
+
</ins><span class="cx">     if (m_conditionSet.isEmpty() != other.m_conditionSet.isEmpty())
</span><span class="cx">         return false;
</span><span class="cx">     
</span><span class="lines">@@ -138,6 +144,8 @@
</span><span class="cx">         out.print(&quot;, call = &quot;, *m_callLinkStatus);
</span><span class="cx">     if (m_intrinsicFunction)
</span><span class="cx">         out.print(&quot;, intrinsic = &quot;, *m_intrinsicFunction);
</span><ins>+    if (m_domJIT)
+        out.print(&quot;, domjit = &quot;, RawPointer(m_domJIT));
</ins><span class="cx">     out.print(&quot;&gt;&quot;);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodeGetByIdVarianth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/GetByIdVariant.h (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/GetByIdVariant.h        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/JavaScriptCore/bytecode/GetByIdVariant.h        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -32,6 +32,9 @@
</span><span class="cx"> #include &quot;StructureSet.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><ins>+namespace DOMJIT {
+class GetterSetter;
+}
</ins><span class="cx"> 
</span><span class="cx"> class CallLinkStatus;
</span><span class="cx"> class GetByIdStatus;
</span><span class="lines">@@ -43,7 +46,8 @@
</span><span class="cx">         const StructureSet&amp; structureSet = StructureSet(), PropertyOffset offset = invalidOffset,
</span><span class="cx">         const ObjectPropertyConditionSet&amp; = ObjectPropertyConditionSet(),
</span><span class="cx">         std::unique_ptr&lt;CallLinkStatus&gt; = nullptr,
</span><del>-        JSFunction* = nullptr);
</del><ins>+        JSFunction* = nullptr,
+        DOMJIT::GetterSetter* = nullptr);
</ins><span class="cx"> 
</span><span class="cx">     ~GetByIdVariant();
</span><span class="cx">     
</span><span class="lines">@@ -62,6 +66,7 @@
</span><span class="cx">     CallLinkStatus* callLinkStatus() const { return m_callLinkStatus.get(); }
</span><span class="cx">     JSFunction* intrinsicFunction() const { return m_intrinsicFunction; }
</span><span class="cx">     Intrinsic intrinsic() const { return m_intrinsicFunction ? m_intrinsicFunction-&gt;intrinsic() : NoIntrinsic; }
</span><ins>+    DOMJIT::GetterSetter* domJIT() const { return m_domJIT; }
</ins><span class="cx"> 
</span><span class="cx">     bool isPropertyUnset() const { return offset() == invalidOffset; }
</span><span class="cx"> 
</span><span class="lines">@@ -80,6 +85,7 @@
</span><span class="cx">     PropertyOffset m_offset;
</span><span class="cx">     std::unique_ptr&lt;CallLinkStatus&gt; m_callLinkStatus;
</span><span class="cx">     JSFunction* m_intrinsicFunction;
</span><ins>+    DOMJIT::GetterSetter* m_domJIT;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace JSC
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodePolymorphicAccesscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/JavaScriptCore/bytecode/PolymorphicAccess.cpp        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -220,7 +220,7 @@
</span><span class="cx"> std::unique_ptr&lt;AccessCase&gt; AccessCase::get(
</span><span class="cx">     VM&amp; vm, JSCell* owner, AccessType type, PropertyOffset offset, Structure* structure,
</span><span class="cx">     const ObjectPropertyConditionSet&amp; conditionSet, bool viaProxy, WatchpointSet* additionalSet,
</span><del>-    PropertySlot::GetValueFunc customGetter, JSObject* customSlotBase)
</del><ins>+    PropertySlot::GetValueFunc customGetter, JSObject* customSlotBase, DOMJIT::GetterSetter* domJIT)
</ins><span class="cx"> {
</span><span class="cx">     std::unique_ptr&lt;AccessCase&gt; result(new AccessCase());
</span><span class="cx"> 
</span><span class="lines">@@ -229,12 +229,13 @@
</span><span class="cx">     result-&gt;m_structure.set(vm, owner, structure);
</span><span class="cx">     result-&gt;m_conditionSet = conditionSet;
</span><span class="cx"> 
</span><del>-    if (viaProxy || additionalSet || result-&gt;doesCalls() || customGetter || customSlotBase) {
</del><ins>+    if (viaProxy || additionalSet || result-&gt;doesCalls() || customGetter || customSlotBase || domJIT) {
</ins><span class="cx">         result-&gt;m_rareData = std::make_unique&lt;RareData&gt;();
</span><span class="cx">         result-&gt;m_rareData-&gt;viaProxy = viaProxy;
</span><span class="cx">         result-&gt;m_rareData-&gt;additionalSet = additionalSet;
</span><span class="cx">         result-&gt;m_rareData-&gt;customAccessor.getter = customGetter;
</span><span class="cx">         result-&gt;m_rareData-&gt;customSlotBase.setMayBeNull(vm, owner, customSlotBase);
</span><ins>+        result-&gt;m_rareData-&gt;domJIT = domJIT;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return result;
</span><span class="lines">@@ -385,6 +386,7 @@
</span><span class="cx">         result-&gt;m_rareData-&gt;customAccessor.opaque = rareData-&gt;customAccessor.opaque;
</span><span class="cx">         result-&gt;m_rareData-&gt;customSlotBase = rareData-&gt;customSlotBase;
</span><span class="cx">         result-&gt;m_rareData-&gt;intrinsicFunction = rareData-&gt;intrinsicFunction;
</span><ins>+        result-&gt;m_rareData-&gt;domJIT = rareData-&gt;domJIT;
</ins><span class="cx">     }
</span><span class="cx">     return result;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorebytecodePolymorphicAccessh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/bytecode/PolymorphicAccess.h (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/bytecode/PolymorphicAccess.h        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/JavaScriptCore/bytecode/PolymorphicAccess.h        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -37,6 +37,9 @@
</span><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><ins>+namespace DOMJIT {
+class GetterSetter;
+}
</ins><span class="cx"> 
</span><span class="cx"> class CodeBlock;
</span><span class="cx"> class PolymorphicAccess;
</span><span class="lines">@@ -130,7 +133,8 @@
</span><span class="cx">         bool viaProxy = false,
</span><span class="cx">         WatchpointSet* additionalSet = nullptr,
</span><span class="cx">         PropertySlot::GetValueFunc = nullptr,
</span><del>-        JSObject* customSlotBase = nullptr);
</del><ins>+        JSObject* customSlotBase = nullptr,
+        DOMJIT::GetterSetter* = nullptr);
</ins><span class="cx">     
</span><span class="cx">     static std::unique_ptr&lt;AccessCase&gt; megamorphicLoad(VM&amp;, JSCell* owner);
</span><span class="cx">     
</span><span class="lines">@@ -186,6 +190,12 @@
</span><span class="cx">         return intrinsicFunction()-&gt;intrinsic();
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    DOMJIT::GetterSetter* domJIT() const
+    {
+        ASSERT(m_rareData);
+        return m_rareData-&gt;domJIT;
+    }
+
</ins><span class="cx">     WatchpointSet* additionalSet() const
</span><span class="cx">     {
</span><span class="cx">         return m_rareData ? m_rareData-&gt;additionalSet.get() : nullptr;
</span><span class="lines">@@ -284,6 +294,7 @@
</span><span class="cx">     public:
</span><span class="cx">         RareData()
</span><span class="cx">             : viaProxy(false)
</span><ins>+            , domJIT(nullptr)
</ins><span class="cx">         {
</span><span class="cx">             customAccessor.opaque = nullptr;
</span><span class="cx">         }
</span><span class="lines">@@ -300,6 +311,7 @@
</span><span class="cx">         } customAccessor;
</span><span class="cx">         WriteBarrier&lt;JSObject&gt; customSlotBase;
</span><span class="cx">         WriteBarrier&lt;JSFunction&gt; intrinsicFunction;
</span><ins>+        DOMJIT::GetterSetter* domJIT;
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     std::unique_ptr&lt;RareData&gt; m_rareData;
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGNode.h (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGNode.h        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/JavaScriptCore/dfg/DFGNode.h        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -58,6 +58,10 @@
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><span class="cx"> 
</span><ins>+namespace DOMJIT {
+class GetterSetter;
+}
+
</ins><span class="cx"> namespace Profiler {
</span><span class="cx"> class ExecutionCounter;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredomjitDOMJITGetterSetterh"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/domjit/DOMJITGetterSetter.h (0 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/domjit/DOMJITGetterSetter.h                                (rev 0)
+++ trunk/Source/JavaScriptCore/domjit/DOMJITGetterSetter.h        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -0,0 +1,64 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' 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 INC. OR
+ * 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.
+ */
+
+#pragma once
+
+#include &quot;DOMJITPatchpoint.h&quot;
+#include &quot;PropertySlot.h&quot;
+#include &quot;PutPropertySlot.h&quot;
+#include &quot;SpeculatedType.h&quot;
+
+namespace JSC { namespace DOMJIT {
+
+class GetterSetter {
+public:
+    typedef PropertySlot::GetValueFunc CustomGetter;
+    typedef PutPropertySlot::PutValueFunc CustomSetter;
+
+    GetterSetter(CustomGetter getter, CustomSetter setter, const ClassInfo* classInfo)
+        : m_getter(getter)
+        , m_setter(setter)
+        , m_thisClassInfo(classInfo)
+    {
+    }
+
+    virtual ~GetterSetter() { }
+
+    CustomGetter getter() const { return m_getter; }
+    CustomSetter setter() const { return m_setter; }
+    const ClassInfo* thisClassInfo() const { return m_thisClassInfo; }
+
+#if ENABLE(JIT)
+    virtual Ref&lt;DOMJIT::Patchpoint&gt; callDOM() = 0;
+    virtual Ref&lt;DOMJIT::Patchpoint&gt; checkDOM() = 0;
+#endif
+
+private:
+    CustomGetter m_getter;
+    CustomSetter m_setter;
+    const ClassInfo* m_thisClassInfo;
+};
+
+} }
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCoredomjitDOMJITPatchpointh"></a>
<div class="addfile"><h4>Added: trunk/Source/JavaScriptCore/domjit/DOMJITPatchpoint.h (0 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/domjit/DOMJITPatchpoint.h                                (rev 0)
+++ trunk/Source/JavaScriptCore/domjit/DOMJITPatchpoint.h        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -0,0 +1,73 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' 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 INC. OR
+ * 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.
+ */
+
+#pragma once
+
+#if ENABLE(JIT)
+
+#include &quot;CCallHelpers.h&quot;
+#include &quot;RegisterSet.h&quot;
+
+namespace JSC { namespace DOMJIT {
+
+class PatchpointParams;
+
+typedef CCallHelpers::JumpList PatchpointGeneratorFunction(CCallHelpers&amp;, const PatchpointParams&amp;);
+typedef SharedTask&lt;PatchpointGeneratorFunction&gt; PatchpointGenerator;
+
+// DOMJIT patchpoint is the way to inject an opaque code generator into DFG and FTL.
+// While B3::Patchpoint is self-contained about its compilation information,
+// DOMJIT::Patchpoint depends on which DFG Node invokes. For example, CheckDOM will
+// link returned failureCases to BadType OSRExit, but this information is offered
+// from CheckDOM DFG Node, not from this patchpoint. This patchpoint mainly focuses
+// on injecting a snippet generator that can tell register usage and can be used
+// in both DFG and FTL.
+class Patchpoint : public ThreadSafeRefCounted&lt;Patchpoint&gt; {
+public:
+    static Ref&lt;Patchpoint&gt; create()
+    {
+        return adoptRef(*new Patchpoint());
+    }
+
+    template&lt;typename Functor&gt;
+    void setGenerator(const Functor&amp; functor)
+    {
+        m_generator = createSharedTask&lt;PatchpointGeneratorFunction&gt;(functor);
+    }
+
+    RefPtr&lt;PatchpointGenerator&gt; generator() const { return m_generator; }
+
+    uint8_t numGPScratchRegisters { 0 };
+    uint8_t numFPScratchRegisters { 0 };
+
+private:
+    Patchpoint() = default;
+
+    RefPtr&lt;PatchpointGenerator&gt; m_generator;
+};
+
+} }
+
+#endif
</ins></span></pre></div>
<a id="trunkSourceJavaScriptCorejitRepatchcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/Repatch.cpp (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/Repatch.cpp        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/JavaScriptCore/jit/Repatch.cpp        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #include &quot;CallFrameShuffler.h&quot;
</span><span class="cx"> #include &quot;DFGOperations.h&quot;
</span><span class="cx"> #include &quot;DFGSpeculativeJIT.h&quot;
</span><ins>+#include &quot;DOMJITGetterSetter.h&quot;
</ins><span class="cx"> #include &quot;DirectArguments.h&quot;
</span><span class="cx"> #include &quot;FTLThunks.h&quot;
</span><span class="cx"> #include &quot;GCAwareJITStubRoutine.h&quot;
</span><span class="lines">@@ -260,6 +261,10 @@
</span><span class="cx">         if (slot.isCacheableGetter())
</span><span class="cx">             getter = jsDynamicCast&lt;JSFunction*&gt;(slot.getterSetter()-&gt;getter());
</span><span class="cx"> 
</span><ins>+        DOMJIT::GetterSetter* domJIT = nullptr;
+        if (slot.isCacheableCustom() &amp;&amp; slot.domJIT())
+            domJIT = slot.domJIT();
+
</ins><span class="cx">         if (kind == GetByIDKind::Pure) {
</span><span class="cx">             AccessCase::AccessType type;
</span><span class="cx">             if (slot.isCacheableValue())
</span><span class="lines">@@ -290,7 +295,8 @@
</span><span class="cx">             newCase = AccessCase::get(
</span><span class="cx">                 vm, codeBlock, type, offset, structure, conditionSet, loadTargetFromProxy,
</span><span class="cx">                 slot.watchpointSet(), slot.isCacheableCustom() ? slot.customGetter() : nullptr,
</span><del>-                slot.isCacheableCustom() ? slot.slotBase() : nullptr);
</del><ins>+                slot.isCacheableCustom() ? slot.slotBase() : nullptr,
+                domJIT);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeCustomGetterSetterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/CustomGetterSetter.h (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/CustomGetterSetter.h        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/JavaScriptCore/runtime/CustomGetterSetter.h        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -31,6 +31,9 @@
</span><span class="cx"> #include &quot;Structure.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><ins>+namespace DOMJIT {
+class GetterSetter;
+}
</ins><span class="cx"> 
</span><span class="cx"> class CustomGetterSetter final : public JSCell {
</span><span class="cx"> public:
</span><span class="lines">@@ -40,9 +43,9 @@
</span><span class="cx">     typedef PropertySlot::GetValueFunc CustomGetter;
</span><span class="cx">     typedef PutPropertySlot::PutValueFunc CustomSetter;
</span><span class="cx"> 
</span><del>-    static CustomGetterSetter* create(VM&amp; vm, CustomGetter customGetter, CustomSetter customSetter)
</del><ins>+    static CustomGetterSetter* create(VM&amp; vm, CustomGetter customGetter, CustomSetter customSetter, DOMJIT::GetterSetter* domJIT = nullptr)
</ins><span class="cx">     {
</span><del>-        CustomGetterSetter* customGetterSetter = new (NotNull, allocateCell&lt;CustomGetterSetter&gt;(vm.heap)) CustomGetterSetter(vm, customGetter, customSetter);
</del><ins>+        CustomGetterSetter* customGetterSetter = new (NotNull, allocateCell&lt;CustomGetterSetter&gt;(vm.heap)) CustomGetterSetter(vm, customGetter, customSetter, domJIT);
</ins><span class="cx">         customGetterSetter-&gt;finishCreation(vm);
</span><span class="cx">         return customGetterSetter;
</span><span class="cx">     }
</span><span class="lines">@@ -49,6 +52,7 @@
</span><span class="cx"> 
</span><span class="cx">     CustomGetterSetter::CustomGetter getter() const { return m_getter; }
</span><span class="cx">     CustomGetterSetter::CustomSetter setter() const { return m_setter; }
</span><ins>+    DOMJIT::GetterSetter* domJIT() const { return m_domJIT; }
</ins><span class="cx"> 
</span><span class="cx">     static Structure* createStructure(VM&amp; vm, JSGlobalObject* globalObject, JSValue prototype)
</span><span class="cx">     {
</span><span class="lines">@@ -58,15 +62,17 @@
</span><span class="cx">     DECLARE_EXPORT_INFO;
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    CustomGetterSetter(VM&amp; vm, CustomGetter getter, CustomSetter setter)
</del><ins>+    CustomGetterSetter(VM&amp; vm, CustomGetter getter, CustomSetter setter, DOMJIT::GetterSetter* domJIT)
</ins><span class="cx">         : JSCell(vm, vm.customGetterSetterStructure.get())
</span><span class="cx">         , m_getter(getter)
</span><span class="cx">         , m_setter(setter)
</span><ins>+        , m_domJIT(domJIT)
</ins><span class="cx">     {
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     CustomGetter m_getter;
</span><span class="cx">     CustomSetter m_setter;
</span><ins>+    DOMJIT::GetterSetter* m_domJIT;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> JS_EXPORT_PRIVATE bool callCustomSetter(ExecState*, CustomGetterSetter::CustomSetter, bool isAccessor, JSValue thisValue, JSValue);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeJSObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/JSObject.h (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/JSObject.h        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/JavaScriptCore/runtime/JSObject.h        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -1290,7 +1290,7 @@
</span><span class="cx"> 
</span><span class="cx">     // This access is cacheable because Structure requires an attributeChangedTransition
</span><span class="cx">     // if this property stops being an accessor.
</span><del>-    slot.setCacheableCustom(this, attributes, jsCast&lt;CustomGetterSetter*&gt;(customGetterSetter)-&gt;getter());
</del><ins>+    slot.setCacheableCustom(this, attributes, jsCast&lt;CustomGetterSetter*&gt;(customGetterSetter)-&gt;getter(), jsCast&lt;CustomGetterSetter*&gt;(customGetterSetter)-&gt;domJIT());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // It may seem crazy to inline a function this large, especially a virtual function,
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeLookuph"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/Lookup.h (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/Lookup.h        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/JavaScriptCore/runtime/Lookup.h        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -23,6 +23,7 @@
</span><span class="cx"> #include &quot;BatchedTransitionOptimizer.h&quot;
</span><span class="cx"> #include &quot;CallFrame.h&quot;
</span><span class="cx"> #include &quot;CustomGetterSetter.h&quot;
</span><ins>+#include &quot;DOMJITGetterSetter.h&quot;
</ins><span class="cx"> #include &quot;Identifier.h&quot;
</span><span class="cx"> #include &quot;IdentifierInlines.h&quot;
</span><span class="cx"> #include &quot;Intrinsic.h&quot;
</span><span class="lines">@@ -46,6 +47,7 @@
</span><span class="cx"> typedef PutPropertySlot::PutValueFunc PutFunction;
</span><span class="cx"> typedef FunctionExecutable* (*BuiltinGenerator)(VM&amp;);
</span><span class="cx"> typedef JSValue (*LazyPropertyCallback)(VM&amp;, JSObject*);
</span><ins>+typedef DOMJIT::GetterSetter* (*DOMJITGetterSetterGenerator)(void);
</ins><span class="cx"> 
</span><span class="cx"> // Hash table generated by the create_hash_table script.
</span><span class="cx"> struct HashTableValue {
</span><span class="lines">@@ -78,6 +80,8 @@
</span><span class="cx">     GetFunction propertyGetter() const { ASSERT(!(m_attributes &amp; BuiltinOrFunctionOrAccessorOrLazyPropertyOrConstant)); return reinterpret_cast&lt;GetFunction&gt;(m_values.value1); }
</span><span class="cx">     PutFunction propertyPutter() const { ASSERT(!(m_attributes &amp; BuiltinOrFunctionOrAccessorOrLazyPropertyOrConstant)); return reinterpret_cast&lt;PutFunction&gt;(m_values.value2); }
</span><span class="cx"> 
</span><ins>+    DOMJIT::GetterSetter* domJIT() const { ASSERT(m_attributes &amp; DOMJITAttribute); return reinterpret_cast&lt;DOMJITGetterSetterGenerator&gt;(m_values.value1)(); }
+
</ins><span class="cx">     NativeFunction accessorGetter() const { ASSERT(m_attributes &amp; Accessor); return reinterpret_cast&lt;NativeFunction&gt;(m_values.value1); }
</span><span class="cx">     NativeFunction accessorSetter() const { ASSERT(m_attributes &amp; Accessor); return reinterpret_cast&lt;NativeFunction&gt;(m_values.value2); }
</span><span class="cx">     BuiltinGenerator builtinAccessorGetterGenerator() const;
</span><span class="lines">@@ -224,6 +228,12 @@
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    if (entry-&gt;attributes() &amp; DOMJITAttribute) {
+        DOMJIT::GetterSetter* domJIT = entry-&gt;domJIT();
+        slot.setCacheableCustom(thisObject, attributesForStructure(entry-&gt;attributes()), domJIT-&gt;getter(), domJIT);
+        return true;
+    }
+
</ins><span class="cx">     slot.setCacheableCustom(thisObject, attributesForStructure(entry-&gt;attributes()), entry-&gt;propertyGetter());
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="lines">@@ -259,6 +269,7 @@
</span><span class="cx">         return reject(exec, slot.isStrictMode(), StrictModeReadonlyPropertyWriteError);
</span><span class="cx"> 
</span><span class="cx">     if (!(entry-&gt;attributes() &amp; ReadOnly)) {
</span><ins>+        ASSERT_WITH_MESSAGE(!(entry-&gt;attributes() &amp; DOMJITAttribute), &quot;DOMJITAttribute supports readonly attributes currently.&quot;);
</ins><span class="cx">         bool isAccessor = entry-&gt;attributes() &amp; CustomAccessor;
</span><span class="cx">         JSValue updateThisValue = entry-&gt;attributes() &amp; CustomAccessor ? slot.thisValue() : JSValue(base);
</span><span class="cx">         bool result = callCustomSetter(exec, entry-&gt;propertyPutter(), isAccessor, updateThisValue, value);
</span><span class="lines">@@ -336,6 +347,13 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    if (value.attributes() &amp; DOMJITAttribute) {
+        DOMJIT::GetterSetter* domJIT = value.domJIT();
+        CustomGetterSetter* customGetterSetter = CustomGetterSetter::create(vm, domJIT-&gt;getter(), domJIT-&gt;setter(), domJIT);
+        thisObj.putDirectCustomAccessor(vm, propertyName, customGetterSetter, attributesForStructure(value.attributes()));
+        return;
+    }
+
</ins><span class="cx">     CustomGetterSetter* customGetterSetter = CustomGetterSetter::create(vm, value.propertyGetter(), value.propertyPutter());
</span><span class="cx">     thisObj.putDirectCustomAccessor(vm, propertyName, customGetterSetter, attributesForStructure(value.attributes()));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimePropertySloth"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/PropertySlot.h (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/PropertySlot.h        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/JavaScriptCore/runtime/PropertySlot.h        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -26,7 +26,9 @@
</span><span class="cx"> #include &lt;wtf/Assertions.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace JSC {
</span><del>-
</del><ins>+namespace DOMJIT {
+class GetterSetter;
+}
</ins><span class="cx"> class ExecState;
</span><span class="cx"> class GetterSetter;
</span><span class="cx"> class JSObject;
</span><span class="lines">@@ -48,6 +50,7 @@
</span><span class="cx">     CellProperty      = 1 &lt;&lt; 11, // property is a lazy property - only used by static hashtables
</span><span class="cx">     ClassStructure    = 1 &lt;&lt; 12, // property is a lazy class structure - only used by static hashtables
</span><span class="cx">     PropertyCallback  = 1 &lt;&lt; 13, // property that is a lazy property callback - only used by static hashtables
</span><ins>+    DOMJITAttribute   = 1 &lt;&lt; 14, // property is a DOM JIT attribute - only used by static hashtables
</ins><span class="cx">     BuiltinOrFunction = Builtin | Function, // helper only used by static hashtables
</span><span class="cx">     BuiltinOrFunctionOrLazyProperty = Builtin | Function | CellProperty | ClassStructure | PropertyCallback, // helper only used by static hashtables
</span><span class="cx">     BuiltinOrFunctionOrAccessorOrLazyProperty = Builtin | Function | Accessor | CellProperty | ClassStructure | PropertyCallback, // helper only used by static hashtables
</span><span class="lines">@@ -157,6 +160,11 @@
</span><span class="cx">         return m_watchpointSet;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    DOMJIT::GetterSetter* domJIT() const
+    {
+        return m_domJIT;
+    }
+
</ins><span class="cx">     void setValue(JSObject* slotBase, unsigned attributes, JSValue value)
</span><span class="cx">     {
</span><span class="cx">         ASSERT(attributes == attributesForStructure(attributes));
</span><span class="lines">@@ -211,7 +219,7 @@
</span><span class="cx">         m_offset = invalidOffset;
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    void setCacheableCustom(JSObject* slotBase, unsigned attributes, GetValueFunc getValue)
</del><ins>+    void setCacheableCustom(JSObject* slotBase, unsigned attributes, GetValueFunc getValue, DOMJIT::GetterSetter* domJIT = nullptr)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(attributes == attributesForStructure(attributes));
</span><span class="cx">         
</span><span class="lines">@@ -223,6 +231,7 @@
</span><span class="cx">         m_slotBase = slotBase;
</span><span class="cx">         m_propertyType = TypeCustom;
</span><span class="cx">         m_offset = !invalidOffset;
</span><ins>+        m_domJIT = domJIT;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void setCustomGetterSetter(JSObject* slotBase, unsigned attributes, CustomGetterSetter* getterSetter)
</span><span class="lines">@@ -318,6 +327,7 @@
</span><span class="cx">     CacheabilityType m_cacheability;
</span><span class="cx">     PropertyType m_propertyType;
</span><span class="cx">     InternalMethodType m_internalMethodType;
</span><ins>+    DOMJIT::GetterSetter* m_domJIT { nullptr };
</ins><span class="cx">     bool m_isTaintedByOpaqueObject;
</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 (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/WebCore/ChangeLog        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2016-10-04  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
+
+        [DOMJIT] Introduce DOMJIT::GetterSetter to tell JIT information
+        https://bugs.webkit.org/show_bug.cgi?id=162916
+
+        Reviewed by Filip Pizlo.
+
+        * ForwardingHeaders/domjit/DOMJITGetterSetter.h: Added.
+        * PlatformEfl.cmake:
+        * PlatformGTK.cmake:
+        * PlatformMac.cmake:
+        * PlatformWin.cmake:
+
</ins><span class="cx"> 2016-10-04  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Return null when window.open() is popup blocked
</span></span></pre></div>
<a id="trunkSourceWebCoreForwardingHeadersdomjitDOMJITGetterSetterh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/ForwardingHeaders/domjit/DOMJITGetterSetter.h (0 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ForwardingHeaders/domjit/DOMJITGetterSetter.h                                (rev 0)
+++ trunk/Source/WebCore/ForwardingHeaders/domjit/DOMJITGetterSetter.h        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+#ifndef WebCore_FWD_DOMJITGetterSetter_h
+#define WebCore_FWD_DOMJITGetterSetter_h
+#include &lt;JavaScriptCore/DOMJITGetterSetter.h&gt;
+#endif
</ins></span></pre></div>
<a id="trunkSourceWebCorePlatformEflcmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/PlatformEfl.cmake (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/PlatformEfl.cmake        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/WebCore/PlatformEfl.cmake        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -14,6 +14,7 @@
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/bytecompiler&quot;
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/dfg&quot;
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/disassembler&quot;
</span><ins>+    &quot;${JAVASCRIPTCORE_DIR}/domjit&quot;
</ins><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/heap&quot;
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/debugger&quot;
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/interpreter&quot;
</span></span></pre></div>
<a id="trunkSourceWebCorePlatformGTKcmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/PlatformGTK.cmake (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/PlatformGTK.cmake        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/WebCore/PlatformGTK.cmake        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -19,6 +19,7 @@
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/bytecompiler&quot;
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/dfg&quot;
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/disassembler&quot;
</span><ins>+    &quot;${JAVASCRIPTCORE_DIR}/domjit&quot;
</ins><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/heap&quot;
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/debugger&quot;
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/interpreter&quot;
</span></span></pre></div>
<a id="trunkSourceWebCorePlatformMaccmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/PlatformMac.cmake (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/PlatformMac.cmake        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/WebCore/PlatformMac.cmake        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -79,6 +79,7 @@
</span><span class="cx">     &quot;${WEBCORE_DIR}/ForwardingHeaders&quot;
</span><span class="cx">     &quot;${WEBCORE_DIR}/ForwardingHeaders/bindings&quot;
</span><span class="cx">     &quot;${WEBCORE_DIR}/ForwardingHeaders/bytecode&quot;
</span><ins>+    &quot;${WEBCORE_DIR}/ForwardingHeaders/domjit&quot;
</ins><span class="cx">     &quot;${WEBCORE_DIR}/ForwardingHeaders/debugger&quot;
</span><span class="cx">     &quot;${WEBCORE_DIR}/ForwardingHeaders/heap&quot;
</span><span class="cx">     &quot;${WEBCORE_DIR}/ForwardingHeaders/inspector&quot;
</span></span></pre></div>
<a id="trunkSourceWebCorePlatformWincmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/PlatformWin.cmake (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/PlatformWin.cmake        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/WebCore/PlatformWin.cmake        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -15,6 +15,7 @@
</span><span class="cx">     &quot;${DERIVED_SOURCES_DIR}/ForwardingHeaders/JavaScriptCore/bytecompiler&quot;
</span><span class="cx">     &quot;${DERIVED_SOURCES_DIR}/ForwardingHeaders/JavaScriptCore/dfg&quot;
</span><span class="cx">     &quot;${DERIVED_SOURCES_DIR}/ForwardingHeaders/JavaScriptCore/disassembler&quot;
</span><ins>+    &quot;${DERIVED_SOURCES_DIR}/ForwardingHeaders/JavaScriptCore/domjit&quot;
</ins><span class="cx">     &quot;${DERIVED_SOURCES_DIR}/ForwardingHeaders/JavaScriptCore/heap&quot;
</span><span class="cx">     &quot;${DERIVED_SOURCES_DIR}/ForwardingHeaders/JavaScriptCore/debugger&quot;
</span><span class="cx">     &quot;${DERIVED_SOURCES_DIR}/ForwardingHeaders/JavaScriptCore/interpreter&quot;
</span></span></pre></div>
<a id="trunkSourceWebKit2CMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/CMakeLists.txt (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/CMakeLists.txt        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/WebKit2/CMakeLists.txt        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -149,6 +149,7 @@
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/collector/handles&quot;
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/dfg&quot;
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/disassembler&quot;
</span><ins>+    &quot;${JAVASCRIPTCORE_DIR}/domjit&quot;
</ins><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/heap&quot;
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/interpreter&quot;
</span><span class="cx">     &quot;${JAVASCRIPTCORE_DIR}/jit&quot;
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Source/WebKit2/ChangeLog        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2016-10-04  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
+
+        [DOMJIT] Introduce DOMJIT::GetterSetter to tell JIT information
+        https://bugs.webkit.org/show_bug.cgi?id=162916
+
+        Reviewed by Filip Pizlo.
+
+        * CMakeLists.txt:
+
</ins><span class="cx"> 2016-10-04  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [SOUP] Remove SSLPolicyFlags from SoupNetworkSession
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Tools/ChangeLog        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2016-10-04  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
+
+        [DOMJIT] Introduce DOMJIT::GetterSetter to tell JIT information
+        https://bugs.webkit.org/show_bug.cgi?id=162916
+
+        Reviewed by Filip Pizlo.
+
+        * DumpRenderTree/CMakeLists.txt:
+
</ins><span class="cx"> 2016-10-04  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Media controls are displayed in the incorrect state momentarily after switching between tabs playing media
</span></span></pre></div>
<a id="trunkToolsDumpRenderTreeCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Tools/DumpRenderTree/CMakeLists.txt (206778 => 206779)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/DumpRenderTree/CMakeLists.txt        2016-10-04 19:31:24 UTC (rev 206778)
+++ trunk/Tools/DumpRenderTree/CMakeLists.txt        2016-10-04 19:34:52 UTC (rev 206779)
</span><span class="lines">@@ -57,6 +57,7 @@
</span><span class="cx">     ${JAVASCRIPTCORE_DIR}/bytecode
</span><span class="cx">     ${JAVASCRIPTCORE_DIR}/dfg
</span><span class="cx">     ${JAVASCRIPTCORE_DIR}/disassembler
</span><ins>+    ${JAVASCRIPTCORE_DIR}/domjit
</ins><span class="cx">     ${JAVASCRIPTCORE_DIR}/heap
</span><span class="cx">     ${JAVASCRIPTCORE_DIR}/interpreter
</span><span class="cx">     ${JAVASCRIPTCORE_DIR}/jit
</span></span></pre>
</div>
</div>

</body>
</html>