<!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>[191176] 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/191176">191176</a></dd>
<dt>Author</dt> <dd>youenn.fablet@crf.canon.fr</dd>
<dt>Date</dt> <dd>2015-10-16 08:56:12 -0700 (Fri, 16 Oct 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Binding generator should use templated JSXXConstructor
https://bugs.webkit.org/show_bug.cgi?id=149952

Reviewed by Darin Adler.

Adding constructor templates:
- JSDOMConstructor: usual JS constructors
- JSDOMNamedConstructor: for named constructors
- JSDOMConstructorNotConstructable: for objects that cannot be constructed directly from JS.

Binding generator is using these 3 templates and is generating specializations for construct, initializeProperties and s_info.
These templates may also be used for private or custom constructors as examplified by JSImageConstructor
and JSReadableStream reader and controller private constructors.

Updated binding generator to use those templates.
Updated JSImageConstructor.cpp to use JSDOMNamedConstructor.
Updated default template implementation of JSBuiltinConstructor::createObject.
Updated generated helper routines of binding generator to fit with the templates.

A further patch should remove DOMConstructorWithDocument and DOMConstructorJSBuiltinObject.

Covered by binding tests.

* bindings/js/JSDOMConstructor.h:
(WebCore::JSDOMConstructorNotConstructable::create):
(WebCore::JSDOMConstructorNotConstructable::createStructure):
(WebCore::JSDOMConstructorNotConstructable::JSDOMConstructorNotConstructable):
(WebCore::JSDOMConstructorNotConstructable::initializeProperties):
(WebCore::JSDOMConstructorNotConstructable&lt;JSClass&gt;::finishCreation):
(WebCore::JSDOMConstructor::create):
(WebCore::JSDOMConstructor::createStructure):
(WebCore::JSDOMConstructor::JSDOMConstructor):
(WebCore::JSDOMConstructor::initializeProperties):
(WebCore::JSDOMConstructor&lt;JSClass&gt;::finishCreation):
(WebCore::JSDOMConstructor&lt;JSClass&gt;::getConstructData):
(WebCore::JSDOMNamedConstructor::create):
(WebCore::JSDOMNamedConstructor::createStructure):
(WebCore::JSDOMNamedConstructor::JSDOMNamedConstructor):
(WebCore::JSDOMNamedConstructor::initializeProperties):
(WebCore::JSDOMNamedConstructor&lt;JSClass&gt;::finishCreation):
(WebCore::JSDOMNamedConstructor&lt;JSClass&gt;::getConstructData):
* bindings/js/JSDOMWindowCustom.cpp:
(WebCore::JSDOMWindow::image):
* bindings/js/JSImageConstructor.cpp:
(WebCore::JSImageConstructor::initializeProperties):
(WebCore::JSImageConstructor::construct):
(WebCore::createImageConstructor):
* bindings/js/JSImageConstructor.h:
* bindings/scripts/CodeGeneratorJS.pm:
(GetConstructorTemplateClassName):
(GenerateConstructorDeclaration):
(GenerateOverloadedConstructorDefinition):
(GenerateConstructorDefinition):
(GenerateConstructorHelperMethods):
(GenerateImplementation): Deleted.
(GenerateConstructorDefinitions): Deleted.
(HasCustomSetter): Deleted.
(HasCustomMethod): Deleted.
(NeedsConstructorProperty): Deleted.
(ComputeFunctionSpecial): Deleted.
(AddJSBuiltinIncludesIfNeeded): Deleted.
* bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
(WebCore::JSTestActiveDOMObjectConstructor::initializeProperties):
(WebCore::JSTestActiveDOMObjectPrototype::finishCreation): Deleted.
(WebCore::JSTestActiveDOMObject::JSTestActiveDOMObject): Deleted.
* bindings/scripts/test/JS/JSTestCallback.cpp:
(WebCore::JSTestCallbackConstructor::initializeProperties):
(WebCore::JSTestCallback::callbackWithNoParam): Deleted.
* bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
(WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::construct):
(WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::initializeProperties):
(WebCore::JSTestCustomConstructorWithNoInterfaceObjectPrototype::finishCreation): Deleted.
(WebCore::JSTestCustomConstructorWithNoInterfaceObject::JSTestCustomConstructorWithNoInterfaceObject): Deleted.
(WebCore::JSTestCustomConstructorWithNoInterfaceObject::createPrototype): Deleted.
(WebCore::JSTestCustomConstructorWithNoInterfaceObject::getPrototype): Deleted.
(WebCore::JSTestCustomConstructorWithNoInterfaceObject::destroy): Deleted.
* bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
(WebCore::JSTestCustomNamedGetterConstructor::initializeProperties):
(WebCore::JSTestCustomNamedGetterPrototype::finishCreation): Deleted.
(WebCore::JSTestCustomNamedGetter::JSTestCustomNamedGetter): Deleted.
* bindings/scripts/test/JS/JSTestEventConstructor.cpp:
(WebCore::JSTestEventConstructorConstructor::construct):
(WebCore::JSTestEventConstructorConstructor::initializeProperties):
(WebCore::JSTestEventConstructorPrototype::finishCreation): Deleted.
(WebCore::JSTestEventConstructor::JSTestEventConstructor): Deleted.
(WebCore::JSTestEventConstructor::getPrototype): Deleted.
* bindings/scripts/test/JS/JSTestEventTarget.cpp:
(WebCore::JSTestEventTargetConstructor::initializeProperties):
(WebCore::JSTestEventTargetPrototype::finishCreation): Deleted.
* bindings/scripts/test/JS/JSTestException.cpp:
(WebCore::JSTestExceptionConstructor::initializeProperties):
(WebCore::JSTestExceptionPrototype::finishCreation): Deleted.
(WebCore::JSTestException::JSTestException): Deleted.
* bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
(WebCore::JSTestGenerateIsReachableConstructor::initializeProperties):
(WebCore::JSTestGenerateIsReachablePrototype::finishCreation): Deleted.
(WebCore::JSTestGenerateIsReachable::JSTestGenerateIsReachable): Deleted.
* bindings/scripts/test/JS/JSTestInterface.cpp:
(WebCore::JSTestInterfaceConstructor::construct):
(WebCore::JSTestInterfaceConstructor::initializeProperties):
(WebCore::JSTestInterfaceConstructor::getConstructData):
* bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
(WebCore::JSTestJSBuiltinConstructorConstructor::createJSObject):
(WebCore::JSTestJSBuiltinConstructorConstructor::initializeProperties):
(WebCore::JSTestJSBuiltinConstructorPrototype::finishCreation): Deleted.
(WebCore::JSTestJSBuiltinConstructor::JSTestJSBuiltinConstructor): Deleted.
(WebCore::JSTestJSBuiltinConstructor::createPrototype): Deleted.
(WebCore::JSTestJSBuiltinConstructor::getPrototype): Deleted.
(WebCore::JSTestJSBuiltinConstructor::destroy): Deleted.
* bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
(WebCore::JSTestMediaQueryListListenerConstructor::initializeProperties):
(WebCore::JSTestMediaQueryListListenerPrototype::finishCreation): Deleted.
(WebCore::JSTestMediaQueryListListener::JSTestMediaQueryListListener): Deleted.
* bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
(WebCore::JSTestNamedConstructorConstructor::initializeProperties):
(WebCore::JSTestNamedConstructorNamedConstructor::construct):
(WebCore::JSTestNamedConstructorNamedConstructor::initializeProperties):
(WebCore::JSTestNamedConstructorPrototype::finishCreation): Deleted.
(WebCore::JSTestNamedConstructor::JSTestNamedConstructor): Deleted.
(WebCore::jsTestNamedConstructorConstructor): Deleted.
(WebCore::JSTestNamedConstructor::getConstructor): Deleted.
(WebCore::JSTestNamedConstructorOwner::isReachableFromOpaqueRoots): Deleted.
* bindings/scripts/test/JS/JSTestNode.cpp:
(WebCore::JSTestNodeConstructor::construct):
(WebCore::JSTestNodeConstructor::initializeProperties):
(WebCore::JSTestNodePrototype::finishCreation): Deleted.
(WebCore::JSTestNode::JSTestNode): Deleted.
(WebCore::JSTestNode::getPrototype): Deleted.
* bindings/scripts/test/JS/JSTestNondeterministic.cpp:
(WebCore::JSTestNondeterministicConstructor::initializeProperties):
(WebCore::JSTestNondeterministicPrototype::finishCreation): Deleted.
* bindings/scripts/test/JS/JSTestObj.cpp:
(WebCore::JSTestObjConstructor::construct):
(WebCore::JSTestObjConstructor::initializeProperties):
* bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
(WebCore::JSTestOverloadedConstructorsConstructor::construct):
(WebCore::JSTestOverloadedConstructorsConstructor::initializeProperties):
(WebCore::constructJSTestOverloadedConstructors1): Deleted.
(WebCore::constructJSTestOverloadedConstructors2): Deleted.
(WebCore::JSTestOverloadedConstructorsPrototype::finishCreation): Deleted.
(WebCore::JSTestOverloadedConstructors::JSTestOverloadedConstructors): Deleted.
(WebCore::JSTestOverloadedConstructors::createPrototype): Deleted.
(WebCore::JSTestOverloadedConstructors::getPrototype): Deleted.
(WebCore::JSTestOverloadedConstructors::destroy): Deleted.
* bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
(WebCore::JSTestOverrideBuiltinsConstructor::initializeProperties):
(WebCore::JSTestOverrideBuiltinsPrototype::finishCreation): Deleted.
(WebCore::JSTestOverrideBuiltins::JSTestOverrideBuiltins): Deleted.
* bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
(WebCore::JSTestSerializedScriptValueInterfaceConstructor::initializeProperties):
(WebCore::JSTestSerializedScriptValueInterfacePrototype::finishCreation): Deleted.
* bindings/scripts/test/JS/JSTestTypedefs.cpp:
(WebCore::JSTestTypedefsConstructor::construct):
(WebCore::JSTestTypedefsConstructor::initializeProperties):
(WebCore::JSTestTypedefsPrototype::finishCreation): Deleted.
* bindings/scripts/test/JS/JSattribute.cpp:
(WebCore::JSattributeConstructor::initializeProperties):
(WebCore::JSattributePrototype::finishCreation): Deleted.
(WebCore::JSattribute::JSattribute): Deleted.
* bindings/scripts/test/JS/JSreadonly.cpp:
(WebCore::JSreadonlyConstructor::initializeProperties):
(WebCore::JSreadonlyPrototype::finishCreation): Deleted.
(WebCore::JSreadonly::JSreadonly): Deleted.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMConstructorh">trunk/Source/WebCore/bindings/js/JSDOMConstructor.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMWindowCustomcpp">trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSImageConstructorcpp">trunk/Source/WebCore/bindings/js/JSImageConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSImageConstructorh">trunk/Source/WebCore/bindings/js/JSImageConstructor.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSReadableStreamPrivateConstructorscpp">trunk/Source/WebCore/bindings/js/JSReadableStreamPrivateConstructors.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="#trunkSourceWebCorebindingsscriptstestJSJSTestCallbackcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallback.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCustomConstructorWithNoInterfaceObjectcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCustomNamedGettercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachablecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNamedConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministiccpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestOverrideBuiltinscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSattributecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSreadonlycpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/ChangeLog        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -1,3 +1,169 @@
</span><ins>+2015-10-16  Youenn Fablet  &lt;youenn.fablet@crf.canon.fr&gt;
+
+        Binding generator should use templated JSXXConstructor
+        https://bugs.webkit.org/show_bug.cgi?id=149952
+
+        Reviewed by Darin Adler.
+
+        Adding constructor templates:
+        - JSDOMConstructor: usual JS constructors
+        - JSDOMNamedConstructor: for named constructors
+        - JSDOMConstructorNotConstructable: for objects that cannot be constructed directly from JS.
+
+        Binding generator is using these 3 templates and is generating specializations for construct, initializeProperties and s_info.
+        These templates may also be used for private or custom constructors as examplified by JSImageConstructor
+        and JSReadableStream reader and controller private constructors.
+
+        Updated binding generator to use those templates.
+        Updated JSImageConstructor.cpp to use JSDOMNamedConstructor.
+        Updated default template implementation of JSBuiltinConstructor::createObject.
+        Updated generated helper routines of binding generator to fit with the templates.
+
+        A further patch should remove DOMConstructorWithDocument and DOMConstructorJSBuiltinObject. 
+
+        Covered by binding tests.
+
+        * bindings/js/JSDOMConstructor.h:
+        (WebCore::JSDOMConstructorNotConstructable::create):
+        (WebCore::JSDOMConstructorNotConstructable::createStructure):
+        (WebCore::JSDOMConstructorNotConstructable::JSDOMConstructorNotConstructable):
+        (WebCore::JSDOMConstructorNotConstructable::initializeProperties):
+        (WebCore::JSDOMConstructorNotConstructable&lt;JSClass&gt;::finishCreation):
+        (WebCore::JSDOMConstructor::create):
+        (WebCore::JSDOMConstructor::createStructure):
+        (WebCore::JSDOMConstructor::JSDOMConstructor):
+        (WebCore::JSDOMConstructor::initializeProperties):
+        (WebCore::JSDOMConstructor&lt;JSClass&gt;::finishCreation):
+        (WebCore::JSDOMConstructor&lt;JSClass&gt;::getConstructData):
+        (WebCore::JSDOMNamedConstructor::create):
+        (WebCore::JSDOMNamedConstructor::createStructure):
+        (WebCore::JSDOMNamedConstructor::JSDOMNamedConstructor):
+        (WebCore::JSDOMNamedConstructor::initializeProperties):
+        (WebCore::JSDOMNamedConstructor&lt;JSClass&gt;::finishCreation):
+        (WebCore::JSDOMNamedConstructor&lt;JSClass&gt;::getConstructData):
+        * bindings/js/JSDOMWindowCustom.cpp:
+        (WebCore::JSDOMWindow::image):
+        * bindings/js/JSImageConstructor.cpp:
+        (WebCore::JSImageConstructor::initializeProperties):
+        (WebCore::JSImageConstructor::construct):
+        (WebCore::createImageConstructor):
+        * bindings/js/JSImageConstructor.h:
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GetConstructorTemplateClassName):
+        (GenerateConstructorDeclaration):
+        (GenerateOverloadedConstructorDefinition):
+        (GenerateConstructorDefinition):
+        (GenerateConstructorHelperMethods):
+        (GenerateImplementation): Deleted.
+        (GenerateConstructorDefinitions): Deleted.
+        (HasCustomSetter): Deleted.
+        (HasCustomMethod): Deleted.
+        (NeedsConstructorProperty): Deleted.
+        (ComputeFunctionSpecial): Deleted.
+        (AddJSBuiltinIncludesIfNeeded): Deleted.
+        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
+        (WebCore::JSTestActiveDOMObjectConstructor::initializeProperties):
+        (WebCore::JSTestActiveDOMObjectPrototype::finishCreation): Deleted.
+        (WebCore::JSTestActiveDOMObject::JSTestActiveDOMObject): Deleted.
+        * bindings/scripts/test/JS/JSTestCallback.cpp:
+        (WebCore::JSTestCallbackConstructor::initializeProperties):
+        (WebCore::JSTestCallback::callbackWithNoParam): Deleted.
+        * bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp:
+        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::construct):
+        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectConstructor::initializeProperties):
+        (WebCore::JSTestCustomConstructorWithNoInterfaceObjectPrototype::finishCreation): Deleted.
+        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::JSTestCustomConstructorWithNoInterfaceObject): Deleted.
+        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::createPrototype): Deleted.
+        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::getPrototype): Deleted.
+        (WebCore::JSTestCustomConstructorWithNoInterfaceObject::destroy): Deleted.
+        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
+        (WebCore::JSTestCustomNamedGetterConstructor::initializeProperties):
+        (WebCore::JSTestCustomNamedGetterPrototype::finishCreation): Deleted.
+        (WebCore::JSTestCustomNamedGetter::JSTestCustomNamedGetter): Deleted.
+        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
+        (WebCore::JSTestEventConstructorConstructor::construct):
+        (WebCore::JSTestEventConstructorConstructor::initializeProperties):
+        (WebCore::JSTestEventConstructorPrototype::finishCreation): Deleted.
+        (WebCore::JSTestEventConstructor::JSTestEventConstructor): Deleted.
+        (WebCore::JSTestEventConstructor::getPrototype): Deleted.
+        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
+        (WebCore::JSTestEventTargetConstructor::initializeProperties):
+        (WebCore::JSTestEventTargetPrototype::finishCreation): Deleted.
+        * bindings/scripts/test/JS/JSTestException.cpp:
+        (WebCore::JSTestExceptionConstructor::initializeProperties):
+        (WebCore::JSTestExceptionPrototype::finishCreation): Deleted.
+        (WebCore::JSTestException::JSTestException): Deleted.
+        * bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp:
+        (WebCore::JSTestGenerateIsReachableConstructor::initializeProperties):
+        (WebCore::JSTestGenerateIsReachablePrototype::finishCreation): Deleted.
+        (WebCore::JSTestGenerateIsReachable::JSTestGenerateIsReachable): Deleted.
+        * bindings/scripts/test/JS/JSTestInterface.cpp:
+        (WebCore::JSTestInterfaceConstructor::construct):
+        (WebCore::JSTestInterfaceConstructor::initializeProperties):
+        (WebCore::JSTestInterfaceConstructor::getConstructData):
+        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
+        (WebCore::JSTestJSBuiltinConstructorConstructor::createJSObject):
+        (WebCore::JSTestJSBuiltinConstructorConstructor::initializeProperties):
+        (WebCore::JSTestJSBuiltinConstructorPrototype::finishCreation): Deleted.
+        (WebCore::JSTestJSBuiltinConstructor::JSTestJSBuiltinConstructor): Deleted.
+        (WebCore::JSTestJSBuiltinConstructor::createPrototype): Deleted.
+        (WebCore::JSTestJSBuiltinConstructor::getPrototype): Deleted.
+        (WebCore::JSTestJSBuiltinConstructor::destroy): Deleted.
+        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
+        (WebCore::JSTestMediaQueryListListenerConstructor::initializeProperties):
+        (WebCore::JSTestMediaQueryListListenerPrototype::finishCreation): Deleted.
+        (WebCore::JSTestMediaQueryListListener::JSTestMediaQueryListListener): Deleted.
+        * bindings/scripts/test/JS/JSTestNamedConstructor.cpp:
+        (WebCore::JSTestNamedConstructorConstructor::initializeProperties):
+        (WebCore::JSTestNamedConstructorNamedConstructor::construct):
+        (WebCore::JSTestNamedConstructorNamedConstructor::initializeProperties):
+        (WebCore::JSTestNamedConstructorPrototype::finishCreation): Deleted.
+        (WebCore::JSTestNamedConstructor::JSTestNamedConstructor): Deleted.
+        (WebCore::jsTestNamedConstructorConstructor): Deleted.
+        (WebCore::JSTestNamedConstructor::getConstructor): Deleted.
+        (WebCore::JSTestNamedConstructorOwner::isReachableFromOpaqueRoots): Deleted.
+        * bindings/scripts/test/JS/JSTestNode.cpp:
+        (WebCore::JSTestNodeConstructor::construct):
+        (WebCore::JSTestNodeConstructor::initializeProperties):
+        (WebCore::JSTestNodePrototype::finishCreation): Deleted.
+        (WebCore::JSTestNode::JSTestNode): Deleted.
+        (WebCore::JSTestNode::getPrototype): Deleted.
+        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
+        (WebCore::JSTestNondeterministicConstructor::initializeProperties):
+        (WebCore::JSTestNondeterministicPrototype::finishCreation): Deleted.
+        * bindings/scripts/test/JS/JSTestObj.cpp:
+        (WebCore::JSTestObjConstructor::construct):
+        (WebCore::JSTestObjConstructor::initializeProperties):
+        * bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp:
+        (WebCore::JSTestOverloadedConstructorsConstructor::construct):
+        (WebCore::JSTestOverloadedConstructorsConstructor::initializeProperties):
+        (WebCore::constructJSTestOverloadedConstructors1): Deleted.
+        (WebCore::constructJSTestOverloadedConstructors2): Deleted.
+        (WebCore::JSTestOverloadedConstructorsPrototype::finishCreation): Deleted.
+        (WebCore::JSTestOverloadedConstructors::JSTestOverloadedConstructors): Deleted.
+        (WebCore::JSTestOverloadedConstructors::createPrototype): Deleted.
+        (WebCore::JSTestOverloadedConstructors::getPrototype): Deleted.
+        (WebCore::JSTestOverloadedConstructors::destroy): Deleted.
+        * bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp:
+        (WebCore::JSTestOverrideBuiltinsConstructor::initializeProperties):
+        (WebCore::JSTestOverrideBuiltinsPrototype::finishCreation): Deleted.
+        (WebCore::JSTestOverrideBuiltins::JSTestOverrideBuiltins): Deleted.
+        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
+        (WebCore::JSTestSerializedScriptValueInterfaceConstructor::initializeProperties):
+        (WebCore::JSTestSerializedScriptValueInterfacePrototype::finishCreation): Deleted.
+        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
+        (WebCore::JSTestTypedefsConstructor::construct):
+        (WebCore::JSTestTypedefsConstructor::initializeProperties):
+        (WebCore::JSTestTypedefsPrototype::finishCreation): Deleted.
+        * bindings/scripts/test/JS/JSattribute.cpp:
+        (WebCore::JSattributeConstructor::initializeProperties):
+        (WebCore::JSattributePrototype::finishCreation): Deleted.
+        (WebCore::JSattribute::JSattribute): Deleted.
+        * bindings/scripts/test/JS/JSreadonly.cpp:
+        (WebCore::JSreadonlyConstructor::initializeProperties):
+        (WebCore::JSreadonlyPrototype::finishCreation): Deleted.
+        (WebCore::JSreadonly::JSreadonly): Deleted.
+
</ins><span class="cx"> 2015-10-16  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GStreamer] ASSERTION FAILED: !m_adoptionIsRequired in MediaSourceGStreamer::addSourceBuffer
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMConstructor.h (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMConstructor.h        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/js/JSDOMConstructor.h        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -19,59 +19,194 @@
</span><span class="cx"> #ifndef JSDOMConstructor_h
</span><span class="cx"> #define JSDOMConstructor_h
</span><span class="cx"> 
</span><ins>+#include &quot;DOMConstructorWithDocument.h&quot;
</ins><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-template &lt;typename JSClass&gt; class JSBuiltinConstructor : public DOMConstructorJSBuiltinObject {
</del><ins>+template&lt;typename JSClass&gt; class JSDOMConstructorNotConstructable : public DOMConstructorObject {
</ins><span class="cx"> public:
</span><del>-    typedef DOMConstructorJSBuiltinObject Base;
</del><ins>+    typedef DOMConstructorObject Base;
</ins><span class="cx"> 
</span><del>-    static JSBuiltinConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSBuiltinConstructor* constructor = new (NotNull, JSC::allocateCell&lt;JSBuiltinConstructor&gt;(vm.heap)) JSBuiltinConstructor(structure, globalObject);
-        constructor-&gt;finishCreation(vm, globalObject);
-        return constructor;
-    }
</del><ins>+    static JSDOMConstructorNotConstructable* create(JSC::VM&amp;, JSC::Structure*, JSDOMGlobalObject&amp;);
+    static JSC::Structure* createStructure(JSC::VM&amp;, JSC::JSGlobalObject&amp;, JSC::JSValue);
</ins><span class="cx"> 
</span><del>-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
</del><ins>+    DECLARE_INFO;
</ins><span class="cx"> 
</span><ins>+private:
+    JSDOMConstructorNotConstructable(JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject) : Base(structure, globalObject) { }
+    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
+
+    // Usually defined for each specialization class.
+    void initializeProperties(JSC::VM&amp;, JSDOMGlobalObject&amp;) { }
+};
+
+template&lt;typename JSClass&gt; class JSDOMConstructor : public DOMConstructorObject {
+public:
+    typedef DOMConstructorObject Base;
+
+    static JSDOMConstructor* create(JSC::VM&amp;, JSC::Structure*, JSDOMGlobalObject&amp;);
+    static JSC::Structure* createStructure(JSC::VM&amp;, JSC::JSGlobalObject&amp;, JSC::JSValue);
+
</ins><span class="cx">     DECLARE_INFO;
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    JSBuiltinConstructor(JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject) : Base(structure, globalObject) { }
</del><ins>+    JSDOMConstructor(JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject) : Base(structure, globalObject) { }
+    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
+    static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&amp;);
</ins><span class="cx"> 
</span><ins>+    // Usually defined for each specialization class.
+    void initializeProperties(JSC::VM&amp;, JSDOMGlobalObject&amp;) { }
+    // Must be defined for each specialization class.
+    static JSC::EncodedJSValue JSC_HOST_CALL construct(JSC::ExecState*);
+};
+
+template&lt;typename JSClass&gt; class JSDOMNamedConstructor : public DOMConstructorWithDocument {
+public:
+    typedef DOMConstructorWithDocument Base;
+
+    static JSDOMNamedConstructor* create(JSC::VM&amp;, JSC::Structure*, JSDOMGlobalObject&amp;);
+    static JSC::Structure* createStructure(JSC::VM&amp;, JSC::JSGlobalObject&amp;, JSC::JSValue);
+
+    DECLARE_INFO;
+
+private:
+    JSDOMNamedConstructor(JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject) : Base(structure, globalObject) { }
</ins><span class="cx">     void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</span><ins>+    static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&amp;);
+
+    // Usually defined for each specialization class.
</ins><span class="cx">     void initializeProperties(JSC::VM&amp;, JSDOMGlobalObject&amp;) { }
</span><ins>+    // Must be defined for each specialization class.
+    static JSC::EncodedJSValue JSC_HOST_CALL construct(JSC::ExecState*);
+};
+
+template&lt;typename JSClass&gt; class JSBuiltinConstructor : public DOMConstructorJSBuiltinObject {
+public:
+    typedef DOMConstructorJSBuiltinObject Base;
+
+    static JSBuiltinConstructor* create(JSC::VM&amp;, JSC::Structure*, JSDOMGlobalObject&amp;);
+    static JSC::Structure* createStructure(JSC::VM&amp;, JSC::JSGlobalObject&amp;, JSC::JSValue);
+
+    DECLARE_INFO;
+
+private:
+    JSBuiltinConstructor(JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject) : Base(structure, globalObject) { }
+    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</ins><span class="cx">     static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&amp;);
</span><span class="cx">     static JSC::EncodedJSValue JSC_HOST_CALL construct(JSC::ExecState*);
</span><ins>+    JSC::JSObject* createJSObject();
</ins><span class="cx"> 
</span><ins>+    // Usually defined for each specialization class.
+    void initializeProperties(JSC::VM&amp;, JSDOMGlobalObject&amp;) { }
</ins><span class="cx">     // Must be defined for each specialization class.
</span><del>-    JSC::JSFunction* createInitializeFunction(JSC::VM&amp;, JSC::JSGlobalObject&amp;);
-    JSC::JSObject* createJSObject();
</del><ins>+    JSC::FunctionExecutable* initializeExecutable(JSC::VM&amp;);
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-template&lt;typename JSClass&gt; void JSBuiltinConstructor&lt;JSClass&gt;::finishCreation(JSC::VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</del><ins>+template&lt;typename JSClass&gt; inline JSDOMConstructorNotConstructable&lt;JSClass&gt;* JSDOMConstructorNotConstructable&lt;JSClass&gt;::create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><ins>+    JSDOMConstructorNotConstructable* constructor = new (NotNull, JSC::allocateCell&lt;JSDOMConstructorNotConstructable&gt;(vm.heap)) JSDOMConstructorNotConstructable(structure, globalObject);
+    constructor-&gt;finishCreation(vm, globalObject);
+    return constructor;
+}
+
+template&lt;typename JSClass&gt; inline JSC::Structure* JSDOMConstructorNotConstructable&lt;JSClass&gt;::createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
+{
+    return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
+}
+
+template&lt;typename JSClass&gt; inline void JSDOMConstructorNotConstructable&lt;JSClass&gt;::finishCreation(JSC::VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
+{
</ins><span class="cx">     Base::finishCreation(vm);
</span><span class="cx">     ASSERT(inherits(info()));
</span><del>-    setInitializeFunction(vm, *createInitializeFunction(vm, globalObject));
</del><span class="cx">     initializeProperties(vm, globalObject);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename JSClass&gt; JSC::EncodedJSValue JSC_HOST_CALL JSBuiltinConstructor&lt;JSClass&gt;::construct(JSC::ExecState* state)
</del><ins>+template&lt;typename JSClass&gt; inline JSDOMConstructor&lt;JSClass&gt;* JSDOMConstructor&lt;JSClass&gt;::create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><ins>+    JSDOMConstructor* constructor = new (NotNull, JSC::allocateCell&lt;JSDOMConstructor&gt;(vm.heap)) JSDOMConstructor(structure, globalObject);
+    constructor-&gt;finishCreation(vm, globalObject);
+    return constructor;
+}
+
+template&lt;typename JSClass&gt; inline JSC::Structure* JSDOMConstructor&lt;JSClass&gt;::createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
+{
+    return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
+}
+
+template&lt;typename JSClass&gt; void JSDOMConstructor&lt;JSClass&gt;::finishCreation(JSC::VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
+{
+    Base::finishCreation(vm);
+    ASSERT(inherits(info()));
+    initializeProperties(vm, globalObject);
+}
+
+template&lt;typename JSClass&gt; JSC::ConstructType JSDOMConstructor&lt;JSClass&gt;::getConstructData(JSC::JSCell*, JSC::ConstructData&amp; constructData)
+{
+    constructData.native.function = construct;
+    return JSC::ConstructTypeHost;
+}
+
+template&lt;typename JSClass&gt; inline JSDOMNamedConstructor&lt;JSClass&gt;* JSDOMNamedConstructor&lt;JSClass&gt;::create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
+{
+    JSDOMNamedConstructor* constructor = new (NotNull, JSC::allocateCell&lt;JSDOMNamedConstructor&gt;(vm.heap)) JSDOMNamedConstructor(structure, globalObject);
+    constructor-&gt;finishCreation(vm, globalObject);
+    return constructor;
+}
+
+template&lt;typename JSClass&gt; inline JSC::Structure* JSDOMNamedConstructor&lt;JSClass&gt;::createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
+{
+    return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
+}
+
+template&lt;typename JSClass&gt; inline void JSDOMNamedConstructor&lt;JSClass&gt;::finishCreation(JSC::VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
+{
+    Base::finishCreation(globalObject);
+    ASSERT(inherits(info()));
+    initializeProperties(vm, globalObject);
+}
+
+template&lt;typename JSClass&gt; inline JSC::ConstructType JSDOMNamedConstructor&lt;JSClass&gt;::getConstructData(JSC::JSCell*, JSC::ConstructData&amp; constructData)
+{
+    constructData.native.function = construct;
+    return JSC::ConstructTypeHost;
+}
+
+template&lt;typename JSClass&gt; inline JSBuiltinConstructor&lt;JSClass&gt;* JSBuiltinConstructor&lt;JSClass&gt;::create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
+{
+    JSBuiltinConstructor* constructor = new (NotNull, JSC::allocateCell&lt;JSBuiltinConstructor&gt;(vm.heap)) JSBuiltinConstructor(structure, globalObject);
+    constructor-&gt;finishCreation(vm, globalObject);
+    return constructor;
+}
+
+template&lt;typename JSClass&gt; inline JSC::Structure* JSBuiltinConstructor&lt;JSClass&gt;::createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
+{
+    return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
+}
+
+template&lt;typename JSClass&gt; inline void JSBuiltinConstructor&lt;JSClass&gt;::finishCreation(JSC::VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
+{
+    Base::finishCreation(vm);
+    ASSERT(inherits(info()));
+    setInitializeFunction(vm, *JSC::JSFunction::createBuiltinFunction(vm, initializeExecutable(vm), &amp;globalObject));
+    initializeProperties(vm, globalObject);
+}
+
+template&lt;typename JSClass&gt; inline JSC::EncodedJSValue JSC_HOST_CALL JSBuiltinConstructor&lt;JSClass&gt;::construct(JSC::ExecState* state)
+{
</ins><span class="cx">     auto* castedThis = JSC::jsCast&lt;JSBuiltinConstructor*&gt;(state-&gt;callee());
</span><del>-    JSObject* object = castedThis-&gt;createJSObject();
</del><ins>+    auto* object = castedThis-&gt;createJSObject();
</ins><span class="cx">     callFunctionWithCurrentArguments(*state, *object, *castedThis-&gt;initializeFunction());
</span><span class="cx">     return JSC::JSValue::encode(object);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename JSClass&gt; JSC::ConstructType JSBuiltinConstructor&lt;JSClass&gt;::getConstructData(JSC::JSCell*, JSC::ConstructData&amp; constructData)
</del><ins>+template&lt;typename JSClass&gt; inline JSC::JSObject* JSBuiltinConstructor&lt;JSClass&gt;::createJSObject()
</ins><span class="cx"> {
</span><ins>+    return JSClass::create(getDOMStructure&lt;JSClass&gt;(globalObject()-&gt;vm(), *globalObject()), globalObject());
+}
+
+template&lt;typename JSClass&gt; inline JSC::ConstructType JSBuiltinConstructor&lt;JSClass&gt;::getConstructData(JSC::JSCell*, JSC::ConstructData&amp; constructData)
+{
</ins><span class="cx">     constructData.native.function = construct;
</span><span class="cx">     return JSC::ConstructTypeHost;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMWindowCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/js/JSDOMWindowCustom.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -501,7 +501,7 @@
</span><span class="cx"> 
</span><span class="cx"> JSValue JSDOMWindow::image(ExecState&amp; state) const
</span><span class="cx"> {
</span><del>-    return getDOMConstructor&lt;JSImageConstructor&gt;(state.vm(), *this);
</del><ins>+    return createImageConstructor(state.vm(), *this);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(IOS_TOUCH_EVENTS)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSImageConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSImageConstructor.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSImageConstructor.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/js/JSImageConstructor.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -20,8 +20,8 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;JSImageConstructor.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;HTMLImageElement.h&quot;
</del><span class="cx"> #include &quot;HTMLNames.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &quot;JSHTMLImageElement.h&quot;
</span><span class="cx"> #include &quot;JSNode.h&quot;
</span><span class="cx"> #include &lt;runtime/Error.h&gt;
</span><span class="lines">@@ -30,54 +30,48 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+typedef JSDOMNamedConstructor&lt;JSHTMLImageElement&gt; JSImageConstructor;
+
</ins><span class="cx"> STATIC_ASSERT_IS_TRIVIALLY_DESTRUCTIBLE(JSImageConstructor);
</span><span class="cx"> 
</span><del>-const ClassInfo JSImageConstructor::s_info = { &quot;ImageConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSImageConstructor) };
-
-JSImageConstructor::JSImageConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : DOMConstructorWithDocument(structure, globalObject)
</del><ins>+template&lt;&gt; void JSImageConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSImageConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(globalObject);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSHTMLImageElement::getPrototype(vm, &amp;globalObject), None);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static EncodedJSValue JSC_HOST_CALL constructImage(ExecState* exec)
</del><ins>+template&lt;&gt; EncodedJSValue JSImageConstructor::construct(ExecState* state)
</ins><span class="cx"> {
</span><del>-    JSImageConstructor* jsConstructor = jsCast&lt;JSImageConstructor*&gt;(exec-&gt;callee());
</del><ins>+    JSImageConstructor* jsConstructor = jsCast&lt;JSImageConstructor*&gt;(state-&gt;callee());
</ins><span class="cx">     Document* document = jsConstructor-&gt;document();
</span><span class="cx">     if (!document)
</span><del>-        return throwVMError(exec, createReferenceError(exec, &quot;Image constructor associated document is unavailable&quot;));
</del><ins>+        return throwVMError(state, createReferenceError(state, &quot;Image constructor associated document is unavailable&quot;));
</ins><span class="cx"> 
</span><span class="cx">     // Calling toJS on the document causes the JS document wrapper to be
</span><span class="cx">     // added to the window object. This is done to ensure that JSDocument::visit
</span><span class="cx">     // will be called, which will cause the image element to be marked if necessary.
</span><del>-    toJS(exec, jsConstructor-&gt;globalObject(), document);
</del><ins>+    toJS(state, jsConstructor-&gt;globalObject(), document);
</ins><span class="cx">     int width;
</span><span class="cx">     int height;
</span><span class="cx">     int* optionalWidth = 0;
</span><span class="cx">     int* optionalHeight = 0;
</span><del>-    if (exec-&gt;argumentCount() &gt; 0) {
-        width = exec-&gt;argument(0).toInt32(exec);
</del><ins>+    if (state-&gt;argumentCount() &gt; 0) {
+        width = state-&gt;argument(0).toInt32(state);
</ins><span class="cx">         optionalWidth = &amp;width;
</span><span class="cx">     }
</span><del>-    if (exec-&gt;argumentCount() &gt; 1) {
-        height = exec-&gt;argument(1).toInt32(exec);
</del><ins>+    if (state-&gt;argumentCount() &gt; 1) {
+        height = state-&gt;argument(1).toInt32(state);
</ins><span class="cx">         optionalHeight = &amp;height;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return JSValue::encode(asObject(toJS(exec, jsConstructor-&gt;globalObject(),
</del><ins>+    return JSValue::encode(asObject(toJS(state, jsConstructor-&gt;globalObject(),
</ins><span class="cx">         HTMLImageElement::createForJSConstructor(*document, optionalWidth, optionalHeight))));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ConstructType JSImageConstructor::getConstructData(JSCell*, ConstructData&amp; constructData)
</del><ins>+template&lt;&gt; const ClassInfo JSImageConstructor::s_info = { &quot;ImageConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSImageConstructor) };
+
+JSC::JSValue createImageConstructor(JSC::VM&amp; vm, const JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-    constructData.native.function = constructImage;
-    return ConstructTypeHost;
</del><ins>+    return getDOMConstructor&lt;JSImageConstructor&gt;(vm, globalObject);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSImageConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSImageConstructor.h (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSImageConstructor.h        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/js/JSImageConstructor.h        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -20,36 +20,17 @@
</span><span class="cx"> #ifndef JSImageConstructor_h
</span><span class="cx"> #define JSImageConstructor_h
</span><span class="cx"> 
</span><del>-#include &quot;DOMConstructorWithDocument.h&quot;
-#include &quot;JSDOMBinding.h&quot;
-#include &quot;JSDocument.h&quot;
</del><ins>+namespace JSC {
+class JSValue;
+class VM;
+}
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-    class JSImageConstructor : public DOMConstructorWithDocument {
-    public:
-        typedef DOMConstructorWithDocument Base;
</del><ins>+class JSDOMGlobalObject;
</ins><span class="cx"> 
</span><del>-        static JSImageConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-        {
-            JSImageConstructor* constructor = new (NotNull, JSC::allocateCell&lt;JSImageConstructor&gt;(vm.heap)) JSImageConstructor(structure, globalObject);
-            constructor-&gt;finishCreation(vm, globalObject);
-            return constructor;
-        }
</del><ins>+JSC::JSValue createImageConstructor(JSC::VM&amp;, const JSDOMGlobalObject&amp;);
</ins><span class="cx"> 
</span><del>-        static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-        {
-            return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-        }
-
-        DECLARE_INFO;
-
-    private:
-        JSImageConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-        void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
-        static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&amp;);
-    };
-
</del><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // JSImageConstructor_h
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSReadableStreamPrivateConstructorscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSReadableStreamPrivateConstructors.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSReadableStreamPrivateConstructors.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/js/JSReadableStreamPrivateConstructors.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -73,14 +73,14 @@
</span><span class="cx">     return JSReadableStreamController::create(getDOMStructure&lt;JSReadableStreamController&gt;(globalObject()-&gt;vm(), *globalObject()), globalObject(), ReadableStreamController::create());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;&gt; JSFunction* JSBuiltinReadableStreamReaderPrivateConstructor::createInitializeFunction(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject)
</del><ins>+template&lt;&gt; FunctionExecutable* JSBuiltinReadableStreamReaderPrivateConstructor::initializeExecutable(JSC::VM&amp; vm)
</ins><span class="cx"> {
</span><del>-    return JSFunction::createBuiltinFunction(vm, readableStreamInternalsPrivateInitializeReadableStreamReaderCodeGenerator(vm), &amp;globalObject);
</del><ins>+    return readableStreamInternalsPrivateInitializeReadableStreamReaderCodeGenerator(vm);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;&gt; JSFunction* JSBuiltinReadableStreamControllerPrivateConstructor::createInitializeFunction(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject)
</del><ins>+template&lt;&gt; FunctionExecutable* JSBuiltinReadableStreamControllerPrivateConstructor::initializeExecutable(JSC::VM&amp; vm)
</ins><span class="cx"> {
</span><del>-    return JSFunction::createBuiltinFunction(vm, readableStreamInternalsPrivateInitializeReadableStreamControllerCodeGenerator(vm), &amp;globalObject);
</del><ins>+    return readableStreamInternalsPrivateInitializeReadableStreamControllerCodeGenerator(vm);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSValue createReadableStreamReaderPrivateConstructor(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -1874,10 +1874,6 @@
</span><span class="cx"> 
</span><span class="cx">     # Add constructor declaration
</span><span class="cx">     if (NeedsConstructorProperty($interface)) {
</span><del>-        $implIncludes{&quot;JSDOMBinding.h&quot;} = 1;
-        if ($interface-&gt;extendedAttributes-&gt;{&quot;NamedConstructor&quot;}) {
-            $implIncludes{&quot;DOMConstructorWithDocument.h&quot;} = 1;
-        }
</del><span class="cx">         GenerateConstructorDeclaration(\@implContent, $className, $interface, $interfaceName);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -4584,14 +4580,13 @@
</span><span class="cx">     push(@$outputArray, &quot;};\n\n&quot;);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-sub GetParentConstructorClassName
</del><ins>+sub GetConstructorTemplateClassName
</ins><span class="cx"> {
</span><span class="cx">     my $interface = shift;
</span><del>-    if ($interface-&gt;extendedAttributes-&gt;{&quot;JSBuiltinConstructor&quot;}) {
-        return &quot;DOMConstructorJSBuiltinObject&quot;;
-    }
-    return &quot;DOMConstructorObject&quot;;
-
</del><ins>+    return &quot;JSBuiltinConstructor&quot; if ($interface-&gt;extendedAttributes-&gt;{&quot;JSBuiltinConstructor&quot;});
+    return &quot;JSDOMConstructorNotConstructable&quot; if ($interface-&gt;extendedAttributes-&gt;{&quot;NamedConstructor&quot;});
+    return &quot;JSDOMConstructorNotConstructable&quot; unless IsConstructable($interface);
+    return &quot;JSDOMConstructor&quot;;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> sub GenerateConstructorDeclaration
</span><span class="lines">@@ -4602,65 +4597,13 @@
</span><span class="cx">     my $interfaceName = shift;
</span><span class="cx"> 
</span><span class="cx">     my $constructorClassName = &quot;${className}Constructor&quot;;
</span><del>-    my $parentClassName = GetParentConstructorClassName($interface);
</del><ins>+    my $templateClassName = GetConstructorTemplateClassName($interface);
</ins><span class="cx"> 
</span><del>-    push(@$outputArray, &quot;class ${constructorClassName} : public &quot; . $parentClassName . &quot; {\n&quot;);
-    push(@$outputArray, &quot;private:\n&quot;);
-    push(@$outputArray, &quot;    ${constructorClassName}(JSC::Structure*, JSDOMGlobalObject&amp;);\n&quot;);
-    push(@$outputArray, &quot;    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);\n\n&quot;);
</del><ins>+    $implIncludes{&quot;JSDOMConstructor.h&quot;} = 1;
</ins><span class="cx"> 
</span><del>-    push(@$outputArray, &quot;public:\n&quot;);
-    push(@$outputArray, &quot;    typedef &quot; . $parentClassName . &quot; Base;\n&quot;);
-    push(@$outputArray, &quot;    static $constructorClassName* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)\n&quot;);
-    push(@$outputArray, &quot;    {\n&quot;);
-    push(@$outputArray, &quot;        $constructorClassName* ptr = new (NotNull, JSC::allocateCell&lt;$constructorClassName&gt;(vm.heap)) $constructorClassName(structure, globalObject);\n&quot;);
-    push(@$outputArray, &quot;        ptr-&gt;finishCreation(vm, globalObject);\n&quot;);
-    push(@$outputArray, &quot;        return ptr;\n&quot;);
-    push(@$outputArray, &quot;    }\n\n&quot;);
-
-    push(@$outputArray, &quot;    DECLARE_INFO;\n&quot;);
-
-    push(@$outputArray, &quot;    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)\n&quot;);
-    push(@$outputArray, &quot;    {\n&quot;);
-    push(@$outputArray, &quot;        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());\n&quot;);
-    push(@$outputArray, &quot;    }\n&quot;);
-
-    if (IsConstructable($interface) &amp;&amp; !$interface-&gt;extendedAttributes-&gt;{&quot;NamedConstructor&quot;}) {
-        push(@$outputArray, &quot;protected:\n&quot;);
-        push(@$outputArray, &quot;    static JSC::EncodedJSValue JSC_HOST_CALL construct(JSC::ExecState*);\n&quot;);
-        push(@$outputArray, &quot;    static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&amp;);\n&quot;);
-    }
-    push(@$outputArray, &quot;};\n\n&quot;);
-
-    if ($interface-&gt;extendedAttributes-&gt;{&quot;NamedConstructor&quot;}) {
-        push(@$outputArray, &lt;&lt;END);
-class JS${interfaceName}NamedConstructor : public DOMConstructorWithDocument {
-public:
-    typedef DOMConstructorWithDocument Base;
-
-    static JS${interfaceName}NamedConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JS${interfaceName}NamedConstructor* constructor = new (NotNull, JSC::allocateCell&lt;JS${interfaceName}NamedConstructor&gt;(vm.heap)) JS${interfaceName}NamedConstructor(structure, globalObject);
-        constructor-&gt;finishCreation(vm, globalObject);
-        return constructor;
-    }
-
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-
-    DECLARE_INFO;
-
-private:
-    JS${interfaceName}NamedConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    static JSC::EncodedJSValue JSC_HOST_CALL construct(JSC::ExecState*);
-    static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
-};
-
-END
-    }
</del><ins>+    push(@$outputArray, &quot;typedef $templateClassName&lt;$className&gt; ${constructorClassName};\n&quot;);
+    push(@$outputArray, &quot;typedef JSDOMNamedConstructor&lt;$className&gt; JS${interfaceName}NamedConstructor;\n&quot;) if $interface-&gt;extendedAttributes-&gt;{&quot;NamedConstructor&quot;};
+    push(@$outputArray, &quot;\n&quot;);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> sub GenerateConstructorDefinitions
</span><span class="lines">@@ -4700,7 +4643,7 @@
</span><span class="cx">     my $lengthOfLongestOverloadedConstructorParameterList = LengthOfLongestFunctionParameterList($interface-&gt;constructors);
</span><span class="cx"> 
</span><span class="cx">     push(@$outputArray, &lt;&lt;END);
</span><del>-EncodedJSValue JSC_HOST_CALL ${className}Constructor::construct(ExecState* state)
</del><ins>+template&lt;&gt; EncodedJSValue JSC_HOST_CALL ${className}Constructor::construct(ExecState* state)
</ins><span class="cx"> {
</span><span class="cx">     size_t argsCount = std::min&lt;size_t&gt;($lengthOfLongestOverloadedConstructorParameterList, state-&gt;argumentCount());
</span><span class="cx"> END
</span><span class="lines">@@ -4746,6 +4689,8 @@
</span><span class="cx">     my $generatingNamedConstructor = shift;
</span><span class="cx">     my $function = shift;
</span><span class="cx"> 
</span><ins>+    return if ($interface-&gt;extendedAttributes-&gt;{&quot;JSBuiltinConstructor&quot;});
+
</ins><span class="cx">     my $constructorClassName = $generatingNamedConstructor ? &quot;${className}NamedConstructor&quot; : &quot;${className}Constructor&quot;;
</span><span class="cx"> 
</span><span class="cx">     if (IsConstructable($interface)) {
</span><span class="lines">@@ -4754,7 +4699,7 @@
</span><span class="cx">             $implIncludes{&quot;&lt;runtime/Error.h&gt;&quot;} = 1;
</span><span class="cx"> 
</span><span class="cx">             push(@$outputArray, &lt;&lt;END);
</span><del>-EncodedJSValue JSC_HOST_CALL ${constructorClassName}::construct(ExecState* state)
</del><ins>+template&lt;&gt; EncodedJSValue JSC_HOST_CALL ${constructorClassName}::construct(ExecState* state)
</ins><span class="cx"> {
</span><span class="cx">     auto* jsConstructor = jsCast&lt;${constructorClassName}*&gt;(state-&gt;callee());
</span><span class="cx"> 
</span><span class="lines">@@ -4819,24 +4764,16 @@
</span><span class="cx"> 
</span><span class="cx"> END
</span><span class="cx">          } elsif ($interface-&gt;extendedAttributes-&gt;{&quot;CustomConstructor&quot;}) {
</span><del>-            push(@$outputArray, &quot;JSC::EncodedJSValue JSC_HOST_CALL ${constructorClassName}::construct(JSC::ExecState* state)\n&quot;);
</del><ins>+            push(@$outputArray, &quot;template&lt;&gt; JSC::EncodedJSValue JSC_HOST_CALL ${constructorClassName}::construct(JSC::ExecState* state)\n&quot;);
</ins><span class="cx">             push(@$outputArray, &quot;{\n&quot;);
</span><span class="cx">             push(@$outputArray, &quot;    return construct${className}(state);\n&quot;);
</span><span class="cx">             push(@$outputArray, &quot;}\n\n&quot;);
</span><del>-         } elsif ($interface-&gt;extendedAttributes-&gt;{&quot;JSBuiltinConstructor&quot;}) {
-            push(@$outputArray, &quot;JSC::EncodedJSValue JSC_HOST_CALL ${constructorClassName}::construct(JSC::ExecState* state)\n&quot;);
-            push(@$outputArray, &quot;{\n&quot;);
-
-            push(@$outputArray, &quot;    auto* castedThis = jsCast&lt;${constructorClassName}*&gt;(state-&gt;callee());\n&quot;);
-            push(@$outputArray, &quot;    return createJSBuiltin&lt;${className}&gt;(*state, *castedThis-&gt;initializeFunction(), *castedThis-&gt;globalObject());\n&quot;);
-
-            push(@$outputArray, &quot;}\n\n&quot;);
-        } elsif (!HasCustomConstructor($interface) &amp;&amp; (!$interface-&gt;extendedAttributes-&gt;{&quot;NamedConstructor&quot;} || $generatingNamedConstructor)) {
</del><ins>+         } elsif (!HasCustomConstructor($interface) &amp;&amp; (!$interface-&gt;extendedAttributes-&gt;{&quot;NamedConstructor&quot;} || $generatingNamedConstructor)) {
</ins><span class="cx">             if ($function-&gt;{overloadedIndex} &amp;&amp; $function-&gt;{overloadedIndex} &gt; 0) {
</span><span class="cx">                 push(@$outputArray, &quot;static inline EncodedJSValue construct${className}$function-&gt;{overloadedIndex}(ExecState* state)\n&quot;);
</span><span class="cx">             }
</span><span class="cx">             else {
</span><del>-                push(@$outputArray, &quot;EncodedJSValue JSC_HOST_CALL ${constructorClassName}::construct(ExecState* state)\n&quot;);
</del><ins>+                push(@$outputArray, &quot;template&lt;&gt; EncodedJSValue JSC_HOST_CALL ${constructorClassName}::construct(ExecState* state)\n&quot;);
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             push(@$outputArray, &quot;{\n&quot;);
</span><span class="lines">@@ -4961,23 +4898,9 @@
</span><span class="cx">         $leastConstructorLength = 0;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    push(@$outputArray, &quot;const ClassInfo ${constructorClassName}::s_info = { \&quot;${visibleInterfaceName}Constructor\&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE($constructorClassName) };\n\n&quot;);
-
-    push(@$outputArray, &quot;${constructorClassName}::${constructorClassName}(Structure* structure, JSDOMGlobalObject&amp; globalObject)\n&quot;);
-    push(@$outputArray, &quot;    : Base(structure, globalObject)\n&quot;);
</del><ins>+    push(@$outputArray, &quot;template&lt;&gt; void ${constructorClassName}::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)\n&quot;);
</ins><span class="cx">     push(@$outputArray, &quot;{\n&quot;);
</span><del>-    push(@$outputArray, &quot;}\n\n&quot;);
</del><span class="cx"> 
</span><del>-    push(@$outputArray, &quot;void ${constructorClassName}::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)\n&quot;);
-    push(@$outputArray, &quot;{\n&quot;);
-
-    if ($generatingNamedConstructor) {
-        push(@$outputArray, &quot;    Base::finishCreation(globalObject);\n&quot;);
-    } else {
-        push(@$outputArray, &quot;    Base::finishCreation(vm);\n&quot;);
-    }
-    push(@$outputArray, &quot;    ASSERT(inherits(info()));\n&quot;);
-
</del><span class="cx">     # There must exist an interface prototype object for every non-callback interface defined, regardless
</span><span class="cx">     # of whether the interface was declared with the [NoInterfaceObject] extended attribute.
</span><span class="cx">     # https://heycam.github.io/webidl/#interface-prototype-object
</span><span class="lines">@@ -4986,7 +4909,7 @@
</span><span class="cx">     } elsif ($interface-&gt;isCallback) {
</span><span class="cx">         push(@$outputArray, &quot;    UNUSED_PARAM(globalObject);\n&quot;);
</span><span class="cx">     } else {
</span><del>-       push(@$outputArray, &quot;    putDirect(vm, vm.propertyNames-&gt;prototype, ${className}::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);\n&quot;);
</del><ins>+        push(@$outputArray, &quot;    putDirect(vm, vm.propertyNames-&gt;prototype, ${className}::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);\n&quot;);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     push(@$outputArray, &quot;    putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(\&quot;$visibleInterfaceName\&quot;))), ReadOnly | DontEnum);\n&quot;);
</span><span class="lines">@@ -4999,35 +4922,31 @@
</span><span class="cx">         push(@$outputArray, &quot;    reifyStaticProperties(vm, ${className}ConstructorTableValues, *this);\n&quot;);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if ($interface-&gt;extendedAttributes-&gt;{&quot;JSBuiltinConstructor&quot;}) {
-        my $initializeFunctionName = GetJSBuiltinFunctionName(${className}, &quot;initialize&quot; . ${interfaceName});
-        push(@$outputArray, &quot;    setInitializeFunction(vm, *JSC::JSFunction::createBuiltinFunction(vm, ${initializeFunctionName}(vm), &amp;globalObject));\n&quot;);
-    }
-
</del><span class="cx">     push(@$outputArray, &quot;}\n\n&quot;);
</span><span class="cx"> 
</span><del>-    if (IsConstructable($interface)) {
-        if (!$interface-&gt;extendedAttributes-&gt;{&quot;NamedConstructor&quot;} || $generatingNamedConstructor) {
-            my $conditionalString = $codeGenerator-&gt;GenerateConstructorConditionalString($interface);
-            push(@$outputArray, &quot;ConstructType ${constructorClassName}::getConstructData(JSCell* cell, ConstructData&amp; constructData)\n&quot;);
-            push(@$outputArray, &quot;{\n&quot;);
-            if ($conditionalString) {
-                push(@$outputArray, &quot;#if $conditionalString\n&quot;);
-                push(@$outputArray, &quot;    UNUSED_PARAM(cell);\n&quot;);
-                push(@$outputArray, &quot;    constructData.native.function = construct;\n&quot;);
-                push(@$outputArray, &quot;    return ConstructTypeHost;\n&quot;);
-                push(@$outputArray, &quot;#else\n&quot;);
-                push(@$outputArray, &quot;    return Base::getConstructData(cell, constructData);\n&quot;);
-                push(@$outputArray, &quot;#endif\n&quot;);
-            } else {
-                push(@$outputArray, &quot;    UNUSED_PARAM(cell);\n&quot;);
-                push(@$outputArray, &quot;    constructData.native.function = construct;\n&quot;);
-                push(@$outputArray, &quot;    return ConstructTypeHost;\n&quot;);
-            }
-            push(@$outputArray, &quot;}\n&quot;);
-            push(@$outputArray, &quot;\n&quot;);
-        }
</del><ins>+    my $conditionalString = $codeGenerator-&gt;GenerateConstructorConditionalString($interface);
+    if ($conditionalString) {
+        push(@$outputArray, &quot;template&lt;&gt; ConstructType ${constructorClassName}::getConstructData(JSCell*, ConstructData&amp; constructData)\n&quot;);
+        push(@$outputArray, &quot;{\n&quot;);
+        push(@$outputArray, &quot;#if $conditionalString\n&quot;);
+        push(@$outputArray, &quot;    constructData.native.function = construct;\n&quot;);
+        push(@$outputArray, &quot;    return ConstructTypeHost;\n&quot;);
+        push(@$outputArray, &quot;#else\n&quot;);
+        push(@$outputArray, &quot;    return Base::getConstructData(cell, constructData);\n&quot;);
+        push(@$outputArray, &quot;#endif\n&quot;);
+        push(@$outputArray, &quot;}\n&quot;);
+        push(@$outputArray, &quot;\n&quot;);
</ins><span class="cx">     }
</span><ins>+
+    if ($interface-&gt;extendedAttributes-&gt;{&quot;JSBuiltinConstructor&quot;}) {
+        push(@$outputArray, &quot;template&lt;&gt; FunctionExecutable* ${constructorClassName}::initializeExecutable(VM&amp; vm)\n&quot;);
+        push(@$outputArray, &quot;{\n&quot;);
+        push(@$outputArray, &quot;    return &quot; . GetJSBuiltinFunctionName($className, &quot;initialize&quot; . $interfaceName) . &quot;(vm);\n&quot;);
+        push(@$outputArray, &quot;}\n&quot;);
+        push(@$outputArray, &quot;\n&quot;);
+    }
+    push(@$outputArray, &quot;template&lt;&gt; const ClassInfo ${constructorClassName}::s_info = { \&quot;${visibleInterfaceName}Constructor\&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE($constructorClassName) };\n\n&quot;);

</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> sub HasCustomConstructor
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -23,6 +23,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &quot;JSNode.h&quot;
</span><span class="cx"> #include &lt;runtime/Error.h&gt;
</span><span class="cx"> #include &lt;wtf/GetPtr.h&gt;
</span><span class="lines">@@ -66,27 +67,8 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestActiveDOMObjectConstructor : public DOMConstructorObject {
-private:
-    JSTestActiveDOMObjectConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructorNotConstructable&lt;JSTestActiveDOMObject&gt; JSTestActiveDOMObjectConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestActiveDOMObjectConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestActiveDOMObjectConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestActiveDOMObjectConstructor&gt;(vm.heap)) JSTestActiveDOMObjectConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-};
-
</del><span class="cx"> /* Hash table */
</span><span class="cx"> 
</span><span class="cx"> static const struct CompactHashIndex JSTestActiveDOMObjectTableIndex[4] = {
</span><span class="lines">@@ -104,22 +86,15 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> static const HashTable JSTestActiveDOMObjectTable = { 2, 3, true, JSTestActiveDOMObjectTableValues, JSTestActiveDOMObjectTableIndex };
</span><del>-const ClassInfo JSTestActiveDOMObjectConstructor::s_info = { &quot;TestActiveDOMObjectConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestActiveDOMObjectConstructor) };
-
-JSTestActiveDOMObjectConstructor::JSTestActiveDOMObjectConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestActiveDOMObjectConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestActiveDOMObjectConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestActiveDOMObject::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestActiveDOMObject&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; const ClassInfo JSTestActiveDOMObjectConstructor::s_info = { &quot;TestActiveDOMObjectConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestActiveDOMObjectConstructor) };
+
</ins><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestActiveDOMObjectPrototypeTableValues[] =
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCallbackcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallback.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallback.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCallback.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -25,6 +25,7 @@
</span><span class="cx"> #include &quot;JSTestCallback.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;DOMStringList.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &quot;JSDOMStringList.h&quot;
</span><span class="cx"> #include &quot;JSTestNode.h&quot;
</span><span class="cx"> #include &quot;ScriptExecutionContext.h&quot;
</span><span class="lines">@@ -59,27 +60,8 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-class JSTestCallbackConstructor : public DOMConstructorObject {
-private:
-    JSTestCallbackConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructorNotConstructable&lt;JSTestCallback&gt; JSTestCallbackConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestCallbackConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestCallbackConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestCallbackConstructor&gt;(vm.heap)) JSTestCallbackConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-};
-
</del><span class="cx"> /* Hash table for constructor */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestCallbackConstructorTableValues[] =
</span><span class="lines">@@ -92,23 +74,16 @@
</span><span class="cx"> COMPILE_ASSERT(1 == TestCallback::CONSTANT1, TestCallbackEnumCONSTANT1IsWrongUseDoNotCheckConstants);
</span><span class="cx"> COMPILE_ASSERT(2 == TestCallback::CONSTANT2, TestCallbackEnumCONSTANT2IsWrongUseDoNotCheckConstants);
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestCallbackConstructor::s_info = { &quot;TestCallbackConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestCallbackConstructor) };
-
-JSTestCallbackConstructor::JSTestCallbackConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestCallbackConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestCallbackConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     UNUSED_PARAM(globalObject);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestCallback&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><span class="cx">     reifyStaticProperties(vm, JSTestCallbackConstructorTableValues, *this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; const ClassInfo JSTestCallbackConstructor::s_info = { &quot;TestCallbackConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestCallbackConstructor) };
+
</ins><span class="cx"> JSValue JSTestCallback::getConstructor(VM&amp; vm, JSGlobalObject* globalObject)
</span><span class="cx"> {
</span><span class="cx">     return getDOMConstructor&lt;JSTestCallbackConstructor&gt;(vm, *jsCast&lt;JSDOMGlobalObject*&gt;(globalObject));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCustomConstructorWithNoInterfaceObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomConstructorWithNoInterfaceObject.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -22,6 +22,7 @@
</span><span class="cx"> #include &quot;JSTestCustomConstructorWithNoInterfaceObject.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &lt;wtf/GetPtr.h&gt;
</span><span class="cx"> 
</span><span class="cx"> using namespace JSC;
</span><span class="lines">@@ -57,57 +58,21 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestCustomConstructorWithNoInterfaceObjectConstructor : public DOMConstructorObject {
-private:
-    JSTestCustomConstructorWithNoInterfaceObjectConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructor&lt;JSTestCustomConstructorWithNoInterfaceObject&gt; JSTestCustomConstructorWithNoInterfaceObjectConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestCustomConstructorWithNoInterfaceObjectConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestCustomConstructorWithNoInterfaceObjectConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestCustomConstructorWithNoInterfaceObjectConstructor&gt;(vm.heap)) JSTestCustomConstructorWithNoInterfaceObjectConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-protected:
-    static JSC::EncodedJSValue JSC_HOST_CALL construct(JSC::ExecState*);
-    static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&amp;);
-};
-
-JSC::EncodedJSValue JSC_HOST_CALL JSTestCustomConstructorWithNoInterfaceObjectConstructor::construct(JSC::ExecState* state)
</del><ins>+template&lt;&gt; JSC::EncodedJSValue JSC_HOST_CALL JSTestCustomConstructorWithNoInterfaceObjectConstructor::construct(JSC::ExecState* state)
</ins><span class="cx"> {
</span><span class="cx">     return constructJSTestCustomConstructorWithNoInterfaceObject(state);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestCustomConstructorWithNoInterfaceObjectConstructor::s_info = { &quot;TestCustomConstructorWithNoInterfaceObjectConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestCustomConstructorWithNoInterfaceObjectConstructor) };
-
-JSTestCustomConstructorWithNoInterfaceObjectConstructor::JSTestCustomConstructorWithNoInterfaceObjectConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestCustomConstructorWithNoInterfaceObjectConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestCustomConstructorWithNoInterfaceObjectConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestCustomConstructorWithNoInterfaceObject::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestCustomConstructorWithNoInterfaceObject&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ConstructType JSTestCustomConstructorWithNoInterfaceObjectConstructor::getConstructData(JSCell* cell, ConstructData&amp; constructData)
-{
-    UNUSED_PARAM(cell);
-    constructData.native.function = construct;
-    return ConstructTypeHost;
-}
</del><ins>+template&lt;&gt; const ClassInfo JSTestCustomConstructorWithNoInterfaceObjectConstructor::s_info = { &quot;TestCustomConstructorWithNoInterfaceObjectConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestCustomConstructorWithNoInterfaceObjectConstructor) };
</ins><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</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 (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -23,6 +23,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &quot;wtf/text/AtomicString.h&quot;
</span><span class="cx"> #include &lt;runtime/Error.h&gt;
</span><span class="cx"> #include &lt;wtf/GetPtr.h&gt;
</span><span class="lines">@@ -64,27 +65,8 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestCustomNamedGetterConstructor : public DOMConstructorObject {
-private:
-    JSTestCustomNamedGetterConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructorNotConstructable&lt;JSTestCustomNamedGetter&gt; JSTestCustomNamedGetterConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestCustomNamedGetterConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestCustomNamedGetterConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestCustomNamedGetterConstructor&gt;(vm.heap)) JSTestCustomNamedGetterConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-};
-
</del><span class="cx"> /* Hash table */
</span><span class="cx"> 
</span><span class="cx"> static const struct CompactHashIndex JSTestCustomNamedGetterTableIndex[2] = {
</span><span class="lines">@@ -99,22 +81,15 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> static const HashTable JSTestCustomNamedGetterTable = { 1, 1, true, JSTestCustomNamedGetterTableValues, JSTestCustomNamedGetterTableIndex };
</span><del>-const ClassInfo JSTestCustomNamedGetterConstructor::s_info = { &quot;TestCustomNamedGetterConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestCustomNamedGetterConstructor) };
-
-JSTestCustomNamedGetterConstructor::JSTestCustomNamedGetterConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestCustomNamedGetterConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestCustomNamedGetterConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestCustomNamedGetter::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestCustomNamedGetter&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; const ClassInfo JSTestCustomNamedGetterConstructor::s_info = { &quot;TestCustomNamedGetterConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestCustomNamedGetterConstructor) };
+
</ins><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestCustomNamedGetterPrototypeTableValues[] =
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -22,6 +22,7 @@
</span><span class="cx"> #include &quot;JSTestEventConstructor.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &quot;JSDictionary.h&quot;
</span><span class="cx"> #include &quot;URL.h&quot;
</span><span class="cx"> #include &lt;runtime/Error.h&gt;
</span><span class="lines">@@ -63,31 +64,9 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestEventConstructorConstructor : public DOMConstructorObject {
-private:
-    JSTestEventConstructorConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructor&lt;JSTestEventConstructor&gt; JSTestEventConstructorConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestEventConstructorConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestEventConstructorConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestEventConstructorConstructor&gt;(vm.heap)) JSTestEventConstructorConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-protected:
-    static JSC::EncodedJSValue JSC_HOST_CALL construct(JSC::ExecState*);
-    static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&amp;);
-};
-
-EncodedJSValue JSC_HOST_CALL JSTestEventConstructorConstructor::construct(ExecState* state)
</del><ins>+template&lt;&gt; EncodedJSValue JSC_HOST_CALL JSTestEventConstructorConstructor::construct(ExecState* state)
</ins><span class="cx"> {
</span><span class="cx">     auto* jsConstructor = jsCast&lt;JSTestEventConstructorConstructor*&gt;(state-&gt;callee());
</span><span class="cx"> 
</span><span class="lines">@@ -128,28 +107,14 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestEventConstructorConstructor::s_info = { &quot;TestEventConstructorConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestEventConstructorConstructor) };
-
-JSTestEventConstructorConstructor::JSTestEventConstructorConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestEventConstructorConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestEventConstructorConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestEventConstructor::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestEventConstructor&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(1), ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ConstructType JSTestEventConstructorConstructor::getConstructData(JSCell* cell, ConstructData&amp; constructData)
-{
-    UNUSED_PARAM(cell);
-    constructData.native.function = construct;
-    return ConstructTypeHost;
-}
</del><ins>+template&lt;&gt; const ClassInfo JSTestEventConstructorConstructor::s_info = { &quot;TestEventConstructorConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestEventConstructorConstructor) };
</ins><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</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 (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -24,6 +24,7 @@
</span><span class="cx"> #include &quot;Event.h&quot;
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &quot;JSEvent.h&quot;
</span><span class="cx"> #include &quot;JSEventListener.h&quot;
</span><span class="cx"> #include &quot;JSNode.h&quot;
</span><span class="lines">@@ -73,27 +74,8 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestEventTargetConstructor : public DOMConstructorObject {
-private:
-    JSTestEventTargetConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructorNotConstructable&lt;JSTestEventTarget&gt; JSTestEventTargetConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestEventTargetConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestEventTargetConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestEventTargetConstructor&gt;(vm.heap)) JSTestEventTargetConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-};
-
</del><span class="cx"> /* Hash table */
</span><span class="cx"> 
</span><span class="cx"> static const struct CompactHashIndex JSTestEventTargetTableIndex[2] = {
</span><span class="lines">@@ -108,22 +90,15 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> static const HashTable JSTestEventTargetTable = { 1, 1, true, JSTestEventTargetTableValues, JSTestEventTargetTableIndex };
</span><del>-const ClassInfo JSTestEventTargetConstructor::s_info = { &quot;TestEventTargetConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestEventTargetConstructor) };
-
-JSTestEventTargetConstructor::JSTestEventTargetConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestEventTargetConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestEventTargetConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestEventTarget::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestEventTarget&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; const ClassInfo JSTestEventTargetConstructor::s_info = { &quot;TestEventTargetConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestEventTargetConstructor) };
+
</ins><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestEventTargetPrototypeTableValues[] =
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -22,6 +22,7 @@
</span><span class="cx"> #include &quot;JSTestException.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &quot;URL.h&quot;
</span><span class="cx"> #include &lt;runtime/JSString.h&gt;
</span><span class="cx"> #include &lt;wtf/GetPtr.h&gt;
</span><span class="lines">@@ -60,27 +61,8 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestExceptionConstructor : public DOMConstructorObject {
-private:
-    JSTestExceptionConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructorNotConstructable&lt;JSTestException&gt; JSTestExceptionConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestExceptionConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestExceptionConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestExceptionConstructor&gt;(vm.heap)) JSTestExceptionConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-};
-
</del><span class="cx"> /* Hash table */
</span><span class="cx"> 
</span><span class="cx"> static const struct CompactHashIndex JSTestExceptionTableIndex[2] = {
</span><span class="lines">@@ -95,22 +77,15 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> static const HashTable JSTestExceptionTable = { 1, 1, true, JSTestExceptionTableValues, JSTestExceptionTableIndex };
</span><del>-const ClassInfo JSTestExceptionConstructor::s_info = { &quot;TestExceptionConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestExceptionConstructor) };
-
-JSTestExceptionConstructor::JSTestExceptionConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestExceptionConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestExceptionConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestException::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestException&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; const ClassInfo JSTestExceptionConstructor::s_info = { &quot;TestExceptionConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestExceptionConstructor) };
+
</ins><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestExceptionPrototypeTableValues[] =
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestGenerateIsReachablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGenerateIsReachable.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -22,6 +22,7 @@
</span><span class="cx"> #include &quot;JSTestGenerateIsReachable.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &lt;wtf/GetPtr.h&gt;
</span><span class="cx"> 
</span><span class="cx"> using namespace JSC;
</span><span class="lines">@@ -57,43 +58,17 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestGenerateIsReachableConstructor : public DOMConstructorObject {
-private:
-    JSTestGenerateIsReachableConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructorNotConstructable&lt;JSTestGenerateIsReachable&gt; JSTestGenerateIsReachableConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestGenerateIsReachableConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestGenerateIsReachableConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestGenerateIsReachableConstructor&gt;(vm.heap)) JSTestGenerateIsReachableConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-};
-
-const ClassInfo JSTestGenerateIsReachableConstructor::s_info = { &quot;TestGenerateIsReachableConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestGenerateIsReachableConstructor) };
-
-JSTestGenerateIsReachableConstructor::JSTestGenerateIsReachableConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestGenerateIsReachableConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestGenerateIsReachableConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestGenerateIsReachable::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestGenerateIsReachable&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; const ClassInfo JSTestGenerateIsReachableConstructor::s_info = { &quot;TestGenerateIsReachableConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestGenerateIsReachableConstructor) };
+
</ins><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestGenerateIsReachablePrototypeTableValues[] =
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -26,6 +26,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &quot;TestObj.h&quot;
</span><span class="cx"> #include &quot;TestSupplemental.h&quot;
</span><span class="cx"> #include &lt;runtime/Error.h&gt;
</span><span class="lines">@@ -143,30 +144,8 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestInterfaceConstructor : public DOMConstructorObject {
-private:
-    JSTestInterfaceConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructor&lt;JSTestInterface&gt; JSTestInterfaceConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestInterfaceConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestInterfaceConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestInterfaceConstructor&gt;(vm.heap)) JSTestInterfaceConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-protected:
-    static JSC::EncodedJSValue JSC_HOST_CALL construct(JSC::ExecState*);
-    static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&amp;);
-};
-
</del><span class="cx"> /* Hash table */
</span><span class="cx"> 
</span><span class="cx"> static const struct CompactHashIndex JSTestInterfaceTableIndex[4] = {
</span><span class="lines">@@ -262,7 +241,7 @@
</span><span class="cx"> COMPILE_ASSERT(2 == TestSupplemental::CONST_IMPL, TestInterfaceEnumCONST_IMPLIsWrongUseDoNotCheckConstants);
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-EncodedJSValue JSC_HOST_CALL JSTestInterfaceConstructor::construct(ExecState* state)
</del><ins>+template&lt;&gt; EncodedJSValue JSC_HOST_CALL JSTestInterfaceConstructor::construct(ExecState* state)
</ins><span class="cx"> {
</span><span class="cx">     auto* castedThis = jsCast&lt;JSTestInterfaceConstructor*&gt;(state-&gt;callee());
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="lines">@@ -285,27 +264,17 @@
</span><span class="cx">     return JSValue::encode(asObject(toJS(state, castedThis-&gt;globalObject(), object.get())));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestInterfaceConstructor::s_info = { &quot;TestInterfaceConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestInterfaceConstructor) };
-
-JSTestInterfaceConstructor::JSTestInterfaceConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestInterfaceConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestInterfaceConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestInterface::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestInterface&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(1), ReadOnly | DontEnum);
</span><span class="cx">     reifyStaticProperties(vm, JSTestInterfaceConstructorTableValues, *this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ConstructType JSTestInterfaceConstructor::getConstructData(JSCell* cell, ConstructData&amp; constructData)
</del><ins>+template&lt;&gt; ConstructType JSTestInterfaceConstructor::getConstructData(JSCell*, ConstructData&amp; constructData)
</ins><span class="cx"> {
</span><span class="cx"> #if ENABLE(TEST_INTERFACE)
</span><del>-    UNUSED_PARAM(cell);
</del><span class="cx">     constructData.native.function = construct;
</span><span class="cx">     return ConstructTypeHost;
</span><span class="cx"> #else
</span><span class="lines">@@ -313,6 +282,8 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; const ClassInfo JSTestInterfaceConstructor::s_info = { &quot;TestInterfaceConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestInterfaceConstructor) };
+
</ins><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestInterfacePrototypeTableValues[] =
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -22,6 +22,7 @@
</span><span class="cx"> #include &quot;JSTestJSBuiltinConstructor.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &quot;TestJSBuiltinConstructorBuiltins.h&quot;
</span><span class="cx"> #include &lt;wtf/GetPtr.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -58,60 +59,22 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestJSBuiltinConstructorConstructor : public DOMConstructorJSBuiltinObject {
-private:
-    JSTestJSBuiltinConstructorConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSBuiltinConstructor&lt;JSTestJSBuiltinConstructor&gt; JSTestJSBuiltinConstructorConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorJSBuiltinObject Base;
-    static JSTestJSBuiltinConstructorConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestJSBuiltinConstructorConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestJSBuiltinConstructorConstructor&gt;(vm.heap)) JSTestJSBuiltinConstructorConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-protected:
-    static JSC::EncodedJSValue JSC_HOST_CALL construct(JSC::ExecState*);
-    static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&amp;);
-};
-
-JSC::EncodedJSValue JSC_HOST_CALL JSTestJSBuiltinConstructorConstructor::construct(JSC::ExecState* state)
</del><ins>+template&lt;&gt; void JSTestJSBuiltinConstructorConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-    auto* castedThis = jsCast&lt;JSTestJSBuiltinConstructorConstructor*&gt;(state-&gt;callee());
-    return createJSBuiltin&lt;JSTestJSBuiltinConstructor&gt;(*state, *castedThis-&gt;initializeFunction(), *castedThis-&gt;globalObject());
-}
-
-const ClassInfo JSTestJSBuiltinConstructorConstructor::s_info = { &quot;TestJSBuiltinConstructorConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestJSBuiltinConstructorConstructor) };
-
-JSTestJSBuiltinConstructorConstructor::JSTestJSBuiltinConstructorConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
-{
-}
-
-void JSTestJSBuiltinConstructorConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestJSBuiltinConstructor::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestJSBuiltinConstructor&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><del>-    setInitializeFunction(vm, *JSC::JSFunction::createBuiltinFunction(vm, testJSBuiltinConstructorInitializeTestJSBuiltinConstructorCodeGenerator(vm), &amp;globalObject));
</del><span class="cx"> }
</span><span class="cx"> 
</span><del>-ConstructType JSTestJSBuiltinConstructorConstructor::getConstructData(JSCell* cell, ConstructData&amp; constructData)
</del><ins>+template&lt;&gt; FunctionExecutable* JSTestJSBuiltinConstructorConstructor::initializeExecutable(VM&amp; vm)
</ins><span class="cx"> {
</span><del>-    UNUSED_PARAM(cell);
-    constructData.native.function = construct;
-    return ConstructTypeHost;
</del><ins>+    return testJSBuiltinConstructorInitializeTestJSBuiltinConstructorCodeGenerator(vm);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; const ClassInfo JSTestJSBuiltinConstructorConstructor::s_info = { &quot;TestJSBuiltinConstructorConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestJSBuiltinConstructorConstructor) };
+
</ins><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestJSBuiltinConstructorPrototypeTableValues[] =
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -23,6 +23,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &quot;JSMediaQueryListListener.h&quot;
</span><span class="cx"> #include &lt;runtime/Error.h&gt;
</span><span class="cx"> #include &lt;wtf/GetPtr.h&gt;
</span><span class="lines">@@ -64,43 +65,17 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestMediaQueryListListenerConstructor : public DOMConstructorObject {
-private:
-    JSTestMediaQueryListListenerConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructorNotConstructable&lt;JSTestMediaQueryListListener&gt; JSTestMediaQueryListListenerConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestMediaQueryListListenerConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestMediaQueryListListenerConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestMediaQueryListListenerConstructor&gt;(vm.heap)) JSTestMediaQueryListListenerConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-};
-
-const ClassInfo JSTestMediaQueryListListenerConstructor::s_info = { &quot;TestMediaQueryListListenerConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestMediaQueryListListenerConstructor) };
-
-JSTestMediaQueryListListenerConstructor::JSTestMediaQueryListListenerConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestMediaQueryListListenerConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestMediaQueryListListenerConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestMediaQueryListListener::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestMediaQueryListListener&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; const ClassInfo JSTestMediaQueryListListenerConstructor::s_info = { &quot;TestMediaQueryListListenerConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestMediaQueryListListenerConstructor) };
+
</ins><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestMediaQueryListListenerPrototypeTableValues[] =
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNamedConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNamedConstructor.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -21,9 +21,9 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;JSTestNamedConstructor.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;DOMConstructorWithDocument.h&quot;
</del><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &lt;runtime/Error.h&gt;
</span><span class="cx"> #include &lt;wtf/GetPtr.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -60,69 +60,19 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestNamedConstructorConstructor : public DOMConstructorObject {
-private:
-    JSTestNamedConstructorConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructorNotConstructable&lt;JSTestNamedConstructor&gt; JSTestNamedConstructorConstructor;
+typedef JSDOMNamedConstructor&lt;JSTestNamedConstructor&gt; JSTestNamedConstructorNamedConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestNamedConstructorConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestNamedConstructorConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestNamedConstructorConstructor&gt;(vm.heap)) JSTestNamedConstructorConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-};
-
-class JSTestNamedConstructorNamedConstructor : public DOMConstructorWithDocument {
-public:
-    typedef DOMConstructorWithDocument Base;
-
-    static JSTestNamedConstructorNamedConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestNamedConstructorNamedConstructor* constructor = new (NotNull, JSC::allocateCell&lt;JSTestNamedConstructorNamedConstructor&gt;(vm.heap)) JSTestNamedConstructorNamedConstructor(structure, globalObject);
-        constructor-&gt;finishCreation(vm, globalObject);
-        return constructor;
-    }
-
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-
-    DECLARE_INFO;
-
-private:
-    JSTestNamedConstructorNamedConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    static JSC::EncodedJSValue JSC_HOST_CALL construct(JSC::ExecState*);
-    static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
-};
-
-const ClassInfo JSTestNamedConstructorConstructor::s_info = { &quot;TestNamedConstructorConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestNamedConstructorConstructor) };
-
-JSTestNamedConstructorConstructor::JSTestNamedConstructorConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestNamedConstructorConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestNamedConstructorConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestNamedConstructor::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestNamedConstructor&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-EncodedJSValue JSC_HOST_CALL JSTestNamedConstructorNamedConstructor::construct(ExecState* state)
</del><ins>+template&lt;&gt; const ClassInfo JSTestNamedConstructorConstructor::s_info = { &quot;TestNamedConstructorConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestNamedConstructorConstructor) };
+
+template&lt;&gt; EncodedJSValue JSC_HOST_CALL JSTestNamedConstructorNamedConstructor::construct(ExecState* state)
</ins><span class="cx"> {
</span><span class="cx">     auto* castedThis = jsCast&lt;JSTestNamedConstructorNamedConstructor*&gt;(state-&gt;callee());
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="lines">@@ -145,28 +95,14 @@
</span><span class="cx">     return JSValue::encode(asObject(toJS(state, castedThis-&gt;globalObject(), object.get())));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestNamedConstructorNamedConstructor::s_info = { &quot;AudioConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestNamedConstructorNamedConstructor) };
-
-JSTestNamedConstructorNamedConstructor::JSTestNamedConstructorNamedConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestNamedConstructorNamedConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestNamedConstructorNamedConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(globalObject);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestNamedConstructor::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;Audio&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ConstructType JSTestNamedConstructorNamedConstructor::getConstructData(JSCell* cell, ConstructData&amp; constructData)
-{
-    UNUSED_PARAM(cell);
-    constructData.native.function = construct;
-    return ConstructTypeHost;
-}
</del><ins>+template&lt;&gt; const ClassInfo JSTestNamedConstructorNamedConstructor::s_info = { &quot;AudioConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestNamedConstructorNamedConstructor) };
</ins><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -23,6 +23,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &quot;URL.h&quot;
</span><span class="cx"> #include &lt;runtime/Error.h&gt;
</span><span class="cx"> #include &lt;runtime/JSString.h&gt;
</span><span class="lines">@@ -63,59 +64,23 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestNodeConstructor : public DOMConstructorObject {
-private:
-    JSTestNodeConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructor&lt;JSTestNode&gt; JSTestNodeConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestNodeConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestNodeConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestNodeConstructor&gt;(vm.heap)) JSTestNodeConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-protected:
-    static JSC::EncodedJSValue JSC_HOST_CALL construct(JSC::ExecState*);
-    static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&amp;);
-};
-
-EncodedJSValue JSC_HOST_CALL JSTestNodeConstructor::construct(ExecState* state)
</del><ins>+template&lt;&gt; EncodedJSValue JSC_HOST_CALL JSTestNodeConstructor::construct(ExecState* state)
</ins><span class="cx"> {
</span><span class="cx">     auto* castedThis = jsCast&lt;JSTestNodeConstructor*&gt;(state-&gt;callee());
</span><span class="cx">     RefPtr&lt;TestNode&gt; object = TestNode::create();
</span><span class="cx">     return JSValue::encode(asObject(toJS(state, castedThis-&gt;globalObject(), object.get())));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestNodeConstructor::s_info = { &quot;TestNodeConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestNodeConstructor) };
-
-JSTestNodeConstructor::JSTestNodeConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestNodeConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestNodeConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestNode::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestNode&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ConstructType JSTestNodeConstructor::getConstructData(JSCell* cell, ConstructData&amp; constructData)
-{
-    UNUSED_PARAM(cell);
-    constructData.native.function = construct;
-    return ConstructTypeHost;
-}
</del><ins>+template&lt;&gt; const ClassInfo JSTestNodeConstructor::s_info = { &quot;TestNodeConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestNodeConstructor) };
</ins><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</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 (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -23,6 +23,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &quot;URL.h&quot;
</span><span class="cx"> #include &lt;runtime/Error.h&gt;
</span><span class="cx"> #include &lt;runtime/JSString.h&gt;
</span><span class="lines">@@ -80,43 +81,17 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestNondeterministicConstructor : public DOMConstructorObject {
-private:
-    JSTestNondeterministicConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructorNotConstructable&lt;JSTestNondeterministic&gt; JSTestNondeterministicConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestNondeterministicConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestNondeterministicConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestNondeterministicConstructor&gt;(vm.heap)) JSTestNondeterministicConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-};
-
-const ClassInfo JSTestNondeterministicConstructor::s_info = { &quot;TestNondeterministicConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestNondeterministicConstructor) };
-
-JSTestNondeterministicConstructor::JSTestNondeterministicConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestNondeterministicConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestNondeterministicConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestNondeterministic::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestNondeterministic&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; const ClassInfo JSTestNondeterministicConstructor::s_info = { &quot;TestNondeterministicConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestNondeterministicConstructor) };
+
</ins><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestNondeterministicPrototypeTableValues[] =
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #include &quot;Frame.h&quot;
</span><span class="cx"> #include &quot;HTMLNames.h&quot;
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &quot;JSDOMPromise.h&quot;
</span><span class="cx"> #include &quot;JSDOMStringList.h&quot;
</span><span class="cx"> #include &quot;JSDocument.h&quot;
</span><span class="lines">@@ -345,30 +346,8 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestObjConstructor : public DOMConstructorObject {
-private:
-    JSTestObjConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructor&lt;JSTestObj&gt; JSTestObjConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestObjConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestObjConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestObjConstructor&gt;(vm.heap)) JSTestObjConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-protected:
-    static JSC::EncodedJSValue JSC_HOST_CALL construct(JSC::ExecState*);
-    static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&amp;);
-};
-
</del><span class="cx"> /* Hash table */
</span><span class="cx"> 
</span><span class="cx"> static const struct CompactHashIndex JSTestObjTableIndex[17] = {
</span><span class="lines">@@ -468,7 +447,7 @@
</span><span class="cx"> COMPILE_ASSERT(15 == TestObj::CONST_IMPL, TestObjEnumCONST_IMPLIsWrongUseDoNotCheckConstants);
</span><span class="cx"> COMPILE_ASSERT(0 == TestObj::readonly, TestObjEnumreadonlyIsWrongUseDoNotCheckConstants);
</span><span class="cx"> 
</span><del>-EncodedJSValue JSC_HOST_CALL JSTestObjConstructor::construct(ExecState* state)
</del><ins>+template&lt;&gt; EncodedJSValue JSC_HOST_CALL JSTestObjConstructor::construct(ExecState* state)
</ins><span class="cx"> {
</span><span class="cx">     auto* castedThis = jsCast&lt;JSTestObjConstructor*&gt;(state-&gt;callee());
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 2))
</span><span class="lines">@@ -483,29 +462,15 @@
</span><span class="cx">     return JSValue::encode(asObject(toJS(state, castedThis-&gt;globalObject(), object.get())));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestObjConstructor::s_info = { &quot;TestObjectConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestObjConstructor) };
-
-JSTestObjConstructor::JSTestObjConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestObjConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestObjConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestObj::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestObject&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(2), ReadOnly | DontEnum);
</span><span class="cx">     reifyStaticProperties(vm, JSTestObjConstructorTableValues, *this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ConstructType JSTestObjConstructor::getConstructData(JSCell* cell, ConstructData&amp; constructData)
-{
-    UNUSED_PARAM(cell);
-    constructData.native.function = construct;
-    return ConstructTypeHost;
-}
</del><ins>+template&lt;&gt; const ClassInfo JSTestObjConstructor::s_info = { &quot;TestObjectConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestObjConstructor) };
</ins><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestOverloadedConstructorscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverloadedConstructors.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -24,6 +24,7 @@
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> #include &quot;JSBlob.h&quot;
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &lt;runtime/Error.h&gt;
</span><span class="cx"> #include &lt;wtf/GetPtr.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -60,30 +61,8 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestOverloadedConstructorsConstructor : public DOMConstructorObject {
-private:
-    JSTestOverloadedConstructorsConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructor&lt;JSTestOverloadedConstructors&gt; JSTestOverloadedConstructorsConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestOverloadedConstructorsConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestOverloadedConstructorsConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestOverloadedConstructorsConstructor&gt;(vm.heap)) JSTestOverloadedConstructorsConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-protected:
-    static JSC::EncodedJSValue JSC_HOST_CALL construct(JSC::ExecState*);
-    static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&amp;);
-};
-
</del><span class="cx"> static inline EncodedJSValue constructJSTestOverloadedConstructors1(ExecState* state)
</span><span class="cx"> {
</span><span class="cx">     auto* castedThis = jsCast&lt;JSTestOverloadedConstructorsConstructor*&gt;(state-&gt;callee());
</span><span class="lines">@@ -142,7 +121,7 @@
</span><span class="cx">     return JSValue::encode(asObject(toJS(state, castedThis-&gt;globalObject(), object.get())));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-EncodedJSValue JSC_HOST_CALL JSTestOverloadedConstructorsConstructor::construct(ExecState* state)
</del><ins>+template&lt;&gt; EncodedJSValue JSC_HOST_CALL JSTestOverloadedConstructorsConstructor::construct(ExecState* state)
</ins><span class="cx"> {
</span><span class="cx">     size_t argsCount = std::min&lt;size_t&gt;(1, state-&gt;argumentCount());
</span><span class="cx">     JSValue arg0(state-&gt;argument(0));
</span><span class="lines">@@ -161,28 +140,14 @@
</span><span class="cx">     return throwVMTypeError(state);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestOverloadedConstructorsConstructor::s_info = { &quot;TestOverloadedConstructorsConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestOverloadedConstructorsConstructor) };
-
-JSTestOverloadedConstructorsConstructor::JSTestOverloadedConstructorsConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestOverloadedConstructorsConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestOverloadedConstructorsConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestOverloadedConstructors::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestOverloadedConstructors&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ConstructType JSTestOverloadedConstructorsConstructor::getConstructData(JSCell* cell, ConstructData&amp; constructData)
-{
-    UNUSED_PARAM(cell);
-    constructData.native.function = construct;
-    return ConstructTypeHost;
-}
</del><ins>+template&lt;&gt; const ClassInfo JSTestOverloadedConstructorsConstructor::s_info = { &quot;TestOverloadedConstructorsConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestOverloadedConstructorsConstructor) };
</ins><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</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 (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -23,6 +23,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &quot;JSNode.h&quot;
</span><span class="cx"> #include &quot;Node.h&quot;
</span><span class="cx"> #include &quot;wtf/text/AtomicString.h&quot;
</span><span class="lines">@@ -66,27 +67,8 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestOverrideBuiltinsConstructor : public DOMConstructorObject {
-private:
-    JSTestOverrideBuiltinsConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructorNotConstructable&lt;JSTestOverrideBuiltins&gt; JSTestOverrideBuiltinsConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestOverrideBuiltinsConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestOverrideBuiltinsConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestOverrideBuiltinsConstructor&gt;(vm.heap)) JSTestOverrideBuiltinsConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-};
-
</del><span class="cx"> /* Hash table */
</span><span class="cx"> 
</span><span class="cx"> static const struct CompactHashIndex JSTestOverrideBuiltinsTableIndex[2] = {
</span><span class="lines">@@ -101,22 +83,15 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> static const HashTable JSTestOverrideBuiltinsTable = { 1, 1, true, JSTestOverrideBuiltinsTableValues, JSTestOverrideBuiltinsTableIndex };
</span><del>-const ClassInfo JSTestOverrideBuiltinsConstructor::s_info = { &quot;TestOverrideBuiltinsConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestOverrideBuiltinsConstructor) };
-
-JSTestOverrideBuiltinsConstructor::JSTestOverrideBuiltinsConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestOverrideBuiltinsConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestOverrideBuiltinsConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestOverrideBuiltins::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestOverrideBuiltins&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; const ClassInfo JSTestOverrideBuiltinsConstructor::s_info = { &quot;TestOverrideBuiltinsConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestOverrideBuiltinsConstructor) };
+
</ins><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestOverrideBuiltinsPrototypeTableValues[] =
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -25,6 +25,7 @@
</span><span class="cx"> #include &quot;JSTestSerializedScriptValueInterface.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &quot;JSMessagePort.h&quot;
</span><span class="cx"> #include &quot;MessagePort.h&quot;
</span><span class="cx"> #include &quot;SerializedScriptValue.h&quot;
</span><span class="lines">@@ -71,43 +72,17 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestSerializedScriptValueInterfaceConstructor : public DOMConstructorObject {
-private:
-    JSTestSerializedScriptValueInterfaceConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructorNotConstructable&lt;JSTestSerializedScriptValueInterface&gt; JSTestSerializedScriptValueInterfaceConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestSerializedScriptValueInterfaceConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestSerializedScriptValueInterfaceConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestSerializedScriptValueInterfaceConstructor&gt;(vm.heap)) JSTestSerializedScriptValueInterfaceConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-};
-
-const ClassInfo JSTestSerializedScriptValueInterfaceConstructor::s_info = { &quot;TestSerializedScriptValueInterfaceConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestSerializedScriptValueInterfaceConstructor) };
-
-JSTestSerializedScriptValueInterfaceConstructor::JSTestSerializedScriptValueInterfaceConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestSerializedScriptValueInterfaceConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestSerializedScriptValueInterfaceConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestSerializedScriptValueInterface::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestSerializedScriptValueInterface&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; const ClassInfo JSTestSerializedScriptValueInterfaceConstructor::s_info = { &quot;TestSerializedScriptValueInterfaceConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestSerializedScriptValueInterfaceConstructor) };
+
</ins><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSTestSerializedScriptValueInterfacePrototypeTableValues[] =
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -24,6 +24,7 @@
</span><span class="cx"> #include &quot;DOMStringList.h&quot;
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &quot;JSDOMStringList.h&quot;
</span><span class="cx"> #include &quot;JSSVGPoint.h&quot;
</span><span class="cx"> #include &quot;JSSerializedScriptValue.h&quot;
</span><span class="lines">@@ -97,30 +98,8 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSTestTypedefsConstructor : public DOMConstructorObject {
-private:
-    JSTestTypedefsConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructor&lt;JSTestTypedefs&gt; JSTestTypedefsConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSTestTypedefsConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSTestTypedefsConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSTestTypedefsConstructor&gt;(vm.heap)) JSTestTypedefsConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-protected:
-    static JSC::EncodedJSValue JSC_HOST_CALL construct(JSC::ExecState*);
-    static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&amp;);
-};
-
</del><span class="cx"> /* Hash table */
</span><span class="cx"> 
</span><span class="cx"> static const struct CompactHashIndex JSTestTypedefsTableIndex[2] = {
</span><span class="lines">@@ -142,7 +121,7 @@
</span><span class="cx">     { &quot;TestSubObj&quot;, DontDelete | ReadOnly, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestTypedefsConstructorTestSubObj), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-EncodedJSValue JSC_HOST_CALL JSTestTypedefsConstructor::construct(ExecState* state)
</del><ins>+template&lt;&gt; EncodedJSValue JSC_HOST_CALL JSTestTypedefsConstructor::construct(ExecState* state)
</ins><span class="cx"> {
</span><span class="cx">     auto* castedThis = jsCast&lt;JSTestTypedefsConstructor*&gt;(state-&gt;callee());
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 2))
</span><span class="lines">@@ -157,29 +136,15 @@
</span><span class="cx">     return JSValue::encode(asObject(toJS(state, castedThis-&gt;globalObject(), object.get())));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-const ClassInfo JSTestTypedefsConstructor::s_info = { &quot;TestTypedefsConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestTypedefsConstructor) };
-
-JSTestTypedefsConstructor::JSTestTypedefsConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSTestTypedefsConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSTestTypedefsConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSTestTypedefs::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestTypedefs&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(2), ReadOnly | DontEnum);
</span><span class="cx">     reifyStaticProperties(vm, JSTestTypedefsConstructorTableValues, *this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ConstructType JSTestTypedefsConstructor::getConstructData(JSCell* cell, ConstructData&amp; constructData)
-{
-    UNUSED_PARAM(cell);
-    constructData.native.function = construct;
-    return ConstructTypeHost;
-}
</del><ins>+template&lt;&gt; const ClassInfo JSTestTypedefsConstructor::s_info = { &quot;TestTypedefsConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestTypedefsConstructor) };
</ins><span class="cx"> 
</span><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSattributecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -22,6 +22,7 @@
</span><span class="cx"> #include &quot;JSattribute.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &quot;URL.h&quot;
</span><span class="cx"> #include &lt;runtime/JSString.h&gt;
</span><span class="cx"> #include &lt;wtf/GetPtr.h&gt;
</span><span class="lines">@@ -60,43 +61,17 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSattributeConstructor : public DOMConstructorObject {
-private:
-    JSattributeConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructorNotConstructable&lt;JSattribute&gt; JSattributeConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSattributeConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSattributeConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSattributeConstructor&gt;(vm.heap)) JSattributeConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-};
-
-const ClassInfo JSattributeConstructor::s_info = { &quot;attributeConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSattributeConstructor) };
-
-JSattributeConstructor::JSattributeConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSattributeConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSattributeConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSattribute::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;attribute&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; const ClassInfo JSattributeConstructor::s_info = { &quot;attributeConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSattributeConstructor) };
+
</ins><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSattributePrototypeTableValues[] =
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSreadonlycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp (191175 => 191176)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp        2015-10-16 14:43:02 UTC (rev 191175)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp        2015-10-16 15:56:12 UTC (rev 191176)
</span><span class="lines">@@ -22,6 +22,7 @@
</span><span class="cx"> #include &quot;JSreadonly.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><ins>+#include &quot;JSDOMConstructor.h&quot;
</ins><span class="cx"> #include &lt;wtf/GetPtr.h&gt;
</span><span class="cx"> 
</span><span class="cx"> using namespace JSC;
</span><span class="lines">@@ -57,43 +58,17 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;);
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class JSreadonlyConstructor : public DOMConstructorObject {
-private:
-    JSreadonlyConstructor(JSC::Structure*, JSDOMGlobalObject&amp;);
-    void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</del><ins>+typedef JSDOMConstructorNotConstructable&lt;JSreadonly&gt; JSreadonlyConstructor;
</ins><span class="cx"> 
</span><del>-public:
-    typedef DOMConstructorObject Base;
-    static JSreadonlyConstructor* create(JSC::VM&amp; vm, JSC::Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    {
-        JSreadonlyConstructor* ptr = new (NotNull, JSC::allocateCell&lt;JSreadonlyConstructor&gt;(vm.heap)) JSreadonlyConstructor(structure, globalObject);
-        ptr-&gt;finishCreation(vm, globalObject);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject&amp; globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, &amp;globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-};
-
-const ClassInfo JSreadonlyConstructor::s_info = { &quot;readonlyConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSreadonlyConstructor) };
-
-JSreadonlyConstructor::JSreadonlyConstructor(Structure* structure, JSDOMGlobalObject&amp; globalObject)
-    : Base(structure, globalObject)
</del><ins>+template&lt;&gt; void JSreadonlyConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
</ins><span class="cx"> {
</span><del>-}
-
-void JSreadonlyConstructor::finishCreation(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    Base::finishCreation(vm);
-    ASSERT(inherits(info()));
</del><span class="cx">     putDirect(vm, vm.propertyNames-&gt;prototype, JSreadonly::getPrototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;readonly&quot;))), ReadOnly | DontEnum);
</span><span class="cx">     putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; const ClassInfo JSreadonlyConstructor::s_info = { &quot;readonlyConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSreadonlyConstructor) };
+
</ins><span class="cx"> /* Hash table for prototype */
</span><span class="cx"> 
</span><span class="cx"> static const HashTableValue JSreadonlyPrototypeTableValues[] =
</span></span></pre>
</div>
</div>

</body>
</html>