<!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>[190403] trunk/Source/WebCore</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/190403">190403</a></dd>
<dt>Author</dt> <dd>youenn.fablet@crf.canon.fr</dd>
<dt>Date</dt> <dd>2015-10-01 06:07:55 -0700 (Thu, 01 Oct 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Refactor binding generator to factor JS DOM class m_impl handling
https://bugs.webkit.org/show_bug.cgi?id=149660

Reviewed by Darin Adler.

Added JSDOMWrapperWithImplementation template class to move m_impl out of the binding generator.
Updated custom bindings to use impl() instead of m_impl directly.
Updated binding generator accordingly.

Covered by existing tests and binding tests.

* bindings/js/JSDOMStringMapCustom.cpp:
(WebCore::JSDOMStringMap::getOwnPropertyNames):
(WebCore::JSDOMStringMap::deleteProperty):
* bindings/js/JSDOMWrapper.h:
(WebCore::JSDOMWrapperWithImplementation::impl):
(WebCore::JSDOMWrapperWithImplementation::~JSDOMWrapperWithImplementation):
(WebCore::JSDOMWrapperWithImplementation::JSDOMWrapperWithImplementation):
(WebCore::JSDOMWrapperWithImplementation::releaseImpl):
* bindings/js/JSGeolocationCustom.cpp:
(WebCore::JSGeolocation::getCurrentPosition):
(WebCore::JSGeolocation::watchPosition):
* bindings/js/JSSQLResultSetRowListCustom.cpp:
(WebCore::JSSQLResultSetRowList::item):
* bindings/js/JSSQLTransactionCustom.cpp:
(WebCore::JSSQLTransaction::executeSql):
* bindings/js/JSStorageCustom.cpp:
(WebCore::JSStorage::deleteProperty):
(WebCore::JSStorage::getOwnPropertyNames):
* bindings/js/JSSubtleCryptoCustom.cpp:
(WebCore::JSSubtleCrypto::encrypt):
(WebCore::JSSubtleCrypto::decrypt):
(WebCore::JSSubtleCrypto::sign):
(WebCore::JSSubtleCrypto::verify):
(WebCore::JSSubtleCrypto::wrapKey):
(WebCore::JSSubtleCrypto::unwrapKey):
* bindings/scripts/CodeGeneratorJS.pm:
(GetParentClassName):
(GetImplClassName):
(GenerateHeader):
(GenerateImplementation):
* bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
(WebCore::JSTestActiveDOMObject::JSTestActiveDOMObject):
(WebCore::JSTestActiveDOMObject::getOwnPropertySlot): Deleted.
* bindings/scripts/test/JS/JSTestActiveDOMObject.h:
(WebCore::JSTestActiveDOMObject::~JSTestActiveDOMObject):
* bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
(WebCore::JSTestCustomConstructorWithNoInterfaceObject::JSTestCustomConstructorWithNoInterfaceObject):
(WebCore::jsTestCustomConstructorWithNoInterfaceObjectConstructor): Deleted.
* bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h:
(WebCore::JSTestCustomConstructorWithNoInterfaceObject::~JSTestCustomConstructorWithNoInterfaceObject):
(WebCore::JSTestCustomConstructorWithNoInterfaceObject::finishCreation): Deleted.
* bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
(WebCore::JSTestCustomNamedGetter::JSTestCustomNamedGetter):
(WebCore::JSTestCustomNamedGetter::getOwnPropertySlot): Deleted.
* bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
(WebCore::JSTestCustomNamedGetter::~JSTestCustomNamedGetter):
* bindings/scripts/test/JS/JSTestEventConstructor.cpp:
(WebCore::JSTestEventConstructor::JSTestEventConstructor):
(WebCore::jsTestEventConstructorAttr1): Deleted.
* bindings/scripts/test/JS/JSTestEventConstructor.h:
(WebCore::JSTestEventConstructor::~JSTestEventConstructor):
(WebCore::JSTestEventConstructor::finishCreation): Deleted.
* bindings/scripts/test/JS/JSTestEventTarget.cpp:
(WebCore::JSTestEventTarget::JSTestEventTarget):
(WebCore::JSTestEventTarget::getOwnPropertySlot): Deleted.
* bindings/scripts/test/JS/JSTestEventTarget.h:
(WebCore::JSTestEventTarget::~JSTestEventTarget):
* bindings/scripts/test/JS/JSTestException.cpp:
(WebCore::JSTestException::JSTestException):
(WebCore::JSTestException::getOwnPropertySlot): Deleted.
* bindings/scripts/test/JS/JSTestException.h:
(WebCore::JSTestException::~JSTestException):
* bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
(WebCore::JSTestGenerateIsReachable::JSTestGenerateIsReachable):
(WebCore::jsTestGenerateIsReachableConstructor): Deleted.
* bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
(WebCore::JSTestGenerateIsReachable::~JSTestGenerateIsReachable):
(WebCore::JSTestGenerateIsReachable::finishCreation): Deleted.
* bindings/scripts/test/JS/JSTestInterface.cpp:
(WebCore::JSTestInterface::JSTestInterface):
(WebCore::JSTestInterface::getOwnPropertySlot): Deleted.
* bindings/scripts/test/JS/JSTestInterface.h:
* bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
(WebCore::jsTestJSBuiltinConstructorConstructor): Deleted.
* bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
(WebCore::JSTestJSBuiltinConstructor::~JSTestJSBuiltinConstructor):
* bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
(WebCore::JSTestMediaQueryListListener::JSTestMediaQueryListListener):
(WebCore::jsTestMediaQueryListListenerConstructor): Deleted.
* bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
(WebCore::JSTestMediaQueryListListener::~JSTestMediaQueryListListener):
(WebCore::JSTestMediaQueryListListener::finishCreation): Deleted.
* bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
(WebCore::JSTestNamedConstructor::JSTestNamedConstructor):
(WebCore::jsTestNamedConstructorConstructor): Deleted.
* bindings/scripts/test/JS/JSTestNamedConstructor.h:
(WebCore::JSTestNamedConstructor::~JSTestNamedConstructor):
(WebCore::JSTestNamedConstructor::finishCreation): Deleted.
* bindings/scripts/test/JS/JSTestNondeterministic.cpp:
(WebCore::JSTestNondeterministic::JSTestNondeterministic):
(WebCore::jsTestNondeterministicNondeterministicReadonlyAttr): Deleted.
* bindings/scripts/test/JS/JSTestNondeterministic.h:
(WebCore::JSTestNondeterministic::~JSTestNondeterministic):
(WebCore::JSTestNondeterministic::finishCreation): Deleted.
* bindings/scripts/test/JS/JSTestObj.cpp:
(WebCore::JSTestObj::JSTestObj):
(WebCore::JSTestObj::getOwnPropertySlot): Deleted.
* bindings/scripts/test/JS/JSTestObj.h:
(WebCore::JSTestObj::~JSTestObj):
* bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
(WebCore::JSTestOverloadedConstructors::JSTestOverloadedConstructors):
(WebCore::jsTestOverloadedConstructorsConstructor): Deleted.
* bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
(WebCore::JSTestOverloadedConstructors::~JSTestOverloadedConstructors):
(WebCore::JSTestOverloadedConstructors::finishCreation): Deleted.
* bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
(WebCore::JSTestOverrideBuiltins::JSTestOverrideBuiltins):
(WebCore::JSTestOverrideBuiltins::getOwnPropertySlot): Deleted.
* bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
(WebCore::JSTestOverrideBuiltins::~JSTestOverrideBuiltins):
* bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
(WebCore::JSTestSerializedScriptValueInterface::JSTestSerializedScriptValueInterface):
(WebCore::jsTestSerializedScriptValueInterfaceValue): Deleted.
* bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
(WebCore::JSTestSerializedScriptValueInterface::~JSTestSerializedScriptValueInterface):
(WebCore::JSTestSerializedScriptValueInterface::finishCreation): Deleted.
* bindings/scripts/test/JS/JSTestTypedefs.cpp:
(WebCore::JSTestTypedefs::JSTestTypedefs):
(WebCore::JSTestTypedefs::getOwnPropertySlot): Deleted.
* bindings/scripts/test/JS/JSTestTypedefs.h:
(WebCore::JSTestTypedefs::~JSTestTypedefs):
* bindings/scripts/test/JS/JSattribute.cpp:
(WebCore::JSattribute::JSattribute):
(WebCore::jsattributeReadonly): Deleted.
* bindings/scripts/test/JS/JSattribute.h:
(WebCore::JSattribute::~JSattribute):
(WebCore::JSattribute::finishCreation): Deleted.
* bindings/scripts/test/JS/JSreadonly.cpp:
(WebCore::JSreadonly::JSreadonly):
(WebCore::jsreadonlyConstructor): Deleted.
* bindings/scripts/test/JS/JSreadonly.h:
(WebCore::JSreadonly::~JSreadonly):
(WebCore::JSreadonly::finishCreation): Deleted.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMStringMapCustomcpp">trunk/Source/WebCore/bindings/js/JSDOMStringMapCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMWrapperh">trunk/Source/WebCore/bindings/js/JSDOMWrapper.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSGeolocationCustomcpp">trunk/Source/WebCore/bindings/js/JSGeolocationCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSSQLResultSetRowListCustomcpp">trunk/Source/WebCore/bindings/js/JSSQLResultSetRowListCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSSQLTransactionCustomcpp">trunk/Source/WebCore/bindings/js/JSSQLTransactionCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSStorageCustomcpp">trunk/Source/WebCore/bindings/js/JSStorageCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSSubtleCryptoCustomcpp">trunk/Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjectcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjecth">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCustomConstructorWithNoInterfaceObjectcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCustomConstructorWithNoInterfaceObjecth">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCustomNamedGettercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCustomNamedGetterh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventTargeth">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestExceptionh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachablecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachableh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestInterfaceh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenerh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedConstructorh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministiccpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministich">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorsh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestOverrideBuiltinscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestOverrideBuiltinsh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfaceh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestTypedefsh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSattributecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSattributeh">trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSreadonlycpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSreadonlyh">trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/ChangeLog        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -1,3 +1,150 @@
</span><ins>+2015-10-01  Youenn Fablet  &lt;youenn.fablet@crf.canon.fr&gt;
+
+        Refactor binding generator to factor JS DOM class m_impl handling
+        https://bugs.webkit.org/show_bug.cgi?id=149660
+
+        Reviewed by Darin Adler.
+
+        Added JSDOMWrapperWithImplementation template class to move m_impl out of the binding generator.
+        Updated custom bindings to use impl() instead of m_impl directly.
+        Updated binding generator accordingly.
+
+        Covered by existing tests and binding tests.
+
+        * bindings/js/JSDOMStringMapCustom.cpp:
+        (WebCore::JSDOMStringMap::getOwnPropertyNames):
+        (WebCore::JSDOMStringMap::deleteProperty):
+        * bindings/js/JSDOMWrapper.h:
+        (WebCore::JSDOMWrapperWithImplementation::impl):
+        (WebCore::JSDOMWrapperWithImplementation::~JSDOMWrapperWithImplementation):
+        (WebCore::JSDOMWrapperWithImplementation::JSDOMWrapperWithImplementation):
+        (WebCore::JSDOMWrapperWithImplementation::releaseImpl):
+        * bindings/js/JSGeolocationCustom.cpp:
+        (WebCore::JSGeolocation::getCurrentPosition):
+        (WebCore::JSGeolocation::watchPosition):
+        * bindings/js/JSSQLResultSetRowListCustom.cpp:
+        (WebCore::JSSQLResultSetRowList::item):
+        * bindings/js/JSSQLTransactionCustom.cpp:
+        (WebCore::JSSQLTransaction::executeSql):
+        * bindings/js/JSStorageCustom.cpp:
+        (WebCore::JSStorage::deleteProperty):
+        (WebCore::JSStorage::getOwnPropertyNames):
+        * bindings/js/JSSubtleCryptoCustom.cpp:
+        (WebCore::JSSubtleCrypto::encrypt):
+        (WebCore::JSSubtleCrypto::decrypt):
+        (WebCore::JSSubtleCrypto::sign):
+        (WebCore::JSSubtleCrypto::verify):
+        (WebCore::JSSubtleCrypto::wrapKey):
+        (WebCore::JSSubtleCrypto::unwrapKey):
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GetParentClassName):
+        (GetImplClassName):
+        (GenerateHeader):
+        (GenerateImplementation):
+        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
+        (WebCore::JSTestActiveDOMObject::JSTestActiveDOMObject):
+        (WebCore::JSTestActiveDOMObject::getOwnPropertySlot): Deleted.
+        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
+        (WebCore::JSTestActiveDOMObject::~JSTestActiveDOMObject):
+        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
+        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::JSTestCustomConstructorWithNoInterfaceObject):
+        (WebCore::jsTestCustomConstructorWithNoInterfaceObjectConstructor): Deleted.
+        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h:
+        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::~JSTestCustomConstructorWithNoInterfaceObject):
+        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::finishCreation): Deleted.
+        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
+        (WebCore::JSTestCustomNamedGetter::JSTestCustomNamedGetter):
+        (WebCore::JSTestCustomNamedGetter::getOwnPropertySlot): Deleted.
+        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
+        (WebCore::JSTestCustomNamedGetter::~JSTestCustomNamedGetter):
+        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
+        (WebCore::JSTestEventConstructor::JSTestEventConstructor):
+        (WebCore::jsTestEventConstructorAttr1): Deleted.
+        * bindings/scripts/test/JS/JSTestEventConstructor.h:
+        (WebCore::JSTestEventConstructor::~JSTestEventConstructor):
+        (WebCore::JSTestEventConstructor::finishCreation): Deleted.
+        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
+        (WebCore::JSTestEventTarget::JSTestEventTarget):
+        (WebCore::JSTestEventTarget::getOwnPropertySlot): Deleted.
+        * bindings/scripts/test/JS/JSTestEventTarget.h:
+        (WebCore::JSTestEventTarget::~JSTestEventTarget):
+        * bindings/scripts/test/JS/JSTestException.cpp:
+        (WebCore::JSTestException::JSTestException):
+        (WebCore::JSTestException::getOwnPropertySlot): Deleted.
+        * bindings/scripts/test/JS/JSTestException.h:
+        (WebCore::JSTestException::~JSTestException):
+        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
+        (WebCore::JSTestGenerateIsReachable::JSTestGenerateIsReachable):
+        (WebCore::jsTestGenerateIsReachableConstructor): Deleted.
+        * bindings/scripts/test/JS/JSTestGenerateIsReachable.h:
+        (WebCore::JSTestGenerateIsReachable::~JSTestGenerateIsReachable):
+        (WebCore::JSTestGenerateIsReachable::finishCreation): Deleted.
+        * bindings/scripts/test/JS/JSTestInterface.cpp:
+        (WebCore::JSTestInterface::JSTestInterface):
+        (WebCore::JSTestInterface::getOwnPropertySlot): Deleted.
+        * bindings/scripts/test/JS/JSTestInterface.h:
+        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
+        (WebCore::jsTestJSBuiltinConstructorConstructor): Deleted.
+        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
+        (WebCore::JSTestJSBuiltinConstructor::~JSTestJSBuiltinConstructor):
+        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
+        (WebCore::JSTestMediaQueryListListener::JSTestMediaQueryListListener):
+        (WebCore::jsTestMediaQueryListListenerConstructor): Deleted.
+        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h:
+        (WebCore::JSTestMediaQueryListListener::~JSTestMediaQueryListListener):
+        (WebCore::JSTestMediaQueryListListener::finishCreation): Deleted.
+        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
+        (WebCore::JSTestNamedConstructor::JSTestNamedConstructor):
+        (WebCore::jsTestNamedConstructorConstructor): Deleted.
+        * bindings/scripts/test/JS/JSTestNamedConstructor.h:
+        (WebCore::JSTestNamedConstructor::~JSTestNamedConstructor):
+        (WebCore::JSTestNamedConstructor::finishCreation): Deleted.
+        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
+        (WebCore::JSTestNondeterministic::JSTestNondeterministic):
+        (WebCore::jsTestNondeterministicNondeterministicReadonlyAttr): Deleted.
+        * bindings/scripts/test/JS/JSTestNondeterministic.h:
+        (WebCore::JSTestNondeterministic::~JSTestNondeterministic):
+        (WebCore::JSTestNondeterministic::finishCreation): Deleted.
+        * bindings/scripts/test/JS/JSTestObj.cpp:
+        (WebCore::JSTestObj::JSTestObj):
+        (WebCore::JSTestObj::getOwnPropertySlot): Deleted.
+        * bindings/scripts/test/JS/JSTestObj.h:
+        (WebCore::JSTestObj::~JSTestObj):
+        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
+        (WebCore::JSTestOverloadedConstructors::JSTestOverloadedConstructors):
+        (WebCore::jsTestOverloadedConstructorsConstructor): Deleted.
+        * bindings/scripts/test/JS/JSTestOverloadedConstructors.h:
+        (WebCore::JSTestOverloadedConstructors::~JSTestOverloadedConstructors):
+        (WebCore::JSTestOverloadedConstructors::finishCreation): Deleted.
+        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
+        (WebCore::JSTestOverrideBuiltins::JSTestOverrideBuiltins):
+        (WebCore::JSTestOverrideBuiltins::getOwnPropertySlot): Deleted.
+        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
+        (WebCore::JSTestOverrideBuiltins::~JSTestOverrideBuiltins):
+        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
+        (WebCore::JSTestSerializedScriptValueInterface::JSTestSerializedScriptValueInterface):
+        (WebCore::jsTestSerializedScriptValueInterfaceValue): Deleted.
+        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
+        (WebCore::JSTestSerializedScriptValueInterface::~JSTestSerializedScriptValueInterface):
+        (WebCore::JSTestSerializedScriptValueInterface::finishCreation): Deleted.
+        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
+        (WebCore::JSTestTypedefs::JSTestTypedefs):
+        (WebCore::JSTestTypedefs::getOwnPropertySlot): Deleted.
+        * bindings/scripts/test/JS/JSTestTypedefs.h:
+        (WebCore::JSTestTypedefs::~JSTestTypedefs):
+        * bindings/scripts/test/JS/JSattribute.cpp:
+        (WebCore::JSattribute::JSattribute):
+        (WebCore::jsattributeReadonly): Deleted.
+        * bindings/scripts/test/JS/JSattribute.h:
+        (WebCore::JSattribute::~JSattribute):
+        (WebCore::JSattribute::finishCreation): Deleted.
+        * bindings/scripts/test/JS/JSreadonly.cpp:
+        (WebCore::JSreadonly::JSreadonly):
+        (WebCore::jsreadonlyConstructor): Deleted.
+        * bindings/scripts/test/JS/JSreadonly.h:
+        (WebCore::JSreadonly::~JSreadonly):
+        (WebCore::JSreadonly::finishCreation): Deleted.
+
</ins><span class="cx"> 2015-10-01  Csaba Osztrogonác  &lt;ossy@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix the ARM build after r190192
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMStringMapCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMStringMapCustom.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMStringMapCustom.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/js/JSDOMStringMapCustom.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -52,7 +52,7 @@
</span><span class="cx"> {
</span><span class="cx">     JSDOMStringMap* thisObject = jsCast&lt;JSDOMStringMap*&gt;(object);
</span><span class="cx">     Vector&lt;String&gt; names;
</span><del>-    thisObject-&gt;m_impl-&gt;getNames(names);
</del><ins>+    thisObject-&gt;impl().getNames(names);
</ins><span class="cx">     size_t length = names.size();
</span><span class="cx">     for (size_t i = 0; i &lt; length; ++i)
</span><span class="cx">         propertyNames.add(Identifier::fromString(exec, names[i]));
</span><span class="lines">@@ -65,7 +65,7 @@
</span><span class="cx">     JSDOMStringMap* thisObject = jsCast&lt;JSDOMStringMap*&gt;(cell);
</span><span class="cx">     if (propertyName.isSymbol())
</span><span class="cx">         return Base::deleteProperty(thisObject, exec, propertyName);
</span><del>-    return thisObject-&gt;m_impl-&gt;deleteItem(propertyNameToString(propertyName));
</del><ins>+    return thisObject-&gt;impl().deleteItem(propertyNameToString(propertyName));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool JSDOMStringMap::deletePropertyByIndex(JSCell* cell, ExecState* exec, unsigned index)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMWrapperh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMWrapper.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMWrapper.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/js/JSDOMWrapper.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -42,12 +42,28 @@
</span><span class="cx"> 
</span><span class="cx"> protected:
</span><span class="cx">     JSDOMWrapper(JSC::Structure* structure, JSC::JSGlobalObject* globalObject) 
</span><del>-        : JSDestructibleObject(globalObject-&gt;vm(), structure)
</del><ins>+        : Base(globalObject-&gt;vm(), structure)
</ins><span class="cx">     {
</span><span class="cx">         ASSERT(scriptExecutionContext());
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+template&lt;typename ImplementationClass&gt; class JSDOMWrapperWithImplementation : public JSDOMWrapper {
+public:
+    typedef JSDOMWrapper Base;
+
+    ImplementationClass&amp; impl() const { return *m_impl; }
+    ~JSDOMWrapperWithImplementation() { std::exchange(m_impl, nullptr)-&gt;deref(); }
+
+protected:
+    JSDOMWrapperWithImplementation(JSC::Structure* structure, JSC::JSGlobalObject* globalObject, Ref&lt;ImplementationClass&gt;&amp;&amp; impl)
+        : Base(structure, globalObject)
+        , m_impl(&amp;impl.leakRef()) { }
+
+private:
+    ImplementationClass* m_impl;
+};
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // JSDOMWrapper_h
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSGeolocationCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSGeolocationCustom.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSGeolocationCustom.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/js/JSGeolocationCustom.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -114,7 +114,7 @@
</span><span class="cx">         return jsUndefined();
</span><span class="cx">     ASSERT(positionOptions);
</span><span class="cx"> 
</span><del>-    m_impl-&gt;getCurrentPosition(positionCallback.release(), positionErrorCallback.release(), positionOptions.release());
</del><ins>+    impl().getCurrentPosition(positionCallback.release(), positionErrorCallback.release(), positionOptions.release());
</ins><span class="cx">     return jsUndefined();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -136,7 +136,7 @@
</span><span class="cx">         return jsUndefined();
</span><span class="cx">     ASSERT(positionOptions);
</span><span class="cx"> 
</span><del>-    int watchID = m_impl-&gt;watchPosition(positionCallback.release(), positionErrorCallback.release(), positionOptions.release());
</del><ins>+    int watchID = impl().watchPosition(positionCallback.release(), positionErrorCallback.release(), positionOptions.release());
</ins><span class="cx">     return jsNumber(watchID);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSSQLResultSetRowListCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSSQLResultSetRowListCustom.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSSQLResultSetRowListCustom.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/js/JSSQLResultSetRowListCustom.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -47,17 +47,17 @@
</span><span class="cx">         setDOMException(&amp;state, TYPE_MISMATCH_ERR);
</span><span class="cx">         return jsUndefined();
</span><span class="cx">     }
</span><del>-    if (index &lt; 0 || (unsigned)index &gt;= m_impl-&gt;length()) {
</del><ins>+    if (index &lt; 0 || (unsigned)index &gt;= impl().length()) {
</ins><span class="cx">         setDOMException(&amp;state, INDEX_SIZE_ERR);
</span><span class="cx">         return jsUndefined();
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     JSObject* object = constructEmptyObject(&amp;state);
</span><span class="cx"> 
</span><del>-    unsigned numColumns = m_impl-&gt;columnNames().size();
</del><ins>+    unsigned numColumns = impl().columnNames().size();
</ins><span class="cx">     unsigned valuesIndex = index * numColumns;
</span><span class="cx">     for (unsigned i = 0; i &lt; numColumns; i++) {
</span><del>-        const SQLValue&amp; value = m_impl-&gt;values()[valuesIndex + i];
</del><ins>+        const SQLValue&amp; value = impl().values()[valuesIndex + i];
</ins><span class="cx">         JSValue jsValue;
</span><span class="cx"> 
</span><span class="cx">         switch (value.type()) {
</span><span class="lines">@@ -74,7 +74,7 @@
</span><span class="cx">             ASSERT_NOT_REACHED();
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        object-&gt;putDirect(state.vm(), Identifier::fromString(&amp;state, m_impl-&gt;columnNames()[i]), jsValue, DontDelete | ReadOnly);
</del><ins>+        object-&gt;putDirect(state.vm(), Identifier::fromString(&amp;state, impl().columnNames()[i]), jsValue, DontDelete | ReadOnly);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return object;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSSQLTransactionCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSSQLTransactionCustom.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSSQLTransactionCustom.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/js/JSSQLTransactionCustom.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -109,7 +109,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     ExceptionCode ec = 0;
</span><del>-    m_impl-&gt;executeSQL(sqlStatement, sqlValues, callback.release(), errorCallback.release(), ec);
</del><ins>+    impl().executeSQL(sqlStatement, sqlValues, callback.release(), errorCallback.release(), ec);
</ins><span class="cx">     setDOMException(&amp;state, ec);
</span><span class="cx"> 
</span><span class="cx">     return jsUndefined();
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSStorageCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSStorageCustom.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSStorageCustom.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/js/JSStorageCustom.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx">         return Base::deleteProperty(thisObject, exec, propertyName);
</span><span class="cx"> 
</span><span class="cx">     ExceptionCode ec = 0;
</span><del>-    thisObject-&gt;m_impl-&gt;removeItem(propertyNameToString(propertyName), ec);
</del><ins>+    thisObject-&gt;impl().removeItem(propertyNameToString(propertyName), ec);
</ins><span class="cx">     setDOMException(exec, ec);
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="lines">@@ -83,12 +83,12 @@
</span><span class="cx"> {
</span><span class="cx">     JSStorage* thisObject = jsCast&lt;JSStorage*&gt;(object);
</span><span class="cx">     ExceptionCode ec = 0;
</span><del>-    unsigned length = thisObject-&gt;m_impl-&gt;length(ec);
</del><ins>+    unsigned length = thisObject-&gt;impl().length(ec);
</ins><span class="cx">     setDOMException(exec, ec);
</span><span class="cx">     if (exec-&gt;hadException())
</span><span class="cx">         return;
</span><span class="cx">     for (unsigned i = 0; i &lt; length; ++i) {
</span><del>-        propertyNames.add(Identifier::fromString(exec, thisObject-&gt;m_impl-&gt;key(i, ec)));
</del><ins>+        propertyNames.add(Identifier::fromString(exec, thisObject-&gt;impl().key(i, ec)));
</ins><span class="cx">         setDOMException(exec, ec);
</span><span class="cx">         if (exec-&gt;hadException())
</span><span class="cx">             return;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSSubtleCryptoCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/js/JSSubtleCryptoCustom.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -152,7 +152,7 @@
</span><span class="cx">         return throwTypeError(&amp;state);
</span><span class="cx"> 
</span><span class="cx">     if (!key-&gt;allows(CryptoKeyUsageEncrypt)) {
</span><del>-        m_impl-&gt;document()-&gt;addConsoleMessage(MessageSource::JS, MessageLevel::Error, ASCIILiteral(&quot;Key usages do not include 'encrypt'&quot;));
</del><ins>+        impl().document()-&gt;addConsoleMessage(MessageSource::JS, MessageLevel::Error, ASCIILiteral(&quot;Key usages do not include 'encrypt'&quot;));
</ins><span class="cx">         setDOMException(&amp;state, NOT_SUPPORTED_ERR);
</span><span class="cx">         return jsUndefined();
</span><span class="cx">     }
</span><span class="lines">@@ -205,7 +205,7 @@
</span><span class="cx">         return throwTypeError(&amp;state);
</span><span class="cx"> 
</span><span class="cx">     if (!key-&gt;allows(CryptoKeyUsageDecrypt)) {
</span><del>-        m_impl-&gt;document()-&gt;addConsoleMessage(MessageSource::JS, MessageLevel::Error, ASCIILiteral(&quot;Key usages do not include 'decrypt'&quot;));
</del><ins>+        impl().document()-&gt;addConsoleMessage(MessageSource::JS, MessageLevel::Error, ASCIILiteral(&quot;Key usages do not include 'decrypt'&quot;));
</ins><span class="cx">         setDOMException(&amp;state, NOT_SUPPORTED_ERR);
</span><span class="cx">         return jsUndefined();
</span><span class="cx">     }
</span><span class="lines">@@ -257,7 +257,7 @@
</span><span class="cx">         return throwTypeError(&amp;state);
</span><span class="cx"> 
</span><span class="cx">     if (!key-&gt;allows(CryptoKeyUsageSign)) {
</span><del>-        m_impl-&gt;document()-&gt;addConsoleMessage(MessageSource::JS, MessageLevel::Error, ASCIILiteral(&quot;Key usages do not include 'sign'&quot;));
</del><ins>+        impl().document()-&gt;addConsoleMessage(MessageSource::JS, MessageLevel::Error, ASCIILiteral(&quot;Key usages do not include 'sign'&quot;));
</ins><span class="cx">         setDOMException(&amp;state, NOT_SUPPORTED_ERR);
</span><span class="cx">         return jsUndefined();
</span><span class="cx">     }
</span><span class="lines">@@ -309,7 +309,7 @@
</span><span class="cx">         return throwTypeError(&amp;state);
</span><span class="cx"> 
</span><span class="cx">     if (!key-&gt;allows(CryptoKeyUsageVerify)) {
</span><del>-        m_impl-&gt;document()-&gt;addConsoleMessage(MessageSource::JS, MessageLevel::Error, ASCIILiteral(&quot;Key usages do not include 'verify'&quot;));
</del><ins>+        impl().document()-&gt;addConsoleMessage(MessageSource::JS, MessageLevel::Error, ASCIILiteral(&quot;Key usages do not include 'verify'&quot;));
</ins><span class="cx">         setDOMException(&amp;state, NOT_SUPPORTED_ERR);
</span><span class="cx">         return jsUndefined();
</span><span class="cx">     }
</span><span class="lines">@@ -646,7 +646,7 @@
</span><span class="cx">         return throwTypeError(&amp;state);
</span><span class="cx"> 
</span><span class="cx">     if (!wrappingKey-&gt;allows(CryptoKeyUsageWrapKey)) {
</span><del>-        m_impl-&gt;document()-&gt;addConsoleMessage(MessageSource::JS, MessageLevel::Error, ASCIILiteral(&quot;Key usages do not include 'wrapKey'&quot;));
</del><ins>+        impl().document()-&gt;addConsoleMessage(MessageSource::JS, MessageLevel::Error, ASCIILiteral(&quot;Key usages do not include 'wrapKey'&quot;));
</ins><span class="cx">         setDOMException(&amp;state, NOT_SUPPORTED_ERR);
</span><span class="cx">         return jsUndefined();
</span><span class="cx">     }
</span><span class="lines">@@ -728,7 +728,7 @@
</span><span class="cx">         return throwTypeError(&amp;state);
</span><span class="cx"> 
</span><span class="cx">     if (!unwrappingKey-&gt;allows(CryptoKeyUsageUnwrapKey)) {
</span><del>-        m_impl-&gt;document()-&gt;addConsoleMessage(MessageSource::JS, MessageLevel::Error, ASCIILiteral(&quot;Key usages do not include 'unwrapKey'&quot;));
</del><ins>+        impl().document()-&gt;addConsoleMessage(MessageSource::JS, MessageLevel::Error, ASCIILiteral(&quot;Key usages do not include 'unwrapKey'&quot;));
</ins><span class="cx">         setDOMException(&amp;state, NOT_SUPPORTED_ERR);
</span><span class="cx">         return jsUndefined();
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -180,7 +180,8 @@
</span><span class="cx">     my $interface = shift;
</span><span class="cx"> 
</span><span class="cx">     return $interface-&gt;extendedAttributes-&gt;{&quot;JSLegacyParent&quot;} if $interface-&gt;extendedAttributes-&gt;{&quot;JSLegacyParent&quot;};
</span><del>-    return &quot;JSDOMWrapper&quot; unless $interface-&gt;parent;
</del><ins>+    return &quot;JSDOMWrapper&quot; unless NeedsImplementationClass($interface);
+    return &quot;JSDOMWrapperWithImplementation&lt;&quot; . GetImplClassName($interface-&gt;name) . &quot;&gt;&quot; unless $interface-&gt;parent;
</ins><span class="cx">     return &quot;JS&quot; . $interface-&gt;parent;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -840,6 +841,10 @@
</span><span class="cx">     my $name = shift;
</span><span class="cx"> 
</span><span class="cx">     return &quot;DOMWindow&quot; if $name eq &quot;AbstractView&quot;;
</span><ins>+
+    my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($name);
+    return $svgNativeType if $svgNativeType;
+
</ins><span class="cx">     return $name;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -881,9 +886,7 @@
</span><span class="cx">     $headerIncludes{&quot;SVGElement.h&quot;} = 1 if $className =~ /^JSSVG/;
</span><span class="cx"> 
</span><span class="cx">     my $implType = GetImplClassName($interfaceName);
</span><del>-    my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($implType);
-    $implType = $svgNativeType if $svgNativeType;
-
</del><ins>+    my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($interfaceName);
</ins><span class="cx">     my $svgPropertyOrListPropertyType;
</span><span class="cx">     $svgPropertyOrListPropertyType = $svgPropertyType if $svgPropertyType;
</span><span class="cx">     $svgPropertyOrListPropertyType = $svgListPropertyType if $svgListPropertyType;
</span><span class="lines">@@ -1027,7 +1030,6 @@
</span><span class="cx"> 
</span><span class="cx">     if (!$hasParent) {
</span><span class="cx">         push(@headerContent, &quot;    static void destroy(JSC::JSCell*);\n&quot;);
</span><del>-        push(@headerContent, &quot;    ~${className}();\n&quot;);
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     # Class info
</span><span class="lines">@@ -1188,12 +1190,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (NeedsImplementationClass($interface)) {
</span><del>-        if (!$hasParent) {
-            push(@headerContent, &quot;    $implType&amp; impl() const { return *m_impl; }\n&quot;);
-            push(@headerContent, &quot;    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }\n\n&quot;);
-            push(@headerContent, &quot;private:\n&quot;);
-            push(@headerContent, &quot;    $implType* m_impl;\n&quot;);
-        } else {
</del><ins>+        if ($hasParent) {
</ins><span class="cx">             push(@headerContent, &quot;    $interfaceName&amp; impl() const\n&quot;);
</span><span class="cx">             push(@headerContent, &quot;    {\n&quot;);
</span><span class="cx">             push(@headerContent, &quot;        return static_cast&lt;$interfaceName&amp;&gt;(Base::impl());\n&quot;);
</span><span class="lines">@@ -2138,9 +2135,7 @@
</span><span class="cx">     }
</span><span class="cx">     push(@implContent, &quot;, CREATE_METHOD_TABLE($className) };\n\n&quot;);
</span><span class="cx"> 
</span><del>-    my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($implType);
-    $implType = $svgNativeType if $svgNativeType;
-
</del><ins>+    my ($svgPropertyType, $svgListPropertyType, $svgNativeType) = GetSVGPropertyTypes($interfaceName);
</ins><span class="cx">     my $svgPropertyOrListPropertyType;
</span><span class="cx">     $svgPropertyOrListPropertyType = $svgPropertyType if $svgPropertyType;
</span><span class="cx">     $svgPropertyOrListPropertyType = $svgListPropertyType if $svgListPropertyType;
</span><span class="lines">@@ -2163,12 +2158,7 @@
</span><span class="cx">         push(@implContent, &quot;    : $parentClassName(structure, globalObject) { }\n\n&quot;);
</span><span class="cx">      }else {
</span><span class="cx">         push(@implContent, &quot;${className}::$className(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;$implType&gt;&amp;&amp; impl)\n&quot;);
</span><del>-        if ($hasParent) {
-            push(@implContent, &quot;    : $parentClassName(structure, globalObject, WTF::move(impl))\n&quot;);
-        } else {
-            push(@implContent, &quot;    : $parentClassName(structure, globalObject)\n&quot;);
-            push(@implContent, &quot;    , m_impl(&amp;impl.leakRef())\n&quot;);
-        }
</del><ins>+        push(@implContent, &quot;    : $parentClassName(structure, globalObject, WTF::move(impl))\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 class="lines">@@ -2196,13 +2186,6 @@
</span><span class="cx">         push(@implContent, &quot;    ${className}* thisObject = static_cast&lt;${className}*&gt;(cell);\n&quot;);
</span><span class="cx">         push(@implContent, &quot;    thisObject-&gt;${className}::~${className}();\n&quot;);
</span><span class="cx">         push(@implContent, &quot;}\n\n&quot;);
</span><del>-
-        push(@implContent, &quot;${className}::~${className}()\n&quot;);
-        push(@implContent, &quot;{\n&quot;);
-        if (NeedsImplementationClass($interface)) {
-            push(@implContent, &quot;    releaseImpl();\n&quot;);
-        }
-        push(@implContent, &quot;}\n\n&quot;);
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     my $hasGetter = InstanceOverridesGetOwnPropertySlot($interface);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -139,8 +139,7 @@
</span><span class="cx"> const ClassInfo JSTestActiveDOMObject::s_info = { &quot;TestActiveDOMObject&quot;, &amp;Base::s_info, &amp;JSTestActiveDOMObjectTable, CREATE_METHOD_TABLE(JSTestActiveDOMObject) };
</span><span class="cx"> 
</span><span class="cx"> JSTestActiveDOMObject::JSTestActiveDOMObject(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestActiveDOMObject&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;TestActiveDOMObject&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -160,11 +159,6 @@
</span><span class="cx">     thisObject-&gt;JSTestActiveDOMObject::~JSTestActiveDOMObject();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTestActiveDOMObject::~JSTestActiveDOMObject()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> bool JSTestActiveDOMObject::getOwnPropertySlot(JSObject* object, ExecState* state, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><span class="cx">     auto* thisObject = jsCast&lt;JSTestActiveDOMObject*&gt;(object);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -27,9 +27,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class JSTestActiveDOMObject : public JSDOMWrapper {
</del><ins>+class JSTestActiveDOMObject : public JSDOMWrapperWithImplementation&lt;TestActiveDOMObject&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;TestActiveDOMObject&gt; Base;
</ins><span class="cx">     static JSTestActiveDOMObject* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestActiveDOMObject&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         JSTestActiveDOMObject* ptr = new (NotNull, JSC::allocateCell&lt;JSTestActiveDOMObject&gt;(globalObject-&gt;vm().heap)) JSTestActiveDOMObject(structure, globalObject, WTF::move(impl));
</span><span class="lines">@@ -42,7 +42,6 @@
</span><span class="cx">     static TestActiveDOMObject* toWrapped(JSC::JSValue);
</span><span class="cx">     static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&amp;);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSTestActiveDOMObject();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -52,11 +51,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><del>-    TestActiveDOMObject&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    TestActiveDOMObject* m_impl;
</del><span class="cx"> public:
</span><span class="cx">     static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | Base::StructureFlags;
</span><span class="cx"> protected:
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCustomConstructorWithNoInterfaceObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -119,8 +119,7 @@
</span><span class="cx"> const ClassInfo JSTestCustomConstructorWithNoInterfaceObject::s_info = { &quot;TestCustomConstructorWithNoInterfaceObject&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestCustomConstructorWithNoInterfaceObject) };
</span><span class="cx"> 
</span><span class="cx"> JSTestCustomConstructorWithNoInterfaceObject::JSTestCustomConstructorWithNoInterfaceObject(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestCustomConstructorWithNoInterfaceObject&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;TestCustomConstructorWithNoInterfaceObject&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -140,11 +139,6 @@
</span><span class="cx">     thisObject-&gt;JSTestCustomConstructorWithNoInterfaceObject::~JSTestCustomConstructorWithNoInterfaceObject();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTestCustomConstructorWithNoInterfaceObject::~JSTestCustomConstructorWithNoInterfaceObject()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> EncodedJSValue jsTestCustomConstructorWithNoInterfaceObjectConstructor(ExecState* state, JSObject* baseValue, EncodedJSValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     JSTestCustomConstructorWithNoInterfaceObjectPrototype* domObject = jsDynamicCast&lt;JSTestCustomConstructorWithNoInterfaceObjectPrototype*&gt;(baseValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCustomConstructorWithNoInterfaceObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -27,9 +27,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class JSTestCustomConstructorWithNoInterfaceObject : public JSDOMWrapper {
</del><ins>+class JSTestCustomConstructorWithNoInterfaceObject : public JSDOMWrapperWithImplementation&lt;TestCustomConstructorWithNoInterfaceObject&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;TestCustomConstructorWithNoInterfaceObject&gt; Base;
</ins><span class="cx">     static JSTestCustomConstructorWithNoInterfaceObject* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestCustomConstructorWithNoInterfaceObject&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         JSTestCustomConstructorWithNoInterfaceObject* ptr = new (NotNull, JSC::allocateCell&lt;JSTestCustomConstructorWithNoInterfaceObject&gt;(globalObject-&gt;vm().heap)) JSTestCustomConstructorWithNoInterfaceObject(structure, globalObject, WTF::move(impl));
</span><span class="lines">@@ -41,7 +41,6 @@
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestCustomConstructorWithNoInterfaceObject* toWrapped(JSC::JSValue);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSTestCustomConstructorWithNoInterfaceObject();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -50,11 +49,6 @@
</span><span class="cx">         return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    TestCustomConstructorWithNoInterfaceObject&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    TestCustomConstructorWithNoInterfaceObject* m_impl;
</del><span class="cx"> protected:
</span><span class="cx">     JSTestCustomConstructorWithNoInterfaceObject(JSC::Structure*, JSDOMGlobalObject*, Ref&lt;TestCustomConstructorWithNoInterfaceObject&gt;&amp;&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCustomNamedGettercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -133,8 +133,7 @@
</span><span class="cx"> const ClassInfo JSTestCustomNamedGetter::s_info = { &quot;TestCustomNamedGetter&quot;, &amp;Base::s_info, &amp;JSTestCustomNamedGetterTable, CREATE_METHOD_TABLE(JSTestCustomNamedGetter) };
</span><span class="cx"> 
</span><span class="cx"> JSTestCustomNamedGetter::JSTestCustomNamedGetter(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestCustomNamedGetter&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;TestCustomNamedGetter&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -154,11 +153,6 @@
</span><span class="cx">     thisObject-&gt;JSTestCustomNamedGetter::~JSTestCustomNamedGetter();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTestCustomNamedGetter::~JSTestCustomNamedGetter()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> bool JSTestCustomNamedGetter::getOwnPropertySlot(JSObject* object, ExecState* state, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><span class="cx">     auto* thisObject = jsCast&lt;JSTestCustomNamedGetter*&gt;(object);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCustomNamedGetterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -27,9 +27,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class JSTestCustomNamedGetter : public JSDOMWrapper {
</del><ins>+class JSTestCustomNamedGetter : public JSDOMWrapperWithImplementation&lt;TestCustomNamedGetter&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;TestCustomNamedGetter&gt; Base;
</ins><span class="cx">     static JSTestCustomNamedGetter* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestCustomNamedGetter&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         JSTestCustomNamedGetter* ptr = new (NotNull, JSC::allocateCell&lt;JSTestCustomNamedGetter&gt;(globalObject-&gt;vm().heap)) JSTestCustomNamedGetter(structure, globalObject, WTF::move(impl));
</span><span class="lines">@@ -43,7 +43,6 @@
</span><span class="cx">     static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&amp;);
</span><span class="cx">     static bool getOwnPropertySlotByIndex(JSC::JSObject*, JSC::ExecState*, unsigned propertyName, JSC::PropertySlot&amp;);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSTestCustomNamedGetter();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -53,11 +52,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><del>-    TestCustomNamedGetter&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    TestCustomNamedGetter* m_impl;
</del><span class="cx"> public:
</span><span class="cx">     static const unsigned StructureFlags = JSC::InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero | JSC::OverridesGetOwnPropertySlot | Base::StructureFlags;
</span><span class="cx"> protected:
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -170,8 +170,7 @@
</span><span class="cx"> const ClassInfo JSTestEventConstructor::s_info = { &quot;TestEventConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestEventConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestEventConstructor::JSTestEventConstructor(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestEventConstructor&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;TestEventConstructor&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -191,11 +190,6 @@
</span><span class="cx">     thisObject-&gt;JSTestEventConstructor::~JSTestEventConstructor();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTestEventConstructor::~JSTestEventConstructor()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> EncodedJSValue jsTestEventConstructorAttr1(ExecState* state, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     UNUSED_PARAM(state);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -29,9 +29,9 @@
</span><span class="cx"> 
</span><span class="cx"> class JSDictionary;
</span><span class="cx"> 
</span><del>-class JSTestEventConstructor : public JSDOMWrapper {
</del><ins>+class JSTestEventConstructor : public JSDOMWrapperWithImplementation&lt;TestEventConstructor&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;TestEventConstructor&gt; Base;
</ins><span class="cx">     static JSTestEventConstructor* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestEventConstructor&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         JSTestEventConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestEventConstructor&gt;(globalObject-&gt;vm().heap)) JSTestEventConstructor(structure, globalObject, WTF::move(impl));
</span><span class="lines">@@ -43,7 +43,6 @@
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestEventConstructor* toWrapped(JSC::JSValue);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSTestEventConstructor();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -53,11 +52,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><del>-    TestEventConstructor&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    TestEventConstructor* m_impl;
</del><span class="cx"> protected:
</span><span class="cx">     JSTestEventConstructor(JSC::Structure*, JSDOMGlobalObject*, Ref&lt;TestEventConstructor&gt;&amp;&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -145,8 +145,7 @@
</span><span class="cx"> const ClassInfo JSTestEventTarget::s_info = { &quot;TestEventTarget&quot;, &amp;Base::s_info, &amp;JSTestEventTargetTable, CREATE_METHOD_TABLE(JSTestEventTarget) };
</span><span class="cx"> 
</span><span class="cx"> JSTestEventTarget::JSTestEventTarget(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestEventTarget&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;TestEventTarget&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -166,11 +165,6 @@
</span><span class="cx">     thisObject-&gt;JSTestEventTarget::~JSTestEventTarget();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTestEventTarget::~JSTestEventTarget()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> bool JSTestEventTarget::getOwnPropertySlot(JSObject* object, ExecState* state, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><span class="cx">     auto* thisObject = jsCast&lt;JSTestEventTarget*&gt;(object);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventTargeth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -27,9 +27,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class JSTestEventTarget : public JSDOMWrapper {
</del><ins>+class JSTestEventTarget : public JSDOMWrapperWithImplementation&lt;TestEventTarget&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;TestEventTarget&gt; Base;
</ins><span class="cx">     static JSTestEventTarget* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestEventTarget&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         globalObject-&gt;masqueradesAsUndefinedWatchpoint()-&gt;fireAll(&quot;Allocated masquerading object&quot;);
</span><span class="lines">@@ -44,7 +44,6 @@
</span><span class="cx">     static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&amp;);
</span><span class="cx">     static bool getOwnPropertySlotByIndex(JSC::JSObject*, JSC::ExecState*, unsigned propertyName, JSC::PropertySlot&amp;);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSTestEventTarget();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -57,11 +56,6 @@
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static void visitChildren(JSCell*, JSC::SlotVisitor&amp;);
</span><span class="cx"> 
</span><del>-    TestEventTarget&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    TestEventTarget* m_impl;
</del><span class="cx"> public:
</span><span class="cx">     static const unsigned StructureFlags = JSC::InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero | JSC::MasqueradesAsUndefined | JSC::OverridesGetOwnPropertySlot | JSC::OverridesGetPropertyNames | Base::StructureFlags;
</span><span class="cx"> protected:
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -129,8 +129,7 @@
</span><span class="cx"> const ClassInfo JSTestException::s_info = { &quot;TestException&quot;, &amp;Base::s_info, &amp;JSTestExceptionTable, CREATE_METHOD_TABLE(JSTestException) };
</span><span class="cx"> 
</span><span class="cx"> JSTestException::JSTestException(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestException&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;TestException&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -150,11 +149,6 @@
</span><span class="cx">     thisObject-&gt;JSTestException::~JSTestException();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTestException::~JSTestException()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> bool JSTestException::getOwnPropertySlot(JSObject* object, ExecState* state, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><span class="cx">     auto* thisObject = jsCast&lt;JSTestException*&gt;(object);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestExceptionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -28,9 +28,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class JSTestException : public JSDOMWrapper {
</del><ins>+class JSTestException : public JSDOMWrapperWithImplementation&lt;TestException&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;TestException&gt; Base;
</ins><span class="cx">     static JSTestException* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestException&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         JSTestException* ptr = new (NotNull, JSC::allocateCell&lt;JSTestException&gt;(globalObject-&gt;vm().heap)) JSTestException(structure, globalObject, WTF::move(impl));
</span><span class="lines">@@ -43,7 +43,6 @@
</span><span class="cx">     static TestException* toWrapped(JSC::JSValue);
</span><span class="cx">     static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&amp;);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSTestException();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -53,11 +52,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><del>-    TestException&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    TestException* m_impl;
</del><span class="cx"> public:
</span><span class="cx">     static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | Base::StructureFlags;
</span><span class="cx"> protected:
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -112,8 +112,7 @@
</span><span class="cx"> const ClassInfo JSTestGenerateIsReachable::s_info = { &quot;TestGenerateIsReachable&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestGenerateIsReachable) };
</span><span class="cx"> 
</span><span class="cx"> JSTestGenerateIsReachable::JSTestGenerateIsReachable(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestGenerateIsReachable&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;TestGenerateIsReachable&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -133,11 +132,6 @@
</span><span class="cx">     thisObject-&gt;JSTestGenerateIsReachable::~JSTestGenerateIsReachable();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTestGenerateIsReachable::~JSTestGenerateIsReachable()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> EncodedJSValue jsTestGenerateIsReachableConstructor(ExecState* state, JSObject* baseValue, EncodedJSValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     JSTestGenerateIsReachablePrototype* domObject = jsDynamicCast&lt;JSTestGenerateIsReachablePrototype*&gt;(baseValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachableh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -27,9 +27,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class JSTestGenerateIsReachable : public JSDOMWrapper {
</del><ins>+class JSTestGenerateIsReachable : public JSDOMWrapperWithImplementation&lt;TestGenerateIsReachable&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;TestGenerateIsReachable&gt; Base;
</ins><span class="cx">     static JSTestGenerateIsReachable* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestGenerateIsReachable&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         JSTestGenerateIsReachable* ptr = new (NotNull, JSC::allocateCell&lt;JSTestGenerateIsReachable&gt;(globalObject-&gt;vm().heap)) JSTestGenerateIsReachable(structure, globalObject, WTF::move(impl));
</span><span class="lines">@@ -41,7 +41,6 @@
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestGenerateIsReachable* toWrapped(JSC::JSValue);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSTestGenerateIsReachable();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -51,11 +50,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><del>-    TestGenerateIsReachable&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    TestGenerateIsReachable* m_impl;
</del><span class="cx"> protected:
</span><span class="cx">     JSTestGenerateIsReachable(JSC::Structure*, JSDOMGlobalObject*, Ref&lt;TestGenerateIsReachable&gt;&amp;&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -410,8 +410,7 @@
</span><span class="cx"> const ClassInfo JSTestInterface::s_info = { &quot;TestInterface&quot;, &amp;Base::s_info, &amp;JSTestInterfaceTable, CREATE_METHOD_TABLE(JSTestInterface) };
</span><span class="cx"> 
</span><span class="cx"> JSTestInterface::JSTestInterface(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestInterface&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;TestInterface&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -431,11 +430,6 @@
</span><span class="cx">     thisObject-&gt;JSTestInterface::~JSTestInterface();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTestInterface::~JSTestInterface()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> bool JSTestInterface::getOwnPropertySlot(JSObject* object, ExecState* state, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><span class="cx">     auto* thisObject = jsCast&lt;JSTestInterface*&gt;(object);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -29,9 +29,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class WEBCORE_EXPORT JSTestInterface : public JSDOMWrapper {
</del><ins>+class WEBCORE_EXPORT JSTestInterface : public JSDOMWrapperWithImplementation&lt;TestInterface&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;TestInterface&gt; Base;
</ins><span class="cx">     static JSTestInterface* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestInterface&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         JSTestInterface* ptr = new (NotNull, JSC::allocateCell&lt;JSTestInterface&gt;(globalObject-&gt;vm().heap)) JSTestInterface(structure, globalObject, WTF::move(impl));
</span><span class="lines">@@ -47,7 +47,6 @@
</span><span class="cx">     static void putByIndex(JSC::JSCell*, JSC::ExecState*, unsigned propertyName, JSC::JSValue, bool shouldThrow);
</span><span class="cx">     bool putDelegate(JSC::ExecState*, JSC::PropertyName, JSC::JSValue, JSC::PutPropertySlot&amp;);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSTestInterface();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -79,11 +78,6 @@
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><span class="cx">     JSC::JSValue supplementalMethod3(JSC::ExecState&amp;);
</span><span class="cx"> #endif
</span><del>-    TestInterface&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    TestInterface* m_impl;
</del><span class="cx"> public:
</span><span class="cx">     static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | Base::StructureFlags;
</span><span class="cx"> protected:
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -146,10 +146,6 @@
</span><span class="cx">     thisObject-&gt;JSTestJSBuiltinConstructor::~JSTestJSBuiltinConstructor();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTestJSBuiltinConstructor::~JSTestJSBuiltinConstructor()
-{
-}
-
</del><span class="cx"> EncodedJSValue jsTestJSBuiltinConstructorConstructor(ExecState* state, JSObject* baseValue, EncodedJSValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     JSTestJSBuiltinConstructorPrototype* domObject = jsDynamicCast&lt;JSTestJSBuiltinConstructorPrototype*&gt;(baseValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -38,7 +38,6 @@
</span><span class="cx">     static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSTestJSBuiltinConstructor();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -120,8 +120,7 @@
</span><span class="cx"> const ClassInfo JSTestMediaQueryListListener::s_info = { &quot;TestMediaQueryListListener&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestMediaQueryListListener) };
</span><span class="cx"> 
</span><span class="cx"> JSTestMediaQueryListListener::JSTestMediaQueryListListener(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestMediaQueryListListener&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;TestMediaQueryListListener&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -141,11 +140,6 @@
</span><span class="cx">     thisObject-&gt;JSTestMediaQueryListListener::~JSTestMediaQueryListListener();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTestMediaQueryListListener::~JSTestMediaQueryListListener()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> EncodedJSValue jsTestMediaQueryListListenerConstructor(ExecState* state, JSObject* baseValue, EncodedJSValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     JSTestMediaQueryListListenerPrototype* domObject = jsDynamicCast&lt;JSTestMediaQueryListListenerPrototype*&gt;(baseValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -27,9 +27,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class JSTestMediaQueryListListener : public JSDOMWrapper {
</del><ins>+class JSTestMediaQueryListListener : public JSDOMWrapperWithImplementation&lt;TestMediaQueryListListener&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;TestMediaQueryListListener&gt; Base;
</ins><span class="cx">     static JSTestMediaQueryListListener* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestMediaQueryListListener&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         JSTestMediaQueryListListener* ptr = new (NotNull, JSC::allocateCell&lt;JSTestMediaQueryListListener&gt;(globalObject-&gt;vm().heap)) JSTestMediaQueryListListener(structure, globalObject, WTF::move(impl));
</span><span class="lines">@@ -41,7 +41,6 @@
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestMediaQueryListListener* toWrapped(JSC::JSValue);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSTestMediaQueryListListener();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -51,11 +50,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><del>-    TestMediaQueryListListener&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    TestMediaQueryListListener* m_impl;
</del><span class="cx"> protected:
</span><span class="cx">     JSTestMediaQueryListListener(JSC::Structure*, JSDOMGlobalObject*, Ref&lt;TestMediaQueryListListener&gt;&amp;&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNamedConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -185,8 +185,7 @@
</span><span class="cx"> const ClassInfo JSTestNamedConstructor::s_info = { &quot;TestNamedConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestNamedConstructor) };
</span><span class="cx"> 
</span><span class="cx"> JSTestNamedConstructor::JSTestNamedConstructor(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestNamedConstructor&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;TestNamedConstructor&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -206,11 +205,6 @@
</span><span class="cx">     thisObject-&gt;JSTestNamedConstructor::~JSTestNamedConstructor();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTestNamedConstructor::~JSTestNamedConstructor()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> EncodedJSValue jsTestNamedConstructorConstructor(ExecState* state, JSObject* baseValue, EncodedJSValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     JSTestNamedConstructorPrototype* domObject = jsDynamicCast&lt;JSTestNamedConstructorPrototype*&gt;(baseValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNamedConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -27,9 +27,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class JSTestNamedConstructor : public JSDOMWrapper {
</del><ins>+class JSTestNamedConstructor : public JSDOMWrapperWithImplementation&lt;TestNamedConstructor&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;TestNamedConstructor&gt; Base;
</ins><span class="cx">     static JSTestNamedConstructor* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestNamedConstructor&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         JSTestNamedConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestNamedConstructor&gt;(globalObject-&gt;vm().heap)) JSTestNamedConstructor(structure, globalObject, WTF::move(impl));
</span><span class="lines">@@ -41,7 +41,6 @@
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestNamedConstructor* toWrapped(JSC::JSValue);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSTestNamedConstructor();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -52,11 +51,6 @@
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static JSC::JSValue getNamedConstructor(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><del>-    TestNamedConstructor&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    TestNamedConstructor* m_impl;
</del><span class="cx"> protected:
</span><span class="cx">     JSTestNamedConstructor(JSC::Structure*, JSDOMGlobalObject*, Ref&lt;TestNamedConstructor&gt;&amp;&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministiccpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -141,8 +141,7 @@
</span><span class="cx"> const ClassInfo JSTestNondeterministic::s_info = { &quot;TestNondeterministic&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestNondeterministic) };
</span><span class="cx"> 
</span><span class="cx"> JSTestNondeterministic::JSTestNondeterministic(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestNondeterministic&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;TestNondeterministic&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -162,11 +161,6 @@
</span><span class="cx">     thisObject-&gt;JSTestNondeterministic::~JSTestNondeterministic();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTestNondeterministic::~JSTestNondeterministic()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> EncodedJSValue jsTestNondeterministicNondeterministicReadonlyAttr(ExecState* state, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     UNUSED_PARAM(state);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministich"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -27,9 +27,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class JSTestNondeterministic : public JSDOMWrapper {
</del><ins>+class JSTestNondeterministic : public JSDOMWrapperWithImplementation&lt;TestNondeterministic&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;TestNondeterministic&gt; Base;
</ins><span class="cx">     static JSTestNondeterministic* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestNondeterministic&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         JSTestNondeterministic* ptr = new (NotNull, JSC::allocateCell&lt;JSTestNondeterministic&gt;(globalObject-&gt;vm().heap)) JSTestNondeterministic(structure, globalObject, WTF::move(impl));
</span><span class="lines">@@ -41,7 +41,6 @@
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestNondeterministic* toWrapped(JSC::JSValue);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSTestNondeterministic();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -51,11 +50,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><del>-    TestNondeterministic&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    TestNondeterministic* m_impl;
</del><span class="cx"> protected:
</span><span class="cx">     JSTestNondeterministic(JSC::Structure*, JSDOMGlobalObject*, Ref&lt;TestNondeterministic&gt;&amp;&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -707,8 +707,7 @@
</span><span class="cx"> const ClassInfo JSTestObj::s_info = { &quot;TestObject&quot;, &amp;Base::s_info, &amp;JSTestObjTable, CREATE_METHOD_TABLE(JSTestObj) };
</span><span class="cx"> 
</span><span class="cx"> JSTestObj::JSTestObj(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestObj&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;TestObj&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -728,11 +727,6 @@
</span><span class="cx">     thisObject-&gt;JSTestObj::~JSTestObj();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTestObj::~JSTestObj()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> bool JSTestObj::getOwnPropertySlot(JSObject* object, ExecState* state, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><span class="cx">     auto* thisObject = jsCast&lt;JSTestObj*&gt;(object);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -27,9 +27,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class JSTestObj : public JSDOMWrapper {
</del><ins>+class JSTestObj : public JSDOMWrapperWithImplementation&lt;TestObj&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;TestObj&gt; Base;
</ins><span class="cx">     static JSTestObj* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestObj&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         JSTestObj* ptr = new (NotNull, JSC::allocateCell&lt;JSTestObj&gt;(globalObject-&gt;vm().heap)) JSTestObj(structure, globalObject, WTF::move(impl));
</span><span class="lines">@@ -42,7 +42,6 @@
</span><span class="cx">     static TestObj* toWrapped(JSC::JSValue);
</span><span class="cx">     static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&amp;);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSTestObj();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -65,11 +64,6 @@
</span><span class="cx">     JSC::JSValue customMethod(JSC::ExecState&amp;);
</span><span class="cx">     JSC::JSValue customMethodWithArgs(JSC::ExecState&amp;);
</span><span class="cx">     static JSC::JSValue classMethod2(JSC::ExecState&amp;);
</span><del>-    TestObj&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    TestObj* m_impl;
</del><span class="cx"> public:
</span><span class="cx">     static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | Base::StructureFlags;
</span><span class="cx"> protected:
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -206,8 +206,7 @@
</span><span class="cx"> const ClassInfo JSTestOverloadedConstructors::s_info = { &quot;TestOverloadedConstructors&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestOverloadedConstructors) };
</span><span class="cx"> 
</span><span class="cx"> JSTestOverloadedConstructors::JSTestOverloadedConstructors(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestOverloadedConstructors&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;TestOverloadedConstructors&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -227,11 +226,6 @@
</span><span class="cx">     thisObject-&gt;JSTestOverloadedConstructors::~JSTestOverloadedConstructors();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTestOverloadedConstructors::~JSTestOverloadedConstructors()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> EncodedJSValue jsTestOverloadedConstructorsConstructor(ExecState* state, JSObject* baseValue, EncodedJSValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     JSTestOverloadedConstructorsPrototype* domObject = jsDynamicCast&lt;JSTestOverloadedConstructorsPrototype*&gt;(baseValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -27,9 +27,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class JSTestOverloadedConstructors : public JSDOMWrapper {
</del><ins>+class JSTestOverloadedConstructors : public JSDOMWrapperWithImplementation&lt;TestOverloadedConstructors&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;TestOverloadedConstructors&gt; Base;
</ins><span class="cx">     static JSTestOverloadedConstructors* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestOverloadedConstructors&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         JSTestOverloadedConstructors* ptr = new (NotNull, JSC::allocateCell&lt;JSTestOverloadedConstructors&gt;(globalObject-&gt;vm().heap)) JSTestOverloadedConstructors(structure, globalObject, WTF::move(impl));
</span><span class="lines">@@ -41,7 +41,6 @@
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestOverloadedConstructors* toWrapped(JSC::JSValue);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSTestOverloadedConstructors();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -51,11 +50,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><del>-    TestOverloadedConstructors&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    TestOverloadedConstructors* m_impl;
</del><span class="cx"> protected:
</span><span class="cx">     JSTestOverloadedConstructors(JSC::Structure*, JSDOMGlobalObject*, Ref&lt;TestOverloadedConstructors&gt;&amp;&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestOverrideBuiltinscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -135,8 +135,7 @@
</span><span class="cx"> const ClassInfo JSTestOverrideBuiltins::s_info = { &quot;TestOverrideBuiltins&quot;, &amp;Base::s_info, &amp;JSTestOverrideBuiltinsTable, CREATE_METHOD_TABLE(JSTestOverrideBuiltins) };
</span><span class="cx"> 
</span><span class="cx"> JSTestOverrideBuiltins::JSTestOverrideBuiltins(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestOverrideBuiltins&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;TestOverrideBuiltins&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -156,11 +155,6 @@
</span><span class="cx">     thisObject-&gt;JSTestOverrideBuiltins::~JSTestOverrideBuiltins();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTestOverrideBuiltins::~JSTestOverrideBuiltins()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> bool JSTestOverrideBuiltins::getOwnPropertySlot(JSObject* object, ExecState* state, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><span class="cx">     auto* thisObject = jsCast&lt;JSTestOverrideBuiltins*&gt;(object);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestOverrideBuiltinsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -27,9 +27,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class JSTestOverrideBuiltins : public JSDOMWrapper {
</del><ins>+class JSTestOverrideBuiltins : public JSDOMWrapperWithImplementation&lt;TestOverrideBuiltins&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;TestOverrideBuiltins&gt; Base;
</ins><span class="cx">     static JSTestOverrideBuiltins* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestOverrideBuiltins&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         JSTestOverrideBuiltins* ptr = new (NotNull, JSC::allocateCell&lt;JSTestOverrideBuiltins&gt;(globalObject-&gt;vm().heap)) JSTestOverrideBuiltins(structure, globalObject, WTF::move(impl));
</span><span class="lines">@@ -43,7 +43,6 @@
</span><span class="cx">     static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&amp;);
</span><span class="cx">     static bool getOwnPropertySlotByIndex(JSC::JSObject*, JSC::ExecState*, unsigned propertyName, JSC::PropertySlot&amp;);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSTestOverrideBuiltins();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -54,11 +53,6 @@
</span><span class="cx"> 
</span><span class="cx">     static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, JSC::PropertyNameArray&amp;, JSC::EnumerationMode = JSC::EnumerationMode());
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><del>-    TestOverrideBuiltins&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    TestOverrideBuiltins* m_impl;
</del><span class="cx"> public:
</span><span class="cx">     static const unsigned StructureFlags = JSC::HasImpureGetOwnPropertySlot | JSC::InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero | JSC::OverridesGetOwnPropertySlot | JSC::OverridesGetPropertyNames | Base::StructureFlags;
</span><span class="cx"> protected:
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -131,8 +131,7 @@
</span><span class="cx"> const ClassInfo JSTestSerializedScriptValueInterface::s_info = { &quot;TestSerializedScriptValueInterface&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestSerializedScriptValueInterface) };
</span><span class="cx"> 
</span><span class="cx"> JSTestSerializedScriptValueInterface::JSTestSerializedScriptValueInterface(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestSerializedScriptValueInterface&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;TestSerializedScriptValueInterface&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -152,11 +151,6 @@
</span><span class="cx">     thisObject-&gt;JSTestSerializedScriptValueInterface::~JSTestSerializedScriptValueInterface();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTestSerializedScriptValueInterface::~JSTestSerializedScriptValueInterface()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> EncodedJSValue jsTestSerializedScriptValueInterfaceValue(ExecState* state, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     UNUSED_PARAM(state);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -29,9 +29,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class JSTestSerializedScriptValueInterface : public JSDOMWrapper {
</del><ins>+class JSTestSerializedScriptValueInterface : public JSDOMWrapperWithImplementation&lt;TestSerializedScriptValueInterface&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;TestSerializedScriptValueInterface&gt; Base;
</ins><span class="cx">     static JSTestSerializedScriptValueInterface* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestSerializedScriptValueInterface&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         JSTestSerializedScriptValueInterface* ptr = new (NotNull, JSC::allocateCell&lt;JSTestSerializedScriptValueInterface&gt;(globalObject-&gt;vm().heap)) JSTestSerializedScriptValueInterface(structure, globalObject, WTF::move(impl));
</span><span class="lines">@@ -43,7 +43,6 @@
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static TestSerializedScriptValueInterface* toWrapped(JSC::JSValue);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSTestSerializedScriptValueInterface();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -57,11 +56,6 @@
</span><span class="cx">     mutable JSC::WriteBarrier&lt;JSC::Unknown&gt; m_cachedReadonlyValue;
</span><span class="cx">     static void visitChildren(JSCell*, JSC::SlotVisitor&amp;);
</span><span class="cx"> 
</span><del>-    TestSerializedScriptValueInterface&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    TestSerializedScriptValueInterface* m_impl;
</del><span class="cx"> protected:
</span><span class="cx">     JSTestSerializedScriptValueInterface(JSC::Structure*, JSDOMGlobalObject*, Ref&lt;TestSerializedScriptValueInterface&gt;&amp;&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -214,8 +214,7 @@
</span><span class="cx"> const ClassInfo JSTestTypedefs::s_info = { &quot;TestTypedefs&quot;, &amp;Base::s_info, &amp;JSTestTypedefsTable, CREATE_METHOD_TABLE(JSTestTypedefs) };
</span><span class="cx"> 
</span><span class="cx"> JSTestTypedefs::JSTestTypedefs(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestTypedefs&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;TestTypedefs&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -235,11 +234,6 @@
</span><span class="cx">     thisObject-&gt;JSTestTypedefs::~JSTestTypedefs();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSTestTypedefs::~JSTestTypedefs()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> bool JSTestTypedefs::getOwnPropertySlot(JSObject* object, ExecState* state, PropertyName propertyName, PropertySlot&amp; slot)
</span><span class="cx"> {
</span><span class="cx">     auto* thisObject = jsCast&lt;JSTestTypedefs*&gt;(object);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestTypedefsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -27,9 +27,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class JSTestTypedefs : public JSDOMWrapper {
</del><ins>+class JSTestTypedefs : public JSDOMWrapperWithImplementation&lt;TestTypedefs&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;TestTypedefs&gt; Base;
</ins><span class="cx">     static JSTestTypedefs* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestTypedefs&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         JSTestTypedefs* ptr = new (NotNull, JSC::allocateCell&lt;JSTestTypedefs&gt;(globalObject-&gt;vm().heap)) JSTestTypedefs(structure, globalObject, WTF::move(impl));
</span><span class="lines">@@ -42,7 +42,6 @@
</span><span class="cx">     static TestTypedefs* toWrapped(JSC::JSValue);
</span><span class="cx">     static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&amp;);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSTestTypedefs();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -52,11 +51,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><del>-    TestTypedefs&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    TestTypedefs* m_impl;
</del><span class="cx"> public:
</span><span class="cx">     static const unsigned StructureFlags = JSC::OverridesGetOwnPropertySlot | Base::StructureFlags;
</span><span class="cx"> protected:
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSattributecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -116,8 +116,7 @@
</span><span class="cx"> const ClassInfo JSattribute::s_info = { &quot;attribute&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSattribute) };
</span><span class="cx"> 
</span><span class="cx"> JSattribute::JSattribute(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;attribute&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;attribute&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -137,11 +136,6 @@
</span><span class="cx">     thisObject-&gt;JSattribute::~JSattribute();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSattribute::~JSattribute()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> EncodedJSValue jsattributeReadonly(ExecState* state, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     UNUSED_PARAM(state);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSattributeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -28,9 +28,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class JSattribute : public JSDOMWrapper {
</del><ins>+class JSattribute : public JSDOMWrapperWithImplementation&lt;attribute&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;attribute&gt; Base;
</ins><span class="cx">     static JSattribute* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;attribute&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         JSattribute* ptr = new (NotNull, JSC::allocateCell&lt;JSattribute&gt;(globalObject-&gt;vm().heap)) JSattribute(structure, globalObject, WTF::move(impl));
</span><span class="lines">@@ -42,7 +42,6 @@
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static attribute* toWrapped(JSC::JSValue);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSattribute();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -52,11 +51,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><del>-    attribute&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    attribute* m_impl;
</del><span class="cx"> protected:
</span><span class="cx">     JSattribute(JSC::Structure*, JSDOMGlobalObject*, Ref&lt;attribute&gt;&amp;&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSreadonlycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -112,8 +112,7 @@
</span><span class="cx"> const ClassInfo JSreadonly::s_info = { &quot;readonly&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSreadonly) };
</span><span class="cx"> 
</span><span class="cx"> JSreadonly::JSreadonly(Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;readonly&gt;&amp;&amp; impl)
</span><del>-    : JSDOMWrapper(structure, globalObject)
-    , m_impl(&amp;impl.leakRef())
</del><ins>+    : JSDOMWrapperWithImplementation&lt;readonly&gt;(structure, globalObject, WTF::move(impl))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -133,11 +132,6 @@
</span><span class="cx">     thisObject-&gt;JSreadonly::~JSreadonly();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-JSreadonly::~JSreadonly()
-{
-    releaseImpl();
-}
-
</del><span class="cx"> EncodedJSValue jsreadonlyConstructor(ExecState* state, JSObject* baseValue, EncodedJSValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     JSreadonlyPrototype* domObject = jsDynamicCast&lt;JSreadonlyPrototype*&gt;(baseValue);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSreadonlyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.h (190402 => 190403)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.h        2015-10-01 12:35:38 UTC (rev 190402)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.h        2015-10-01 13:07:55 UTC (rev 190403)
</span><span class="lines">@@ -27,9 +27,9 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class JSreadonly : public JSDOMWrapper {
</del><ins>+class JSreadonly : public JSDOMWrapperWithImplementation&lt;readonly&gt; {
</ins><span class="cx"> public:
</span><del>-    typedef JSDOMWrapper Base;
</del><ins>+    typedef JSDOMWrapperWithImplementation&lt;readonly&gt; Base;
</ins><span class="cx">     static JSreadonly* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;readonly&gt;&amp;&amp; impl)
</span><span class="cx">     {
</span><span class="cx">         JSreadonly* ptr = new (NotNull, JSC::allocateCell&lt;JSreadonly&gt;(globalObject-&gt;vm().heap)) JSreadonly(structure, globalObject, WTF::move(impl));
</span><span class="lines">@@ -41,7 +41,6 @@
</span><span class="cx">     static JSC::JSObject* getPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><span class="cx">     static readonly* toWrapped(JSC::JSValue);
</span><span class="cx">     static void destroy(JSC::JSCell*);
</span><del>-    ~JSreadonly();
</del><span class="cx"> 
</span><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="lines">@@ -51,11 +50,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, JSC::JSGlobalObject*);
</span><del>-    readonly&amp; impl() const { return *m_impl; }
-    void releaseImpl() { std::exchange(m_impl, nullptr)-&gt;deref(); }
-
-private:
-    readonly* m_impl;
</del><span class="cx"> protected:
</span><span class="cx">     JSreadonly(JSC::Structure*, JSDOMGlobalObject*, Ref&lt;readonly&gt;&amp;&amp;);
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>