<!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>[211409] 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/211409">211409</a></dd>
<dt>Author</dt> <dd>joepeck@webkit.org</dd>
<dt>Date</dt> <dd>2017-01-30 23:17:34 -0800 (Mon, 30 Jan 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>[WebIDL] Add support for inherit serializer attribute
https://bugs.webkit.org/show_bug.cgi?id=167274

Reviewed by Darin Adler.

Support for serializer { inherit }, which will be used by Resource Timing.
https://heycam.github.io/webidl/#idl-serializers

* bindings/scripts/CodeGenerator.pm:
(GetInterfaceForAttribute):
(IsSerializableAttribute):
Determine if an attribute is serializable at generation time so we can
verify types. This allows us to support typedefs. We don't yet support
serializing an attribute that is itself a serializable interface.

* bindings/scripts/CodeGeneratorJS.pm:
(GenerateSerializerFunction):
(GenerateSerializerAttributesForInterface):
Generate inherited attributes first, then generate our own list.
Explicitly provided attribute names are expected to be serializable,
so produce an error if they are not.

* bindings/scripts/IDLParser.pm:
(parseSerializationAttributes):
Update parsing of serializer attributes to allow for multiple
special strings. The spec does not precisely define where the
special &quot;attribute&quot; keyword is allowed.

(applyMemberList):
(isSerializableAttribute): Deleted.
Move serializable attribute checking to generation.

* bindings/scripts/test/JS/JSTestSerialization.cpp:
* bindings/scripts/test/JS/JSTestSerializationInherit.cpp: Added.
* bindings/scripts/test/JS/JSTestSerializationInherit.h: Added.
* bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp: Added.
* bindings/scripts/test/JS/JSTestSerializationInheritFinal.h: Added.
The toJSON implementations are the most interesting.

* bindings/scripts/test/TestSerialization.idl:
Extend this test for typedefed attributes that are serializable.
Change TestNode (a serializable Interface) to TestException (an
unserializable Interface) for expected behavior of an
unserializable attribute.

* bindings/scripts/test/TestSerializationInherit.idl:
Test for { inherit, attribute }.

* bindings/scripts/test/TestSerializationInheritFinal.idl:
Test for { inherit, attribute_names... }, and multi-level inherit.</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="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsIDLParserpm">trunk/Source/WebCore/bindings/scripts/IDLParser.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializationcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestTestSerializationidl">trunk/Source/WebCore/bindings/scripts/test/TestSerialization.idl</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializationcpprej">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp.rej</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializationInheritcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInherit.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializationInherith">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInherit.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializationInheritFinalcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializationInheritFinalh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInheritFinal.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestTestSerializationInheritidl">trunk/Source/WebCore/bindings/scripts/test/TestSerializationInherit.idl</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestTestSerializationInheritFinalidl">trunk/Source/WebCore/bindings/scripts/test/TestSerializationInheritFinal.idl</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (211408 => 211409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-01-31 07:11:45 UTC (rev 211408)
+++ trunk/Source/WebCore/ChangeLog        2017-01-31 07:17:34 UTC (rev 211409)
</span><span class="lines">@@ -1,5 +1,58 @@
</span><span class="cx"> 2017-01-30  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        [WebIDL] Add support for inherit serializer attribute
+        https://bugs.webkit.org/show_bug.cgi?id=167274
+
+        Reviewed by Darin Adler.
+
+        Support for serializer { inherit }, which will be used by Resource Timing.
+        https://heycam.github.io/webidl/#idl-serializers
+
+        * bindings/scripts/CodeGenerator.pm:
+        (GetInterfaceForAttribute):
+        (IsSerializableAttribute):
+        Determine if an attribute is serializable at generation time so we can
+        verify types. This allows us to support typedefs. We don't yet support
+        serializing an attribute that is itself a serializable interface.
+
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateSerializerFunction):
+        (GenerateSerializerAttributesForInterface):
+        Generate inherited attributes first, then generate our own list.
+        Explicitly provided attribute names are expected to be serializable,
+        so produce an error if they are not.
+
+        * bindings/scripts/IDLParser.pm:
+        (parseSerializationAttributes):
+        Update parsing of serializer attributes to allow for multiple
+        special strings. The spec does not precisely define where the
+        special &quot;attribute&quot; keyword is allowed.
+
+        (applyMemberList):
+        (isSerializableAttribute): Deleted.
+        Move serializable attribute checking to generation.
+
+        * bindings/scripts/test/JS/JSTestSerialization.cpp:
+        * bindings/scripts/test/JS/JSTestSerializationInherit.cpp: Added.
+        * bindings/scripts/test/JS/JSTestSerializationInherit.h: Added.
+        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp: Added.
+        * bindings/scripts/test/JS/JSTestSerializationInheritFinal.h: Added.
+        The toJSON implementations are the most interesting.
+
+        * bindings/scripts/test/TestSerialization.idl:
+        Extend this test for typedefed attributes that are serializable.
+        Change TestNode (a serializable Interface) to TestException (an
+        unserializable Interface) for expected behavior of an
+        unserializable attribute.
+
+        * bindings/scripts/test/TestSerializationInherit.idl:
+        Test for { inherit, attribute }.
+
+        * bindings/scripts/test/TestSerializationInheritFinal.idl:
+        Test for { inherit, attribute_names... }, and multi-level inherit.
+
+2017-01-30  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
+
</ins><span class="cx">         Implement PerformanceObserver
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=167546
</span><span class="cx">         &lt;rdar://problem/30247959&gt;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm (211408 => 211409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm        2017-01-31 07:11:45 UTC (rev 211408)
+++ trunk/Source/WebCore/bindings/scripts/CodeGenerator.pm        2017-01-31 07:17:34 UTC (rev 211409)
</span><span class="lines">@@ -314,6 +314,15 @@
</span><span class="cx">     return $idlFiles-&gt;{$interfaceName};
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+sub GetInterfaceForAttribute
+{
+    my ($object, $currentInterface, $attribute) = @_;
+
+    return undef unless $object-&gt;IsInterfaceType($attribute-&gt;type);
+
+    return $object-&gt;ParseInterface($currentInterface, $attribute-&gt;type-&gt;name);
+}
+
</ins><span class="cx"> sub GetAttributeFromInterface
</span><span class="cx"> {
</span><span class="cx">     my ($object, $outerInterface, $interfaceName, $attributeName) = @_;
</span><span class="lines">@@ -913,6 +922,31 @@
</span><span class="cx">     return 0;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+sub IsSerializableAttribute
+{
+    my ($object, $currentInterface, $attribute) = @_;
+
+    # https://heycam.github.io/webidl/#dfn-serializable-type
+
+    my $type = $attribute-&gt;type;
+    return 1 if $type-&gt;name eq &quot;boolean&quot;;
+    return 1 if $object-&gt;IsNumericType($type);
+    return 1 if $object-&gt;IsEnumType($type);
+    return 1 if $object-&gt;IsStringType($type);
+    return 0 if $type-&gt;name eq &quot;EventHandler&quot;;
+
+    if ($type-&gt;isUnion || $object-&gt;IsSequenceType($type) || $object-&gt;IsDictionaryType($type)) {
+        die &quot;Serializer for non-primitive types is not currently supported\n&quot;;
+    }
+
+    my $interface = GetInterfaceForAttribute($object, $currentInterface, $attribute);
+    if ($interface &amp;&amp; $interface-&gt;serializable) {
+        die &quot;Serializer for non-primitive types is not currently supported\n&quot;;
+    }
+
+    return 0;
+}
+
</ins><span class="cx"> sub GetInterfaceExtendedAttributesFromName
</span><span class="cx"> {
</span><span class="cx">     # FIXME: It's bad to have a function like this that opens another IDL file to answer a question.
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (211408 => 211409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2017-01-31 07:11:45 UTC (rev 211408)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2017-01-31 07:17:34 UTC (rev 211409)
</span><span class="lines">@@ -4400,18 +4400,55 @@
</span><span class="cx">     push(@implContent, &quot;    auto* result = constructEmptyObject(state);\n&quot;);
</span><span class="cx">     push(@implContent, &quot;\n&quot;);
</span><span class="cx"> 
</span><ins>+    GenerateSerializerAttributesForInterface($interface, $className);
+
+    push(@implContent, &quot;    return JSValue::encode(result);\n&quot;);
+    push(@implContent, &quot;}\n&quot;);
+    push(@implContent, &quot;\n&quot;);
+    push(@implContent, &quot;EncodedJSValue JSC_HOST_CALL ${serializerNativeFunctionName}(ExecState* state)\n&quot;);
+    push(@implContent, &quot;{\n&quot;);
+    push(@implContent, &quot;    return BindingCaller&lt;JS$interfaceName&gt;::callOperation&lt;${serializerNativeFunctionName}Caller&gt;(state, \&quot;$serializerFunctionName\&quot;);\n&quot;);
+    push(@implContent, &quot;}\n&quot;);
+    push(@implContent, &quot;\n&quot;);
+}
+
+sub GenerateSerializerAttributesForInterface
+{
+    my ($interface, $className) = @_;
+
+    my $interfaceName = $interface-&gt;type-&gt;name;
+
+    if ($interface-&gt;serializable-&gt;hasInherit) {
+        my $parentSerializerInterface = 0;
+        $codeGenerator-&gt;ForAllParents($interface, sub {
+            my $parentInterface = shift;
+            if ($parentInterface-&gt;serializable &amp;&amp; !$parentSerializerInterface) {
+                $parentSerializerInterface = $parentInterface;
+            }
+        }, 0);
+
+        die &quot;Failed to find parent interface with \&quot;serializer\&quot; for \&quot;inherit\&quot; serializer in $interfaceName\n&quot; if !$parentSerializerInterface;
+
+        GenerateSerializerAttributesForInterface($parentSerializerInterface, $className);
+    }
+
</ins><span class="cx">     my @serializedAttributes = ();
</span><ins>+
</ins><span class="cx">     foreach my $attributeName (@{$interface-&gt;serializable-&gt;attributes}) {
</span><span class="cx">         my $foundAttribute = 0;
</span><span class="cx">         foreach my $attribute (@{$interface-&gt;attributes}) {
</span><span class="cx">             if ($attributeName eq $attribute-&gt;name) {
</span><del>-                push @serializedAttributes, $attribute;
</del><span class="cx">                 $foundAttribute = 1;
</span><ins>+                if ($codeGenerator-&gt;IsSerializableAttribute($interface, $attribute)) {
+                    push(@serializedAttributes, $attribute);                
+                    last;
+                }                    
+                die &quot;Explicit \&quot;serializer\&quot; attribute \&quot;$attributeName\&quot; is not serializable\n&quot; if !$interface-&gt;serializable-&gt;hasAttribute;
</ins><span class="cx">                 last;
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx">         
</span><del>-        die &quot;Failed to find \&quot;serializer\&quot; attribute \&quot;$attributeName\&quot; in $interfaceName&quot; if !$foundAttribute;
</del><ins>+        die &quot;Failed to find \&quot;serializer\&quot; attribute \&quot;$attributeName\&quot; in $interfaceName\n&quot; if !$foundAttribute;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     foreach my $attribute (@serializedAttributes) {
</span><span class="lines">@@ -4423,15 +4460,6 @@
</span><span class="cx">         push(@implContent, &quot;    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, \&quot;${name}\&quot;), ${name}Value);\n&quot;);
</span><span class="cx">         push(@implContent, &quot;\n&quot;);
</span><span class="cx">     }
</span><del>-
-    push(@implContent, &quot;    return JSValue::encode(result);\n&quot;);
-    push(@implContent, &quot;}\n&quot;);
-    push(@implContent, &quot;\n&quot;);
-    push(@implContent, &quot;EncodedJSValue JSC_HOST_CALL ${serializerNativeFunctionName}(ExecState* state)\n&quot;);
-    push(@implContent, &quot;{\n&quot;);
-    push(@implContent, &quot;    return BindingCaller&lt;JS$interfaceName&gt;::callOperation&lt;${serializerNativeFunctionName}Caller&gt;(state, \&quot;$serializerFunctionName\&quot;);\n&quot;);
-    push(@implContent, &quot;}\n&quot;);
-    push(@implContent, &quot;\n&quot;);
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> sub GenerateCallWithUsingReferences
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsIDLParserpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/IDLParser.pm (211408 => 211409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/IDLParser.pm        2017-01-31 07:11:45 UTC (rev 211408)
+++ trunk/Source/WebCore/bindings/scripts/IDLParser.pm        2017-01-31 07:17:34 UTC (rev 211409)
</span><span class="lines">@@ -1236,28 +1236,30 @@
</span><span class="cx"> {
</span><span class="cx">     my $self = shift;
</span><span class="cx">     my $serializable = shift;
</span><del>-    my $token = $self-&gt;getToken();
</del><span class="cx"> 
</span><del>-    if ($token-&gt;value() eq &quot;getter&quot;) {
-        $serializable-&gt;hasGetter(1);
-        die &quot;Serializer getter keyword is not currently supported.&quot;;
</del><ins>+    my @attributes = ();
+    my @identifiers = $self-&gt;parseIdentifierList();
</ins><span class="cx"> 
</span><del>-    }
-    if ($token-&gt;value() eq &quot;inherit&quot;) {
-        $serializable-&gt;hasInherit(1);
-        die &quot;Serializer inherit keyword is not currently supported.&quot;;
-    }
</del><ins>+    for my $identifier (@identifiers) {
+        if ($identifier eq &quot;getter&quot;) {
+            $serializable-&gt;hasGetter(1);
+            die &quot;Serializer getter keyword is not currently supported.&quot;;
+        }
</ins><span class="cx"> 
</span><del>-    if ($token-&gt;value() eq &quot;attribute&quot;) {
-        $serializable-&gt;hasAttribute(1);
-        # Attributes will be filled in via applyMemberList()
-        return;
</del><ins>+        if ($identifier eq &quot;inherit&quot;) {
+            $serializable-&gt;hasInherit(1);
+            next;
+        }
+
+        if ($identifier eq &quot;attribute&quot;) {
+            $serializable-&gt;hasAttribute(1);
+            # Attributes will be filled in via applyMemberList()
+            next;
+        }
+
+        push(@attributes, $identifier);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    my @attributes = ();
-    $self-&gt;assertTokenType($token, IdentifierToken);
-    push(@attributes, $token-&gt;value());
-    push(@attributes, @{$self-&gt;parseIdentifiers()});
</del><span class="cx">     $serializable-&gt;attributes(\@attributes);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -2377,17 +2379,6 @@
</span><span class="cx">     $self-&gt;assertUnexpectedToken($next-&gt;value());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-sub isSerializableAttribute
-{
-    my $attribute = shift;
-
-    # FIXME: Need to support more than primitive serializable types.
-    # This check may have to move to the code generator, if we don't have enough information
-    # here to determine serializability: https://heycam.github.io/webidl/#idl-serializers
-    my $serializable_types = '^(\(byte|octet|short|unsigned short|long|unsigned long|long long|unsigned long long|float|unrestricted float|double|unrestricted double|boolean|DOMString|ByteString|USVString)$';
-    return $attribute-&gt;type-&gt;name =~ /$serializable_types/;
-}
-
</del><span class="cx"> sub applyMemberList
</span><span class="cx"> {
</span><span class="cx">     my $interface = shift;
</span><span class="lines">@@ -2424,9 +2415,7 @@
</span><span class="cx">         my $numSerializerAttributes = @{$interface-&gt;serializable-&gt;attributes};
</span><span class="cx">         if ($interface-&gt;serializable-&gt;hasAttribute) {
</span><span class="cx">             foreach my $attribute (@{$interface-&gt;attributes}) {
</span><del>-                if (isSerializableAttribute($attribute)) {
-                    push(@{$interface-&gt;serializable-&gt;attributes}, $attribute-&gt;name);
-                }
</del><ins>+                push(@{$interface-&gt;serializable-&gt;attributes}, $attribute-&gt;name);
</ins><span class="cx">             }
</span><span class="cx">         } elsif ($numSerializerAttributes == 0) {
</span><span class="cx">             foreach my $attribute (@{$interface-&gt;attributes}) {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp (211408 => 211409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp        2017-01-31 07:11:45 UTC (rev 211408)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp        2017-01-31 07:17:34 UTC (rev 211409)
</span><span class="lines">@@ -27,7 +27,7 @@
</span><span class="cx"> #include &quot;JSDOMConvert.h&quot;
</span><span class="cx"> #include &quot;JSDOMExceptionHandling.h&quot;
</span><span class="cx"> #include &quot;JSDOMWrapperCache.h&quot;
</span><del>-#include &quot;JSTestNode.h&quot;
</del><ins>+#include &quot;JSTestException.h&quot;
</ins><span class="cx"> #include &lt;runtime/FunctionPrototype.h&gt;
</span><span class="cx"> #include &lt;runtime/ObjectConstructor.h&gt;
</span><span class="cx"> #include &lt;wtf/GetPtr.h&gt;
</span><span class="lines">@@ -52,6 +52,8 @@
</span><span class="cx"> bool setJSTestSerializationFourthUnrestrictedDoubleAttribute(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
</span><span class="cx"> JSC::EncodedJSValue jsTestSerializationFifthLongAttribute(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
</span><span class="cx"> bool setJSTestSerializationFifthLongAttribute(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
</span><ins>+JSC::EncodedJSValue jsTestSerializationSixthTypedefAttribute(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+bool setJSTestSerializationSixthTypedefAttribute(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
</ins><span class="cx"> JSC::EncodedJSValue jsTestSerializationConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
</span><span class="cx"> bool setJSTestSerializationConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
</span><span class="cx"> 
</span><span class="lines">@@ -107,6 +109,7 @@
</span><span class="cx">     { &quot;thirdUnserializableAttribute&quot;, CustomAccessor, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestSerializationThirdUnserializableAttribute), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestSerializationThirdUnserializableAttribute) } },
</span><span class="cx">     { &quot;fourthUnrestrictedDoubleAttribute&quot;, CustomAccessor, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestSerializationFourthUnrestrictedDoubleAttribute), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestSerializationFourthUnrestrictedDoubleAttribute) } },
</span><span class="cx">     { &quot;fifthLongAttribute&quot;, CustomAccessor, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestSerializationFifthLongAttribute), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestSerializationFifthLongAttribute) } },
</span><ins>+    { &quot;sixthTypedefAttribute&quot;, CustomAccessor, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestSerializationSixthTypedefAttribute), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestSerializationSixthTypedefAttribute) } },
</ins><span class="cx">     { &quot;toJSON&quot;, JSC::Function, NoIntrinsic, { (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestSerializationPrototypeFunctionToJSON), (intptr_t) (0) } },
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -202,7 +205,7 @@
</span><span class="cx">     UNUSED_PARAM(throwScope);
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     auto&amp; impl = thisObject.wrapped();
</span><del>-    JSValue result = toJS&lt;IDLInterface&lt;TestNode&gt;&gt;(state, *thisObject.globalObject(), impl.thirdUnserializableAttribute());
</del><ins>+    JSValue result = toJS&lt;IDLInterface&lt;TestException&gt;&gt;(state, *thisObject.globalObject(), impl.thirdUnserializableAttribute());
</ins><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -238,6 +241,22 @@
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestSerializationSixthTypedefAttributeGetter(ExecState&amp;, JSTestSerialization&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestSerializationSixthTypedefAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestSerialization&gt;::attribute&lt;jsTestSerializationSixthTypedefAttributeGetter&gt;(state, thisValue, &quot;sixthTypedefAttribute&quot;);
+}
+
+static inline JSValue jsTestSerializationSixthTypedefAttributeGetter(ExecState&amp; state, JSTestSerialization&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLDouble&gt;(impl.sixthTypedefAttribute());
+    return result;
+}
+
</ins><span class="cx"> EncodedJSValue jsTestSerializationConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = state-&gt;vm();
</span><span class="lines">@@ -312,7 +331,7 @@
</span><span class="cx">     UNUSED_PARAM(state);
</span><span class="cx">     UNUSED_PARAM(throwScope);
</span><span class="cx">     auto&amp; impl = thisObject.wrapped();
</span><del>-    auto nativeValue = convert&lt;IDLInterface&lt;TestNode&gt;&gt;(state, value, [](JSC::ExecState&amp; state, JSC::ThrowScope&amp; scope) { throwAttributeTypeError(state, scope, &quot;TestSerialization&quot;, &quot;thirdUnserializableAttribute&quot;, &quot;TestNode&quot;); });
</del><ins>+    auto nativeValue = convert&lt;IDLInterface&lt;TestException&gt;&gt;(state, value, [](JSC::ExecState&amp; state, JSC::ThrowScope&amp; scope) { throwAttributeTypeError(state, scope, &quot;TestSerialization&quot;, &quot;thirdUnserializableAttribute&quot;, &quot;TestException&quot;); });
</ins><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="cx">     impl.setThirdUnserializableAttribute(*nativeValue);
</span><span class="cx">     return true;
</span><span class="lines">@@ -357,6 +376,25 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestSerializationSixthTypedefAttributeFunction(ExecState&amp;, JSTestSerialization&amp;, JSValue, ThrowScope&amp;);
+
+bool setJSTestSerializationSixthTypedefAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    return BindingCaller&lt;JSTestSerialization&gt;::setAttribute&lt;setJSTestSerializationSixthTypedefAttributeFunction&gt;(state, thisValue, encodedValue, &quot;sixthTypedefAttribute&quot;);
+}
+
+static inline bool setJSTestSerializationSixthTypedefAttributeFunction(ExecState&amp; state, JSTestSerialization&amp; thisObject, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
+    UNUSED_PARAM(throwScope);
+    auto&amp; impl = thisObject.wrapped();
+    auto nativeValue = convert&lt;IDLDouble&gt;(state, value);
+    RETURN_IF_EXCEPTION(throwScope, false);
+    impl.setSixthTypedefAttribute(WTFMove(nativeValue));
+    return true;
+}
+
+
</ins><span class="cx"> JSValue JSTestSerialization::getConstructor(VM&amp; vm, const JSGlobalObject* globalObject)
</span><span class="cx"> {
</span><span class="cx">     return getDOMConstructor&lt;JSTestSerializationConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
</span><span class="lines">@@ -383,6 +421,10 @@
</span><span class="cx">     ASSERT(!throwScope.exception());
</span><span class="cx">     result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;fifthLongAttribute&quot;), fifthLongAttributeValue);
</span><span class="cx"> 
</span><ins>+    auto sixthTypedefAttributeValue = jsTestSerializationSixthTypedefAttributeGetter(*state, *thisObject, throwScope);
+    ASSERT(!throwScope.exception());
+    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;sixthTypedefAttribute&quot;), sixthTypedefAttributeValue);
+
</ins><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializationcpprej"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp.rej (0 => 211409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp.rej                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp.rej        2017-01-31 07:17:34 UTC (rev 211409)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+diff a/Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp b/Source/WebCore/bindings/scripts/test/JS/JSTestSerialization.cpp        (rejected hunks)
+@@ -24,7 +24,7 @@
+ #include &quot;JSDOMBinding.h&quot;
+ #include &quot;JSDOMConstructor.h&quot;
+ #include &quot;JSDOMConvert.h&quot;
+-#include &quot;JSTestNode.h&quot;
++#include &quot;JSTestException.h&quot;
+ #include &lt;runtime/FunctionPrototype.h&gt;
+ #include &lt;runtime/ObjectConstructor.h&gt;
+ #include &lt;wtf/GetPtr.h&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializationInheritcpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInherit.cpp (0 => 211409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInherit.cpp                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInherit.cpp        2017-01-31 07:17:34 UTC (rev 211409)
</span><span class="lines">@@ -0,0 +1,242 @@
</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;JSTestSerializationInherit.h&quot;
+
+#include &quot;JSDOMBinding.h&quot;
+#include &quot;JSDOMBindingCaller.h&quot;
+#include &quot;JSDOMConstructor.h&quot;
+#include &quot;JSDOMConvert.h&quot;
+#include &quot;JSDOMExceptionHandling.h&quot;
+#include &quot;JSDOMWrapperCache.h&quot;
+#include &lt;runtime/ObjectConstructor.h&gt;
+#include &lt;wtf/GetPtr.h&gt;
+
+using namespace JSC;
+
+namespace WebCore {
+
+// Functions
+
+JSC::EncodedJSValue JSC_HOST_CALL jsTestSerializationInheritPrototypeFunctionToJSON(JSC::ExecState*);
+
+// Attributes
+
+JSC::EncodedJSValue jsTestSerializationInheritInheritLongAttribute(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+bool setJSTestSerializationInheritInheritLongAttribute(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
+JSC::EncodedJSValue jsTestSerializationInheritConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+bool setJSTestSerializationInheritConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
+
+class JSTestSerializationInheritPrototype : public JSC::JSNonFinalObject {
+public:
+    using Base = JSC::JSNonFinalObject;
+    static JSTestSerializationInheritPrototype* create(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure)
+    {
+        JSTestSerializationInheritPrototype* ptr = new (NotNull, JSC::allocateCell&lt;JSTestSerializationInheritPrototype&gt;(vm.heap)) JSTestSerializationInheritPrototype(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:
+    JSTestSerializationInheritPrototype(JSC::VM&amp; vm, JSC::JSGlobalObject*, JSC::Structure* structure)
+        : JSC::JSNonFinalObject(vm, structure)
+    {
+    }
+
+    void finishCreation(JSC::VM&amp;);
+};
+
+using JSTestSerializationInheritConstructor = JSDOMConstructorNotConstructable&lt;JSTestSerializationInherit&gt;;
+
+template&lt;&gt; JSValue JSTestSerializationInheritConstructor::prototypeForStructure(JSC::VM&amp; vm, const JSDOMGlobalObject&amp; globalObject)
+{
+    return JSTestSerialization::getConstructor(vm, &amp;globalObject);
+}
+
+template&lt;&gt; void JSTestSerializationInheritConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
+{
+    putDirect(vm, vm.propertyNames-&gt;prototype, JSTestSerializationInherit::prototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
+    putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestSerializationInherit&quot;))), ReadOnly | DontEnum);
+    putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
+}
+
+template&lt;&gt; const ClassInfo JSTestSerializationInheritConstructor::s_info = { &quot;TestSerializationInherit&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestSerializationInheritConstructor) };
+
+/* Hash table for prototype */
+
+static const HashTableValue JSTestSerializationInheritPrototypeTableValues[] =
+{
+    { &quot;constructor&quot;, DontEnum, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestSerializationInheritConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestSerializationInheritConstructor) } },
+    { &quot;inheritLongAttribute&quot;, CustomAccessor, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestSerializationInheritInheritLongAttribute), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestSerializationInheritInheritLongAttribute) } },
+    { &quot;toJSON&quot;, JSC::Function, NoIntrinsic, { (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestSerializationInheritPrototypeFunctionToJSON), (intptr_t) (0) } },
+};
+
+const ClassInfo JSTestSerializationInheritPrototype::s_info = { &quot;TestSerializationInheritPrototype&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestSerializationInheritPrototype) };
+
+void JSTestSerializationInheritPrototype::finishCreation(VM&amp; vm)
+{
+    Base::finishCreation(vm);
+    reifyStaticProperties(vm, JSTestSerializationInheritPrototypeTableValues, *this);
+}
+
+const ClassInfo JSTestSerializationInherit::s_info = { &quot;TestSerializationInherit&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestSerializationInherit) };
+
+JSTestSerializationInherit::JSTestSerializationInherit(Structure* structure, JSDOMGlobalObject&amp; globalObject, Ref&lt;TestSerializationInherit&gt;&amp;&amp; impl)
+    : JSTestSerialization(structure, globalObject, WTFMove(impl))
+{
+}
+
+void JSTestSerializationInherit::finishCreation(VM&amp; vm)
+{
+    Base::finishCreation(vm);
+    ASSERT(inherits(vm, info()));
+
+}
+
+JSObject* JSTestSerializationInherit::createPrototype(VM&amp; vm, JSGlobalObject* globalObject)
+{
+    return JSTestSerializationInheritPrototype::create(vm, globalObject, JSTestSerializationInheritPrototype::createStructure(vm, globalObject, JSTestSerialization::prototype(vm, globalObject)));
+}
+
+JSObject* JSTestSerializationInherit::prototype(VM&amp; vm, JSGlobalObject* globalObject)
+{
+    return getDOMPrototype&lt;JSTestSerializationInherit&gt;(vm, globalObject);
+}
+
+template&lt;&gt; inline JSTestSerializationInherit* BindingCaller&lt;JSTestSerializationInherit&gt;::castForAttribute(ExecState&amp; state, EncodedJSValue thisValue)
+{
+    return jsDynamicDowncast&lt;JSTestSerializationInherit*&gt;(state.vm(), JSValue::decode(thisValue));
+}
+
+template&lt;&gt; inline JSTestSerializationInherit* BindingCaller&lt;JSTestSerializationInherit&gt;::castForOperation(ExecState&amp; state)
+{
+    return jsDynamicDowncast&lt;JSTestSerializationInherit*&gt;(state.vm(), state.thisValue());
+}
+
+static inline JSValue jsTestSerializationInheritInheritLongAttributeGetter(ExecState&amp;, JSTestSerializationInherit&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestSerializationInheritInheritLongAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestSerializationInherit&gt;::attribute&lt;jsTestSerializationInheritInheritLongAttributeGetter&gt;(state, thisValue, &quot;inheritLongAttribute&quot;);
+}
+
+static inline JSValue jsTestSerializationInheritInheritLongAttributeGetter(ExecState&amp; state, JSTestSerializationInherit&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLLong&gt;(impl.inheritLongAttribute());
+    return result;
+}
+
+EncodedJSValue jsTestSerializationInheritConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    VM&amp; vm = state-&gt;vm();
+    auto throwScope = DECLARE_THROW_SCOPE(vm);
+    JSTestSerializationInheritPrototype* domObject = jsDynamicDowncast&lt;JSTestSerializationInheritPrototype*&gt;(vm, JSValue::decode(thisValue));
+    if (UNLIKELY(!domObject))
+        return throwVMTypeError(state, throwScope);
+    return JSValue::encode(JSTestSerializationInherit::getConstructor(state-&gt;vm(), domObject-&gt;globalObject()));
+}
+
+bool setJSTestSerializationInheritConstructor(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    VM&amp; vm = state-&gt;vm();
+    auto throwScope = DECLARE_THROW_SCOPE(vm);
+    JSValue value = JSValue::decode(encodedValue);
+    JSTestSerializationInheritPrototype* domObject = jsDynamicDowncast&lt;JSTestSerializationInheritPrototype*&gt;(vm, 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);
+}
+
+static inline bool setJSTestSerializationInheritInheritLongAttributeFunction(ExecState&amp;, JSTestSerializationInherit&amp;, JSValue, ThrowScope&amp;);
+
+bool setJSTestSerializationInheritInheritLongAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    return BindingCaller&lt;JSTestSerializationInherit&gt;::setAttribute&lt;setJSTestSerializationInheritInheritLongAttributeFunction&gt;(state, thisValue, encodedValue, &quot;inheritLongAttribute&quot;);
+}
+
+static inline bool setJSTestSerializationInheritInheritLongAttributeFunction(ExecState&amp; state, JSTestSerializationInherit&amp; thisObject, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
+    UNUSED_PARAM(throwScope);
+    auto&amp; impl = thisObject.wrapped();
+    auto nativeValue = convert&lt;IDLLong&gt;(state, value, IntegerConversionConfiguration::Normal);
+    RETURN_IF_EXCEPTION(throwScope, false);
+    impl.setInheritLongAttribute(WTFMove(nativeValue));
+    return true;
+}
+
+
+JSValue JSTestSerializationInherit::getConstructor(VM&amp; vm, const JSGlobalObject* globalObject)
+{
+    return getDOMConstructor&lt;JSTestSerializationInheritConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
+}
+
+static inline EncodedJSValue jsTestSerializationInheritPrototypeFunctionToJSONCaller(ExecState* state, JSTestSerializationInherit* thisObject, JSC::ThrowScope&amp; throwScope)
+{
+    auto&amp; vm = state-&gt;vm();
+    auto* result = constructEmptyObject(state);
+
+    auto firstStringAttributeValue = jsTestSerializationFirstStringAttributeGetter(*state, *thisObject, throwScope);
+    ASSERT(!throwScope.exception());
+    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;firstStringAttribute&quot;), firstStringAttributeValue);
+
+    auto secondLongAttributeValue = jsTestSerializationSecondLongAttributeGetter(*state, *thisObject, throwScope);
+    ASSERT(!throwScope.exception());
+    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;secondLongAttribute&quot;), secondLongAttributeValue);
+
+    auto fourthUnrestrictedDoubleAttributeValue = jsTestSerializationFourthUnrestrictedDoubleAttributeGetter(*state, *thisObject, throwScope);
+    ASSERT(!throwScope.exception());
+    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;fourthUnrestrictedDoubleAttribute&quot;), fourthUnrestrictedDoubleAttributeValue);
+
+    auto fifthLongAttributeValue = jsTestSerializationFifthLongAttributeGetter(*state, *thisObject, throwScope);
+    ASSERT(!throwScope.exception());
+    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;fifthLongAttribute&quot;), fifthLongAttributeValue);
+
+    auto sixthTypedefAttributeValue = jsTestSerializationSixthTypedefAttributeGetter(*state, *thisObject, throwScope);
+    ASSERT(!throwScope.exception());
+    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;sixthTypedefAttribute&quot;), sixthTypedefAttributeValue);
+
+    auto inheritLongAttributeValue = jsTestSerializationInheritInheritLongAttributeGetter(*state, *thisObject, throwScope);
+    ASSERT(!throwScope.exception());
+    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;inheritLongAttribute&quot;), inheritLongAttributeValue);
+
+    return JSValue::encode(result);
+}
+
+EncodedJSValue JSC_HOST_CALL jsTestSerializationInheritPrototypeFunctionToJSON(ExecState* state)
+{
+    return BindingCaller&lt;JSTestSerializationInherit&gt;::callOperation&lt;jsTestSerializationInheritPrototypeFunctionToJSONCaller&gt;(state, &quot;toJSON&quot;);
+}
+
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializationInherith"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInherit.h (0 => 211409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInherit.h                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInherit.h        2017-01-31 07:17:34 UTC (rev 211409)
</span><span class="lines">@@ -0,0 +1,66 @@
</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;JSTestSerialization.h&quot;
+#include &quot;TestSerializationInherit.h&quot;
+
+namespace WebCore {
+
+class JSTestSerializationInherit : public JSTestSerialization {
+public:
+    using Base = JSTestSerialization;
+    using DOMWrapped = TestSerializationInherit;
+    static JSTestSerializationInherit* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestSerializationInherit&gt;&amp;&amp; impl)
+    {
+        JSTestSerializationInherit* ptr = new (NotNull, JSC::allocateCell&lt;JSTestSerializationInherit&gt;(globalObject-&gt;vm().heap)) JSTestSerializationInherit(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*);
+
+    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*);
+    TestSerializationInherit&amp; wrapped() const
+    {
+        return static_cast&lt;TestSerializationInherit&amp;&gt;(Base::wrapped());
+    }
+protected:
+    JSTestSerializationInherit(JSC::Structure*, JSDOMGlobalObject&amp;, Ref&lt;TestSerializationInherit&gt;&amp;&amp;);
+
+    void finishCreation(JSC::VM&amp;);
+};
+
+
+template&lt;&gt; struct JSDOMWrapperConverterTraits&lt;TestSerializationInherit&gt; {
+    using WrapperClass = JSTestSerializationInherit;
+    using ToWrappedReturnType = TestSerializationInherit*;
+};
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializationInheritFinalcpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp (0 => 211409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInheritFinal.cpp        2017-01-31 07:17:34 UTC (rev 211409)
</span><span class="lines">@@ -0,0 +1,284 @@
</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;JSTestSerializationInheritFinal.h&quot;
+
+#include &quot;JSDOMBinding.h&quot;
+#include &quot;JSDOMBindingCaller.h&quot;
+#include &quot;JSDOMConstructor.h&quot;
+#include &quot;JSDOMConvert.h&quot;
+#include &quot;JSDOMExceptionHandling.h&quot;
+#include &quot;JSDOMWrapperCache.h&quot;
+#include &lt;runtime/ObjectConstructor.h&gt;
+#include &lt;wtf/GetPtr.h&gt;
+
+using namespace JSC;
+
+namespace WebCore {
+
+// Functions
+
+JSC::EncodedJSValue JSC_HOST_CALL jsTestSerializationInheritFinalPrototypeFunctionToJSON(JSC::ExecState*);
+
+// Attributes
+
+JSC::EncodedJSValue jsTestSerializationInheritFinalFinalLongAttributeFoo(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+bool setJSTestSerializationInheritFinalFinalLongAttributeFoo(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
+JSC::EncodedJSValue jsTestSerializationInheritFinalFinalLongAttributeBar(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+bool setJSTestSerializationInheritFinalFinalLongAttributeBar(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
+JSC::EncodedJSValue jsTestSerializationInheritFinalConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
+bool setJSTestSerializationInheritFinalConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
+
+class JSTestSerializationInheritFinalPrototype : public JSC::JSNonFinalObject {
+public:
+    using Base = JSC::JSNonFinalObject;
+    static JSTestSerializationInheritFinalPrototype* create(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure)
+    {
+        JSTestSerializationInheritFinalPrototype* ptr = new (NotNull, JSC::allocateCell&lt;JSTestSerializationInheritFinalPrototype&gt;(vm.heap)) JSTestSerializationInheritFinalPrototype(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:
+    JSTestSerializationInheritFinalPrototype(JSC::VM&amp; vm, JSC::JSGlobalObject*, JSC::Structure* structure)
+        : JSC::JSNonFinalObject(vm, structure)
+    {
+    }
+
+    void finishCreation(JSC::VM&amp;);
+};
+
+using JSTestSerializationInheritFinalConstructor = JSDOMConstructorNotConstructable&lt;JSTestSerializationInheritFinal&gt;;
+
+template&lt;&gt; JSValue JSTestSerializationInheritFinalConstructor::prototypeForStructure(JSC::VM&amp; vm, const JSDOMGlobalObject&amp; globalObject)
+{
+    return JSTestSerializationInherit::getConstructor(vm, &amp;globalObject);
+}
+
+template&lt;&gt; void JSTestSerializationInheritFinalConstructor::initializeProperties(VM&amp; vm, JSDOMGlobalObject&amp; globalObject)
+{
+    putDirect(vm, vm.propertyNames-&gt;prototype, JSTestSerializationInheritFinal::prototype(vm, &amp;globalObject), DontDelete | ReadOnly | DontEnum);
+    putDirect(vm, vm.propertyNames-&gt;name, jsNontrivialString(&amp;vm, String(ASCIILiteral(&quot;TestSerializationInheritFinal&quot;))), ReadOnly | DontEnum);
+    putDirect(vm, vm.propertyNames-&gt;length, jsNumber(0), ReadOnly | DontEnum);
+}
+
+template&lt;&gt; const ClassInfo JSTestSerializationInheritFinalConstructor::s_info = { &quot;TestSerializationInheritFinal&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestSerializationInheritFinalConstructor) };
+
+/* Hash table for prototype */
+
+static const HashTableValue JSTestSerializationInheritFinalPrototypeTableValues[] =
+{
+    { &quot;constructor&quot;, DontEnum, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestSerializationInheritFinalConstructor), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestSerializationInheritFinalConstructor) } },
+    { &quot;finalLongAttributeFoo&quot;, CustomAccessor, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestSerializationInheritFinalFinalLongAttributeFoo), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestSerializationInheritFinalFinalLongAttributeFoo) } },
+    { &quot;finalLongAttributeBar&quot;, CustomAccessor, NoIntrinsic, { (intptr_t)static_cast&lt;PropertySlot::GetValueFunc&gt;(jsTestSerializationInheritFinalFinalLongAttributeBar), (intptr_t) static_cast&lt;PutPropertySlot::PutValueFunc&gt;(setJSTestSerializationInheritFinalFinalLongAttributeBar) } },
+    { &quot;toJSON&quot;, JSC::Function, NoIntrinsic, { (intptr_t)static_cast&lt;NativeFunction&gt;(jsTestSerializationInheritFinalPrototypeFunctionToJSON), (intptr_t) (0) } },
+};
+
+const ClassInfo JSTestSerializationInheritFinalPrototype::s_info = { &quot;TestSerializationInheritFinalPrototype&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestSerializationInheritFinalPrototype) };
+
+void JSTestSerializationInheritFinalPrototype::finishCreation(VM&amp; vm)
+{
+    Base::finishCreation(vm);
+    reifyStaticProperties(vm, JSTestSerializationInheritFinalPrototypeTableValues, *this);
+}
+
+const ClassInfo JSTestSerializationInheritFinal::s_info = { &quot;TestSerializationInheritFinal&quot;, &amp;Base::s_info, 0, CREATE_METHOD_TABLE(JSTestSerializationInheritFinal) };
+
+JSTestSerializationInheritFinal::JSTestSerializationInheritFinal(Structure* structure, JSDOMGlobalObject&amp; globalObject, Ref&lt;TestSerializationInheritFinal&gt;&amp;&amp; impl)
+    : JSTestSerializationInherit(structure, globalObject, WTFMove(impl))
+{
+}
+
+void JSTestSerializationInheritFinal::finishCreation(VM&amp; vm)
+{
+    Base::finishCreation(vm);
+    ASSERT(inherits(vm, info()));
+
+}
+
+JSObject* JSTestSerializationInheritFinal::createPrototype(VM&amp; vm, JSGlobalObject* globalObject)
+{
+    return JSTestSerializationInheritFinalPrototype::create(vm, globalObject, JSTestSerializationInheritFinalPrototype::createStructure(vm, globalObject, JSTestSerializationInherit::prototype(vm, globalObject)));
+}
+
+JSObject* JSTestSerializationInheritFinal::prototype(VM&amp; vm, JSGlobalObject* globalObject)
+{
+    return getDOMPrototype&lt;JSTestSerializationInheritFinal&gt;(vm, globalObject);
+}
+
+template&lt;&gt; inline JSTestSerializationInheritFinal* BindingCaller&lt;JSTestSerializationInheritFinal&gt;::castForAttribute(ExecState&amp; state, EncodedJSValue thisValue)
+{
+    return jsDynamicDowncast&lt;JSTestSerializationInheritFinal*&gt;(state.vm(), JSValue::decode(thisValue));
+}
+
+template&lt;&gt; inline JSTestSerializationInheritFinal* BindingCaller&lt;JSTestSerializationInheritFinal&gt;::castForOperation(ExecState&amp; state)
+{
+    return jsDynamicDowncast&lt;JSTestSerializationInheritFinal*&gt;(state.vm(), state.thisValue());
+}
+
+static inline JSValue jsTestSerializationInheritFinalFinalLongAttributeFooGetter(ExecState&amp;, JSTestSerializationInheritFinal&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestSerializationInheritFinalFinalLongAttributeFoo(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestSerializationInheritFinal&gt;::attribute&lt;jsTestSerializationInheritFinalFinalLongAttributeFooGetter&gt;(state, thisValue, &quot;finalLongAttributeFoo&quot;);
+}
+
+static inline JSValue jsTestSerializationInheritFinalFinalLongAttributeFooGetter(ExecState&amp; state, JSTestSerializationInheritFinal&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLLong&gt;(impl.finalLongAttributeFoo());
+    return result;
+}
+
+static inline JSValue jsTestSerializationInheritFinalFinalLongAttributeBarGetter(ExecState&amp;, JSTestSerializationInheritFinal&amp;, ThrowScope&amp; throwScope);
+
+EncodedJSValue jsTestSerializationInheritFinalFinalLongAttributeBar(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    return BindingCaller&lt;JSTestSerializationInheritFinal&gt;::attribute&lt;jsTestSerializationInheritFinalFinalLongAttributeBarGetter&gt;(state, thisValue, &quot;finalLongAttributeBar&quot;);
+}
+
+static inline JSValue jsTestSerializationInheritFinalFinalLongAttributeBarGetter(ExecState&amp; state, JSTestSerializationInheritFinal&amp; thisObject, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(throwScope);
+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject.wrapped();
+    JSValue result = toJS&lt;IDLLong&gt;(impl.finalLongAttributeBar());
+    return result;
+}
+
+EncodedJSValue jsTestSerializationInheritFinalConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
+{
+    VM&amp; vm = state-&gt;vm();
+    auto throwScope = DECLARE_THROW_SCOPE(vm);
+    JSTestSerializationInheritFinalPrototype* domObject = jsDynamicDowncast&lt;JSTestSerializationInheritFinalPrototype*&gt;(vm, JSValue::decode(thisValue));
+    if (UNLIKELY(!domObject))
+        return throwVMTypeError(state, throwScope);
+    return JSValue::encode(JSTestSerializationInheritFinal::getConstructor(state-&gt;vm(), domObject-&gt;globalObject()));
+}
+
+bool setJSTestSerializationInheritFinalConstructor(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    VM&amp; vm = state-&gt;vm();
+    auto throwScope = DECLARE_THROW_SCOPE(vm);
+    JSValue value = JSValue::decode(encodedValue);
+    JSTestSerializationInheritFinalPrototype* domObject = jsDynamicDowncast&lt;JSTestSerializationInheritFinalPrototype*&gt;(vm, 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);
+}
+
+static inline bool setJSTestSerializationInheritFinalFinalLongAttributeFooFunction(ExecState&amp;, JSTestSerializationInheritFinal&amp;, JSValue, ThrowScope&amp;);
+
+bool setJSTestSerializationInheritFinalFinalLongAttributeFoo(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    return BindingCaller&lt;JSTestSerializationInheritFinal&gt;::setAttribute&lt;setJSTestSerializationInheritFinalFinalLongAttributeFooFunction&gt;(state, thisValue, encodedValue, &quot;finalLongAttributeFoo&quot;);
+}
+
+static inline bool setJSTestSerializationInheritFinalFinalLongAttributeFooFunction(ExecState&amp; state, JSTestSerializationInheritFinal&amp; thisObject, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
+    UNUSED_PARAM(throwScope);
+    auto&amp; impl = thisObject.wrapped();
+    auto nativeValue = convert&lt;IDLLong&gt;(state, value, IntegerConversionConfiguration::Normal);
+    RETURN_IF_EXCEPTION(throwScope, false);
+    impl.setFinalLongAttributeFoo(WTFMove(nativeValue));
+    return true;
+}
+
+
+static inline bool setJSTestSerializationInheritFinalFinalLongAttributeBarFunction(ExecState&amp;, JSTestSerializationInheritFinal&amp;, JSValue, ThrowScope&amp;);
+
+bool setJSTestSerializationInheritFinalFinalLongAttributeBar(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
+{
+    return BindingCaller&lt;JSTestSerializationInheritFinal&gt;::setAttribute&lt;setJSTestSerializationInheritFinalFinalLongAttributeBarFunction&gt;(state, thisValue, encodedValue, &quot;finalLongAttributeBar&quot;);
+}
+
+static inline bool setJSTestSerializationInheritFinalFinalLongAttributeBarFunction(ExecState&amp; state, JSTestSerializationInheritFinal&amp; thisObject, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
+    UNUSED_PARAM(throwScope);
+    auto&amp; impl = thisObject.wrapped();
+    auto nativeValue = convert&lt;IDLLong&gt;(state, value, IntegerConversionConfiguration::Normal);
+    RETURN_IF_EXCEPTION(throwScope, false);
+    impl.setFinalLongAttributeBar(WTFMove(nativeValue));
+    return true;
+}
+
+
+JSValue JSTestSerializationInheritFinal::getConstructor(VM&amp; vm, const JSGlobalObject* globalObject)
+{
+    return getDOMConstructor&lt;JSTestSerializationInheritFinalConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
+}
+
+static inline EncodedJSValue jsTestSerializationInheritFinalPrototypeFunctionToJSONCaller(ExecState* state, JSTestSerializationInheritFinal* thisObject, JSC::ThrowScope&amp; throwScope)
+{
+    auto&amp; vm = state-&gt;vm();
+    auto* result = constructEmptyObject(state);
+
+    auto firstStringAttributeValue = jsTestSerializationFirstStringAttributeGetter(*state, *thisObject, throwScope);
+    ASSERT(!throwScope.exception());
+    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;firstStringAttribute&quot;), firstStringAttributeValue);
+
+    auto secondLongAttributeValue = jsTestSerializationSecondLongAttributeGetter(*state, *thisObject, throwScope);
+    ASSERT(!throwScope.exception());
+    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;secondLongAttribute&quot;), secondLongAttributeValue);
+
+    auto fourthUnrestrictedDoubleAttributeValue = jsTestSerializationFourthUnrestrictedDoubleAttributeGetter(*state, *thisObject, throwScope);
+    ASSERT(!throwScope.exception());
+    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;fourthUnrestrictedDoubleAttribute&quot;), fourthUnrestrictedDoubleAttributeValue);
+
+    auto fifthLongAttributeValue = jsTestSerializationFifthLongAttributeGetter(*state, *thisObject, throwScope);
+    ASSERT(!throwScope.exception());
+    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;fifthLongAttribute&quot;), fifthLongAttributeValue);
+
+    auto sixthTypedefAttributeValue = jsTestSerializationSixthTypedefAttributeGetter(*state, *thisObject, throwScope);
+    ASSERT(!throwScope.exception());
+    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;sixthTypedefAttribute&quot;), sixthTypedefAttributeValue);
+
+    auto inheritLongAttributeValue = jsTestSerializationInheritInheritLongAttributeGetter(*state, *thisObject, throwScope);
+    ASSERT(!throwScope.exception());
+    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;inheritLongAttribute&quot;), inheritLongAttributeValue);
+
+    auto finalLongAttributeBarValue = jsTestSerializationInheritFinalFinalLongAttributeBarGetter(*state, *thisObject, throwScope);
+    ASSERT(!throwScope.exception());
+    result-&gt;putDirect(vm, Identifier::fromString(&amp;vm, &quot;finalLongAttributeBar&quot;), finalLongAttributeBarValue);
+
+    return JSValue::encode(result);
+}
+
+EncodedJSValue JSC_HOST_CALL jsTestSerializationInheritFinalPrototypeFunctionToJSON(ExecState* state)
+{
+    return BindingCaller&lt;JSTestSerializationInheritFinal&gt;::callOperation&lt;jsTestSerializationInheritFinalPrototypeFunctionToJSONCaller&gt;(state, &quot;toJSON&quot;);
+}
+
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializationInheritFinalh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInheritFinal.h (0 => 211409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInheritFinal.h                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializationInheritFinal.h        2017-01-31 07:17:34 UTC (rev 211409)
</span><span class="lines">@@ -0,0 +1,66 @@
</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;JSTestSerializationInherit.h&quot;
+#include &quot;TestSerializationInheritFinal.h&quot;
+
+namespace WebCore {
+
+class JSTestSerializationInheritFinal : public JSTestSerializationInherit {
+public:
+    using Base = JSTestSerializationInherit;
+    using DOMWrapped = TestSerializationInheritFinal;
+    static JSTestSerializationInheritFinal* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref&lt;TestSerializationInheritFinal&gt;&amp;&amp; impl)
+    {
+        JSTestSerializationInheritFinal* ptr = new (NotNull, JSC::allocateCell&lt;JSTestSerializationInheritFinal&gt;(globalObject-&gt;vm().heap)) JSTestSerializationInheritFinal(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*);
+
+    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*);
+    TestSerializationInheritFinal&amp; wrapped() const
+    {
+        return static_cast&lt;TestSerializationInheritFinal&amp;&gt;(Base::wrapped());
+    }
+protected:
+    JSTestSerializationInheritFinal(JSC::Structure*, JSDOMGlobalObject&amp;, Ref&lt;TestSerializationInheritFinal&gt;&amp;&amp;);
+
+    void finishCreation(JSC::VM&amp;);
+};
+
+
+template&lt;&gt; struct JSDOMWrapperConverterTraits&lt;TestSerializationInheritFinal&gt; {
+    using WrapperClass = JSTestSerializationInheritFinal;
+    using ToWrappedReturnType = TestSerializationInheritFinal*;
+};
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestTestSerializationidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/TestSerialization.idl (211408 => 211409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/TestSerialization.idl        2017-01-31 07:11:45 UTC (rev 211408)
+++ trunk/Source/WebCore/bindings/scripts/test/TestSerialization.idl        2017-01-31 07:17:34 UTC (rev 211409)
</span><span class="lines">@@ -23,12 +23,15 @@
</span><span class="cx">  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
</span><span class="cx">  */
</span><span class="cx"> 
</span><ins>+typedef double TestTimeStamp;
+
</ins><span class="cx"> interface TestSerialization {
</span><span class="cx">     attribute DOMString             firstStringAttribute;
</span><span class="cx">     attribute long                  secondLongAttribute;
</span><del>-    attribute TestNode              thirdUnserializableAttribute;
</del><ins>+    attribute TestException         thirdUnserializableAttribute;
</ins><span class="cx">     attribute unrestricted double   fourthUnrestrictedDoubleAttribute;
</span><span class="cx">     attribute long                  fifthLongAttribute;
</span><ins>+    attribute TestTimeStamp         sixthTypedefAttribute;
</ins><span class="cx"> 
</span><span class="cx">     serializer = { attribute };
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestTestSerializationInheritidlfromrev211408trunkSourceWebCorebindingsscriptstestTestSerializationidl"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/bindings/scripts/test/TestSerializationInherit.idl (from rev 211408, trunk/Source/WebCore/bindings/scripts/test/TestSerialization.idl) (0 => 211409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/TestSerializationInherit.idl                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/TestSerializationInherit.idl        2017-01-31 07:17:34 UTC (rev 211409)
</span><span class="lines">@@ -0,0 +1,30 @@
</span><ins>+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+interface TestSerializationInherit : TestSerialization {
+    attribute long                  inheritLongAttribute;
+
+    serializer = { inherit, attribute };
+};
</ins></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestTestSerializationInheritFinalidlfromrev211408trunkSourceWebCorebindingsscriptstestTestSerializationidl"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/bindings/scripts/test/TestSerializationInheritFinal.idl (from rev 211408, trunk/Source/WebCore/bindings/scripts/test/TestSerialization.idl) (0 => 211409)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/TestSerializationInheritFinal.idl                                (rev 0)
+++ trunk/Source/WebCore/bindings/scripts/test/TestSerializationInheritFinal.idl        2017-01-31 07:17:34 UTC (rev 211409)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+interface TestSerializationInheritFinal : TestSerializationInherit {
+    attribute long                  finalLongAttributeFoo;
+    attribute long                  finalLongAttributeBar;
+
+    serializer = { inherit, finalLongAttributeBar };
+};
</ins></span></pre>
</div>
</div>

</body>
</html>