<!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>[197642] 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/197642">197642</a></dd>
<dt>Author</dt> <dd>youenn.fablet@crf.canon.fr</dd>
<dt>Date</dt> <dd>2016-03-06 12:44:49 -0800 (Sun, 06 Mar 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Enable DOM class create functions to take parameters in case of JSBuiltinConstructor
https://bugs.webkit.org/show_bug.cgi?id=155022

Reviewed by Darin Adler.

Introducing JSDOMObjectInspector to check whether a given JS class is built-in (no DOM class).
If that is not the case, the JS class wraps a DOM class.
The inspector detects whether the DOM class create static method takes no parameter or some parameters.
This is used in JSDOMConstructor.h to generate correctly the createJSObject functions needed by JSBuiltinConstructor.

Updated binding generator to not generate anymore createJSObject as it is handled directly in JSDOMConstructor.h.

Covered by existing tests.

* bindings/js/JSDOMConstructor.h:
(WebCore::JSBuiltinConstructor&lt;JSClass&gt;::callConstructor):
(WebCore::createJSObject):
(WebCore::JSBuiltinConstructor&lt;JSClass&gt;::construct):
* bindings/js/JSDOMWrapper.h:
* bindings/js/JSKeyValueIterator.h: Taking benefit of JSClass::DOMWrapper type declaration.
* bindings/js/JSReadableStreamPrivateConstructors.cpp:
(WebCore::JSBuiltinReadableStreamReaderPrivateConstructor::initializeExecutable): Deleted.
(WebCore::JSBuiltinReadableStreamControllerPrivateConstructor::initializeExecutable): Deleted.
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateConstructorDefinition): Deleted.
* bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
(WebCore::JSTestClassWithJSBuiltinConstructorConstructor::prototypeForStructure): 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="#trunkSourceWebCorebindingsjsJSDOMWrapperh">trunk/Source/WebCore/bindings/js/JSDOMWrapper.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSKeyValueIteratorh">trunk/Source/WebCore/bindings/js/JSKeyValueIterator.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="#trunkSourceWebCorebindingsscriptstestJSJSTestClassWithJSBuiltinConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (197641 => 197642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-03-06 20:11:09 UTC (rev 197641)
+++ trunk/Source/WebCore/ChangeLog        2016-03-06 20:44:49 UTC (rev 197642)
</span><span class="lines">@@ -1,3 +1,33 @@
</span><ins>+2016-03-06  Youenn Fablet  &lt;youenn.fablet@crf.canon.fr&gt;
+
+        Enable DOM class create functions to take parameters in case of JSBuiltinConstructor
+        https://bugs.webkit.org/show_bug.cgi?id=155022
+
+        Reviewed by Darin Adler.
+
+        Introducing JSDOMObjectInspector to check whether a given JS class is built-in (no DOM class).
+        If that is not the case, the JS class wraps a DOM class.
+        The inspector detects whether the DOM class create static method takes no parameter or some parameters.
+        This is used in JSDOMConstructor.h to generate correctly the createJSObject functions needed by JSBuiltinConstructor.
+
+        Updated binding generator to not generate anymore createJSObject as it is handled directly in JSDOMConstructor.h.
+
+        Covered by existing tests.
+
+        * bindings/js/JSDOMConstructor.h:
+        (WebCore::JSBuiltinConstructor&lt;JSClass&gt;::callConstructor):
+        (WebCore::createJSObject):
+        (WebCore::JSBuiltinConstructor&lt;JSClass&gt;::construct):
+        * bindings/js/JSDOMWrapper.h:
+        * bindings/js/JSKeyValueIterator.h: Taking benefit of JSClass::DOMWrapper type declaration.
+        * bindings/js/JSReadableStreamPrivateConstructors.cpp:
+        (WebCore::JSBuiltinReadableStreamReaderPrivateConstructor::initializeExecutable): Deleted.
+        (WebCore::JSBuiltinReadableStreamControllerPrivateConstructor::initializeExecutable): Deleted.
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateConstructorDefinition): Deleted.
+        * bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp:
+        (WebCore::JSTestClassWithJSBuiltinConstructorConstructor::prototypeForStructure): Deleted.
+
</ins><span class="cx"> 2016-03-06  Antti Koivisto  &lt;antti@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         RenderTextControlSingleLine shouldn't mutate placeholder element inline style
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMConstructor.h (197641 => 197642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMConstructor.h        2016-03-06 20:11:09 UTC (rev 197641)
+++ trunk/Source/WebCore/bindings/js/JSDOMConstructor.h        2016-03-06 20:44:49 UTC (rev 197642)
</span><span class="lines">@@ -104,7 +104,7 @@
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename JSClass&gt; class JSBuiltinConstructor : public DOMConstructorJSBuiltinObject {
</span><span class="cx"> public:
</span><del>-    typedef DOMConstructorJSBuiltinObject Base;
</del><ins>+    using Base = DOMConstructorJSBuiltinObject;
</ins><span class="cx"> 
</span><span class="cx">     static JSBuiltinConstructor* create(JSC::VM&amp;, JSC::Structure*, JSDOMGlobalObject&amp;);
</span><span class="cx">     static JSC::Structure* createStructure(JSC::VM&amp;, JSC::JSGlobalObject&amp;, JSC::JSValue prototype);
</span><span class="lines">@@ -119,8 +119,10 @@
</span><span class="cx">     void finishCreation(JSC::VM&amp;, JSDOMGlobalObject&amp;);
</span><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><del>-    JSC::JSObject* createJSObject();
</del><span class="cx"> 
</span><ins>+    JSC::EncodedJSValue callConstructor(JSC::ExecState&amp;, JSC::JSObject&amp;);
+    JSC::EncodedJSValue callConstructor(JSC::ExecState&amp;, JSC::JSObject*);
+
</ins><span class="cx">     // Usually defined for each specialization class.
</span><span class="cx">     void initializeProperties(JSC::VM&amp;, JSDOMGlobalObject&amp;) { }
</span><span class="cx">     // Must be defined for each specialization class.
</span><span class="lines">@@ -216,19 +218,50 @@
</span><span class="cx">     initializeProperties(vm, globalObject);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename JSClass&gt; inline JSC::EncodedJSValue JSC_HOST_CALL JSBuiltinConstructor&lt;JSClass&gt;::construct(JSC::ExecState* state)
</del><ins>+template&lt;typename JSClass&gt; inline JSC::EncodedJSValue JSBuiltinConstructor&lt;JSClass&gt;::callConstructor(JSC::ExecState&amp; state, JSC::JSObject&amp; object)
</ins><span class="cx"> {
</span><del>-    auto* castedThis = JSC::jsCast&lt;JSBuiltinConstructor*&gt;(state-&gt;callee());
-    auto* object = castedThis-&gt;createJSObject();
-    callFunctionWithCurrentArguments(*state, *object, *castedThis-&gt;initializeFunction());
-    return JSC::JSValue::encode(object);
</del><ins>+    callFunctionWithCurrentArguments(state, object, *initializeFunction());
+    return JSC::JSValue::encode(&amp;object);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename JSClass&gt; inline JSC::JSObject* JSBuiltinConstructor&lt;JSClass&gt;::createJSObject()
</del><ins>+template&lt;typename JSClass&gt; inline JSC::EncodedJSValue JSBuiltinConstructor&lt;JSClass&gt;::callConstructor(JSC::ExecState&amp; state, JSC::JSObject* object)
</ins><span class="cx"> {
</span><del>-    return JSClass::create(getDOMStructure&lt;JSClass&gt;(globalObject()-&gt;vm(), *globalObject()), globalObject());
</del><ins>+    if (!object)
+        return throwConstructorDocumentUnavailableError(state, info()-&gt;className);
+    return callConstructor(state, *object);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;typename JSClass&gt; inline
+typename std::enable_if&lt;JSDOMObjectInspector&lt;JSClass&gt;::isSimpleWrapper, JSC::JSObject&amp;&gt;::type createJSObject(JSBuiltinConstructor&lt;JSClass&gt;&amp; constructor)
+{
+    auto&amp; globalObject = *constructor.globalObject();
+    return *JSClass::create(getDOMStructure&lt;JSClass&gt;(globalObject.vm(), globalObject), &amp;globalObject, JSClass::DOMWrapped::create());
+}
+
+template&lt;typename JSClass&gt; inline
+typename std::enable_if&lt;JSDOMObjectInspector&lt;JSClass&gt;::isBuiltin, JSC::JSObject&amp;&gt;::type createJSObject(JSBuiltinConstructor&lt;JSClass&gt;&amp; constructor)
+{
+    auto&amp; globalObject = *constructor.globalObject();
+    return *JSClass::create(getDOMStructure&lt;JSClass&gt;(globalObject.vm(), globalObject), &amp;globalObject);
+}
+
+template&lt;typename JSClass&gt; inline
+typename std::enable_if&lt;JSDOMObjectInspector&lt;JSClass&gt;::isComplexWrapper, JSC::JSObject*&gt;::type createJSObject(JSBuiltinConstructor&lt;JSClass&gt;&amp; constructor)
+{
+    ScriptExecutionContext* context = constructor.scriptExecutionContext();
+    if (!context)
+        return nullptr;
+    auto&amp; globalObject = *constructor.globalObject();
+    return JSClass::create(getDOMStructure&lt;JSClass&gt;(globalObject.vm(), globalObject), &amp;globalObject, JSClass::DOMWrapped::create(*context));
+}
+
+template&lt;typename JSClass&gt; inline JSC::EncodedJSValue JSC_HOST_CALL JSBuiltinConstructor&lt;JSClass&gt;::construct(JSC::ExecState* state)
+{
+    ASSERT(state);
+    auto* castedThis = JSC::jsCast&lt;JSBuiltinConstructor*&gt;(state-&gt;callee());
+    return castedThis-&gt;callConstructor(*state, createJSObject(*castedThis));
+}
+
</ins><span class="cx"> template&lt;typename JSClass&gt; inline JSC::ConstructType JSBuiltinConstructor&lt;JSClass&gt;::getConstructData(JSC::JSCell*, JSC::ConstructData&amp; constructData)
</span><span class="cx"> {
</span><span class="cx">     constructData.native.function = construct;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMWrapperh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMWrapper.h (197641 => 197642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMWrapper.h        2016-03-06 20:11:09 UTC (rev 197641)
+++ trunk/Source/WebCore/bindings/js/JSDOMWrapper.h        2016-03-06 20:44:49 UTC (rev 197642)
</span><span class="lines">@@ -36,6 +36,7 @@
</span><span class="cx"> class JSDOMObject : public JSC::JSDestructibleObject {
</span><span class="cx"> public:
</span><span class="cx">     typedef JSC::JSDestructibleObject Base;
</span><ins>+    static constexpr bool isDOMWrapper = false;
</ins><span class="cx"> 
</span><span class="cx">     JSDOMGlobalObject* globalObject() const { return JSC::jsCast&lt;JSDOMGlobalObject*&gt;(JSC::JSNonFinalObject::globalObject()); }
</span><span class="cx">     ScriptExecutionContext* scriptExecutionContext() const { return globalObject()-&gt;scriptExecutionContext(); }
</span><span class="lines">@@ -51,6 +52,8 @@
</span><span class="cx"> template&lt;typename ImplementationClass&gt; class JSDOMWrapper : public JSDOMObject {
</span><span class="cx"> public:
</span><span class="cx">     typedef JSDOMObject Base;
</span><ins>+    typedef ImplementationClass DOMWrapped;
+    static constexpr bool isDOMWrapper = true;
</ins><span class="cx"> 
</span><span class="cx">     ImplementationClass&amp; wrapped() const { return const_cast&lt;ImplementationClass&amp;&gt;(m_wrapped.get()); }
</span><span class="cx"> 
</span><span class="lines">@@ -63,6 +66,26 @@
</span><span class="cx">     Ref&lt;ImplementationClass&gt; m_wrapped;
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+template&lt;typename JSClass, typename Enable = void&gt;
+struct JSDOMObjectInspector {
+public:
+    static constexpr bool isSimpleWrapper = false;
+    static constexpr bool isComplexWrapper = false;
+    static constexpr bool isBuiltin = true;
+};
+
+template&lt;typename JSClass&gt;
+struct JSDOMObjectInspector&lt;JSClass, typename std::enable_if&lt;JSClass::isDOMWrapper&gt;::type&gt; {
+private:
+    template&lt;typename T&gt; static constexpr auto test(int) -&gt; decltype(T::create(), bool()) { return true; }
+    template&lt;typename T&gt; static constexpr bool test(...) { return false; }
+
+public:
+    static constexpr bool isSimpleWrapper = test&lt;typename JSClass::DOMWrapped&gt;(0);
+    static constexpr bool isComplexWrapper = !isSimpleWrapper;
+    static constexpr bool isBuiltin = false;
+};
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // JSDOMWrapper_h
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSKeyValueIteratorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSKeyValueIterator.h (197641 => 197642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSKeyValueIterator.h        2016-03-06 20:11:09 UTC (rev 197641)
+++ trunk/Source/WebCore/bindings/js/JSKeyValueIterator.h        2016-03-06 20:44:49 UTC (rev 197642)
</span><span class="lines">@@ -35,8 +35,8 @@
</span><span class="cx"> template&lt;typename JSWrapper&gt;
</span><span class="cx"> class JSKeyValueIteratorPrototype : public JSC::JSNonFinalObject {
</span><span class="cx"> public:
</span><del>-    using DOMWrapped = typename std::remove_reference&lt;decltype(std::declval&lt;JSWrapper&gt;().wrapped())&gt;::type;
</del><span class="cx">     using Base = JSC::JSNonFinalObject;
</span><ins>+    using DOMWrapped = typename JSWrapper::DOMWrapped;
</ins><span class="cx"> 
</span><span class="cx">     static JSKeyValueIteratorPrototype* create(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure)
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSReadableStreamPrivateConstructorscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSReadableStreamPrivateConstructors.cpp (197641 => 197642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSReadableStreamPrivateConstructors.cpp        2016-03-06 20:11:09 UTC (rev 197641)
+++ trunk/Source/WebCore/bindings/js/JSReadableStreamPrivateConstructors.cpp        2016-03-06 20:44:49 UTC (rev 197642)
</span><span class="lines">@@ -63,16 +63,6 @@
</span><span class="cx"> template&lt;&gt; const ClassInfo JSBuiltinReadableStreamReaderPrivateConstructor::s_info = { &quot;ReadableStreamReaderPrivateConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSBuiltinReadableStreamReaderPrivateConstructor) };
</span><span class="cx"> template&lt;&gt; const ClassInfo JSBuiltinReadableStreamControllerPrivateConstructor::s_info = { &quot;ReadableStreamControllerPrivateConstructor&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSBuiltinReadableStreamControllerPrivateConstructor) };
</span><span class="cx"> 
</span><del>-template&lt;&gt; JSObject* JSBuiltinReadableStreamReaderPrivateConstructor::createJSObject()
-{
-    return JSReadableStreamReader::create(getDOMStructure&lt;JSReadableStreamReader&gt;(globalObject()-&gt;vm(), *globalObject()), globalObject());
-}
-
-template&lt;&gt; JSObject* JSBuiltinReadableStreamControllerPrivateConstructor::createJSObject()
-{
-    return JSReadableStreamController::create(getDOMStructure&lt;JSReadableStreamController&gt;(globalObject()-&gt;vm(), *globalObject()), globalObject());
-}
-
</del><span class="cx"> template&lt;&gt; FunctionExecutable* JSBuiltinReadableStreamReaderPrivateConstructor::initializeExecutable(JSC::VM&amp; vm)
</span><span class="cx"> {
</span><span class="cx">     return readableStreamInternalsPrivateInitializeReadableStreamReaderCodeGenerator(vm);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (197641 => 197642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-03-06 20:11:09 UTC (rev 197641)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-03-06 20:44:49 UTC (rev 197642)
</span><span class="lines">@@ -4788,18 +4788,7 @@
</span><span class="cx">     my $generatingNamedConstructor = shift;
</span><span class="cx">     my $function = shift;
</span><span class="cx"> 
</span><del>-
</del><span class="cx">     if (IsJSBuiltinConstructor($interface)) {
</span><del>-        if ($interface-&gt;extendedAttributes-&gt;{&quot;JSBuiltinConstructor&quot;}) {
-            # FIXME: Add support for ConstructorCallWith
-            push(@$outputArray, &lt;&lt;END);
-template&lt;&gt; JSC::JSObject* ${className}Constructor::createJSObject()
-{
-    return ${className}::create(getDOMStructure&lt;${className}&gt;(globalObject()-&gt;vm(), *globalObject()), globalObject(), ${interfaceName}::create());
-}
-
-END
-        }
</del><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestClassWithJSBuiltinConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp (197641 => 197642)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp        2016-03-06 20:11:09 UTC (rev 197641)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestClassWithJSBuiltinConstructor.cpp        2016-03-06 20:44:49 UTC (rev 197642)
</span><span class="lines">@@ -63,11 +63,6 @@
</span><span class="cx"> 
</span><span class="cx"> typedef JSBuiltinConstructor&lt;JSTestClassWithJSBuiltinConstructor&gt; JSTestClassWithJSBuiltinConstructorConstructor;
</span><span class="cx"> 
</span><del>-template&lt;&gt; JSC::JSObject* JSTestClassWithJSBuiltinConstructorConstructor::createJSObject()
-{
-    return JSTestClassWithJSBuiltinConstructor::create(getDOMStructure&lt;JSTestClassWithJSBuiltinConstructor&gt;(globalObject()-&gt;vm(), *globalObject()), globalObject(), TestClassWithJSBuiltinConstructor::create());
-}
-
</del><span class="cx"> template&lt;&gt; JSValue JSTestClassWithJSBuiltinConstructorConstructor::prototypeForStructure(JSC::VM&amp; vm, const JSDOMGlobalObject&amp; globalObject)
</span><span class="cx"> {
</span><span class="cx">     UNUSED_PARAM(vm);
</span></span></pre>
</div>
</div>

</body>
</html>