<!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>[206989] 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/206989">206989</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-10-10 01:13:56 -0700 (Mon, 10 Oct 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Refactor binding generated casted-this checks for attribute setters
https://bugs.webkit.org/show_bug.cgi?id=163181

Patch by Youenn Fablet &lt;youenn@apple.com&gt; on 2016-10-10
Reviewed by Darin Adler.

No change of behavior.
Covered by existing tests and binding expectations.

Adding support for attribute setter in BindingCaller.
Updating binding generator to make use of it.
Future refactoring should use more reference and rename castedThis to thisObject, like for getters.

* bindings/js/JSDOMBinding.h:
(WebCore::BindingCaller::setAttribute):
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateImplementation):
* bindings/scripts/test/JS/JSTestInterface.cpp:
* bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
* bindings/scripts/test/JS/JSTestNode.cpp:
* bindings/scripts/test/JS/JSTestNondeterministic.cpp:
* bindings/scripts/test/JS/JSTestObj.cpp:
* bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
* bindings/scripts/test/JS/JSTestTypedefs.cpp:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMBindingh">trunk/Source/WebCore/bindings/js/JSDOMBinding.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm">trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestGlobalObjectcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministiccpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (206988 => 206989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-10-10 07:45:52 UTC (rev 206988)
+++ trunk/Source/WebCore/ChangeLog        2016-10-10 08:13:56 UTC (rev 206989)
</span><span class="lines">@@ -1,3 +1,29 @@
</span><ins>+2016-10-10  Youenn Fablet  &lt;youenn@apple.com&gt;
+
+        Refactor binding generated casted-this checks for attribute setters
+        https://bugs.webkit.org/show_bug.cgi?id=163181
+
+        Reviewed by Darin Adler.
+
+        No change of behavior.
+        Covered by existing tests and binding expectations.
+
+        Adding support for attribute setter in BindingCaller.
+        Updating binding generator to make use of it.
+        Future refactoring should use more reference and rename castedThis to thisObject, like for getters.
+
+        * bindings/js/JSDOMBinding.h:
+        (WebCore::BindingCaller::setAttribute):
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateImplementation):
+        * bindings/scripts/test/JS/JSTestInterface.cpp:
+        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
+        * bindings/scripts/test/JS/JSTestNode.cpp:
+        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
+        * bindings/scripts/test/JS/JSTestObj.cpp:
+        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
+        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
+
</ins><span class="cx"> 2016-10-09  Darin Adler  &lt;darin@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Move encrypted media from legacy to new DOM exceptions
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMBindingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMBinding.h (206988 => 206989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2016-10-10 07:45:52 UTC (rev 206988)
+++ trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2016-10-10 08:13:56 UTC (rev 206989)
</span><span class="lines">@@ -333,8 +333,23 @@
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename JSClass&gt;
</span><span class="cx"> struct BindingCaller {
</span><ins>+    using AttributeSetterFunction = bool(JSC::ExecState*, JSClass*, JSC::JSValue, JSC::ThrowScope&amp;);
</ins><span class="cx">     using AttributeGetterFunction = JSC::JSValue(JSC::ExecState*, JSClass*, JSC::ThrowScope&amp;);
</span><span class="cx"> 
</span><ins>+    template&lt;AttributeSetterFunction setter, CastedThisErrorBehavior shouldThrow = CastedThisErrorBehavior::Throw&gt;
+    static bool setAttribute(JSC::ExecState* state, JSC::EncodedJSValue thisValue, JSC::EncodedJSValue encodedValue, const char* attributeName)
+    {
+        ASSERT(state);
+        auto throwScope = DECLARE_THROW_SCOPE(state-&gt;vm());
+        auto* thisObject = JSClass::castForAttribute(state, thisValue);
+        if (UNLIKELY(!thisObject)) {
+            ASSERT(JSClass::info());
+            return (shouldThrow == CastedThisErrorBehavior::Throw) ? throwSetterTypeError(*state, throwScope, JSClass::info()-&gt;className, attributeName) : false;
+        }
+        // FIXME: We should refactor the binding generated code to use references for state and thisObject.
+        return setter(state, thisObject, JSC::JSValue::decode(encodedValue), throwScope);
+    }
+
</ins><span class="cx">     template&lt;AttributeGetterFunction getter, CastedThisErrorBehavior shouldThrow = CastedThisErrorBehavior::Throw&gt;
</span><span class="cx">     static JSC::EncodedJSValue attribute(JSC::ExecState* state, JSC::EncodedJSValue thisValue, const char* attributeName)
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (206988 => 206989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-10-10 07:45:52 UTC (rev 206988)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-10-10 08:13:56 UTC (rev 206989)
</span><span class="lines">@@ -3201,26 +3201,28 @@
</span><span class="cx">             my $attributeConditionalString = $codeGenerator-&gt;GenerateConditionalString($attribute-&gt;signature);
</span><span class="cx">             push(@implContent, &quot;#if ${attributeConditionalString}\n&quot;) if $attributeConditionalString;
</span><span class="cx"> 
</span><del>-            push(@implContent, &quot;bool ${putFunctionName}(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)\n&quot;);
-            push(@implContent, &quot;{\n&quot;);
-            push(@implContent, &quot;    VM&amp; vm = state-&gt;vm();\n&quot;);
-            push(@implContent, &quot;    auto throwScope = DECLARE_THROW_SCOPE(vm);\n&quot;);
-            push(@implContent, &quot;    UNUSED_PARAM(throwScope);\n&quot;);
-            push(@implContent, &quot;    JSValue value = JSValue::decode(encodedValue);\n&quot;);
-            push(@implContent, &quot;    UNUSED_PARAM(thisValue);\n&quot;) if !$attribute-&gt;isStatic;
</del><span class="cx">             if (!$attribute-&gt;isStatic) {
</span><del>-                if ($interface-&gt;extendedAttributes-&gt;{CustomProxyToJSObject}) {
-                    push(@implContent, &quot;    ${className}* castedThis = to${className}(JSValue::decode(thisValue));\n&quot;);
-                } else {
-                    push(@implContent, &quot;    ${className}* castedThis = &quot; . GetCastingHelperForThisObject($interface) . &quot;(JSValue::decode(thisValue));\n&quot;);
-                }
-                push(@implContent, &quot;    if (UNLIKELY(!castedThis))\n&quot;);
-                if ($attribute-&gt;signature-&gt;extendedAttributes-&gt;{LenientThis}) {
-                    push(@implContent, &quot;        return false;\n&quot;);
-                } else {
-                    push(@implContent, &quot;        return throwSetterTypeError(*state, throwScope, \&quot;$visibleInterfaceName\&quot;, \&quot;$name\&quot;);\n&quot;);
-                }
</del><ins>+                my $setterFunction = &quot;${putFunctionName}Function&quot;;
+                my $templateParameters = $setterFunction;
+                $templateParameters .= &quot;, CastedThisErrorBehavior::ReturnEarly&quot; if $attribute-&gt;signature-&gt;extendedAttributes-&gt;{LenientThis};
+
+                push(@implContent, &quot;static inline bool ${setterFunction}(ExecState*, ${className}*, JSValue, ThrowScope&amp;);\n\n&quot;);
+
+                push(@implContent, &quot;bool ${putFunctionName}(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)\n&quot;);
+                push(@implContent, &quot;{\n&quot;);
+                push(@implContent, &quot;    return BindingCaller&lt;${className}&gt;::setAttribute&lt;${templateParameters}&gt;(state, thisValue, encodedValue, \&quot;$name\&quot;);\n&quot;);
+                push(@implContent, &quot;}\n\n&quot;);
+
+                push(@implContent, &quot;static inline bool ${setterFunction}(ExecState* state, ${className}* castedThis, JSValue value, ThrowScope&amp; throwScope)\n&quot;);
+                push(@implContent, &quot;{\n&quot;);
+                push(@implContent, &quot;    UNUSED_PARAM(state);\n&quot;);
+                push(@implContent, &quot;    UNUSED_PARAM(throwScope);\n&quot;);
+            } else {
+                push(@implContent, &quot;bool ${putFunctionName}(ExecState* state, EncodedJSValue, EncodedJSValue encodedValue)\n&quot;);
+                push(@implContent, &quot;{\n&quot;);
+                push(@implContent, &quot;    UNUSED_PARAM(state);\n&quot;);
</ins><span class="cx">             }
</span><ins>+
</ins><span class="cx">             if ($interface-&gt;extendedAttributes-&gt;{CheckSecurity} &amp;&amp; !$attribute-&gt;signature-&gt;extendedAttributes-&gt;{DoNotCheckSecurity} &amp;&amp; !$attribute-&gt;signature-&gt;extendedAttributes-&gt;{DoNotCheckSecurityOnSetter}) {
</span><span class="cx">                 if ($interfaceName eq &quot;DOMWindow&quot;) {
</span><span class="cx">                     push(@implContent, &quot;    if (!BindingSecurity::shouldAllowAccessToDOMWindow(state, castedThis-&gt;wrapped(), ThrowSecurityError))\n&quot;);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestGlobalObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp (206988 => 206989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp        2016-10-10 07:45:52 UTC (rev 206988)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp        2016-10-10 08:13:56 UTC (rev 206989)
</span><span class="lines">@@ -276,16 +276,17 @@
</span><span class="cx">     return domObject-&gt;putDirect(state-&gt;vm(), state-&gt;propertyNames().constructor, value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestGlobalObjectRegularAttributeFunction(ExecState*, JSTestGlobalObject*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestGlobalObjectRegularAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestGlobalObject&gt;::setAttribute&lt;setJSTestGlobalObjectRegularAttributeFunction&gt;(state, thisValue, encodedValue, &quot;regularAttribute&quot;);
+}
+
+static inline bool setJSTestGlobalObjectRegularAttributeFunction(ExecState* state, JSTestGlobalObject* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestGlobalObject* castedThis = jsDynamicCast&lt;JSTestGlobalObject*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestGlobalObject&quot;, &quot;regularAttribute&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -294,16 +295,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestGlobalObjectPublicAndPrivateAttributeFunction(ExecState*, JSTestGlobalObject*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestGlobalObjectPublicAndPrivateAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestGlobalObject&gt;::setAttribute&lt;setJSTestGlobalObjectPublicAndPrivateAttributeFunction&gt;(state, thisValue, encodedValue, &quot;publicAndPrivateAttribute&quot;);
+}
+
+static inline bool setJSTestGlobalObjectPublicAndPrivateAttributeFunction(ExecState* state, JSTestGlobalObject* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestGlobalObject* castedThis = jsDynamicCast&lt;JSTestGlobalObject*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestGlobalObject&quot;, &quot;publicAndPrivateAttribute&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -313,16 +315,17 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><ins>+static inline bool setJSTestGlobalObjectPublicAndPrivateConditionalAttributeFunction(ExecState*, JSTestGlobalObject*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestGlobalObjectPublicAndPrivateConditionalAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestGlobalObject&gt;::setAttribute&lt;setJSTestGlobalObjectPublicAndPrivateConditionalAttributeFunction&gt;(state, thisValue, encodedValue, &quot;publicAndPrivateConditionalAttribute&quot;);
+}
+
+static inline bool setJSTestGlobalObjectPublicAndPrivateConditionalAttributeFunction(ExecState* state, JSTestGlobalObject* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestGlobalObject* castedThis = jsDynamicCast&lt;JSTestGlobalObject*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestGlobalObject&quot;, &quot;publicAndPrivateConditionalAttribute&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -333,16 +336,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><ins>+static inline bool setJSTestGlobalObjectEnabledAtRuntimeAttributeFunction(ExecState*, JSTestGlobalObject*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestGlobalObjectEnabledAtRuntimeAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestGlobalObject&gt;::setAttribute&lt;setJSTestGlobalObjectEnabledAtRuntimeAttributeFunction&gt;(state, thisValue, encodedValue, &quot;enabledAtRuntimeAttribute&quot;);
+}
+
+static inline bool setJSTestGlobalObjectEnabledAtRuntimeAttributeFunction(ExecState* state, JSTestGlobalObject* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestGlobalObject* castedThis = jsDynamicCast&lt;JSTestGlobalObject*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestGlobalObject&quot;, &quot;enabledAtRuntimeAttribute&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp (206988 => 206989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2016-10-10 07:45:52 UTC (rev 206988)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2016-10-10 08:13:56 UTC (rev 206989)
</span><span class="lines">@@ -678,12 +678,9 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-bool setJSTestInterfaceConstructorImplementsStaticAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</del><ins>+bool setJSTestInterfaceConstructorImplementsStaticAttr(ExecState* state, EncodedJSValue, EncodedJSValue encodedValue)
</ins><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
-    UNUSED_PARAM(throwScope);
-    JSValue value = JSValue::decode(encodedValue);
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="cx">     TestInterface::setImplementsStaticAttr(WTFMove(nativeValue));
</span><span class="lines">@@ -693,16 +690,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><ins>+static inline bool setJSTestInterfaceImplementsStr2Function(ExecState*, JSTestInterface*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestInterfaceImplementsStr2(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestInterface&gt;::setAttribute&lt;setJSTestInterfaceImplementsStr2Function&gt;(state, thisValue, encodedValue, &quot;implementsStr2&quot;);
+}
+
+static inline bool setJSTestInterfaceImplementsStr2Function(ExecState* state, JSTestInterface* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestInterface* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;implementsStr2&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -713,16 +711,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><ins>+static inline bool setJSTestInterfaceImplementsStr3Function(ExecState*, JSTestInterface*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestInterfaceImplementsStr3(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestInterface&gt;::setAttribute&lt;setJSTestInterfaceImplementsStr3Function&gt;(state, thisValue, encodedValue, &quot;implementsStr3&quot;);
+}
+
+static inline bool setJSTestInterfaceImplementsStr3Function(ExecState* state, JSTestInterface* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestInterface* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;implementsStr3&quot;);
</del><span class="cx">     castedThis-&gt;setImplementsStr3(*state, value);
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="lines">@@ -730,16 +729,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><ins>+static inline bool setJSTestInterfaceImplementsNodeFunction(ExecState*, JSTestInterface*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestInterfaceImplementsNode(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestInterface&gt;::setAttribute&lt;setJSTestInterfaceImplementsNodeFunction&gt;(state, thisValue, encodedValue, &quot;implementsNode&quot;);
+}
+
+static inline bool setJSTestInterfaceImplementsNodeFunction(ExecState* state, JSTestInterface* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestInterface* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;implementsNode&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = JSNode::toWrapped(value);
</span><span class="cx">     if (UNLIKELY(!nativeValue)) {
</span><span class="lines">@@ -753,12 +753,9 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><del>-bool setJSTestInterfaceConstructorSupplementalStaticAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</del><ins>+bool setJSTestInterfaceConstructorSupplementalStaticAttr(ExecState* state, EncodedJSValue, EncodedJSValue encodedValue)
</ins><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
-    UNUSED_PARAM(throwScope);
-    JSValue value = JSValue::decode(encodedValue);
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="cx">     WebCore::TestSupplemental::setSupplementalStaticAttr(WTFMove(nativeValue));
</span><span class="lines">@@ -768,16 +765,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><ins>+static inline bool setJSTestInterfaceSupplementalStr2Function(ExecState*, JSTestInterface*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestInterfaceSupplementalStr2(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestInterface&gt;::setAttribute&lt;setJSTestInterfaceSupplementalStr2Function&gt;(state, thisValue, encodedValue, &quot;supplementalStr2&quot;);
+}
+
+static inline bool setJSTestInterfaceSupplementalStr2Function(ExecState* state, JSTestInterface* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestInterface* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;supplementalStr2&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -788,16 +786,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><ins>+static inline bool setJSTestInterfaceSupplementalStr3Function(ExecState*, JSTestInterface*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestInterfaceSupplementalStr3(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestInterface&gt;::setAttribute&lt;setJSTestInterfaceSupplementalStr3Function&gt;(state, thisValue, encodedValue, &quot;supplementalStr3&quot;);
+}
+
+static inline bool setJSTestInterfaceSupplementalStr3Function(ExecState* state, JSTestInterface* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestInterface* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;supplementalStr3&quot;);
</del><span class="cx">     castedThis-&gt;setSupplementalStr3(*state, value);
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="lines">@@ -805,16 +804,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><ins>+static inline bool setJSTestInterfaceSupplementalNodeFunction(ExecState*, JSTestInterface*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestInterfaceSupplementalNode(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestInterface&gt;::setAttribute&lt;setJSTestInterfaceSupplementalNodeFunction&gt;(state, thisValue, encodedValue, &quot;supplementalNode&quot;);
+}
+
+static inline bool setJSTestInterfaceSupplementalNodeFunction(ExecState* state, JSTestInterface* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestInterface* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;supplementalNode&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = JSNode::toWrapped(value);
</span><span class="cx">     if (UNLIKELY(!nativeValue)) {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp (206988 => 206989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp        2016-10-10 07:45:52 UTC (rev 206988)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp        2016-10-10 08:13:56 UTC (rev 206989)
</span><span class="lines">@@ -189,16 +189,17 @@
</span><span class="cx">     return domObject-&gt;putDirect(state-&gt;vm(), state-&gt;propertyNames().constructor, value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestJSBuiltinConstructorTestAttributeRWCustomFunction(ExecState*, JSTestJSBuiltinConstructor*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestJSBuiltinConstructorTestAttributeRWCustom(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestJSBuiltinConstructor&gt;::setAttribute&lt;setJSTestJSBuiltinConstructorTestAttributeRWCustomFunction&gt;(state, thisValue, encodedValue, &quot;testAttributeRWCustom&quot;);
+}
+
+static inline bool setJSTestJSBuiltinConstructorTestAttributeRWCustomFunction(ExecState* state, JSTestJSBuiltinConstructor* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestJSBuiltinConstructor* castedThis = jsDynamicCast&lt;JSTestJSBuiltinConstructor*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestJSBuiltinConstructor&quot;, &quot;testAttributeRWCustom&quot;);
</del><span class="cx">     castedThis-&gt;setTestAttributeRWCustom(*state, value);
</span><span class="cx">     return true;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp (206988 => 206989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2016-10-10 07:45:52 UTC (rev 206988)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2016-10-10 08:13:56 UTC (rev 206989)
</span><span class="lines">@@ -212,16 +212,17 @@
</span><span class="cx">     return domObject-&gt;putDirect(state-&gt;vm(), state-&gt;propertyNames().constructor, value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestNodeNameFunction(ExecState*, JSTestNode*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestNodeName(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestNode&gt;::setAttribute&lt;setJSTestNodeNameFunction&gt;(state, thisValue, encodedValue, &quot;name&quot;);
+}
+
+static inline bool setJSTestNodeNameFunction(ExecState* state, JSTestNode* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestNode* castedThis = jsDynamicCast&lt;JSTestNode*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestNode&quot;, &quot;name&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministiccpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp (206988 => 206989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp        2016-10-10 07:45:52 UTC (rev 206988)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp        2016-10-10 08:13:56 UTC (rev 206989)
</span><span class="lines">@@ -356,16 +356,17 @@
</span><span class="cx">     return domObject-&gt;putDirect(state-&gt;vm(), state-&gt;propertyNames().constructor, value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestNondeterministicNondeterministicWriteableAttrFunction(ExecState*, JSTestNondeterministic*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestNondeterministicNondeterministicWriteableAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestNondeterministic&gt;::setAttribute&lt;setJSTestNondeterministicNondeterministicWriteableAttrFunction&gt;(state, thisValue, encodedValue, &quot;nondeterministicWriteableAttr&quot;);
+}
+
+static inline bool setJSTestNondeterministicNondeterministicWriteableAttrFunction(ExecState* state, JSTestNondeterministic* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestNondeterministic&quot;, &quot;nondeterministicWriteableAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -374,16 +375,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestNondeterministicNondeterministicExceptionAttrFunction(ExecState*, JSTestNondeterministic*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestNondeterministicNondeterministicExceptionAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestNondeterministic&gt;::setAttribute&lt;setJSTestNondeterministicNondeterministicExceptionAttrFunction&gt;(state, thisValue, encodedValue, &quot;nondeterministicExceptionAttr&quot;);
+}
+
+static inline bool setJSTestNondeterministicNondeterministicExceptionAttrFunction(ExecState* state, JSTestNondeterministic* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestNondeterministic&quot;, &quot;nondeterministicExceptionAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -392,16 +394,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestNondeterministicNondeterministicGetterExceptionAttrFunction(ExecState*, JSTestNondeterministic*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestNondeterministicNondeterministicGetterExceptionAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestNondeterministic&gt;::setAttribute&lt;setJSTestNondeterministicNondeterministicGetterExceptionAttrFunction&gt;(state, thisValue, encodedValue, &quot;nondeterministicGetterExceptionAttr&quot;);
+}
+
+static inline bool setJSTestNondeterministicNondeterministicGetterExceptionAttrFunction(ExecState* state, JSTestNondeterministic* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestNondeterministic&quot;, &quot;nondeterministicGetterExceptionAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -410,16 +413,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestNondeterministicNondeterministicSetterExceptionAttrFunction(ExecState*, JSTestNondeterministic*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestNondeterministicNondeterministicSetterExceptionAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestNondeterministic&gt;::setAttribute&lt;setJSTestNondeterministicNondeterministicSetterExceptionAttrFunction&gt;(state, thisValue, encodedValue, &quot;nondeterministicSetterExceptionAttr&quot;);
+}
+
+static inline bool setJSTestNondeterministicNondeterministicSetterExceptionAttrFunction(ExecState* state, JSTestNondeterministic* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestNondeterministic* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestNondeterministic&quot;, &quot;nondeterministicSetterExceptionAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     ExceptionCode ec = 0;
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (206988 => 206989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-10-10 07:45:52 UTC (rev 206988)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-10-10 08:13:56 UTC (rev 206989)
</span><span class="lines">@@ -3195,12 +3195,9 @@
</span><span class="cx">     return domObject-&gt;putDirect(state-&gt;vm(), state-&gt;propertyNames().constructor, value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool setJSTestObjConstructorStaticStringAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</del><ins>+bool setJSTestObjConstructorStaticStringAttr(ExecState* state, EncodedJSValue, EncodedJSValue encodedValue)
</ins><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
-    UNUSED_PARAM(throwScope);
-    JSValue value = JSValue::decode(encodedValue);
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="cx">     TestObj::setStaticStringAttr(WTFMove(nativeValue));
</span><span class="lines">@@ -3208,31 +3205,33 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjTestSubObjEnabledBySettingConstructorFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjTestSubObjEnabledBySettingConstructor(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjTestSubObjEnabledBySettingConstructorFunction&gt;(state, thisValue, encodedValue, &quot;TestSubObjEnabledBySetting&quot;);
+}
+
+static inline bool setJSTestObjTestSubObjEnabledBySettingConstructorFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;TestSubObjEnabledBySetting&quot;);
</del><span class="cx">     // Shadowing a built-in constructor.
</span><span class="cx">     return castedThis-&gt;putDirect(state-&gt;vm(), Identifier::fromString(state, &quot;TestSubObjEnabledBySetting&quot;), value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjEnumAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjEnumAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjEnumAttrFunction&gt;(state, thisValue, encodedValue, &quot;enumAttr&quot;);
+}
+
+static inline bool setJSTestObjEnumAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;enumAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = parse&lt;TestObj::EnumType&gt;(*state, value);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3243,16 +3242,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjByteAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjByteAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjByteAttrFunction&gt;(state, thisValue, encodedValue, &quot;byteAttr&quot;);
+}
+
+static inline bool setJSTestObjByteAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;byteAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int8_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3261,16 +3261,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjOctetAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjOctetAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjOctetAttrFunction&gt;(state, thisValue, encodedValue, &quot;octetAttr&quot;);
+}
+
+static inline bool setJSTestObjOctetAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;octetAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;uint8_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3279,16 +3280,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjShortAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjShortAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjShortAttrFunction&gt;(state, thisValue, encodedValue, &quot;shortAttr&quot;);
+}
+
+static inline bool setJSTestObjShortAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;shortAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int16_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3297,16 +3299,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjClampedShortAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjClampedShortAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjClampedShortAttrFunction&gt;(state, thisValue, encodedValue, &quot;clampedShortAttr&quot;);
+}
+
+static inline bool setJSTestObjClampedShortAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;clampedShortAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int16_t&gt;(*state, value, Clamp);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3315,16 +3318,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjEnforceRangeShortAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjEnforceRangeShortAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjEnforceRangeShortAttrFunction&gt;(state, thisValue, encodedValue, &quot;enforceRangeShortAttr&quot;);
+}
+
+static inline bool setJSTestObjEnforceRangeShortAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;enforceRangeShortAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int16_t&gt;(*state, value, EnforceRange);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3333,16 +3337,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjUnsignedShortAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjUnsignedShortAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjUnsignedShortAttrFunction&gt;(state, thisValue, encodedValue, &quot;unsignedShortAttr&quot;);
+}
+
+static inline bool setJSTestObjUnsignedShortAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;unsignedShortAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;uint16_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3351,16 +3356,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjLongAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjLongAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjLongAttrFunction&gt;(state, thisValue, encodedValue, &quot;longAttr&quot;);
+}
+
+static inline bool setJSTestObjLongAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;longAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3369,16 +3375,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjLongLongAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjLongLongAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjLongLongAttrFunction&gt;(state, thisValue, encodedValue, &quot;longLongAttr&quot;);
+}
+
+static inline bool setJSTestObjLongLongAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;longLongAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int64_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3387,16 +3394,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjUnsignedLongLongAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjUnsignedLongLongAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjUnsignedLongLongAttrFunction&gt;(state, thisValue, encodedValue, &quot;unsignedLongLongAttr&quot;);
+}
+
+static inline bool setJSTestObjUnsignedLongLongAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;unsignedLongLongAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;uint64_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3405,16 +3413,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjStringAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjStringAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjStringAttrFunction&gt;(state, thisValue, encodedValue, &quot;stringAttr&quot;);
+}
+
+static inline bool setJSTestObjStringAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;stringAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3423,16 +3432,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjUsvstringAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjUsvstringAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjUsvstringAttrFunction&gt;(state, thisValue, encodedValue, &quot;usvstringAttr&quot;);
+}
+
+static inline bool setJSTestObjUsvstringAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;usvstringAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = valueToUSVString(state, value);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3441,16 +3451,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjTestObjAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjTestObjAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjTestObjAttrFunction&gt;(state, thisValue, encodedValue, &quot;testObjAttr&quot;);
+}
+
+static inline bool setJSTestObjTestObjAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;testObjAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = JSTestObj::toWrapped(value);
</span><span class="cx">     if (UNLIKELY(!nativeValue)) {
</span><span class="lines">@@ -3462,16 +3473,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjTestNullableObjAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjTestNullableObjAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjTestNullableObjAttrFunction&gt;(state, thisValue, encodedValue, &quot;testNullableObjAttr&quot;);
+}
+
+static inline bool setJSTestObjTestNullableObjAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;testNullableObjAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     TestObj* nativeValue = nullptr;
</span><span class="cx">     if (!value.isUndefinedOrNull()) {
</span><span class="lines">@@ -3486,16 +3498,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjLenientTestObjAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjLenientTestObjAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjLenientTestObjAttrFunction, CastedThisErrorBehavior::ReturnEarly&gt;(state, thisValue, encodedValue, &quot;lenientTestObjAttr&quot;);
+}
+
+static inline bool setJSTestObjLenientTestObjAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return false;
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = JSTestObj::toWrapped(value);
</span><span class="cx">     if (UNLIKELY(!nativeValue)) {
</span><span class="lines">@@ -3507,16 +3520,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjStringAttrTreatingNullAsEmptyStringFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjStringAttrTreatingNullAsEmptyString(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjStringAttrTreatingNullAsEmptyStringFunction&gt;(state, thisValue, encodedValue, &quot;stringAttrTreatingNullAsEmptyString&quot;);
+}
+
+static inline bool setJSTestObjStringAttrTreatingNullAsEmptyStringFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;stringAttrTreatingNullAsEmptyString&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = valueToStringTreatingNullAsEmptyString(state, value);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3525,16 +3539,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjUsvstringAttrTreatingNullAsEmptyStringFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjUsvstringAttrTreatingNullAsEmptyString(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjUsvstringAttrTreatingNullAsEmptyStringFunction&gt;(state, thisValue, encodedValue, &quot;usvstringAttrTreatingNullAsEmptyString&quot;);
+}
+
+static inline bool setJSTestObjUsvstringAttrTreatingNullAsEmptyStringFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;usvstringAttrTreatingNullAsEmptyString&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = valueToUSVStringTreatingNullAsEmptyString(state, value);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3543,16 +3558,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjImplementationEnumAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjImplementationEnumAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjImplementationEnumAttrFunction&gt;(state, thisValue, encodedValue, &quot;implementationEnumAttr&quot;);
+}
+
+static inline bool setJSTestObjImplementationEnumAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;implementationEnumAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = parse&lt;AlternateEnumName&gt;(*state, value);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3563,16 +3579,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjXMLObjAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjXMLObjAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjXMLObjAttrFunction&gt;(state, thisValue, encodedValue, &quot;XMLObjAttr&quot;);
+}
+
+static inline bool setJSTestObjXMLObjAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;XMLObjAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = JSTestObj::toWrapped(value);
</span><span class="cx">     if (UNLIKELY(!nativeValue)) {
</span><span class="lines">@@ -3584,16 +3601,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjCreateFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjCreate(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjCreateFunction&gt;(state, thisValue, encodedValue, &quot;create&quot;);
+}
+
+static inline bool setJSTestObjCreateFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;create&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toBoolean(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3602,16 +3620,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjReflectedStringAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjReflectedStringAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjReflectedStringAttrFunction&gt;(state, thisValue, encodedValue, &quot;reflectedStringAttr&quot;);
+}
+
+static inline bool setJSTestObjReflectedStringAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedStringAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3620,16 +3639,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjReflectedUSVStringAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjReflectedUSVStringAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjReflectedUSVStringAttrFunction&gt;(state, thisValue, encodedValue, &quot;reflectedUSVStringAttr&quot;);
+}
+
+static inline bool setJSTestObjReflectedUSVStringAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedUSVStringAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = valueToUSVString(state, value);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3638,16 +3658,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjReflectedIntegralAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjReflectedIntegralAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjReflectedIntegralAttrFunction&gt;(state, thisValue, encodedValue, &quot;reflectedIntegralAttr&quot;);
+}
+
+static inline bool setJSTestObjReflectedIntegralAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedIntegralAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3656,16 +3677,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjReflectedUnsignedIntegralAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjReflectedUnsignedIntegralAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjReflectedUnsignedIntegralAttrFunction&gt;(state, thisValue, encodedValue, &quot;reflectedUnsignedIntegralAttr&quot;);
+}
+
+static inline bool setJSTestObjReflectedUnsignedIntegralAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedUnsignedIntegralAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;uint32_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3674,16 +3696,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjReflectedBooleanAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjReflectedBooleanAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjReflectedBooleanAttrFunction&gt;(state, thisValue, encodedValue, &quot;reflectedBooleanAttr&quot;);
+}
+
+static inline bool setJSTestObjReflectedBooleanAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedBooleanAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toBoolean(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3692,16 +3715,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjReflectedURLAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjReflectedURLAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjReflectedURLAttrFunction&gt;(state, thisValue, encodedValue, &quot;reflectedURLAttr&quot;);
+}
+
+static inline bool setJSTestObjReflectedURLAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedURLAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3710,16 +3734,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjReflectedUSVURLAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjReflectedUSVURLAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjReflectedUSVURLAttrFunction&gt;(state, thisValue, encodedValue, &quot;reflectedUSVURLAttr&quot;);
+}
+
+static inline bool setJSTestObjReflectedUSVURLAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedUSVURLAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = valueToUSVString(state, value);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3728,16 +3753,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjReflectedStringAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjReflectedStringAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjReflectedStringAttrFunction&gt;(state, thisValue, encodedValue, &quot;reflectedStringAttr&quot;);
+}
+
+static inline bool setJSTestObjReflectedStringAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedStringAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3746,16 +3772,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjReflectedCustomIntegralAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjReflectedCustomIntegralAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjReflectedCustomIntegralAttrFunction&gt;(state, thisValue, encodedValue, &quot;reflectedCustomIntegralAttr&quot;);
+}
+
+static inline bool setJSTestObjReflectedCustomIntegralAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedCustomIntegralAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3764,16 +3791,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjReflectedCustomBooleanAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjReflectedCustomBooleanAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjReflectedCustomBooleanAttrFunction&gt;(state, thisValue, encodedValue, &quot;reflectedCustomBooleanAttr&quot;);
+}
+
+static inline bool setJSTestObjReflectedCustomBooleanAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedCustomBooleanAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toBoolean(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3782,16 +3810,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjReflectedCustomURLAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjReflectedCustomURLAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjReflectedCustomURLAttrFunction&gt;(state, thisValue, encodedValue, &quot;reflectedCustomURLAttr&quot;);
+}
+
+static inline bool setJSTestObjReflectedCustomURLAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedCustomURLAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3801,16 +3830,17 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><ins>+static inline bool setJSTestObjEnabledAtRuntimeAttributeFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjEnabledAtRuntimeAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjEnabledAtRuntimeAttributeFunction&gt;(state, thisValue, encodedValue, &quot;enabledAtRuntimeAttribute&quot;);
+}
+
+static inline bool setJSTestObjEnabledAtRuntimeAttributeFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;enabledAtRuntimeAttribute&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3820,16 +3850,17 @@
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjTypedArrayAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjTypedArrayAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjTypedArrayAttrFunction&gt;(state, thisValue, encodedValue, &quot;typedArrayAttr&quot;);
+}
+
+static inline bool setJSTestObjTypedArrayAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;typedArrayAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = toFloat32Array(value);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3842,16 +3873,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjAttributeWithGetterExceptionFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjAttributeWithGetterException(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjAttributeWithGetterExceptionFunction&gt;(state, thisValue, encodedValue, &quot;attributeWithGetterException&quot;);
+}
+
+static inline bool setJSTestObjAttributeWithGetterExceptionFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;attributeWithGetterException&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3860,16 +3892,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjAttributeWithGetterLegacyExceptionFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjAttributeWithGetterLegacyException(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjAttributeWithGetterLegacyExceptionFunction&gt;(state, thisValue, encodedValue, &quot;attributeWithGetterLegacyException&quot;);
+}
+
+static inline bool setJSTestObjAttributeWithGetterLegacyExceptionFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;attributeWithGetterLegacyException&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3878,16 +3911,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjAttributeWithSetterExceptionFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjAttributeWithSetterException(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjAttributeWithSetterExceptionFunction&gt;(state, thisValue, encodedValue, &quot;attributeWithSetterException&quot;);
+}
+
+static inline bool setJSTestObjAttributeWithSetterExceptionFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;attributeWithSetterException&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3896,16 +3930,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjAttributeWithSetterLegacyExceptionFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjAttributeWithSetterLegacyException(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjAttributeWithSetterLegacyExceptionFunction&gt;(state, thisValue, encodedValue, &quot;attributeWithSetterLegacyException&quot;);
+}
+
+static inline bool setJSTestObjAttributeWithSetterLegacyExceptionFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;attributeWithSetterLegacyException&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     ExceptionCode ec = 0;
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="lines">@@ -3916,16 +3951,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjStringAttrWithGetterExceptionFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjStringAttrWithGetterException(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjStringAttrWithGetterExceptionFunction&gt;(state, thisValue, encodedValue, &quot;stringAttrWithGetterException&quot;);
+}
+
+static inline bool setJSTestObjStringAttrWithGetterExceptionFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;stringAttrWithGetterException&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -3934,16 +3970,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjStringAttrWithSetterExceptionFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjStringAttrWithSetterException(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjStringAttrWithSetterExceptionFunction&gt;(state, thisValue, encodedValue, &quot;stringAttrWithSetterException&quot;);
+}
+
+static inline bool setJSTestObjStringAttrWithSetterExceptionFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;stringAttrWithSetterException&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     ExceptionCode ec = 0;
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="lines">@@ -3954,61 +3991,65 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjCustomAttrFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjCustomAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjCustomAttrFunction&gt;(state, thisValue, encodedValue, &quot;customAttr&quot;);
+}
+
+static inline bool setJSTestObjCustomAttrFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;customAttr&quot;);
</del><span class="cx">     castedThis-&gt;setCustomAttr(*state, value);
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjOnfooFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjOnfoo(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjOnfooFunction&gt;(state, thisValue, encodedValue, &quot;onfoo&quot;);
+}
+
+static inline bool setJSTestObjOnfooFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;onfoo&quot;);
</del><span class="cx">     setEventHandlerAttribute(*state, *castedThis, castedThis-&gt;wrapped(), eventNames().fooEvent, value);
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjOnwebkitfooFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjOnwebkitfoo(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjOnwebkitfooFunction&gt;(state, thisValue, encodedValue, &quot;onwebkitfoo&quot;);
+}
+
+static inline bool setJSTestObjOnwebkitfooFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;onwebkitfoo&quot;);
</del><span class="cx">     setEventHandlerAttribute(*state, *castedThis, castedThis-&gt;wrapped(), eventNames().fooEvent, value);
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjWithScriptStateAttributeFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjWithScriptStateAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjWithScriptStateAttributeFunction&gt;(state, thisValue, encodedValue, &quot;withScriptStateAttribute&quot;);
+}
+
+static inline bool setJSTestObjWithScriptStateAttributeFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptStateAttribute&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -4017,16 +4058,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjWithCallWithAndSetterCallWithAttributeFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjWithCallWithAndSetterCallWithAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjWithCallWithAndSetterCallWithAttributeFunction&gt;(state, thisValue, encodedValue, &quot;withCallWithAndSetterCallWithAttribute&quot;);
+}
+
+static inline bool setJSTestObjWithCallWithAndSetterCallWithAttributeFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withCallWithAndSetterCallWithAttribute&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -4035,16 +4077,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjWithScriptExecutionContextAttributeFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjWithScriptExecutionContextAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjWithScriptExecutionContextAttributeFunction&gt;(state, thisValue, encodedValue, &quot;withScriptExecutionContextAttribute&quot;);
+}
+
+static inline bool setJSTestObjWithScriptExecutionContextAttributeFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptExecutionContextAttribute&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = JSTestObj::toWrapped(value);
</span><span class="cx">     if (UNLIKELY(!nativeValue)) {
</span><span class="lines">@@ -4059,16 +4102,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjWithScriptStateAttributeRaisesFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjWithScriptStateAttributeRaises(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjWithScriptStateAttributeRaisesFunction&gt;(state, thisValue, encodedValue, &quot;withScriptStateAttributeRaises&quot;);
+}
+
+static inline bool setJSTestObjWithScriptStateAttributeRaisesFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptStateAttributeRaises&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = JSTestObj::toWrapped(value);
</span><span class="cx">     if (UNLIKELY(!nativeValue)) {
</span><span class="lines">@@ -4080,16 +4124,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjWithScriptExecutionContextAttributeRaisesFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjWithScriptExecutionContextAttributeRaises(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjWithScriptExecutionContextAttributeRaisesFunction&gt;(state, thisValue, encodedValue, &quot;withScriptExecutionContextAttributeRaises&quot;);
+}
+
+static inline bool setJSTestObjWithScriptExecutionContextAttributeRaisesFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptExecutionContextAttributeRaises&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = JSTestObj::toWrapped(value);
</span><span class="cx">     if (UNLIKELY(!nativeValue)) {
</span><span class="lines">@@ -4104,16 +4149,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjWithScriptExecutionContextAndScriptStateAttributeFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjWithScriptExecutionContextAndScriptStateAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjWithScriptExecutionContextAndScriptStateAttributeFunction&gt;(state, thisValue, encodedValue, &quot;withScriptExecutionContextAndScriptStateAttribute&quot;);
+}
+
+static inline bool setJSTestObjWithScriptExecutionContextAndScriptStateAttributeFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptExecutionContextAndScriptStateAttribute&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = JSTestObj::toWrapped(value);
</span><span class="cx">     if (UNLIKELY(!nativeValue)) {
</span><span class="lines">@@ -4128,16 +4174,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaisesFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaisesFunction&gt;(state, thisValue, encodedValue, &quot;withScriptExecutionContextAndScriptStateAttributeRaises&quot;);
+}
+
+static inline bool setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaisesFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptExecutionContextAndScriptStateAttributeRaises&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = JSTestObj::toWrapped(value);
</span><span class="cx">     if (UNLIKELY(!nativeValue)) {
</span><span class="lines">@@ -4152,16 +4199,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttributeFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttributeFunction&gt;(state, thisValue, encodedValue, &quot;withScriptExecutionContextAndScriptStateWithSpacesAttribute&quot;);
+}
+
+static inline bool setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttributeFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptExecutionContextAndScriptStateWithSpacesAttribute&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = JSTestObj::toWrapped(value);
</span><span class="cx">     if (UNLIKELY(!nativeValue)) {
</span><span class="lines">@@ -4176,16 +4224,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjWithScriptArgumentsAndCallStackAttributeFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjWithScriptArgumentsAndCallStackAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjWithScriptArgumentsAndCallStackAttributeFunction&gt;(state, thisValue, encodedValue, &quot;withScriptArgumentsAndCallStackAttribute&quot;);
+}
+
+static inline bool setJSTestObjWithScriptArgumentsAndCallStackAttributeFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptArgumentsAndCallStackAttribute&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = JSTestObj::toWrapped(value);
</span><span class="cx">     if (UNLIKELY(!nativeValue)) {
</span><span class="lines">@@ -4198,16 +4247,17 @@
</span><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition1)
</span><ins>+static inline bool setJSTestObjConditionalAttr1Function(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjConditionalAttr1(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjConditionalAttr1Function&gt;(state, thisValue, encodedValue, &quot;conditionalAttr1&quot;);
+}
+
+static inline bool setJSTestObjConditionalAttr1Function(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;conditionalAttr1&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -4218,16 +4268,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition1) &amp;&amp; ENABLE(Condition2)
</span><ins>+static inline bool setJSTestObjConditionalAttr2Function(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjConditionalAttr2(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjConditionalAttr2Function&gt;(state, thisValue, encodedValue, &quot;conditionalAttr2&quot;);
+}
+
+static inline bool setJSTestObjConditionalAttr2Function(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;conditionalAttr2&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -4238,16 +4289,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition1) || ENABLE(Condition2)
</span><ins>+static inline bool setJSTestObjConditionalAttr3Function(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjConditionalAttr3(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjConditionalAttr3Function&gt;(state, thisValue, encodedValue, &quot;conditionalAttr3&quot;);
+}
+
+static inline bool setJSTestObjConditionalAttr3Function(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;conditionalAttr3&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -4258,16 +4310,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition1)
</span><ins>+static inline bool setJSTestObjConditionalAttr4ConstructorFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjConditionalAttr4Constructor(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjConditionalAttr4ConstructorFunction&gt;(state, thisValue, encodedValue, &quot;conditionalAttr4&quot;);
+}
+
+static inline bool setJSTestObjConditionalAttr4ConstructorFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;conditionalAttr4&quot;);
</del><span class="cx">     // Shadowing a built-in constructor.
</span><span class="cx">     return castedThis-&gt;putDirect(state-&gt;vm(), Identifier::fromString(state, &quot;conditionalAttr4&quot;), value);
</span><span class="cx"> }
</span><span class="lines">@@ -4275,16 +4328,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition1) &amp;&amp; ENABLE(Condition2)
</span><ins>+static inline bool setJSTestObjConditionalAttr5ConstructorFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjConditionalAttr5Constructor(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjConditionalAttr5ConstructorFunction&gt;(state, thisValue, encodedValue, &quot;conditionalAttr5&quot;);
+}
+
+static inline bool setJSTestObjConditionalAttr5ConstructorFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;conditionalAttr5&quot;);
</del><span class="cx">     // Shadowing a built-in constructor.
</span><span class="cx">     return castedThis-&gt;putDirect(state-&gt;vm(), Identifier::fromString(state, &quot;conditionalAttr5&quot;), value);
</span><span class="cx"> }
</span><span class="lines">@@ -4292,16 +4346,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition1) || ENABLE(Condition2)
</span><ins>+static inline bool setJSTestObjConditionalAttr6ConstructorFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjConditionalAttr6Constructor(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjConditionalAttr6ConstructorFunction&gt;(state, thisValue, encodedValue, &quot;conditionalAttr6&quot;);
+}
+
+static inline bool setJSTestObjConditionalAttr6ConstructorFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;conditionalAttr6&quot;);
</del><span class="cx">     // Shadowing a built-in constructor.
</span><span class="cx">     return castedThis-&gt;putDirect(state-&gt;vm(), Identifier::fromString(state, &quot;conditionalAttr6&quot;), value);
</span><span class="cx"> }
</span><span class="lines">@@ -4308,16 +4363,17 @@
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjAnyAttributeFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjAnyAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjAnyAttributeFunction&gt;(state, thisValue, encodedValue, &quot;anyAttribute&quot;);
+}
+
+static inline bool setJSTestObjAnyAttributeFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;anyAttribute&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value;
</span><span class="cx">     impl.setAnyAttribute(WTFMove(nativeValue));
</span><span class="lines">@@ -4325,16 +4381,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjMutablePointFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjMutablePoint(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjMutablePointFunction&gt;(state, thisValue, encodedValue, &quot;mutablePoint&quot;);
+}
+
+static inline bool setJSTestObjMutablePointFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;mutablePoint&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     SVGPropertyTearOff&lt;SVGPoint&gt;* nativeValue = nullptr;
</span><span class="cx">     if (!value.isUndefinedOrNull()) {
</span><span class="lines">@@ -4349,16 +4406,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjImmutablePointFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjImmutablePoint(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjImmutablePointFunction&gt;(state, thisValue, encodedValue, &quot;immutablePoint&quot;);
+}
+
+static inline bool setJSTestObjImmutablePointFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;immutablePoint&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     SVGPropertyTearOff&lt;SVGPoint&gt;* nativeValue = nullptr;
</span><span class="cx">     if (!value.isUndefinedOrNull()) {
</span><span class="lines">@@ -4373,16 +4431,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjStrawberryFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjStrawberry(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjStrawberryFunction&gt;(state, thisValue, encodedValue, &quot;strawberry&quot;);
+}
+
+static inline bool setJSTestObjStrawberryFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;strawberry&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -4391,16 +4450,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjIdFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjId(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjIdFunction&gt;(state, thisValue, encodedValue, &quot;id&quot;);
+}
+
+static inline bool setJSTestObjIdFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;id&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -4409,31 +4469,33 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjReplaceableAttributeFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjReplaceableAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjReplaceableAttributeFunction&gt;(state, thisValue, encodedValue, &quot;replaceableAttribute&quot;);
+}
+
+static inline bool setJSTestObjReplaceableAttributeFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;replaceableAttribute&quot;);
</del><span class="cx">     // Shadowing a built-in property.
</span><span class="cx">     return castedThis-&gt;putDirect(state-&gt;vm(), Identifier::fromString(state, &quot;replaceableAttribute&quot;), value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjNullableLongSettableAttributeFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjNullableLongSettableAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjNullableLongSettableAttributeFunction&gt;(state, thisValue, encodedValue, &quot;nullableLongSettableAttribute&quot;);
+}
+
+static inline bool setJSTestObjNullableLongSettableAttributeFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;nullableLongSettableAttribute&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -4442,16 +4504,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjNullableStringSettableAttributeFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjNullableStringSettableAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjNullableStringSettableAttributeFunction&gt;(state, thisValue, encodedValue, &quot;nullableStringSettableAttribute&quot;);
+}
+
+static inline bool setJSTestObjNullableStringSettableAttributeFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;nullableStringSettableAttribute&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = valueToStringWithUndefinedOrNullCheck(state, value);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -4460,16 +4523,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjNullableUSVStringSettableAttributeFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjNullableUSVStringSettableAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjNullableUSVStringSettableAttributeFunction&gt;(state, thisValue, encodedValue, &quot;nullableUSVStringSettableAttribute&quot;);
+}
+
+static inline bool setJSTestObjNullableUSVStringSettableAttributeFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;nullableUSVStringSettableAttribute&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = valueToUSVStringWithUndefinedOrNullCheck(state, value);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -4478,16 +4542,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjNullableStringValueFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjNullableStringValue(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjNullableStringValueFunction&gt;(state, thisValue, encodedValue, &quot;nullableStringValue&quot;);
+}
+
+static inline bool setJSTestObjNullableStringValueFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;nullableStringValue&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -4496,16 +4561,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjAttributeWithReservedEnumTypeFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjAttributeWithReservedEnumType(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjAttributeWithReservedEnumTypeFunction&gt;(state, thisValue, encodedValue, &quot;attributeWithReservedEnumType&quot;);
+}
+
+static inline bool setJSTestObjAttributeWithReservedEnumTypeFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;attributeWithReservedEnumType&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = parse&lt;TestObj::Optional&gt;(*state, value);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -4516,16 +4582,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjPutForwardsAttributeFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjPutForwardsAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjPutForwardsAttributeFunction&gt;(state, thisValue, encodedValue, &quot;putForwardsAttribute&quot;);
+}
+
+static inline bool setJSTestObjPutForwardsAttributeFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;putForwardsAttribute&quot;);
</del><span class="cx">     Ref&lt;TestNode&gt; forwardedImpl = castedThis-&gt;wrapped().putForwardsAttribute();
</span><span class="cx">     auto&amp; impl = forwardedImpl.get();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="lines">@@ -4535,16 +4602,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjPutForwardsNullableAttributeFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjPutForwardsNullableAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjPutForwardsNullableAttributeFunction&gt;(state, thisValue, encodedValue, &quot;putForwardsNullableAttribute&quot;);
+}
+
+static inline bool setJSTestObjPutForwardsNullableAttributeFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;putForwardsNullableAttribute&quot;);
</del><span class="cx">     RefPtr&lt;TestNode&gt; forwardedImpl = castedThis-&gt;wrapped().putForwardsNullableAttribute();
</span><span class="cx">     if (!forwardedImpl)
</span><span class="cx">         return false;
</span><span class="lines">@@ -4556,16 +4624,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestObjStringifierAttributeFunction(ExecState*, JSTestObj*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestObjStringifierAttribute(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestObj&gt;::setAttribute&lt;setJSTestObjStringifierAttributeFunction&gt;(state, thisValue, encodedValue, &quot;stringifierAttribute&quot;);
+}
+
+static inline bool setJSTestObjStringifierAttributeFunction(ExecState* state, JSTestObj* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestObj* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;stringifierAttribute&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = valueToUSVString(state, value);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp (206988 => 206989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2016-10-10 07:45:52 UTC (rev 206988)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2016-10-10 08:13:56 UTC (rev 206989)
</span><span class="lines">@@ -247,16 +247,17 @@
</span><span class="cx">     return domObject-&gt;putDirect(state-&gt;vm(), state-&gt;propertyNames().constructor, value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestSerializedScriptValueInterfaceValueFunction(ExecState*, JSTestSerializedScriptValueInterface*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestSerializedScriptValueInterfaceValue(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestSerializedScriptValueInterface&gt;::setAttribute&lt;setJSTestSerializedScriptValueInterfaceValueFunction&gt;(state, thisValue, encodedValue, &quot;value&quot;);
+}
+
+static inline bool setJSTestSerializedScriptValueInterfaceValueFunction(ExecState* state, JSTestSerializedScriptValueInterface* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestSerializedScriptValueInterface* castedThis = jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestSerializedScriptValueInterface&quot;, &quot;value&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = SerializedScriptValue::create(state, value, 0, 0);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -265,16 +266,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestSerializedScriptValueInterfaceCachedValueFunction(ExecState*, JSTestSerializedScriptValueInterface*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestSerializedScriptValueInterfaceCachedValue(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestSerializedScriptValueInterface&gt;::setAttribute&lt;setJSTestSerializedScriptValueInterfaceCachedValueFunction&gt;(state, thisValue, encodedValue, &quot;cachedValue&quot;);
+}
+
+static inline bool setJSTestSerializedScriptValueInterfaceCachedValueFunction(ExecState* state, JSTestSerializedScriptValueInterface* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestSerializedScriptValueInterface* castedThis = jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestSerializedScriptValueInterface&quot;, &quot;cachedValue&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = SerializedScriptValue::create(state, value, 0, 0);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp (206988 => 206989)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2016-10-10 07:45:52 UTC (rev 206988)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2016-10-10 08:13:56 UTC (rev 206989)
</span><span class="lines">@@ -353,16 +353,17 @@
</span><span class="cx">     return domObject-&gt;putDirect(state-&gt;vm(), state-&gt;propertyNames().constructor, value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestTypedefsUnsignedLongLongAttrFunction(ExecState*, JSTestTypedefs*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestTypedefsUnsignedLongLongAttr(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestTypedefs&gt;::setAttribute&lt;setJSTestTypedefsUnsignedLongLongAttrFunction&gt;(state, thisValue, encodedValue, &quot;unsignedLongLongAttr&quot;);
+}
+
+static inline bool setJSTestTypedefsUnsignedLongLongAttrFunction(ExecState* state, JSTestTypedefs* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestTypedefs* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;unsignedLongLongAttr&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;uint64_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -371,16 +372,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestTypedefsImmutableSerializedScriptValueFunction(ExecState*, JSTestTypedefs*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestTypedefsImmutableSerializedScriptValue(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestTypedefs&gt;::setAttribute&lt;setJSTestTypedefsImmutableSerializedScriptValueFunction&gt;(state, thisValue, encodedValue, &quot;immutableSerializedScriptValue&quot;);
+}
+
+static inline bool setJSTestTypedefsImmutableSerializedScriptValueFunction(ExecState* state, JSTestTypedefs* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestTypedefs* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;immutableSerializedScriptValue&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = SerializedScriptValue::create(state, value, 0, 0);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -389,16 +391,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestTypedefsAttrWithGetterExceptionFunction(ExecState*, JSTestTypedefs*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestTypedefsAttrWithGetterException(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestTypedefs&gt;::setAttribute&lt;setJSTestTypedefsAttrWithGetterExceptionFunction&gt;(state, thisValue, encodedValue, &quot;attrWithGetterException&quot;);
+}
+
+static inline bool setJSTestTypedefsAttrWithGetterExceptionFunction(ExecState* state, JSTestTypedefs* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestTypedefs* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;attrWithGetterException&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -407,16 +410,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestTypedefsAttrWithSetterExceptionFunction(ExecState*, JSTestTypedefs*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestTypedefsAttrWithSetterException(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestTypedefs&gt;::setAttribute&lt;setJSTestTypedefsAttrWithSetterExceptionFunction&gt;(state, thisValue, encodedValue, &quot;attrWithSetterException&quot;);
+}
+
+static inline bool setJSTestTypedefsAttrWithSetterExceptionFunction(ExecState* state, JSTestTypedefs* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestTypedefs* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;attrWithSetterException&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     ExceptionCode ec = 0;
</span><span class="cx">     auto nativeValue = convert&lt;int32_t&gt;(*state, value, NormalConversion);
</span><span class="lines">@@ -427,16 +431,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestTypedefsStringAttrWithGetterExceptionFunction(ExecState*, JSTestTypedefs*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestTypedefsStringAttrWithGetterException(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestTypedefs&gt;::setAttribute&lt;setJSTestTypedefsStringAttrWithGetterExceptionFunction&gt;(state, thisValue, encodedValue, &quot;stringAttrWithGetterException&quot;);
+}
+
+static inline bool setJSTestTypedefsStringAttrWithGetterExceptionFunction(ExecState* state, JSTestTypedefs* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestTypedefs* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;stringAttrWithGetterException&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, false);
</span><span class="lines">@@ -445,16 +450,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><ins>+static inline bool setJSTestTypedefsStringAttrWithSetterExceptionFunction(ExecState*, JSTestTypedefs*, JSValue, ThrowScope&amp;);
+
</ins><span class="cx"> bool setJSTestTypedefsStringAttrWithSetterException(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestTypedefs&gt;::setAttribute&lt;setJSTestTypedefsStringAttrWithSetterExceptionFunction&gt;(state, thisValue, encodedValue, &quot;stringAttrWithSetterException&quot;);
+}
+
+static inline bool setJSTestTypedefsStringAttrWithSetterExceptionFunction(ExecState* state, JSTestTypedefs* castedThis, JSValue value, ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue value = JSValue::decode(encodedValue);
-    UNUSED_PARAM(thisValue);
-    JSTestTypedefs* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(JSValue::decode(thisValue));
-    if (UNLIKELY(!castedThis))
-        return throwSetterTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;stringAttrWithSetterException&quot;);
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     ExceptionCode ec = 0;
</span><span class="cx">     auto nativeValue = value.toWTFString(state);
</span></span></pre>
</div>
</div>

</body>
</html>