<!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>[207770] 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/207770">207770</a></dd>
<dt>Author</dt> <dd>zandobersek@gmail.com</dd>
<dt>Date</dt> <dd>2016-10-24 11:29:36 -0700 (Mon, 24 Oct 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[CodeGenerator] Only allow a single interface or standalone dictionary per WebIDL file
https://bugs.webkit.org/show_bug.cgi?id=163889

Reviewed by Chris Dumez.

Assert that there's only one interface or standalone dictionary
per WebIDL input file, and exit from the generator otherwise.

This avoids potential linking issues where multiple enumeration
and dictionary bindings code can be generated if the source
WebIDL for them is specified in a file that contains multiple
interfaces or standalone dictionaries.

Additionally, the generator now also exits if it fails to
generate code for any interface of standalone dictionary. This
should avoid processing WebIDL files that are empty in
substance.

TestException.idl and TestInterface.idl files have their second
interfaces removed. In place of those a new testing IDL file is
added, TestInterfaceLeadingUnderscore.idl. Like the two removed
interfaces, it tests that the leading underscode in the
identifier is removed by the generator.

* bindings/scripts/CodeGenerator.pm:
(ProcessDocument):
* bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp: Added.
(WebCore::JSTestInterfaceLeadingUnderscorePrototype::create):
(WebCore::JSTestInterfaceLeadingUnderscorePrototype::createStructure):
(WebCore::JSTestInterfaceLeadingUnderscorePrototype::JSTestInterfaceLeadingUnderscorePrototype):
(WebCore::JSTestInterfaceLeadingUnderscoreConstructor::prototypeForStructure):
(WebCore::JSTestInterfaceLeadingUnderscoreConstructor::initializeProperties):
(WebCore::JSTestInterfaceLeadingUnderscorePrototype::finishCreation):
(WebCore::JSTestInterfaceLeadingUnderscore::JSTestInterfaceLeadingUnderscore):
(WebCore::JSTestInterfaceLeadingUnderscore::createPrototype):
(WebCore::JSTestInterfaceLeadingUnderscore::prototype):
(WebCore::JSTestInterfaceLeadingUnderscore::destroy):
(WebCore::BindingCaller&lt;JSTestInterfaceLeadingUnderscore&gt;::castForAttribute):
(WebCore::jsTestInterfaceLeadingUnderscoreReadonly):
(WebCore::jsTestInterfaceLeadingUnderscoreReadonlyGetter):
(WebCore::jsTestInterfaceLeadingUnderscoreConstructor):
(WebCore::setJSTestInterfaceLeadingUnderscoreConstructor):
(WebCore::JSTestInterfaceLeadingUnderscore::getConstructor):
(WebCore::JSTestInterfaceLeadingUnderscoreOwner::isReachableFromOpaqueRoots):
(WebCore::JSTestInterfaceLeadingUnderscoreOwner::finalize):
(WebCore::toJSNewlyCreated):
(WebCore::toJS):
(WebCore::JSTestInterfaceLeadingUnderscore::toWrapped):
* bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.h: Renamed from Source/WebCore/bindings/scripts/test/JS/JSreadonly.h.
(WebCore::JSTestInterfaceLeadingUnderscore::create):
(WebCore::JSTestInterfaceLeadingUnderscore::createStructure):
(WebCore::JSTestInterfaceLeadingUnderscore::finishCreation):
(WebCore::wrapperOwner):
(WebCore::wrapperKey):
(WebCore::toJS):
(WebCore::toJSNewlyCreated):
* bindings/scripts/test/JS/JSattribute.cpp: Removed.
* bindings/scripts/test/JS/JSattribute.h: Removed.
* bindings/scripts/test/JS/JSreadonly.cpp: Removed.
* bindings/scripts/test/TestException.idl:
* bindings/scripts/test/TestInterface.idl:
* bindings/scripts/test/TestInterfaceLeadingUnderscore.idl: Copied from Source/WebCore/bindings/scripts/test/TestException.idl.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorpm">trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestTestExceptionidl">trunk/Source/WebCore/bindings/scripts/test/TestException.idl</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestTestInterfaceidl">trunk/Source/WebCore/bindings/scripts/test/TestInterface.idl</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestInterfaceLeadingUnderscorecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestInterfaceLeadingUnderscoreh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestTestInterfaceLeadingUnderscoreidl">trunk/Source/WebCore/bindings/scripts/test/TestInterfaceLeadingUnderscore.idl</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSattributecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSattributeh">trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSreadonlycpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSreadonlyh">trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (207769 => 207770)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-10-24 18:25:40 UTC (rev 207769)
+++ trunk/Source/WebCore/ChangeLog        2016-10-24 18:29:36 UTC (rev 207770)
</span><span class="lines">@@ -1,3 +1,68 @@
</span><ins>+2016-10-24  Zan Dobersek  &lt;zdobersek@igalia.com&gt;
+
+        [CodeGenerator] Only allow a single interface or standalone dictionary per WebIDL file
+        https://bugs.webkit.org/show_bug.cgi?id=163889
+
+        Reviewed by Chris Dumez.
+
+        Assert that there's only one interface or standalone dictionary
+        per WebIDL input file, and exit from the generator otherwise.
+
+        This avoids potential linking issues where multiple enumeration
+        and dictionary bindings code can be generated if the source
+        WebIDL for them is specified in a file that contains multiple
+        interfaces or standalone dictionaries.
+
+        Additionally, the generator now also exits if it fails to
+        generate code for any interface of standalone dictionary. This
+        should avoid processing WebIDL files that are empty in
+        substance.
+
+        TestException.idl and TestInterface.idl files have their second
+        interfaces removed. In place of those a new testing IDL file is
+        added, TestInterfaceLeadingUnderscore.idl. Like the two removed
+        interfaces, it tests that the leading underscode in the
+        identifier is removed by the generator.
+
+        * bindings/scripts/CodeGenerator.pm:
+        (ProcessDocument):
+        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp: Added.
+        (WebCore::JSTestInterfaceLeadingUnderscorePrototype::create):
+        (WebCore::JSTestInterfaceLeadingUnderscorePrototype::createStructure):
+        (WebCore::JSTestInterfaceLeadingUnderscorePrototype::JSTestInterfaceLeadingUnderscorePrototype):
+        (WebCore::JSTestInterfaceLeadingUnderscoreConstructor::prototypeForStructure):
+        (WebCore::JSTestInterfaceLeadingUnderscoreConstructor::initializeProperties):
+        (WebCore::JSTestInterfaceLeadingUnderscorePrototype::finishCreation):
+        (WebCore::JSTestInterfaceLeadingUnderscore::JSTestInterfaceLeadingUnderscore):
+        (WebCore::JSTestInterfaceLeadingUnderscore::createPrototype):
+        (WebCore::JSTestInterfaceLeadingUnderscore::prototype):
+        (WebCore::JSTestInterfaceLeadingUnderscore::destroy):
+        (WebCore::BindingCaller&lt;JSTestInterfaceLeadingUnderscore&gt;::castForAttribute):
+        (WebCore::jsTestInterfaceLeadingUnderscoreReadonly):
+        (WebCore::jsTestInterfaceLeadingUnderscoreReadonlyGetter):
+        (WebCore::jsTestInterfaceLeadingUnderscoreConstructor):
+        (WebCore::setJSTestInterfaceLeadingUnderscoreConstructor):
+        (WebCore::JSTestInterfaceLeadingUnderscore::getConstructor):
+        (WebCore::JSTestInterfaceLeadingUnderscoreOwner::isReachableFromOpaqueRoots):
+        (WebCore::JSTestInterfaceLeadingUnderscoreOwner::finalize):
+        (WebCore::toJSNewlyCreated):
+        (WebCore::toJS):
+        (WebCore::JSTestInterfaceLeadingUnderscore::toWrapped):
+        * bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.h: Renamed from Source/WebCore/bindings/scripts/test/JS/JSreadonly.h.
+        (WebCore::JSTestInterfaceLeadingUnderscore::create):
+        (WebCore::JSTestInterfaceLeadingUnderscore::createStructure):
+        (WebCore::JSTestInterfaceLeadingUnderscore::finishCreation):
+        (WebCore::wrapperOwner):
+        (WebCore::wrapperKey):
+        (WebCore::toJS):
+        (WebCore::toJSNewlyCreated):
+        * bindings/scripts/test/JS/JSattribute.cpp: Removed.
+        * bindings/scripts/test/JS/JSattribute.h: Removed.
+        * bindings/scripts/test/JS/JSreadonly.cpp: Removed.
+        * bindings/scripts/test/TestException.idl:
+        * bindings/scripts/test/TestInterface.idl:
+        * bindings/scripts/test/TestInterfaceLeadingUnderscore.idl: Copied from Source/WebCore/bindings/scripts/test/TestException.idl.
+
</ins><span class="cx"> 2016-10-21  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         URL::port should return Optional&lt;uint16_t&gt;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm (207769 => 207770)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm        2016-10-24 18:25:40 UTC (rev 207769)
+++ trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm        2016-10-24 18:29:36 UTC (rev 207770)
</span><span class="lines">@@ -205,21 +205,28 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     my $interfaces = $useDocument-&gt;interfaces;
</span><del>-    foreach my $interface (@$interfaces) {
</del><ins>+    if (@$interfaces) {
+        die &quot;Multiple interfaces per document are not supported&quot; if @$interfaces &gt; 1;
+
+        my $interface = @$interfaces[0];
</ins><span class="cx">         print &quot;Generating $useGenerator bindings code for IDL interface \&quot;&quot; . $interface-&gt;name . &quot;\&quot;...\n&quot; if $verbose;
</span><del>-        # FIXME: Repeating each enumeration and dictionaries for every interface would not work if we actually were using
-        # multiple interfaces per file, but we aren't, so this is fine for now.
</del><span class="cx">         $codeGenerator-&gt;GenerateInterface($interface, $defines, $useDocument-&gt;enumerations, $useDocument-&gt;dictionaries);
</span><span class="cx">         $codeGenerator-&gt;WriteData($interface, $useOutputDir, $useOutputHeadersDir);
</span><ins>+        return;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    # It is possible to have dictionaries in an IDL file without any interface.
-    unless (@$interfaces) {
-        foreach my $dictionary (@{$useDocument-&gt;dictionaries}) {
-            $codeGenerator-&gt;GenerateDictionary($dictionary, $useDocument-&gt;enumerations);
-            $codeGenerator-&gt;WriteData($dictionary, $useOutputDir, $useOutputHeadersDir);
-        }
</del><ins>+    my $dictionaries = $useDocument-&gt;dictionaries;
+    if (@$dictionaries) {
+        die &quot;Multiple standalone dictionaries per document are not supported&quot; if @$dictionaries &gt; 1;
+
+        my $dictionary = @$dictionaries[0];
+        print &quot;Generating $useGenerator bindings code for IDL dictionary \&quot;&quot; . $dictionary-&gt;name . &quot;\&quot;...\n&quot; if $verbose;
+        $codeGenerator-&gt;GenerateDictionary($dictionary, $useDocument-&gt;enumerations);
+        $codeGenerator-&gt;WriteData($dictionary, $useOutputDir, $useOutputHeadersDir);
+        return;
</ins><span class="cx">     }
</span><ins>+
+    die &quot;Processing document &quot; . $useDocument-&gt;fileName . &quot; did not generate anything&quot;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> sub FileNamePrefix
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfaceLeadingUnderscorecpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp (0 => 207770)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.cpp        2016-10-24 18:29:36 UTC (rev 207770)
</span><span class="lines">@@ -0,0 +1,209 @@
</span><ins>+/*
+    This file is part of the WebKit open source project.
+    This file has been generated by generate-bindings.pl. DO NOT MODIFY!
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#include &quot;config.h&quot;
+#include &quot;JSTestInterfaceLeadingUnderscore.h&quot;
+
+#include &quot;JSDOMBinding.h&quot;
+#include &quot;JSDOMConstructor.h&quot;
+#include &quot;JSDOMConvert.h&quot;
+#include &lt;runtime/FunctionPrototype.h&gt;
+#include &lt;wtf/GetPtr.h&gt;
+
+using namespace JSC;
+
+namespace WebCore {
+
+// Attributes
+
+JSC::EncodedJSValue jsTestInterfaceLeadingUnderscoreReadonly(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+JSC::EncodedJSValue jsTestInterfaceLeadingUnderscoreConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+bool setJSTestInterfaceLeadingUnderscoreConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
+
+class JSTestInterfaceLeadingUnderscorePrototype : public JSC::JSNonFinalObject {
+public:
+    using Base = JSC::JSNonFinalObject;
+    static JSTestInterfaceLeadingUnderscorePrototype* create(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure)
+    {
+        JSTestInterfaceLeadingUnderscorePrototype* ptr = new (NotNull, JSC::allocateCell&lt;JSTestInterfaceLeadingUnderscorePrototype&gt;(vm.heap)) JSTestInterfaceLeadingUnderscorePrototype(vm, globalObject, structure);
+        ptr-&gt;finishCreation(vm);
+        return ptr;
+    }
+
+    DECLARE_INFO;
+    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
+    {
+        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
+    }
+
+private:
+    JSTestInterfaceLeadingUnderscorePrototype(JSC::VM&amp; vm, JSC::JSGlobalObject*, JSC::Structure* structure)
+        : JSC::JSNonFinalObject(vm, structure)
+    {
+    }
+
+    void finishCreation(JSC::VM&amp;);
+};
+
+using JSTestInterfaceLeadingUnderscoreConstructor = JSDOMConstructorNotConstructable&lt;JSTestInterfaceLeadingUnderscore&gt;;
+
+template&lt;&gt; JSValue JSTestInterfaceLeadingUnderscoreConstructor::prototypeForStructure(JSC::VM&amp; vm, const JSDOMGlobalObject&amp; globalObject)
+{
+    UNUSED_PARAM(vm);
+    return globalObject.functionPrototype();
+}
+
+template&lt;&gt; void JSTestInterfaceLeadingUnderscoreConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
+{
+    putDirect(vm, vm.propertyNames-&gt;prototype, JSTestInterfaceLeadingUnderscore::prototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
+    putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestInterfaceLeadingUnderscore&quot;))), ReadOnly | DontEnum);
+    putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
+}
+
+template&lt;&gt; const ClassInfo JSTestInterfaceLeadingUnderscoreConstructor::s_info = { &quot;TestInterfaceLeadingUnderscore&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestInterfaceLeadingUnderscoreConstructor) };
+
+/* Hash table for prototype */
+
+static const HashTableValue JSTestInterfaceLeadingUnderscorePrototypeTableValues[] =
+{
+    { &quot;constructor&quot;, DontEnum, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceLeadingUnderscoreConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestInterfaceLeadingUnderscoreConstructor) } },
+    { &quot;readonly&quot;, ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestInterfaceLeadingUnderscoreReadonly), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) } },
+};
+
+const ClassInfo JSTestInterfaceLeadingUnderscorePrototype::s_info = { &quot;TestInterfaceLeadingUnderscorePrototype&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestInterfaceLeadingUnderscorePrototype) };
+
+void JSTestInterfaceLeadingUnderscorePrototype::finishCreation(VM&amp; vm)
+{
+    Base::finishCreation(vm);
+    reifyStaticProperties(vm, JSTestInterfaceLeadingUnderscorePrototypeTableValues, *this);
+}
+
+const ClassInfo JSTestInterfaceLeadingUnderscore::s_info = { &quot;TestInterfaceLeadingUnderscore&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestInterfaceLeadingUnderscore) };
+
+JSTestInterfaceLeadingUnderscore::JSTestInterfaceLeadingUnderscore(Structure* structure, JSDOMGlobalObject&amp; globalObject, Ref&lt;TestInterfaceLeadingUnderscore&gt;&amp;&amp; impl)
+    : JSDOMWrapper&lt;TestInterfaceLeadingUnderscore&gt;(structure, globalObject, WTFMove(impl))
+{
+}
+
+JSObject* JSTestInterfaceLeadingUnderscore::createPrototype(VM&amp; vm, JSGlobalObject* globalObject)
+{
+    return JSTestInterfaceLeadingUnderscorePrototype::create(vm, globalObject, JSTestInterfaceLeadingUnderscorePrototype::createStructure(vm, globalObject, globalObject-&gt;objectPrototype()));
+}
+
+JSObject* JSTestInterfaceLeadingUnderscore::prototype(VM&amp; vm, JSGlobalObject* globalObject)
+{
+    return getDOMPrototype&lt;JSTestInterfaceLeadingUnderscore&gt;(vm, globalObject);
+}
+
+void JSTestInterfaceLeadingUnderscore::destroy(JSC::JSCell* cell)
+{
+    JSTestInterfaceLeadingUnderscore* thisObject = static_cast&lt;JSTestInterfaceLeadingUnderscore*&gt;(cell);
+    thisObject-&gt;JSTestInterfaceLeadingUnderscore::~JSTestInterfaceLeadingUnderscore();
+}
+
+template&lt;&gt; inline JSTestInterfaceLeadingUnderscore* BindingCaller&lt;JSTestInterfaceLeadingUnderscore&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)
+{
+    return jsDynamicCast&lt;JSTestInterfaceLeadingUnderscore*&gt;(JSValue::decode(thisValue));
+}
+
+static inline JSValue jsTestInterfaceLeadingUnderscoreReadonlyGetter(ExecState&amp;, JSTestInterfaceLeadingUnderscore&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestInterfaceLeadingUnderscoreReadonly(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestInterfaceLeadingUnderscore&gt;::attribute&lt;jsTestInterfaceLeadingUnderscoreReadonlyGetter&gt;(state, thisValue, &quot;readonly&quot;);
+}
+
+static inline JSValue jsTestInterfaceLeadingUnderscoreReadonlyGetter(ExecState&amp; state, JSTestInterfaceLeadingUnderscore&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLDOMString&gt;(state, impl.readonly());
+    return result;
+}
+
+EncodedJSValue jsTestInterfaceLeadingUnderscoreConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    VM&amp; vm = state-&gt;vm();
+    auto throwScope = DECLARE_THROW_SCOPE(vm);
+    JSTestInterfaceLeadingUnderscorePrototype* domObject = jsDynamicCast&lt;JSTestInterfaceLeadingUnderscorePrototype*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!domObject))
+        return throwVMTypeError(state, throwScope);
+    return JSValue::encode(JSTestInterfaceLeadingUnderscore::getConstructor(state-&gt;vm(), domObject-&gt;globalObject()));
+}
+
+bool setJSTestInterfaceLeadingUnderscoreConstructor(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    VM&amp; vm = state-&gt;vm();
+    auto throwScope = DECLARE_THROW_SCOPE(vm);
+    JSValue value = JSValue::decode(encodedValue);
+    JSTestInterfaceLeadingUnderscorePrototype* domObject = jsDynamicCast&lt;JSTestInterfaceLeadingUnderscorePrototype*&gt;(JSValue::decode(thisValue));
+    if (UNLIKELY(!domObject)) {
+        throwVMTypeError(state, throwScope);
+        return false;
+    }
+    // Shadowing a built-in constructor
+    return domObject-&gt;putDirect(state-&gt;vm(), state-&gt;propertyNames().constructor, value);
+}
+
+JSValue JSTestInterfaceLeadingUnderscore::getConstructor(VM&amp; vm, const JSGlobalObject* globalObject)
+{
+    return getDOMConstructor&lt;JSTestInterfaceLeadingUnderscoreConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
+}
+
+bool JSTestInterfaceLeadingUnderscoreOwner::isReachableFromOpaqueRoots(JSC::Handle&lt;JSC::Unknown&gt; handle, void*, SlotVisitor&amp; visitor)
+{
+    UNUSED_PARAM(handle);
+    UNUSED_PARAM(visitor);
+    return false;
+}
+
+void JSTestInterfaceLeadingUnderscoreOwner::finalize(JSC::Handle&lt;JSC::Unknown&gt; handle, void* context)
+{
+    auto* jsTestInterfaceLeadingUnderscore = jsCast&lt;JSTestInterfaceLeadingUnderscore*&gt;(handle.slot()-&gt;asCell());
+    auto&amp; world = *static_cast&lt;DOMWrapperWorld*&gt;(context);
+    uncacheWrapper(world, &amp;jsTestInterfaceLeadingUnderscore-&gt;wrapped(), jsTestInterfaceLeadingUnderscore);
+}
+
+JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject* globalObject, Ref&lt;TestInterfaceLeadingUnderscore&gt;&amp;&amp; impl)
+{
+#if COMPILER(CLANG)
+    // If you hit this failure the interface definition has the ImplementationLacksVTable
+    // attribute. You should remove that attribute. If the class has subclasses
+    // that may be passed through this toJS() function you should use the SkipVTableValidation
+    // attribute to TestInterfaceLeadingUnderscore.
+    static_assert(!__is_polymorphic(TestInterfaceLeadingUnderscore), &quot;TestInterfaceLeadingUnderscore is polymorphic but the IDL claims it is not&quot;);
+#endif
+    return createWrapper&lt;TestInterfaceLeadingUnderscore&gt;(globalObject, WTFMove(impl));
+}
+
+JSC::JSValue toJS(JSC::ExecState* state, JSDOMGlobalObject* globalObject, TestInterfaceLeadingUnderscore&amp; impl)
+{
+    return wrap(state, globalObject, impl);
+}
+
+TestInterfaceLeadingUnderscore* JSTestInterfaceLeadingUnderscore::toWrapped(JSC::JSValue value)
+{
+    if (auto* wrapper = jsDynamicCast&lt;JSTestInterfaceLeadingUnderscore*&gt;(value))
+        return &amp;wrapper-&gt;wrapped();
+    return nullptr;
+}
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfaceLeadingUnderscoreh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.h (0 => 207770)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.h                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterfaceLeadingUnderscore.h        2016-10-24 18:29:36 UTC (rev 207770)
</span><span class="lines">@@ -0,0 +1,90 @@
</span><ins>+/*
+    This file is part of the WebKit open source project.
+    This file has been generated by generate-bindings.pl. DO NOT MODIFY!
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Library General Public
+    License as published by the Free Software Foundation; either
+    version 2 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Library General Public License for more details.
+
+    You should have received a copy of the GNU Library General Public License
+    along with this library; see the file COPYING.LIB.  If not, write to
+    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+    Boston, MA 02110-1301, USA.
+*/
+
+#pragma once
+
+#include &quot;JSDOMWrapper.h&quot;
+#include &quot;TestInterfaceLeadingUnderscore.h&quot;
+#include &lt;wtf/NeverDestroyed.h&gt;
+
+namespace WebCore {
+
+class JSTestInterfaceLeadingUnderscore : public JSDOMWrapper&lt;TestInterfaceLeadingUnderscore&gt; {
+public:
+    using Base = JSDOMWrapper&lt;TestInterfaceLeadingUnderscore&gt;;
+    static JSTestInterfaceLeadingUnderscore* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestInterfaceLeadingUnderscore&gt;&amp;&amp; impl)
+    {
+        JSTestInterfaceLeadingUnderscore* ptr = new (NotNull, JSC::allocateCell&lt;JSTestInterfaceLeadingUnderscore&gt;(globalObject-&gt;vm().heap)) JSTestInterfaceLeadingUnderscore(structure, *globalObject, WTFMove(impl));
+        ptr-&gt;finishCreation(globalObject-&gt;vm());
+        return ptr;
+    }
+
+    static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
+    static JSC::JSObject* prototype(JSC::VM&amp;, JSC::JSGlobalObject*);
+    static TestInterfaceLeadingUnderscore* toWrapped(JSC::JSValue);
+    static void destroy(JSC::JSCell*);
+
+    DECLARE_INFO;
+
+    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
+    {
+        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
+    }
+
+    static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
+protected:
+    JSTestInterfaceLeadingUnderscore(JSC::Structure*, JSDOMGlobalObject&amp;, Ref&lt;TestInterfaceLeadingUnderscore&gt;&amp;&amp;);
+
+    void finishCreation(JSC::VM&amp; vm)
+    {
+        Base::finishCreation(vm);
+        ASSERT(inherits(info()));
+    }
+
+};
+
+class JSTestInterfaceLeadingUnderscoreOwner : public JSC::WeakHandleOwner {
+public:
+    virtual bool isReachableFromOpaqueRoots(JSC::Handle&lt;JSC::Unknown&gt;, void* context, JSC::SlotVisitor&amp;);
+    virtual void finalize(JSC::Handle&lt;JSC::Unknown&gt;, void* context);
+};
+
+inline JSC::WeakHandleOwner* wrapperOwner(DOMWrapperWorld&amp;, TestInterfaceLeadingUnderscore*)
+{
+    static NeverDestroyed&lt;JSTestInterfaceLeadingUnderscoreOwner&gt; owner;
+    return &amp;owner.get();
+}
+
+inline void* wrapperKey(TestInterfaceLeadingUnderscore* wrappableObject)
+{
+    return wrappableObject;
+}
+
+JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, TestInterfaceLeadingUnderscore&amp;);
+inline JSC::JSValue toJS(JSC::ExecState* state, JSDOMGlobalObject* globalObject, TestInterfaceLeadingUnderscore* impl) { return impl ? toJS(state, globalObject, *impl) : JSC::jsNull(); }
+JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject*, Ref&lt;TestInterfaceLeadingUnderscore&gt;&amp;&amp;);
+inline JSC::JSValue toJSNewlyCreated(JSC::ExecState* state, JSDOMGlobalObject* globalObject, RefPtr&lt;TestInterfaceLeadingUnderscore&gt;&amp;&amp; impl) { return impl ? toJSNewlyCreated(state, globalObject, impl.releaseNonNull()) : JSC::jsNull(); }
+
+template&lt;&gt; struct JSDOMWrapperConverterTraits&lt;TestInterfaceLeadingUnderscore&gt; {
+    using WrapperClass = JSTestInterfaceLeadingUnderscore;
+    using ToWrappedReturnType = TestInterfaceLeadingUnderscore*;
+};
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSattributecpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp (207769 => 207770)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2016-10-24 18:25:40 UTC (rev 207769)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2016-10-24 18:29:36 UTC (rev 207770)
</span><span class="lines">@@ -1,243 +0,0 @@
</span><del>-/*
-    This file is part of the WebKit open source project.
-    This file has been generated by generate-bindings.pl. DO NOT MODIFY!
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include &quot;config.h&quot;
-#include &quot;JSattribute.h&quot;
-
-#include &quot;JSDOMBinding.h&quot;
-#include &quot;JSDOMConstructor.h&quot;
-#include &quot;JSDOMConvert.h&quot;
-#include &lt;runtime/FunctionPrototype.h&gt;
-#include &lt;wtf/GetPtr.h&gt;
-
-using namespace JSC;
-
-namespace WebCore {
-
-// Attributes
-
-JSC::EncodedJSValue jsattributeReadonly(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
-JSC::EncodedJSValue jsattributeConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
-bool setJSattributeConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
-
-class JSattributePrototype : public JSC::JSNonFinalObject {
-public:
-    using Base = JSC::JSNonFinalObject;
-    static JSattributePrototype* create(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure)
-    {
-        JSattributePrototype* ptr = new (NotNull, JSC::allocateCell&lt;JSattributePrototype&gt;(vm.heap)) JSattributePrototype(vm, globalObject, structure);
-        ptr-&gt;finishCreation(vm);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-
-private:
-    JSattributePrototype(JSC::VM&amp; vm, JSC::JSGlobalObject*, JSC::Structure* structure)
-        : JSC::JSNonFinalObject(vm, structure)
-    {
-    }
-
-    void finishCreation(JSC::VM&amp;);
-};
-
-using JSattributeConstructor = JSDOMConstructorNotConstructable&lt;JSattribute&gt;;
-
-/* Hash table */
-
-static const struct CompactHashIndex JSattributeTableIndex[2] = {
-    { 0, -1 },
-    { -1, -1 },
-};
-
-
-static const HashTableValue JSattributeTableValues[] =
-{
-    { &quot;readonly&quot;, ReadOnly | CustomAccessor, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsattributeReadonly), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(0) } },
-};
-
-static const HashTable JSattributeTable = { 1, 1, true, JSattributeTableValues, JSattributeTableIndex };
-template&lt;&gt; JSValue JSattributeConstructor::prototypeForStructure(JSC::VM&amp; vm, const JSDOMGlobalObject&amp; globalObject)
-{
-    UNUSED_PARAM(vm);
-    return globalObject.functionPrototype();
-}
-
-template&lt;&gt; void JSattributeConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    putDirect(vm, vm.propertyNames-&gt;prototype, JSattribute::prototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
-    putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;attribute&quot;))), ReadOnly | DontEnum);
-    putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
-}
-
-template&lt;&gt; const ClassInfo JSattributeConstructor::s_info = { &quot;attribute&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSattributeConstructor) };
-
-/* Hash table for prototype */
-
-static const HashTableValue JSattributePrototypeTableValues[] =
-{
-    { &quot;constructor&quot;, DontEnum, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsattributeConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSattributeConstructor) } },
-};
-
-const ClassInfo JSattributePrototype::s_info = { &quot;attributePrototype&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSattributePrototype) };
-
-void JSattributePrototype::finishCreation(VM&amp; vm)
-{
-    Base::finishCreation(vm);
-    reifyStaticProperties(vm, JSattributePrototypeTableValues, *this);
-}
-
-const ClassInfo JSattribute::s_info = { &quot;attribute&quot;, &amp;Base::s_info, &amp;JSattributeTable, CREATE_METHOD_TABLE(JSattribute) };
-
-JSattribute::JSattribute(Structure* structure, JSDOMGlobalObject&amp; globalObject, Ref&lt;attribute&gt;&amp;&amp; impl)
-    : JSDOMWrapper&lt;attribute&gt;(structure, globalObject, WTFMove(impl))
-{
-}
-
-JSObject* JSattribute::createPrototype(VM&amp; vm, JSGlobalObject* globalObject)
-{
-    return JSattributePrototype::create(vm, globalObject, JSattributePrototype::createStructure(vm, globalObject, globalObject-&gt;errorPrototype()));
-}
-
-JSObject* JSattribute::prototype(VM&amp; vm, JSGlobalObject* globalObject)
-{
-    return getDOMPrototype&lt;JSattribute&gt;(vm, globalObject);
-}
-
-void JSattribute::destroy(JSC::JSCell* cell)
-{
-    JSattribute* thisObject = static_cast&lt;JSattribute*&gt;(cell);
-    thisObject-&gt;JSattribute::~JSattribute();
-}
-
-template&lt;&gt; inline JSattribute* BindingCaller&lt;JSattribute&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)
-{
-    return jsDynamicCast&lt;JSattribute*&gt;(JSValue::decode(thisValue));
-}
-
-static inline JSValue jsattributeReadonlyGetter(ExecState&amp;, JSattribute&amp;, ThrowScope&amp; throwScope);
-
-EncodedJSValue jsattributeReadonly(ExecState* state, EncodedJSValue thisValue, PropertyName)
-{
-    return BindingCaller&lt;JSattribute&gt;::attribute&lt;jsattributeReadonlyGetter&gt;(state, thisValue, &quot;readonly&quot;);
-}
-
-static inline JSValue jsattributeReadonlyGetter(ExecState&amp; state, JSattribute&amp; thisObject, ThrowScope&amp; throwScope)
-{
-    UNUSED_PARAM(throwScope);
-    UNUSED_PARAM(state);
-    auto&amp; impl = thisObject.wrapped();
-    JSValue result = toJS&lt;IDLDOMString&gt;(state, impl.readonly());
-    return result;
-}
-
-EncodedJSValue jsattributeConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
-{
-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
-    JSattributePrototype* domObject = jsDynamicCast&lt;JSattributePrototype*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!domObject))
-        return throwVMTypeError(state, throwScope);
-    return JSValue::encode(JSattribute::getConstructor(state-&gt;vm(), domObject-&gt;globalObject()));
-}
-
-bool setJSattributeConstructor(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
-{
-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
-    JSValue value = JSValue::decode(encodedValue);
-    JSattributePrototype* domObject = jsDynamicCast&lt;JSattributePrototype*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!domObject)) {
-        throwVMTypeError(state, throwScope);
-        return false;
-    }
-    // Shadowing a built-in constructor
-    return domObject-&gt;putDirect(state-&gt;vm(), state-&gt;propertyNames().constructor, value);
-}
-
-JSValue JSattribute::getConstructor(VM&amp; vm, const JSGlobalObject* globalObject)
-{
-    return getDOMConstructor&lt;JSattributeConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
-}
-
-bool JSattributeOwner::isReachableFromOpaqueRoots(JSC::Handle&lt;JSC::Unknown&gt; handle, void*, SlotVisitor&amp; visitor)
-{
-    UNUSED_PARAM(handle);
-    UNUSED_PARAM(visitor);
-    return false;
-}
-
-void JSattributeOwner::finalize(JSC::Handle&lt;JSC::Unknown&gt; handle, void* context)
-{
-    auto* jsattribute = jsCast&lt;JSattribute*&gt;(handle.slot()-&gt;asCell());
-    auto&amp; world = *static_cast&lt;DOMWrapperWorld*&gt;(context);
-    uncacheWrapper(world, &amp;jsattribute-&gt;wrapped(), jsattribute);
-}
-
-#if ENABLE(BINDING_INTEGRITY)
-#if PLATFORM(WIN)
-#pragma warning(disable: 4483)
-extern &quot;C&quot; { extern void (*const __identifier(&quot;??_7attribute@WebCore@@6B@&quot;)[])(); }
-#else
-extern &quot;C&quot; { extern void* _ZTVN7WebCore9attributeE[]; }
-#endif
-#endif
-
-JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject* globalObject, Ref&lt;attribute&gt;&amp;&amp; impl)
-{
-
-#if ENABLE(BINDING_INTEGRITY)
-    void* actualVTablePointer = *(reinterpret_cast&lt;void**&gt;(impl.ptr()));
-#if PLATFORM(WIN)
-    void* expectedVTablePointer = reinterpret_cast&lt;void*&gt;(__identifier(&quot;??_7attribute@WebCore@@6B@&quot;));
-#else
-    void* expectedVTablePointer = &amp;_ZTVN7WebCore9attributeE[2];
-#if COMPILER(CLANG)
-    // If this fails attribute does not have a vtable, so you need to add the
-    // ImplementationLacksVTable attribute to the interface definition
-    static_assert(__is_polymorphic(attribute), &quot;attribute is not polymorphic&quot;);
-#endif
-#endif
-    // If you hit this assertion you either have a use after free bug, or
-    // attribute has subclasses. If attribute has subclasses that get passed
-    // to toJS() we currently require attribute you to opt out of binding hardening
-    // by adding the SkipVTableValidation attribute to the interface IDL definition
-    RELEASE_ASSERT(actualVTablePointer == expectedVTablePointer);
-#endif
-    return createWrapper&lt;attribute&gt;(globalObject, WTFMove(impl));
-}
-
-JSC::JSValue toJS(JSC::ExecState* state, JSDOMGlobalObject* globalObject, attribute&amp; impl)
-{
-    return wrap(state, globalObject, impl);
-}
-
-attribute* JSattribute::toWrapped(JSC::JSValue value)
-{
-    if (auto* wrapper = jsDynamicCast&lt;JSattribute*&gt;(value))
-        return &amp;wrapper-&gt;wrapped();
-    return nullptr;
-}
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSattributeh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h (207769 => 207770)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h        2016-10-24 18:25:40 UTC (rev 207769)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h        2016-10-24 18:29:36 UTC (rev 207770)
</span><span class="lines">@@ -1,93 +0,0 @@
</span><del>-/*
-    This file is part of the WebKit open source project.
-    This file has been generated by generate-bindings.pl. DO NOT MODIFY!
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#pragma once
-
-#include &quot;JSDOMWrapper.h&quot;
-#include &quot;attribute.h&quot;
-#include &lt;runtime/ErrorPrototype.h&gt;
-#include &lt;wtf/NeverDestroyed.h&gt;
-
-namespace WebCore {
-
-class JSattribute : public JSDOMWrapper&lt;attribute&gt; {
-public:
-    using Base = JSDOMWrapper&lt;attribute&gt;;
-    static JSattribute* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;attribute&gt;&amp;&amp; impl)
-    {
-        JSattribute* ptr = new (NotNull, JSC::allocateCell&lt;JSattribute&gt;(globalObject-&gt;vm().heap)) JSattribute(structure, *globalObject, WTFMove(impl));
-        ptr-&gt;finishCreation(globalObject-&gt;vm());
-        return ptr;
-    }
-
-    static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
-    static JSC::JSObject* prototype(JSC::VM&amp;, JSC::JSGlobalObject*);
-    static attribute* toWrapped(JSC::JSValue);
-    static void destroy(JSC::JSCell*);
-
-    DECLARE_INFO;
-
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-
-    static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
-public:
-    static const unsigned StructureFlags = JSC::HasStaticPropertyTable | Base::StructureFlags;
-protected:
-    JSattribute(JSC::Structure*, JSDOMGlobalObject&amp;, Ref&lt;attribute&gt;&amp;&amp;);
-
-    void finishCreation(JSC::VM&amp; vm)
-    {
-        Base::finishCreation(vm);
-        ASSERT(inherits(info()));
-    }
-
-};
-
-class JSattributeOwner : public JSC::WeakHandleOwner {
-public:
-    virtual bool isReachableFromOpaqueRoots(JSC::Handle&lt;JSC::Unknown&gt;, void* context, JSC::SlotVisitor&amp;);
-    virtual void finalize(JSC::Handle&lt;JSC::Unknown&gt;, void* context);
-};
-
-inline JSC::WeakHandleOwner* wrapperOwner(DOMWrapperWorld&amp;, attribute*)
-{
-    static NeverDestroyed&lt;JSattributeOwner&gt; owner;
-    return &amp;owner.get();
-}
-
-inline void* wrapperKey(attribute* wrappableObject)
-{
-    return wrappableObject;
-}
-
-JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, attribute&amp;);
-inline JSC::JSValue toJS(JSC::ExecState* state, JSDOMGlobalObject* globalObject, attribute* impl) { return impl ? toJS(state, globalObject, *impl) : JSC::jsNull(); }
-JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject*, Ref&lt;attribute&gt;&amp;&amp;);
-inline JSC::JSValue toJSNewlyCreated(JSC::ExecState* state, JSDOMGlobalObject* globalObject, RefPtr&lt;attribute&gt;&amp;&amp; impl) { return impl ? toJSNewlyCreated(state, globalObject, impl.releaseNonNull()) : JSC::jsNull(); }
-
-template&lt;&gt; struct JSDOMWrapperConverterTraits&lt;attribute&gt; {
-    using WrapperClass = JSattribute;
-    using ToWrappedReturnType = attribute*;
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSreadonlycpp"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp (207769 => 207770)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp        2016-10-24 18:25:40 UTC (rev 207769)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.cpp        2016-10-24 18:29:36 UTC (rev 207770)
</span><span class="lines">@@ -1,185 +0,0 @@
</span><del>-/*
-    This file is part of the WebKit open source project.
-    This file has been generated by generate-bindings.pl. DO NOT MODIFY!
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#include &quot;config.h&quot;
-#include &quot;JSreadonly.h&quot;
-
-#include &quot;JSDOMBinding.h&quot;
-#include &quot;JSDOMConstructor.h&quot;
-#include &lt;runtime/FunctionPrototype.h&gt;
-#include &lt;wtf/GetPtr.h&gt;
-
-using namespace JSC;
-
-namespace WebCore {
-
-// Attributes
-
-JSC::EncodedJSValue jsreadonlyConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
-bool setJSreadonlyConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
-
-class JSreadonlyPrototype : public JSC::JSNonFinalObject {
-public:
-    using Base = JSC::JSNonFinalObject;
-    static JSreadonlyPrototype* create(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure)
-    {
-        JSreadonlyPrototype* ptr = new (NotNull, JSC::allocateCell&lt;JSreadonlyPrototype&gt;(vm.heap)) JSreadonlyPrototype(vm, globalObject, structure);
-        ptr-&gt;finishCreation(vm);
-        return ptr;
-    }
-
-    DECLARE_INFO;
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-
-private:
-    JSreadonlyPrototype(JSC::VM&amp; vm, JSC::JSGlobalObject*, JSC::Structure* structure)
-        : JSC::JSNonFinalObject(vm, structure)
-    {
-    }
-
-    void finishCreation(JSC::VM&amp;);
-};
-
-using JSreadonlyConstructor = JSDOMConstructorNotConstructable&lt;JSreadonly&gt;;
-
-template&lt;&gt; JSValue JSreadonlyConstructor::prototypeForStructure(JSC::VM&amp; vm, const JSDOMGlobalObject&amp; globalObject)
-{
-    UNUSED_PARAM(vm);
-    return globalObject.functionPrototype();
-}
-
-template&lt;&gt; void JSreadonlyConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
-{
-    putDirect(vm, vm.propertyNames-&gt;prototype, JSreadonly::prototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
-    putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;readonly&quot;))), ReadOnly | DontEnum);
-    putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
-}
-
-template&lt;&gt; const ClassInfo JSreadonlyConstructor::s_info = { &quot;readonly&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSreadonlyConstructor) };
-
-/* Hash table for prototype */
-
-static const HashTableValue JSreadonlyPrototypeTableValues[] =
-{
-    { &quot;constructor&quot;, DontEnum, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsreadonlyConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSreadonlyConstructor) } },
-};
-
-const ClassInfo JSreadonlyPrototype::s_info = { &quot;readonlyPrototype&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSreadonlyPrototype) };
-
-void JSreadonlyPrototype::finishCreation(VM&amp; vm)
-{
-    Base::finishCreation(vm);
-    reifyStaticProperties(vm, JSreadonlyPrototypeTableValues, *this);
-}
-
-const ClassInfo JSreadonly::s_info = { &quot;readonly&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSreadonly) };
-
-JSreadonly::JSreadonly(Structure* structure, JSDOMGlobalObject&amp; globalObject, Ref&lt;readonly&gt;&amp;&amp; impl)
-    : JSDOMWrapper&lt;readonly&gt;(structure, globalObject, WTFMove(impl))
-{
-}
-
-JSObject* JSreadonly::createPrototype(VM&amp; vm, JSGlobalObject* globalObject)
-{
-    return JSreadonlyPrototype::create(vm, globalObject, JSreadonlyPrototype::createStructure(vm, globalObject, globalObject-&gt;objectPrototype()));
-}
-
-JSObject* JSreadonly::prototype(VM&amp; vm, JSGlobalObject* globalObject)
-{
-    return getDOMPrototype&lt;JSreadonly&gt;(vm, globalObject);
-}
-
-void JSreadonly::destroy(JSC::JSCell* cell)
-{
-    JSreadonly* thisObject = static_cast&lt;JSreadonly*&gt;(cell);
-    thisObject-&gt;JSreadonly::~JSreadonly();
-}
-
-EncodedJSValue jsreadonlyConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
-{
-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
-    JSreadonlyPrototype* domObject = jsDynamicCast&lt;JSreadonlyPrototype*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!domObject))
-        return throwVMTypeError(state, throwScope);
-    return JSValue::encode(JSreadonly::getConstructor(state-&gt;vm(), domObject-&gt;globalObject()));
-}
-
-bool setJSreadonlyConstructor(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
-{
-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
-    JSValue value = JSValue::decode(encodedValue);
-    JSreadonlyPrototype* domObject = jsDynamicCast&lt;JSreadonlyPrototype*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!domObject)) {
-        throwVMTypeError(state, throwScope);
-        return false;
-    }
-    // Shadowing a built-in constructor
-    return domObject-&gt;putDirect(state-&gt;vm(), state-&gt;propertyNames().constructor, value);
-}
-
-JSValue JSreadonly::getConstructor(VM&amp; vm, const JSGlobalObject* globalObject)
-{
-    return getDOMConstructor&lt;JSreadonlyConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
-}
-
-bool JSreadonlyOwner::isReachableFromOpaqueRoots(JSC::Handle&lt;JSC::Unknown&gt; handle, void*, SlotVisitor&amp; visitor)
-{
-    UNUSED_PARAM(handle);
-    UNUSED_PARAM(visitor);
-    return false;
-}
-
-void JSreadonlyOwner::finalize(JSC::Handle&lt;JSC::Unknown&gt; handle, void* context)
-{
-    auto* jsreadonly = jsCast&lt;JSreadonly*&gt;(handle.slot()-&gt;asCell());
-    auto&amp; world = *static_cast&lt;DOMWrapperWorld*&gt;(context);
-    uncacheWrapper(world, &amp;jsreadonly-&gt;wrapped(), jsreadonly);
-}
-
-JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject* globalObject, Ref&lt;readonly&gt;&amp;&amp; impl)
-{
-#if COMPILER(CLANG)
-    // If you hit this failure the interface definition has the ImplementationLacksVTable
-    // attribute. You should remove that attribute. If the class has subclasses
-    // that may be passed through this toJS() function you should use the SkipVTableValidation
-    // attribute to readonly.
-    static_assert(!__is_polymorphic(readonly), &quot;readonly is polymorphic but the IDL claims it is not&quot;);
-#endif
-    return createWrapper&lt;readonly&gt;(globalObject, WTFMove(impl));
-}
-
-JSC::JSValue toJS(JSC::ExecState* state, JSDOMGlobalObject* globalObject, readonly&amp; impl)
-{
-    return wrap(state, globalObject, impl);
-}
-
-readonly* JSreadonly::toWrapped(JSC::JSValue value)
-{
-    if (auto* wrapper = jsDynamicCast&lt;JSreadonly*&gt;(value))
-        return &amp;wrapper-&gt;wrapped();
-    return nullptr;
-}
-
-}
</del></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSreadonlyh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.h (207769 => 207770)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.h        2016-10-24 18:25:40 UTC (rev 207769)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSreadonly.h        2016-10-24 18:29:36 UTC (rev 207770)
</span><span class="lines">@@ -1,90 +0,0 @@
</span><del>-/*
-    This file is part of the WebKit open source project.
-    This file has been generated by generate-bindings.pl. DO NOT MODIFY!
-
-    This library is free software; you can redistribute it and/or
-    modify it under the terms of the GNU Library General Public
-    License as published by the Free Software Foundation; either
-    version 2 of the License, or (at your option) any later version.
-
-    This library is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-    Library General Public License for more details.
-
-    You should have received a copy of the GNU Library General Public License
-    along with this library; see the file COPYING.LIB.  If not, write to
-    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-    Boston, MA 02110-1301, USA.
-*/
-
-#pragma once
-
-#include &quot;JSDOMWrapper.h&quot;
-#include &quot;readonly.h&quot;
-#include &lt;wtf/NeverDestroyed.h&gt;
-
-namespace WebCore {
-
-class JSreadonly : public JSDOMWrapper&lt;readonly&gt; {
-public:
-    using Base = JSDOMWrapper&lt;readonly&gt;;
-    static JSreadonly* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;readonly&gt;&amp;&amp; impl)
-    {
-        JSreadonly* ptr = new (NotNull, JSC::allocateCell&lt;JSreadonly&gt;(globalObject-&gt;vm().heap)) JSreadonly(structure, *globalObject, WTFMove(impl));
-        ptr-&gt;finishCreation(globalObject-&gt;vm());
-        return ptr;
-    }
-
-    static JSC::JSObject* createPrototype(JSC::VM&amp;, JSC::JSGlobalObject*);
-    static JSC::JSObject* prototype(JSC::VM&amp;, JSC::JSGlobalObject*);
-    static readonly* toWrapped(JSC::JSValue);
-    static void destroy(JSC::JSCell*);
-
-    DECLARE_INFO;
-
-    static JSC::Structure* createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
-    {
-        return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
-    }
-
-    static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
-protected:
-    JSreadonly(JSC::Structure*, JSDOMGlobalObject&amp;, Ref&lt;readonly&gt;&amp;&amp;);
-
-    void finishCreation(JSC::VM&amp; vm)
-    {
-        Base::finishCreation(vm);
-        ASSERT(inherits(info()));
-    }
-
-};
-
-class JSreadonlyOwner : public JSC::WeakHandleOwner {
-public:
-    virtual bool isReachableFromOpaqueRoots(JSC::Handle&lt;JSC::Unknown&gt;, void* context, JSC::SlotVisitor&amp;);
-    virtual void finalize(JSC::Handle&lt;JSC::Unknown&gt;, void* context);
-};
-
-inline JSC::WeakHandleOwner* wrapperOwner(DOMWrapperWorld&amp;, readonly*)
-{
-    static NeverDestroyed&lt;JSreadonlyOwner&gt; owner;
-    return &amp;owner.get();
-}
-
-inline void* wrapperKey(readonly* wrappableObject)
-{
-    return wrappableObject;
-}
-
-JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, readonly&amp;);
-inline JSC::JSValue toJS(JSC::ExecState* state, JSDOMGlobalObject* globalObject, readonly* impl) { return impl ? toJS(state, globalObject, *impl) : JSC::jsNull(); }
-JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject*, Ref&lt;readonly&gt;&amp;&amp;);
-inline JSC::JSValue toJSNewlyCreated(JSC::ExecState* state, JSDOMGlobalObject* globalObject, RefPtr&lt;readonly&gt;&amp;&amp; impl) { return impl ? toJSNewlyCreated(state, globalObject, impl.releaseNonNull()) : JSC::jsNull(); }
-
-template&lt;&gt; struct JSDOMWrapperConverterTraits&lt;readonly&gt; {
-    using WrapperClass = JSreadonly;
-    using ToWrappedReturnType = readonly*;
-};
-
-} // namespace WebCore
</del></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestTestExceptionidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/TestException.idl (207769 => 207770)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/TestException.idl        2016-10-24 18:25:40 UTC (rev 207769)
+++ trunk/Source/WebCore/bindings/scripts/test/TestException.idl        2016-10-24 18:29:36 UTC (rev 207770)
</span><span class="lines">@@ -25,11 +25,7 @@
</span><span class="cx">  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
</span><span class="cx">  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><ins>+
</ins><span class="cx"> exception TestException {
</span><span class="cx">    readonly attribute DOMString name;
</span><span class="cx"> };
</span><del>-
-// Identifiers with a leading underscore, which should be removed.
-exception _attribute {
-   readonly attribute DOMString _readonly;
-};
</del></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestTestInterfaceidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/TestInterface.idl (207769 => 207770)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/TestInterface.idl        2016-10-24 18:25:40 UTC (rev 207769)
+++ trunk/Source/WebCore/bindings/scripts/test/TestInterface.idl        2016-10-24 18:29:36 UTC (rev 207770)
</span><span class="lines">@@ -41,8 +41,3 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> TestInterface implements TestImplements;
</span><del>-
-[
-    ImplementationLacksVTable
-] interface _readonly {
-};
</del></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestTestInterfaceLeadingUnderscoreidl"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/TestInterfaceLeadingUnderscore.idl (0 => 207770)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/TestInterfaceLeadingUnderscore.idl                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/TestInterfaceLeadingUnderscore.idl        2016-10-24 18:29:36 UTC (rev 207770)
</span><span class="lines">@@ -0,0 +1,34 @@
</span><ins>+/*
+ * Copyright (C) 2010, 2012 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary formstrArg, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Inc. (&quot;Apple&quot;) nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS &quot;AS IS&quot; AND ANY
+ * EXPRESS OR IMPLIED WARRANTIEstrArg, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// Identifiers with a leading underscore, which should be removed.
+[
+    ImplementationLacksVTable
+] interface _TestInterfaceLeadingUnderscore {
+   readonly attribute DOMString _readonly;
+};
</ins></span></pre>
</div>
</div>

</body>
</html>