<!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>[206953] 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/206953">206953</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-10-08 06:09:30 -0700 (Sat, 08 Oct 2016)</dd>
</dl>

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

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

No change of behavior.

Split the attribute getter function in two, one with the signature expected by JSCore and one used after casted-this checks.

The second function takes directly a JSXX object and returns a JSValue instead of an EncodedJSValue.
In the future, the second function should only take references.

Introducing BindingCaller as a way to templatize binding code used to cast thisValue with the desired JSXX value.
This allows implementing the first function using the second function as template parameter.

Introducing JSClass::castForAttribute as a way to encapsulate differences in the way to handle thisValue access.

* bindings/js/JSDOMBinding.h:
(WebCore::BindingCaller::attribute):
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateHeader):
(GenerateImplementation):
* bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
* bindings/scripts/test/JS/JSTestActiveDOMObject.h:
* bindings/scripts/test/JS/JSTestEventConstructor.cpp:
* bindings/scripts/test/JS/JSTestEventConstructor.h:
* bindings/scripts/test/JS/JSTestException.cpp:
* bindings/scripts/test/JS/JSTestException.h:
* bindings/scripts/test/JS/JSTestGlobalObject.cpp:
* bindings/scripts/test/JS/JSTestInterface.cpp:
* bindings/scripts/test/JS/JSTestInterface.h:
* bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
* bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
* bindings/scripts/test/JS/JSTestNode.cpp:
* bindings/scripts/test/JS/JSTestNode.h:
* bindings/scripts/test/JS/JSTestNondeterministic.cpp:
* bindings/scripts/test/JS/JSTestNondeterministic.h:
* bindings/scripts/test/JS/JSTestObj.cpp:
* bindings/scripts/test/JS/JSTestObj.h:
* bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
* bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
* bindings/scripts/test/JS/JSTestTypedefs.cpp:
* bindings/scripts/test/JS/JSTestTypedefs.h:
* bindings/scripts/test/JS/JSattribute.cpp:
* bindings/scripts/test/JS/JSattribute.h:</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="#trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjectcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjecth">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestExceptionh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestGlobalObjectcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestGlobalObjecth">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestInterfaceh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNodeh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministiccpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministich">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestObjh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfaceh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestTypedefsh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSattributecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSattributeh">trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/ChangeLog        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -1,3 +1,51 @@
</span><ins>+2016-10-08  Youenn Fablet  &lt;youenn@apple.com&gt;
+
+        Refactor binding generated casted-this checks
+        https://bugs.webkit.org/show_bug.cgi?id=162677
+
+        Reviewed by Darin Adler.
+
+        No change of behavior.
+
+        Split the attribute getter function in two, one with the signature expected by JSCore and one used after casted-this checks.
+
+        The second function takes directly a JSXX object and returns a JSValue instead of an EncodedJSValue.
+        In the future, the second function should only take references.
+
+        Introducing BindingCaller as a way to templatize binding code used to cast thisValue with the desired JSXX value.
+        This allows implementing the first function using the second function as template parameter.
+
+        Introducing JSClass::castForAttribute as a way to encapsulate differences in the way to handle thisValue access.
+
+        * bindings/js/JSDOMBinding.h:
+        (WebCore::BindingCaller::attribute):
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateHeader):
+        (GenerateImplementation):
+        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
+        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
+        * bindings/scripts/test/JS/JSTestEventConstructor.cpp:
+        * bindings/scripts/test/JS/JSTestEventConstructor.h:
+        * bindings/scripts/test/JS/JSTestException.cpp:
+        * bindings/scripts/test/JS/JSTestException.h:
+        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
+        * bindings/scripts/test/JS/JSTestInterface.cpp:
+        * bindings/scripts/test/JS/JSTestInterface.h:
+        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
+        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
+        * bindings/scripts/test/JS/JSTestNode.cpp:
+        * bindings/scripts/test/JS/JSTestNode.h:
+        * bindings/scripts/test/JS/JSTestNondeterministic.cpp:
+        * bindings/scripts/test/JS/JSTestNondeterministic.h:
+        * bindings/scripts/test/JS/JSTestObj.cpp:
+        * bindings/scripts/test/JS/JSTestObj.h:
+        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp:
+        * bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h:
+        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
+        * bindings/scripts/test/JS/JSTestTypedefs.h:
+        * bindings/scripts/test/JS/JSattribute.cpp:
+        * bindings/scripts/test/JS/JSattribute.h:
+
</ins><span class="cx"> 2016-10-08  Enrique Ocaña González  &lt;eocanha@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Missing include in MediaDescription
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMBindingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMBinding.h (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -382,6 +382,28 @@
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename VariadicHelper&gt; typename VariadicHelper::Result toArguments(JSC::ExecState&amp;, size_t startIndex = 0);
</span><span class="cx"> 
</span><ins>+enum class CastedThisErrorBehavior { Throw, ReturnEarly };
+
+template&lt;typename JSClass&gt;
+struct BindingCaller {
+    using AttributeGetterFunction = JSC::JSValue(JSC::ExecState*, JSClass*, JSC::ThrowScope&amp;);
+
+    template&lt;AttributeGetterFunction getter, CastedThisErrorBehavior shouldThrow = CastedThisErrorBehavior::Throw&gt;
+    static JSC::EncodedJSValue attribute(JSC::ExecState* state, JSC::EncodedJSValue thisValue, 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 ?
+                throwGetterTypeError(*state, throwScope, JSClass::info()-&gt;className, attributeName) : JSC::JSValue::encode(JSC::jsUndefined());
+        }
+        // FIXME: We should refactor the binding generated code to use references for state and thisObject.
+        return JSC::JSValue::encode(getter(state, thisObject, throwScope));
+    }
+};
+
</ins><span class="cx"> // Inline functions and template definitions.
</span><span class="cx"> 
</span><span class="cx"> inline JSC::Structure* DOMConstructorObject::createStructure(JSC::VM&amp; vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -1410,6 +1410,8 @@
</span><span class="cx"> 
</span><span class="cx">     # Attribute and function enums
</span><span class="cx">     if ($numAttributes &gt; 0) {
</span><ins>+        push(@headerContent, &quot;    static ${className}* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);\n&quot;);
+
</ins><span class="cx">         foreach (@{$interface-&gt;attributes}) {
</span><span class="cx">             my $attribute = $_;
</span><span class="cx">             $numCustomAttributes++ if HasCustomGetter($attribute-&gt;signature-&gt;extendedAttributes);
</span><span class="lines">@@ -2403,12 +2405,12 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         push(@implContent, $endAppleCopyright) if $inAppleCopyright;
</span><del>-
</del><span class="cx">         push(@implContent, &quot;\n&quot;);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if ($numAttributes &gt; 0 || NeedsConstructorProperty($interface)) {
</span><span class="cx">         push(@implContent, &quot;// Attributes\n\n&quot;);
</span><ins>+
</ins><span class="cx">         foreach my $attribute (@{$interface-&gt;attributes}) {
</span><span class="cx">             next if $attribute-&gt;signature-&gt;extendedAttributes-&gt;{ForwardDeclareInHeader};
</span><span class="cx">             next if IsJSBuiltin($interface, $attribute);
</span><span class="lines">@@ -2857,6 +2859,26 @@
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">     }
</span><ins>+
+    if ($numAttributes &gt; 0) {
+        my $castingFunction = $interface-&gt;extendedAttributes-&gt;{&quot;CustomProxyToJSObject&quot;} ? &quot;to${className}&quot; : GetCastingHelperForThisObject($interface);
+        # FIXME: Remove ImplicitThis keyword as it is no longer defined by WebIDL spec and is only used in DOMWindow.
+        if ($interface-&gt;extendedAttributes-&gt;{&quot;ImplicitThis&quot;}) {
+            push(@implContent, &quot;inline ${className}* ${className}::castForAttribute(ExecState* state, EncodedJSValue thisValue)\n&quot;);
+            push(@implContent, &quot;{\n&quot;);
+            push(@implContent, &quot;    JSValue decodedThisValue = JSValue::decode(thisValue);\n&quot;);
+            push(@implContent, &quot;    if (decodedThisValue.isUndefinedOrNull())\n&quot;);
+            push(@implContent, &quot;        decodedThisValue = state-&gt;thisValue().toThis(state, NotStrictMode);\n&quot;);
+            push(@implContent, &quot;    return $castingFunction(decodedThisValue);\n&quot;);
+            push(@implContent, &quot;}\n\n&quot;);
+        } else {
+            push(@implContent, &quot;inline ${className}* ${className}::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)\n&quot;);
+            push(@implContent, &quot;{\n&quot;);
+            push(@implContent, &quot;    return $castingFunction(JSValue::decode(thisValue));\n&quot;);
+            push(@implContent, &quot;}\n\n&quot;);
+        }
+    }
+
</ins><span class="cx">     $numAttributes = $numAttributes + 1 if NeedsConstructorProperty($interface);
</span><span class="cx">     if ($numAttributes &gt; 0) {
</span><span class="cx">         foreach my $attribute (@{$interface-&gt;attributes}) {
</span><span class="lines">@@ -2874,31 +2896,31 @@
</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;EncodedJSValue ${getFunctionName}(ExecState* state, EncodedJSValue thisValue, PropertyName)\n&quot;);
-            push(@implContent, &quot;{\n&quot;);
</del><ins>+            if (!$attribute-&gt;isStatic || $attribute-&gt;signature-&gt;type =~ /Constructor$/) {
+                my $templateParameters = &quot;${getFunctionName}Getter&quot;;
+                $templateParameters .= &quot;, CastedThisErrorBehavior::ReturnEarly&quot; if ($attribute-&gt;signature-&gt;extendedAttributes-&gt;{LenientThis});
+                push(@implContent, &quot;static inline JSValue ${getFunctionName}Getter(ExecState*, ${className}*, ThrowScope&amp; throwScope);\n\n&quot;);
</ins><span class="cx"> 
</span><del>-            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;    UNUSED_PARAM(thisValue);\n&quot;);
</del><ins>+                push(@implContent, &quot;EncodedJSValue ${getFunctionName}(ExecState* state, EncodedJSValue thisValue, PropertyName)\n&quot;);
+                push(@implContent, &quot;{\n&quot;);
+                push(@implContent, &quot;    return BindingCaller&lt;${className}&gt;::attribute&lt;${templateParameters}&gt;(state, thisValue, \&quot;$name\&quot;);\n&quot;);
+                push(@implContent, &quot;}\n\n&quot;);
</ins><span class="cx"> 
</span><del>-            if (!$attribute-&gt;isStatic || $attribute-&gt;signature-&gt;type =~ /Constructor$/) {
-                push(@implContent, &quot;    JSValue decodedThisValue = JSValue::decode(thisValue);\n&quot;);
-                my $castingFunction = $interface-&gt;extendedAttributes-&gt;{CustomProxyToJSObject} ? &quot;to${className}&quot; : GetCastingHelperForThisObject($interface);
-                # http://heycam.github.io/webidl/#ImplicitThis
-                if ($interface-&gt;extendedAttributes-&gt;{ImplicitThis}) {
-                    push(@implContent, &quot;    auto* castedThis = decodedThisValue.isUndefinedOrNull() ? $castingFunction(state-&gt;thisValue().toThis(state, NotStrictMode)) : $castingFunction(decodedThisValue);\n&quot;);
-                } else {
-                    push(@implContent, &quot;    auto* castedThis = $castingFunction(decodedThisValue);\n&quot;);
-                }
-                push(@implContent, &quot;    if (UNLIKELY(!castedThis)) {\n&quot;);
-                if ($attribute-&gt;signature-&gt;extendedAttributes-&gt;{LenientThis}) {
-                    push(@implContent, &quot;        return JSValue::encode(jsUndefined());\n&quot;);
-                } else {
-                    push(@implContent, &quot;        return throwGetterTypeError(*state, throwScope, \&quot;$visibleInterfaceName\&quot;, \&quot;$name\&quot;);\n&quot;);
-                }
-                push(@implContent, &quot;    }\n&quot;);
</del><ins>+                push(@implContent, &quot;static inline JSValue ${getFunctionName}Getter(ExecState* state, ${className}* thisObject, ThrowScope&amp; throwScope)\n&quot;);
+                push(@implContent, &quot;{\n&quot;);
+                push(@implContent, &quot;    UNUSED_PARAM(throwScope);\n&quot;);
+            } else {
+                push(@implContent, &quot;static inline JSValue ${getFunctionName}Getter(ExecState*);\n\n&quot;);
+
+                push(@implContent, &quot;EncodedJSValue ${getFunctionName}(ExecState* state, EncodedJSValue, PropertyName)\n&quot;);
+                push(@implContent, &quot;{\n&quot;);
+                push(@implContent, &quot;    return JSValue::encode(${getFunctionName}Getter(state));\n&quot;);
+                push(@implContent, &quot;}\n\n&quot;);
+
+                push(@implContent, &quot;static inline JSValue ${getFunctionName}Getter(ExecState* state)\n&quot;);
+                push(@implContent, &quot;{\n&quot;);
</ins><span class="cx">             }
</span><ins>+            push(@implContent, &quot;    UNUSED_PARAM(state);\n&quot;);
</ins><span class="cx"> 
</span><span class="cx">             my @arguments = ();
</span><span class="cx">             if ($getterMayThrowLegacyException &amp;&amp; !HasCustomGetter($attribute-&gt;signature-&gt;extendedAttributes)) {
</span><span class="lines">@@ -2916,11 +2938,11 @@
</span><span class="cx">                     AddToImplIncludes(&quot;Frame.h&quot;);
</span><span class="cx">                     AddToImplIncludes(&quot;Settings.h&quot;);
</span><span class="cx">                     my $enable_function = ToMethodName($attribute-&gt;signature-&gt;extendedAttributes-&gt;{EnabledBySetting}) . &quot;Enabled&quot;;
</span><del>-                    push(@implContent, &quot;    if (UNLIKELY(!castedThis-&gt;wrapped().frame()))\n&quot;);
-                    push(@implContent, &quot;        return JSValue::encode(jsUndefined());\n&quot;);
-                    push(@implContent, &quot;    Settings&amp; settings = castedThis-&gt;wrapped().frame()-&gt;settings();\n&quot;);
</del><ins>+                    push(@implContent, &quot;    if (UNLIKELY(!thisObject-&gt;wrapped().frame()))\n&quot;);
+                    push(@implContent, &quot;        return jsUndefined();\n&quot;);
+                    push(@implContent, &quot;    Settings&amp; settings = thisObject-&gt;wrapped().frame()-&gt;settings();\n&quot;);
</ins><span class="cx">                     push(@implContent, &quot;    if (!settings.$enable_function())\n&quot;);
</span><del>-                    push(@implContent, &quot;        return JSValue::encode(jsUndefined());\n&quot;);
</del><ins>+                    push(@implContent, &quot;        return jsUndefined();\n&quot;);
</ins><span class="cx">                 }
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="lines">@@ -2930,11 +2952,11 @@
</span><span class="cx">                 !$attribute-&gt;signature-&gt;extendedAttributes-&gt;{DoNotCheckSecurity} &amp;&amp;
</span><span class="cx">                 !$attribute-&gt;signature-&gt;extendedAttributes-&gt;{DoNotCheckSecurityOnGetter}) {
</span><span class="cx">                 if ($interfaceName eq &quot;DOMWindow&quot;) {
</span><del>-                    push(@implContent, &quot;    if (!BindingSecurity::shouldAllowAccessToDOMWindow(state, castedThis-&gt;wrapped(), ThrowSecurityError))\n&quot;);
</del><ins>+                    push(@implContent, &quot;    if (!BindingSecurity::shouldAllowAccessToDOMWindow(state, thisObject-&gt;wrapped(), ThrowSecurityError))\n&quot;);
</ins><span class="cx">                 } else {
</span><del>-                    push(@implContent, &quot;    if (!BindingSecurity::shouldAllowAccessToFrame(state, castedThis-&gt;wrapped().frame(), ThrowSecurityError))\n&quot;);
</del><ins>+                    push(@implContent, &quot;    if (!BindingSecurity::shouldAllowAccessToFrame(state, thisObject-&gt;wrapped().frame(), ThrowSecurityError))\n&quot;);
</ins><span class="cx">                 }
</span><del>-                push(@implContent, &quot;        return JSValue::encode(jsUndefined());\n&quot;);
</del><ins>+                push(@implContent, &quot;        return jsUndefined();\n&quot;);
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             if ($attribute-&gt;signature-&gt;extendedAttributes-&gt;{Nondeterministic}) {
</span><span class="lines">@@ -2951,11 +2973,11 @@
</span><span class="cx">                 my $exceptionCode = $getterMayThrowLegacyExceptionWithMessage ? &quot;ec.code&quot; : ($getterMayThrowLegacyException ? &quot;ec&quot; : &quot;0&quot;);
</span><span class="cx">                 push(@implContent, &quot;    static NeverDestroyed&lt;const AtomicString&gt; bindingName(\&quot;$interfaceName.$name\&quot;, AtomicString::ConstructFromLiteral);\n&quot;);
</span><span class="cx">                 push(@implContent, &quot;    if (cursor.isCapturing()) {\n&quot;);
</span><del>-                push(@implContent, &quot;        $memoizedType memoizedResult = castedThis-&gt;wrapped().$implGetterFunctionName(&quot; . join(&quot;, &quot;, @arguments) . &quot;);\n&quot;);
</del><ins>+                push(@implContent, &quot;        $memoizedType memoizedResult = thisObject-&gt;wrapped().$implGetterFunctionName(&quot; . join(&quot;, &quot;, @arguments) . &quot;);\n&quot;);
</ins><span class="cx">                 push(@implContent, &quot;        cursor.appendInput&lt;MemoizedDOMResult&lt;$memoizedType&gt;&gt;(bindingName.get().string(), memoizedResult, $exceptionCode);\n&quot;);
</span><del>-                push(@implContent, &quot;        JSValue result = &quot; . NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;memoizedResult&quot;, &quot;castedThis&quot;) . &quot;;\n&quot;);
</del><ins>+                push(@implContent, &quot;        JSValue result = &quot; . NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;memoizedResult&quot;, &quot;thisObject&quot;) . &quot;;\n&quot;);
</ins><span class="cx">                 push(@implContent, &quot;        setDOMException(state, throwScope, ec);\n&quot;) if $getterMayThrowLegacyException;
</span><del>-                push(@implContent, &quot;        return JSValue::encode(result);\n&quot;);
</del><ins>+                push(@implContent, &quot;        return result;\n&quot;);
</ins><span class="cx">                 push(@implContent, &quot;    }\n&quot;);
</span><span class="cx">                 push(@implContent, &quot;\n&quot;);
</span><span class="cx">                 push(@implContent, &quot;    if (cursor.isReplaying()) {\n&quot;);
</span><span class="lines">@@ -2963,9 +2985,9 @@
</span><span class="cx">                 push(@implContent, &quot;        MemoizedDOMResultBase* input = cursor.fetchInput&lt;MemoizedDOMResultBase&gt;();\n&quot;);
</span><span class="cx">                 push(@implContent, &quot;        if (input &amp;&amp; input-&gt;convertTo&lt;$memoizedType&gt;(memoizedResult)) {\n&quot;);
</span><span class="cx">                 # FIXME: the generated code should report an error if an input cannot be fetched or converted.
</span><del>-                push(@implContent, &quot;            JSValue result = &quot; . NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;memoizedResult&quot;, &quot;castedThis&quot;) . &quot;;\n&quot;);
</del><ins>+                push(@implContent, &quot;            JSValue result = &quot; . NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;memoizedResult&quot;, &quot;thisObject&quot;) . &quot;;\n&quot;);
</ins><span class="cx">                 push(@implContent, &quot;            setDOMException(state, throwScope, input-&gt;exceptionCode());\n&quot;) if $getterMayThrowLegacyException;
</span><del>-                push(@implContent, &quot;            return JSValue::encode(result);\n&quot;);
</del><ins>+                push(@implContent, &quot;            return result;\n&quot;);
</ins><span class="cx">                 push(@implContent, &quot;        }\n&quot;);
</span><span class="cx">                 push(@implContent, &quot;    }\n&quot;);
</span><span class="cx">                 push(@implContent, &quot;#endif\n&quot;);
</span><span class="lines">@@ -2972,11 +2994,11 @@
</span><span class="cx">             } # attribute Nondeterministic
</span><span class="cx"> 
</span><span class="cx">             if (HasCustomGetter($attribute-&gt;signature-&gt;extendedAttributes)) {
</span><del>-                push(@implContent, &quot;    return JSValue::encode(castedThis-&gt;$implGetterFunctionName(*state));\n&quot;);
</del><ins>+                push(@implContent, &quot;    return thisObject-&gt;$implGetterFunctionName(*state);\n&quot;);
</ins><span class="cx">             } elsif ($attribute-&gt;signature-&gt;extendedAttributes-&gt;{CheckSecurityForNode}) {
</span><span class="cx">                 $implIncludes{&quot;JSDOMBinding.h&quot;} = 1;
</span><del>-                push(@implContent, &quot;    auto&amp; impl = castedThis-&gt;wrapped();\n&quot;);
-                push(@implContent, &quot;    return JSValue::encode(shouldAllowAccessToNode(state, impl.&quot; . $attribute-&gt;signature-&gt;name . &quot;()) ? &quot; . NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;impl.$implGetterFunctionName()&quot;, &quot;castedThis&quot;) . &quot; : jsNull());\n&quot;);
</del><ins>+                push(@implContent, &quot;    auto&amp; impl = thisObject-&gt;wrapped();\n&quot;);
+                push(@implContent, &quot;    return shouldAllowAccessToNode(state, impl.&quot; . $attribute-&gt;signature-&gt;name . &quot;()) ? &quot; . NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;impl.$implGetterFunctionName()&quot;, &quot;thisObject&quot;) . &quot; : jsNull();\n&quot;);
</ins><span class="cx">             } elsif ($type eq &quot;EventHandler&quot;) {
</span><span class="cx">                 $implIncludes{&quot;EventNames.h&quot;} = 1;
</span><span class="cx">                 my $getter = $attribute-&gt;signature-&gt;extendedAttributes-&gt;{WindowEventHandler} ? &quot;windowEventHandlerAttribute&quot;
</span><span class="lines">@@ -2983,20 +3005,19 @@
</span><span class="cx">                     : $attribute-&gt;signature-&gt;extendedAttributes-&gt;{DocumentEventHandler} ? &quot;documentEventHandlerAttribute&quot;
</span><span class="cx">                     : &quot;eventHandlerAttribute&quot;;
</span><span class="cx">                 my $eventName = EventHandlerAttributeEventName($attribute);
</span><del>-                push(@implContent, &quot;    UNUSED_PARAM(state);\n&quot;);
-                push(@implContent, &quot;    return JSValue::encode($getter(castedThis-&gt;wrapped(), $eventName));\n&quot;);
</del><ins>+                push(@implContent, &quot;    return $getter(thisObject-&gt;wrapped(), $eventName);\n&quot;);
</ins><span class="cx">             } elsif ($attribute-&gt;signature-&gt;type =~ /Constructor$/) {
</span><span class="cx">                 my $constructorType = $attribute-&gt;signature-&gt;type;
</span><span class="cx">                 $constructorType =~ s/Constructor$//;
</span><del>-                # When Constructor attribute is used by DOMWindow.idl, it's correct to pass castedThis as the global object
-                # When JSDOMWrappers have a back-pointer to the globalObject we can pass castedThis-&gt;globalObject()
</del><ins>+                # When Constructor attribute is used by DOMWindow.idl, it's correct to pass thisObject as the global object
+                # When JSDOMWrappers have a back-pointer to the globalObject we can pass thisObject-&gt;globalObject()
</ins><span class="cx">                 if ($interfaceName eq &quot;DOMWindow&quot;) {
</span><span class="cx">                     my $named = ($constructorType =~ /Named$/) ? &quot;Named&quot; : &quot;&quot;;
</span><span class="cx">                     $constructorType =~ s/Named$//;
</span><del>-                    push(@implContent, &quot;    return JSValue::encode(JS&quot; . $constructorType . &quot;::get${named}Constructor(state-&gt;vm(), castedThis));\n&quot;);
</del><ins>+                    push(@implContent, &quot;    return JS&quot; . $constructorType . &quot;::get${named}Constructor(state-&gt;vm(), thisObject);\n&quot;);
</ins><span class="cx">                 } else {
</span><span class="cx">                     AddToImplIncludes(&quot;JS&quot; . $constructorType . &quot;.h&quot;, $attribute-&gt;signature-&gt;extendedAttributes-&gt;{Conditional});
</span><del>-                    push(@implContent, &quot;    return JSValue::encode(JS&quot; . $constructorType . &quot;::getConstructor(state-&gt;vm(), castedThis-&gt;globalObject()));\n&quot;);
</del><ins>+                    push(@implContent, &quot;    return JS&quot; . $constructorType . &quot;::getConstructor(state-&gt;vm(), thisObject-&gt;globalObject());\n&quot;);
</ins><span class="cx">                 }
</span><span class="cx">             } elsif (!$attribute-&gt;signature-&gt;extendedAttributes-&gt;{GetterMayThrowLegacyException} &amp;&amp; !$attribute-&gt;signature-&gt;extendedAttributes-&gt;{GetterMayThrowLegacyExceptionWithMessage}) {
</span><span class="cx">                 my $cacheIndex = 0;
</span><span class="lines">@@ -3003,20 +3024,20 @@
</span><span class="cx">                 if ($attribute-&gt;signature-&gt;extendedAttributes-&gt;{CachedAttribute}) {
</span><span class="cx">                     $cacheIndex = $currentCachedAttribute;
</span><span class="cx">                     $currentCachedAttribute++;
</span><del>-                    push(@implContent, &quot;    if (JSValue cachedValue = castedThis-&gt;m_&quot; . $attribute-&gt;signature-&gt;name . &quot;.get())\n&quot;);
-                    push(@implContent, &quot;        return JSValue::encode(cachedValue);\n&quot;);
</del><ins>+                    push(@implContent, &quot;    if (JSValue cachedValue = thisObject-&gt;m_&quot; . $attribute-&gt;signature-&gt;name . &quot;.get())\n&quot;);
+                    push(@implContent, &quot;        return cachedValue;\n&quot;);
</ins><span class="cx">                 }
</span><span class="cx"> 
</span><del>-                my @callWithArgs = GenerateCallWith($attribute-&gt;signature-&gt;extendedAttributes-&gt;{CallWith}, \@implContent, &quot;JSValue::encode(jsUndefined())&quot;);
</del><ins>+                my @callWithArgs = GenerateCallWith($attribute-&gt;signature-&gt;extendedAttributes-&gt;{CallWith}, \@implContent, &quot;jsUndefined()&quot;);
</ins><span class="cx"> 
</span><span class="cx">                 if ($svgListPropertyType) {
</span><del>-                    push(@implContent, &quot;    JSValue result =  &quot; . NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;castedThis-&gt;wrapped().$implGetterFunctionName(&quot; . (join &quot;, &quot;, @callWithArgs) . &quot;)&quot;, &quot;castedThis&quot;) . &quot;;\n&quot;);
</del><ins>+                    push(@implContent, &quot;    JSValue result =  &quot; . NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;thisObject-&gt;wrapped().$implGetterFunctionName(&quot; . (join &quot;, &quot;, @callWithArgs) . &quot;)&quot;, &quot;thisObject&quot;) . &quot;;\n&quot;);
</ins><span class="cx">                 } elsif ($svgPropertyOrListPropertyType) {
</span><del>-                    push(@implContent, &quot;    $svgPropertyOrListPropertyType&amp; impl = castedThis-&gt;wrapped().propertyReference();\n&quot;);
</del><ins>+                    push(@implContent, &quot;    $svgPropertyOrListPropertyType&amp; impl = thisObject-&gt;wrapped().propertyReference();\n&quot;);
</ins><span class="cx">                     if ($svgPropertyOrListPropertyType eq &quot;float&quot;) { # Special case for JSSVGNumber
</span><del>-                        push(@implContent, &quot;    JSValue result = &quot; . NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;impl&quot;, &quot;castedThis&quot;) . &quot;;\n&quot;);
</del><ins>+                        push(@implContent, &quot;    JSValue result = &quot; . NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;impl&quot;, &quot;thisObject&quot;) . &quot;;\n&quot;);
</ins><span class="cx">                     } else {
</span><del>-                        push(@implContent, &quot;    JSValue result = &quot; . NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;impl.$implGetterFunctionName(&quot; . (join &quot;, &quot;, @callWithArgs) . &quot;)&quot;, &quot;castedThis&quot;) . &quot;;\n&quot;);
</del><ins>+                        push(@implContent, &quot;    JSValue result = &quot; . NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;impl.$implGetterFunctionName(&quot; . (join &quot;, &quot;, @callWithArgs) . &quot;)&quot;, &quot;thisObject&quot;) . &quot;;\n&quot;);
</ins><span class="cx"> 
</span><span class="cx">                     }
</span><span class="cx">                 } else {
</span><span class="lines">@@ -3033,40 +3054,38 @@
</span><span class="cx">                     }
</span><span class="cx"> 
</span><span class="cx">                     unshift(@arguments, @callWithArgs);
</span><del>-                    my $jsType = NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;${functionName}(&quot; . join(&quot;, &quot;, @arguments) . &quot;)&quot;, &quot;castedThis&quot;);
-                    push(@implContent, &quot;    auto&amp; impl = castedThis-&gt;wrapped();\n&quot;) if !$attribute-&gt;isStatic;
</del><ins>+                    my $jsType = NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;${functionName}(&quot; . join(&quot;, &quot;, @arguments) . &quot;)&quot;, &quot;thisObject&quot;);
+                    push(@implContent, &quot;    auto&amp; impl = thisObject-&gt;wrapped();\n&quot;) if !$attribute-&gt;isStatic;
</ins><span class="cx">                     if ($codeGenerator-&gt;IsSVGAnimatedType($type)) {
</span><span class="cx">                         push(@implContent, &quot;    auto obj = $jsType;\n&quot;);
</span><del>-                        push(@implContent, &quot;    JSValue result = toJS(state, castedThis-&gt;globalObject(), obj.get());\n&quot;);
</del><ins>+                        push(@implContent, &quot;    JSValue result = toJS(state, thisObject-&gt;globalObject(), obj.get());\n&quot;);
</ins><span class="cx">                     } else {
</span><span class="cx">                         push(@implContent, &quot;    JSValue result = $jsType;\n&quot;);
</span><span class="cx">                     }
</span><span class="cx">                 }
</span><span class="cx"> 
</span><del>-                push(@implContent, &quot;    castedThis-&gt;m_&quot; . $attribute-&gt;signature-&gt;name . &quot;.set(state-&gt;vm(), castedThis, result);\n&quot;) if $attribute-&gt;signature-&gt;extendedAttributes-&gt;{CachedAttribute};
-                push(@implContent, &quot;    return JSValue::encode(result);\n&quot;);
</del><ins>+                push(@implContent, &quot;    thisObject-&gt;m_&quot; . $attribute-&gt;signature-&gt;name . &quot;.set(state-&gt;vm(), thisObject, result);\n&quot;) if $attribute-&gt;signature-&gt;extendedAttributes-&gt;{CachedAttribute};
+                push(@implContent, &quot;    return result;\n&quot;);
</ins><span class="cx"> 
</span><span class="cx">             } else {
</span><del>-                unshift(@arguments, GenerateCallWith($attribute-&gt;signature-&gt;extendedAttributes-&gt;{CallWith}, \@implContent, &quot;JSValue::encode(jsUndefined())&quot;));
</del><ins>+                unshift(@arguments, GenerateCallWith($attribute-&gt;signature-&gt;extendedAttributes-&gt;{CallWith}, \@implContent, &quot;jsUndefined()&quot;));
</ins><span class="cx"> 
</span><span class="cx">                 if ($svgPropertyOrListPropertyType) {
</span><del>-                    push(@implContent, &quot;    $svgPropertyOrListPropertyType impl(*castedThis-&gt;wrapped());\n&quot;);
-                    push(@implContent, &quot;    JSValue result = &quot; . NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;impl.$implGetterFunctionName(&quot; . join(&quot;, &quot;, @arguments) . &quot;)&quot;, &quot;castedThis&quot;) . &quot;;\n&quot;);
</del><ins>+                    push(@implContent, &quot;    $svgPropertyOrListPropertyType impl(*thisObject-&gt;wrapped());\n&quot;);
+                    push(@implContent, &quot;    JSValue result = &quot; . NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;impl.$implGetterFunctionName(&quot; . join(&quot;, &quot;, @arguments) . &quot;)&quot;, &quot;thisObject&quot;) . &quot;;\n&quot;);
</ins><span class="cx">                 } else {
</span><del>-                    push(@implContent, &quot;    auto&amp; impl = castedThis-&gt;wrapped();\n&quot;);
-                    push(@implContent, &quot;    JSValue result = &quot; . NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;impl.$implGetterFunctionName(&quot; . join(&quot;, &quot;, @arguments) . &quot;)&quot;, &quot;castedThis&quot;) . &quot;;\n&quot;);
</del><ins>+                    push(@implContent, &quot;    auto&amp; impl = thisObject-&gt;wrapped();\n&quot;);
+                    push(@implContent, &quot;    JSValue result = &quot; . NativeToJSValue($attribute-&gt;signature, 0, $interface, &quot;impl.$implGetterFunctionName(&quot; . join(&quot;, &quot;, @arguments) . &quot;)&quot;, &quot;thisObject&quot;) . &quot;;\n&quot;);
</ins><span class="cx">                 }
</span><span class="cx"> 
</span><span class="cx">                 push(@implContent, &quot;    setDOMException(state, throwScope, ec);\n&quot;);
</span><span class="cx"> 
</span><del>-                push(@implContent, &quot;    return JSValue::encode(result);\n&quot;);
</del><ins>+                push(@implContent, &quot;    return result;\n&quot;);
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             push(@implContent, &quot;}\n\n&quot;);
</span><span class="cx"> 
</span><del>-            push(@implContent, &quot;#endif\n&quot;) if $attributeConditionalString;
-
-            push(@implContent, &quot;\n&quot;);
</del><ins>+            push(@implContent, &quot;#endif\n\n&quot;) if $attributeConditionalString;
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (NeedsConstructorProperty($interface)) {
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -140,25 +140,29 @@
</span><span class="cx">     thisObject-&gt;JSTestActiveDOMObject::~JSTestActiveDOMObject();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline JSTestActiveDOMObject* JSTestActiveDOMObject::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
+{
+    return jsDynamicCast&lt;JSTestActiveDOMObject*&gt;(JSValue::decode(thisValue));
+}
+
+static inline JSValue jsTestActiveDOMObjectExcitingAttrGetter(ExecState*, JSTestActiveDOMObject*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestActiveDOMObjectExcitingAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestActiveDOMObject&gt;::attribute&lt;jsTestActiveDOMObjectExcitingAttrGetter&gt;(state, thisValue, &quot;excitingAttr&quot;);
+}
+
+static inline JSValue jsTestActiveDOMObjectExcitingAttrGetter(ExecState* state, JSTestActiveDOMObject* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestActiveDOMObject*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestActiveDOMObject&quot;, &quot;excitingAttr&quot;);
-    }
-    if (!BindingSecurity::shouldAllowAccessToFrame(state, castedThis-&gt;wrapped().frame(), ThrowSecurityError))
-        return JSValue::encode(jsUndefined());
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    if (!BindingSecurity::shouldAllowAccessToFrame(state, thisObject-&gt;wrapped().frame(), ThrowSecurityError))
+        return jsUndefined();
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.excitingAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> EncodedJSValue jsTestActiveDOMObjectConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = state-&gt;vm();
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.h (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.h        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.h        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -49,6 +49,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><ins>+    static JSTestActiveDOMObject* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</ins><span class="cx"> public:
</span><span class="cx">     static const unsigned StructureFlags = JSC::HasStaticPropertyTable | Base::StructureFlags;
</span><span class="cx"> protected:
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -178,55 +178,58 @@
</span><span class="cx">     thisObject-&gt;JSTestEventConstructor::~JSTestEventConstructor();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline JSTestEventConstructor* JSTestEventConstructor::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
+{
+    return jsDynamicCast&lt;JSTestEventConstructor*&gt;(JSValue::decode(thisValue));
+}
+
+static inline JSValue jsTestEventConstructorAttr1Getter(ExecState*, JSTestEventConstructor*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestEventConstructorAttr1(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestEventConstructor&gt;::attribute&lt;jsTestEventConstructorAttr1Getter&gt;(state, thisValue, &quot;attr1&quot;);
+}
+
+static inline JSValue jsTestEventConstructorAttr1Getter(ExecState* state, JSTestEventConstructor* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestEventConstructor*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestEventConstructor&quot;, &quot;attr1&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.attr1());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestEventConstructorAttr2Getter(ExecState*, JSTestEventConstructor*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestEventConstructorAttr2(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestEventConstructor&gt;::attribute&lt;jsTestEventConstructorAttr2Getter&gt;(state, thisValue, &quot;attr2&quot;);
+}
+
+static inline JSValue jsTestEventConstructorAttr2Getter(ExecState* state, JSTestEventConstructor* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestEventConstructor*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestEventConstructor&quot;, &quot;attr2&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.attr2());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if ENABLE(SPECIAL_EVENT)
+static inline JSValue jsTestEventConstructorAttr3Getter(ExecState*, JSTestEventConstructor*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><del>-#if ENABLE(SPECIAL_EVENT)
</del><span class="cx"> EncodedJSValue jsTestEventConstructorAttr3(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestEventConstructor&gt;::attribute&lt;jsTestEventConstructorAttr3Getter&gt;(state, thisValue, &quot;attr3&quot;);
+}
+
+static inline JSValue jsTestEventConstructorAttr3Getter(ExecState* state, JSTestEventConstructor* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestEventConstructor*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestEventConstructor&quot;, &quot;attr3&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.attr3());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -51,6 +51,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><ins>+    static JSTestEventConstructor* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</ins><span class="cx"> protected:
</span><span class="cx">     JSTestEventConstructor(JSC::Structure*, JSDOMGlobalObject&amp;, Ref&lt;TestEventConstructor&gt;&amp;&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -132,23 +132,27 @@
</span><span class="cx">     thisObject-&gt;JSTestException::~JSTestException();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline JSTestException* JSTestException::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
+{
+    return jsDynamicCast&lt;JSTestException*&gt;(JSValue::decode(thisValue));
+}
+
+static inline JSValue jsTestExceptionNameGetter(ExecState*, JSTestException*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestExceptionName(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestException&gt;::attribute&lt;jsTestExceptionNameGetter&gt;(state, thisValue, &quot;name&quot;);
+}
+
+static inline JSValue jsTestExceptionNameGetter(ExecState* state, JSTestException* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestException*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestException&quot;, &quot;name&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.name());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> EncodedJSValue jsTestExceptionConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = state-&gt;vm();
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestExceptionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -50,6 +50,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><ins>+    static JSTestException* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</ins><span class="cx"> public:
</span><span class="cx">     static const unsigned StructureFlags = JSC::HasStaticPropertyTable | Base::StructureFlags;
</span><span class="cx"> protected:
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestGlobalObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -177,74 +177,77 @@
</span><span class="cx">     thisObject-&gt;JSTestGlobalObject::~JSTestGlobalObject();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline JSTestGlobalObject* JSTestGlobalObject::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
+{
+    return jsDynamicCast&lt;JSTestGlobalObject*&gt;(JSValue::decode(thisValue));
+}
+
+static inline JSValue jsTestGlobalObjectRegularAttributeGetter(ExecState*, JSTestGlobalObject*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestGlobalObjectRegularAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestGlobalObjectRegularAttributeGetter&gt;(state, thisValue, &quot;regularAttribute&quot;);
+}
+
+static inline JSValue jsTestGlobalObjectRegularAttributeGetter(ExecState* state, JSTestGlobalObject* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestGlobalObject*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestGlobalObject&quot;, &quot;regularAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.regularAttribute());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestGlobalObjectPublicAndPrivateAttributeGetter(ExecState*, JSTestGlobalObject*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestGlobalObjectPublicAndPrivateAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestGlobalObjectPublicAndPrivateAttributeGetter&gt;(state, thisValue, &quot;publicAndPrivateAttribute&quot;);
+}
+
+static inline JSValue jsTestGlobalObjectPublicAndPrivateAttributeGetter(ExecState* state, JSTestGlobalObject* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestGlobalObject*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestGlobalObject&quot;, &quot;publicAndPrivateAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.publicAndPrivateAttribute());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if ENABLE(TEST_FEATURE)
+static inline JSValue jsTestGlobalObjectPublicAndPrivateConditionalAttributeGetter(ExecState*, JSTestGlobalObject*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><del>-#if ENABLE(TEST_FEATURE)
</del><span class="cx"> EncodedJSValue jsTestGlobalObjectPublicAndPrivateConditionalAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestGlobalObjectPublicAndPrivateConditionalAttributeGetter&gt;(state, thisValue, &quot;publicAndPrivateConditionalAttribute&quot;);
+}
+
+static inline JSValue jsTestGlobalObjectPublicAndPrivateConditionalAttributeGetter(ExecState* state, JSTestGlobalObject* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestGlobalObject*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestGlobalObject&quot;, &quot;publicAndPrivateConditionalAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.publicAndPrivateConditionalAttribute());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><ins>+static inline JSValue jsTestGlobalObjectEnabledAtRuntimeAttributeGetter(ExecState*, JSTestGlobalObject*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestGlobalObjectEnabledAtRuntimeAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestGlobalObjectEnabledAtRuntimeAttributeGetter&gt;(state, thisValue, &quot;enabledAtRuntimeAttribute&quot;);
+}
+
+static inline JSValue jsTestGlobalObjectEnabledAtRuntimeAttributeGetter(ExecState* state, JSTestGlobalObject* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestGlobalObject*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestGlobalObject&quot;, &quot;enabledAtRuntimeAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.enabledAtRuntimeAttribute());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestGlobalObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.h (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.h        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.h        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -51,6 +51,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><ins>+    static JSTestGlobalObject* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</ins><span class="cx"> public:
</span><span class="cx">     static const unsigned StructureFlags = JSC::HasStaticPropertyTable | Base::StructureFlags;
</span><span class="cx"> protected:
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -410,202 +410,223 @@
</span><span class="cx">     thisObject-&gt;JSTestInterface::~JSTestInterface();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline JSTestInterface* JSTestInterface::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
+{
+    return jsDynamicCast&lt;JSTestInterface*&gt;(JSValue::decode(thisValue));
+}
+
</ins><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-EncodedJSValue jsTestInterfaceConstructorImplementsStaticReadOnlyAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</del><ins>+static inline JSValue jsTestInterfaceConstructorImplementsStaticReadOnlyAttrGetter(ExecState*);
+
+EncodedJSValue jsTestInterfaceConstructorImplementsStaticReadOnlyAttr(ExecState* state, EncodedJSValue, PropertyName)
</ins><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
-    UNUSED_PARAM(throwScope);
-    UNUSED_PARAM(thisValue);
</del><ins>+    return JSValue::encode(jsTestInterfaceConstructorImplementsStaticReadOnlyAttrGetter(state));
+}
+
+static inline JSValue jsTestInterfaceConstructorImplementsStaticReadOnlyAttrGetter(ExecState* state)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     JSValue result = jsNumber(TestInterface::implementsStaticReadOnlyAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><del>-EncodedJSValue jsTestInterfaceConstructorImplementsStaticAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</del><ins>+static inline JSValue jsTestInterfaceConstructorImplementsStaticAttrGetter(ExecState*);
+
+EncodedJSValue jsTestInterfaceConstructorImplementsStaticAttr(ExecState* state, EncodedJSValue, PropertyName)
</ins><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
-    UNUSED_PARAM(throwScope);
-    UNUSED_PARAM(thisValue);
</del><ins>+    return JSValue::encode(jsTestInterfaceConstructorImplementsStaticAttrGetter(state));
+}
+
+static inline JSValue jsTestInterfaceConstructorImplementsStaticAttrGetter(ExecState* state)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     JSValue result = jsStringWithCache(state, TestInterface::implementsStaticAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><ins>+static inline JSValue jsTestInterfaceImplementsStr1Getter(ExecState*, JSTestInterface*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestInterfaceImplementsStr1(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestInterfaceImplementsStr1Getter&gt;(state, thisValue, &quot;implementsStr1&quot;);
+}
+
+static inline JSValue jsTestInterfaceImplementsStr1Getter(ExecState* state, JSTestInterface* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;implementsStr1&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.implementsStr1());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><ins>+static inline JSValue jsTestInterfaceImplementsStr2Getter(ExecState*, JSTestInterface*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestInterfaceImplementsStr2(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestInterfaceImplementsStr2Getter&gt;(state, thisValue, &quot;implementsStr2&quot;);
+}
+
+static inline JSValue jsTestInterfaceImplementsStr2Getter(ExecState* state, JSTestInterface* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;implementsStr2&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.implementsStr2());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><ins>+static inline JSValue jsTestInterfaceImplementsStr3Getter(ExecState*, JSTestInterface*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestInterfaceImplementsStr3(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestInterfaceImplementsStr3Getter&gt;(state, thisValue, &quot;implementsStr3&quot;);
+}
+
+static inline JSValue jsTestInterfaceImplementsStr3Getter(ExecState* state, JSTestInterface* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;implementsStr3&quot;);
-    }
-    return JSValue::encode(castedThis-&gt;implementsStr3(*state));
</del><ins>+    UNUSED_PARAM(state);
+    return thisObject-&gt;implementsStr3(*state);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><ins>+static inline JSValue jsTestInterfaceImplementsNodeGetter(ExecState*, JSTestInterface*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestInterfaceImplementsNode(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestInterfaceImplementsNodeGetter&gt;(state, thisValue, &quot;implementsNode&quot;);
+}
+
+static inline JSValue jsTestInterfaceImplementsNodeGetter(ExecState* state, JSTestInterface* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;implementsNode&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.implementsNode());
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), impl.implementsNode());
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><del>-EncodedJSValue jsTestInterfaceConstructorSupplementalStaticReadOnlyAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</del><ins>+static inline JSValue jsTestInterfaceConstructorSupplementalStaticReadOnlyAttrGetter(ExecState*);
+
+EncodedJSValue jsTestInterfaceConstructorSupplementalStaticReadOnlyAttr(ExecState* state, EncodedJSValue, PropertyName)
</ins><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
-    UNUSED_PARAM(throwScope);
-    UNUSED_PARAM(thisValue);
</del><ins>+    return JSValue::encode(jsTestInterfaceConstructorSupplementalStaticReadOnlyAttrGetter(state));
+}
+
+static inline JSValue jsTestInterfaceConstructorSupplementalStaticReadOnlyAttrGetter(ExecState* state)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     JSValue result = jsNumber(WebCore::TestSupplemental::supplementalStaticReadOnlyAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><del>-EncodedJSValue jsTestInterfaceConstructorSupplementalStaticAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</del><ins>+static inline JSValue jsTestInterfaceConstructorSupplementalStaticAttrGetter(ExecState*);
+
+EncodedJSValue jsTestInterfaceConstructorSupplementalStaticAttr(ExecState* state, EncodedJSValue, PropertyName)
</ins><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
-    UNUSED_PARAM(throwScope);
-    UNUSED_PARAM(thisValue);
</del><ins>+    return JSValue::encode(jsTestInterfaceConstructorSupplementalStaticAttrGetter(state));
+}
+
+static inline JSValue jsTestInterfaceConstructorSupplementalStaticAttrGetter(ExecState* state)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     JSValue result = jsStringWithCache(state, WebCore::TestSupplemental::supplementalStaticAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><ins>+static inline JSValue jsTestInterfaceSupplementalStr1Getter(ExecState*, JSTestInterface*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestInterfaceSupplementalStr1(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestInterfaceSupplementalStr1Getter&gt;(state, thisValue, &quot;supplementalStr1&quot;);
+}
+
+static inline JSValue jsTestInterfaceSupplementalStr1Getter(ExecState* state, JSTestInterface* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;supplementalStr1&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, WebCore::TestSupplemental::supplementalStr1(impl));
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><ins>+static inline JSValue jsTestInterfaceSupplementalStr2Getter(ExecState*, JSTestInterface*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestInterfaceSupplementalStr2(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestInterfaceSupplementalStr2Getter&gt;(state, thisValue, &quot;supplementalStr2&quot;);
+}
+
+static inline JSValue jsTestInterfaceSupplementalStr2Getter(ExecState* state, JSTestInterface* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;supplementalStr2&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, WebCore::TestSupplemental::supplementalStr2(impl));
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><ins>+static inline JSValue jsTestInterfaceSupplementalStr3Getter(ExecState*, JSTestInterface*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestInterfaceSupplementalStr3(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestInterfaceSupplementalStr3Getter&gt;(state, thisValue, &quot;supplementalStr3&quot;);
+}
+
+static inline JSValue jsTestInterfaceSupplementalStr3Getter(ExecState* state, JSTestInterface* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;supplementalStr3&quot;);
-    }
-    return JSValue::encode(castedThis-&gt;supplementalStr3(*state));
</del><ins>+    UNUSED_PARAM(state);
+    return thisObject-&gt;supplementalStr3(*state);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><ins>+static inline JSValue jsTestInterfaceSupplementalNodeGetter(ExecState*, JSTestInterface*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestInterfaceSupplementalNode(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestInterfaceSupplementalNodeGetter&gt;(state, thisValue, &quot;supplementalNode&quot;);
+}
+
+static inline JSValue jsTestInterfaceSupplementalNodeGetter(ExecState* state, JSTestInterface* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;supplementalNode&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), WebCore::TestSupplemental::supplementalNode(impl));
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), WebCore::TestSupplemental::supplementalNode(impl));
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -54,6 +54,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><ins>+    static JSTestInterface* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</ins><span class="cx"> 
</span><span class="cx">     // Custom attributes
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -132,36 +132,39 @@
</span><span class="cx">     thisObject-&gt;JSTestJSBuiltinConstructor::~JSTestJSBuiltinConstructor();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline JSTestJSBuiltinConstructor* JSTestJSBuiltinConstructor::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
+{
+    return jsDynamicCast&lt;JSTestJSBuiltinConstructor*&gt;(JSValue::decode(thisValue));
+}
+
+static inline JSValue jsTestJSBuiltinConstructorTestAttributeCustomGetter(ExecState*, JSTestJSBuiltinConstructor*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestJSBuiltinConstructorTestAttributeCustom(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestJSBuiltinConstructorTestAttributeCustomGetter&gt;(state, thisValue, &quot;testAttributeCustom&quot;);
+}
+
+static inline JSValue jsTestJSBuiltinConstructorTestAttributeCustomGetter(ExecState* state, JSTestJSBuiltinConstructor* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestJSBuiltinConstructor*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestJSBuiltinConstructor&quot;, &quot;testAttributeCustom&quot;);
-    }
-    return JSValue::encode(castedThis-&gt;testAttributeCustom(*state));
</del><ins>+    UNUSED_PARAM(state);
+    return thisObject-&gt;testAttributeCustom(*state);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestJSBuiltinConstructorTestAttributeRWCustomGetter(ExecState*, JSTestJSBuiltinConstructor*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestJSBuiltinConstructorTestAttributeRWCustom(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestJSBuiltinConstructorTestAttributeRWCustomGetter&gt;(state, thisValue, &quot;testAttributeRWCustom&quot;);
+}
+
+static inline JSValue jsTestJSBuiltinConstructorTestAttributeRWCustomGetter(ExecState* state, JSTestJSBuiltinConstructor* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestJSBuiltinConstructor*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestJSBuiltinConstructor&quot;, &quot;testAttributeRWCustom&quot;);
-    }
-    return JSValue::encode(castedThis-&gt;testAttributeRWCustom(*state));
</del><ins>+    UNUSED_PARAM(state);
+    return thisObject-&gt;testAttributeRWCustom(*state);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> EncodedJSValue jsTestJSBuiltinConstructorConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = state-&gt;vm();
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -46,6 +46,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><ins>+    static JSTestJSBuiltinConstructor* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</ins><span class="cx">     static void visitChildren(JSCell*, JSC::SlotVisitor&amp;);
</span><span class="cx"> 
</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 (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -168,23 +168,27 @@
</span><span class="cx">     return getDOMPrototype&lt;JSTestNode&gt;(vm, globalObject);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline JSTestNode* JSTestNode::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
+{
+    return jsDynamicCast&lt;JSTestNode*&gt;(JSValue::decode(thisValue));
+}
+
+static inline JSValue jsTestNodeNameGetter(ExecState*, JSTestNode*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestNodeName(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestNodeNameGetter&gt;(state, thisValue, &quot;name&quot;);
+}
+
+static inline JSValue jsTestNodeNameGetter(ExecState* state, JSTestNode* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestNode*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestNode&quot;, &quot;name&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.name());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> EncodedJSValue jsTestNodeConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = state-&gt;vm();
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.h (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.h        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.h        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -47,6 +47,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><ins>+    static JSTestNode* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</ins><span class="cx">     static void visitChildren(JSCell*, JSC::SlotVisitor&amp;);
</span><span class="cx"> 
</span><span class="cx">     TestNode&amp; wrapped() const
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministiccpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -143,26 +143,31 @@
</span><span class="cx">     thisObject-&gt;JSTestNondeterministic::~JSTestNondeterministic();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline JSTestNondeterministic* JSTestNondeterministic::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
+{
+    return jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
+}
+
+static inline JSValue jsTestNondeterministicNondeterministicReadonlyAttrGetter(ExecState*, JSTestNondeterministic*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestNondeterministicNondeterministicReadonlyAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestNondeterministicNondeterministicReadonlyAttrGetter&gt;(state, thisValue, &quot;nondeterministicReadonlyAttr&quot;);
+}
+
+static inline JSValue jsTestNondeterministicNondeterministicReadonlyAttrGetter(ExecState* state, JSTestNondeterministic* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestNondeterministic&quot;, &quot;nondeterministicReadonlyAttr&quot;);
-    }
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx"> #if ENABLE(WEB_REPLAY)
</span><span class="cx">     JSGlobalObject* globalObject = state-&gt;lexicalGlobalObject();
</span><span class="cx">     InputCursor&amp; cursor = globalObject-&gt;inputCursor();
</span><span class="cx">     static NeverDestroyed&lt;const AtomicString&gt; bindingName(&quot;TestNondeterministic.nondeterministicReadonlyAttr&quot;, AtomicString::ConstructFromLiteral);
</span><span class="cx">     if (cursor.isCapturing()) {
</span><del>-        int32_t memoizedResult = castedThis-&gt;wrapped().nondeterministicReadonlyAttr();
</del><ins>+        int32_t memoizedResult = thisObject-&gt;wrapped().nondeterministicReadonlyAttr();
</ins><span class="cx">         cursor.appendInput&lt;MemoizedDOMResult&lt;int32_t&gt;&gt;(bindingName.get().string(), memoizedResult, 0);
</span><span class="cx">         JSValue result = jsNumber(memoizedResult);
</span><del>-        return JSValue::encode(result);
</del><ins>+        return result;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (cursor.isReplaying()) {
</span><span class="lines">@@ -170,36 +175,35 @@
</span><span class="cx">         MemoizedDOMResultBase* input = cursor.fetchInput&lt;MemoizedDOMResultBase&gt;();
</span><span class="cx">         if (input &amp;&amp; input-&gt;convertTo&lt;int32_t&gt;(memoizedResult)) {
</span><span class="cx">             JSValue result = jsNumber(memoizedResult);
</span><del>-            return JSValue::encode(result);
</del><ins>+            return result;
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><del>-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.nondeterministicReadonlyAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestNondeterministicNondeterministicWriteableAttrGetter(ExecState*, JSTestNondeterministic*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestNondeterministicNondeterministicWriteableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestNondeterministicNondeterministicWriteableAttrGetter&gt;(state, thisValue, &quot;nondeterministicWriteableAttr&quot;);
+}
+
+static inline JSValue jsTestNondeterministicNondeterministicWriteableAttrGetter(ExecState* state, JSTestNondeterministic* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestNondeterministic&quot;, &quot;nondeterministicWriteableAttr&quot;);
-    }
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx"> #if ENABLE(WEB_REPLAY)
</span><span class="cx">     JSGlobalObject* globalObject = state-&gt;lexicalGlobalObject();
</span><span class="cx">     InputCursor&amp; cursor = globalObject-&gt;inputCursor();
</span><span class="cx">     static NeverDestroyed&lt;const AtomicString&gt; bindingName(&quot;TestNondeterministic.nondeterministicWriteableAttr&quot;, AtomicString::ConstructFromLiteral);
</span><span class="cx">     if (cursor.isCapturing()) {
</span><del>-        String memoizedResult = castedThis-&gt;wrapped().nondeterministicWriteableAttr();
</del><ins>+        String memoizedResult = thisObject-&gt;wrapped().nondeterministicWriteableAttr();
</ins><span class="cx">         cursor.appendInput&lt;MemoizedDOMResult&lt;String&gt;&gt;(bindingName.get().string(), memoizedResult, 0);
</span><span class="cx">         JSValue result = jsStringWithCache(state, memoizedResult);
</span><del>-        return JSValue::encode(result);
</del><ins>+        return result;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (cursor.isReplaying()) {
</span><span class="lines">@@ -207,36 +211,35 @@
</span><span class="cx">         MemoizedDOMResultBase* input = cursor.fetchInput&lt;MemoizedDOMResultBase&gt;();
</span><span class="cx">         if (input &amp;&amp; input-&gt;convertTo&lt;String&gt;(memoizedResult)) {
</span><span class="cx">             JSValue result = jsStringWithCache(state, memoizedResult);
</span><del>-            return JSValue::encode(result);
</del><ins>+            return result;
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><del>-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.nondeterministicWriteableAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestNondeterministicNondeterministicExceptionAttrGetter(ExecState*, JSTestNondeterministic*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestNondeterministicNondeterministicExceptionAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestNondeterministicNondeterministicExceptionAttrGetter&gt;(state, thisValue, &quot;nondeterministicExceptionAttr&quot;);
+}
+
+static inline JSValue jsTestNondeterministicNondeterministicExceptionAttrGetter(ExecState* state, JSTestNondeterministic* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestNondeterministic&quot;, &quot;nondeterministicExceptionAttr&quot;);
-    }
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx"> #if ENABLE(WEB_REPLAY)
</span><span class="cx">     JSGlobalObject* globalObject = state-&gt;lexicalGlobalObject();
</span><span class="cx">     InputCursor&amp; cursor = globalObject-&gt;inputCursor();
</span><span class="cx">     static NeverDestroyed&lt;const AtomicString&gt; bindingName(&quot;TestNondeterministic.nondeterministicExceptionAttr&quot;, AtomicString::ConstructFromLiteral);
</span><span class="cx">     if (cursor.isCapturing()) {
</span><del>-        String memoizedResult = castedThis-&gt;wrapped().nondeterministicExceptionAttr();
</del><ins>+        String memoizedResult = thisObject-&gt;wrapped().nondeterministicExceptionAttr();
</ins><span class="cx">         cursor.appendInput&lt;MemoizedDOMResult&lt;String&gt;&gt;(bindingName.get().string(), memoizedResult, 0);
</span><span class="cx">         JSValue result = jsStringWithCache(state, memoizedResult);
</span><del>-        return JSValue::encode(result);
</del><ins>+        return result;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (cursor.isReplaying()) {
</span><span class="lines">@@ -244,27 +247,26 @@
</span><span class="cx">         MemoizedDOMResultBase* input = cursor.fetchInput&lt;MemoizedDOMResultBase&gt;();
</span><span class="cx">         if (input &amp;&amp; input-&gt;convertTo&lt;String&gt;(memoizedResult)) {
</span><span class="cx">             JSValue result = jsStringWithCache(state, memoizedResult);
</span><del>-            return JSValue::encode(result);
</del><ins>+            return result;
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><del>-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.nondeterministicExceptionAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestNondeterministicNondeterministicGetterExceptionAttrGetter(ExecState*, JSTestNondeterministic*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestNondeterministicNondeterministicGetterExceptionAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestNondeterministicNondeterministicGetterExceptionAttrGetter&gt;(state, thisValue, &quot;nondeterministicGetterExceptionAttr&quot;);
+}
+
+static inline JSValue jsTestNondeterministicNondeterministicGetterExceptionAttrGetter(ExecState* state, JSTestNondeterministic* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestNondeterministic&quot;, &quot;nondeterministicGetterExceptionAttr&quot;);
-    }
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx">     ExceptionCode ec = 0;
</span><span class="cx"> #if ENABLE(WEB_REPLAY)
</span><span class="cx">     JSGlobalObject* globalObject = state-&gt;lexicalGlobalObject();
</span><span class="lines">@@ -271,11 +273,11 @@
</span><span class="cx">     InputCursor&amp; cursor = globalObject-&gt;inputCursor();
</span><span class="cx">     static NeverDestroyed&lt;const AtomicString&gt; bindingName(&quot;TestNondeterministic.nondeterministicGetterExceptionAttr&quot;, AtomicString::ConstructFromLiteral);
</span><span class="cx">     if (cursor.isCapturing()) {
</span><del>-        String memoizedResult = castedThis-&gt;wrapped().nondeterministicGetterExceptionAttr(ec);
</del><ins>+        String memoizedResult = thisObject-&gt;wrapped().nondeterministicGetterExceptionAttr(ec);
</ins><span class="cx">         cursor.appendInput&lt;MemoizedDOMResult&lt;String&gt;&gt;(bindingName.get().string(), memoizedResult, ec);
</span><span class="cx">         JSValue result = jsStringWithCache(state, memoizedResult);
</span><span class="cx">         setDOMException(state, throwScope, ec);
</span><del>-        return JSValue::encode(result);
</del><ins>+        return result;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (cursor.isReplaying()) {
</span><span class="lines">@@ -284,37 +286,36 @@
</span><span class="cx">         if (input &amp;&amp; input-&gt;convertTo&lt;String&gt;(memoizedResult)) {
</span><span class="cx">             JSValue result = jsStringWithCache(state, memoizedResult);
</span><span class="cx">             setDOMException(state, throwScope, input-&gt;exceptionCode());
</span><del>-            return JSValue::encode(result);
</del><ins>+            return result;
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><del>-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.nondeterministicGetterExceptionAttr(ec));
</span><span class="cx">     setDOMException(state, throwScope, ec);
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestNondeterministicNondeterministicSetterExceptionAttrGetter(ExecState*, JSTestNondeterministic*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestNondeterministicNondeterministicSetterExceptionAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestNondeterministicNondeterministicSetterExceptionAttrGetter&gt;(state, thisValue, &quot;nondeterministicSetterExceptionAttr&quot;);
+}
+
+static inline JSValue jsTestNondeterministicNondeterministicSetterExceptionAttrGetter(ExecState* state, JSTestNondeterministic* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestNondeterministic&quot;, &quot;nondeterministicSetterExceptionAttr&quot;);
-    }
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx"> #if ENABLE(WEB_REPLAY)
</span><span class="cx">     JSGlobalObject* globalObject = state-&gt;lexicalGlobalObject();
</span><span class="cx">     InputCursor&amp; cursor = globalObject-&gt;inputCursor();
</span><span class="cx">     static NeverDestroyed&lt;const AtomicString&gt; bindingName(&quot;TestNondeterministic.nondeterministicSetterExceptionAttr&quot;, AtomicString::ConstructFromLiteral);
</span><span class="cx">     if (cursor.isCapturing()) {
</span><del>-        String memoizedResult = castedThis-&gt;wrapped().nondeterministicSetterExceptionAttr();
</del><ins>+        String memoizedResult = thisObject-&gt;wrapped().nondeterministicSetterExceptionAttr();
</ins><span class="cx">         cursor.appendInput&lt;MemoizedDOMResult&lt;String&gt;&gt;(bindingName.get().string(), memoizedResult, 0);
</span><span class="cx">         JSValue result = jsStringWithCache(state, memoizedResult);
</span><del>-        return JSValue::encode(result);
</del><ins>+        return result;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (cursor.isReplaying()) {
</span><span class="lines">@@ -322,16 +323,15 @@
</span><span class="cx">         MemoizedDOMResultBase* input = cursor.fetchInput&lt;MemoizedDOMResultBase&gt;();
</span><span class="cx">         if (input &amp;&amp; input-&gt;convertTo&lt;String&gt;(memoizedResult)) {
</span><span class="cx">             JSValue result = jsStringWithCache(state, memoizedResult);
</span><del>-            return JSValue::encode(result);
</del><ins>+            return result;
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> #endif
</span><del>-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.nondeterministicSetterExceptionAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> EncodedJSValue jsTestNondeterministicConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = state-&gt;vm();
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministich"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -49,6 +49,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><ins>+    static JSTestNondeterministic* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</ins><span class="cx"> protected:
</span><span class="cx">     JSTestNondeterministic(JSC::Structure*, JSDOMGlobalObject&amp;, Ref&lt;TestNondeterministic&gt;&amp;&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -1711,1546 +1711,1475 @@
</span><span class="cx">     return Base::getOwnPropertySlotByIndex(thisObject, state, index, slot);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline JSTestObj* JSTestObj::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
+{
+    return jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
+}
+
+static inline JSValue jsTestObjReadOnlyLongAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestObjReadOnlyLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjReadOnlyLongAttrGetter&gt;(state, thisValue, &quot;readOnlyLongAttr&quot;);
+}
+
+static inline JSValue jsTestObjReadOnlyLongAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;readOnlyLongAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.readOnlyLongAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjReadOnlyStringAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjReadOnlyStringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjReadOnlyStringAttrGetter&gt;(state, thisValue, &quot;readOnlyStringAttr&quot;);
+}
+
+static inline JSValue jsTestObjReadOnlyStringAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;readOnlyStringAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.readOnlyStringAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjReadOnlyTestObjAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjReadOnlyTestObjAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjReadOnlyTestObjAttrGetter&gt;(state, thisValue, &quot;readOnlyTestObjAttr&quot;);
+}
+
+static inline JSValue jsTestObjReadOnlyTestObjAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;readOnlyTestObjAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.readOnlyTestObjAttr());
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), impl.readOnlyTestObjAttr());
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjConstructorStaticReadOnlyLongAttrGetter(ExecState*);
</ins><span class="cx"> 
</span><del>-EncodedJSValue jsTestObjConstructorStaticReadOnlyLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsTestObjConstructorStaticReadOnlyLongAttr(ExecState* state, EncodedJSValue, PropertyName)
</ins><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
-    UNUSED_PARAM(throwScope);
-    UNUSED_PARAM(thisValue);
</del><ins>+    return JSValue::encode(jsTestObjConstructorStaticReadOnlyLongAttrGetter(state));
+}
+
+static inline JSValue jsTestObjConstructorStaticReadOnlyLongAttrGetter(ExecState* state)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     JSValue result = jsNumber(TestObj::staticReadOnlyLongAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjConstructorStaticStringAttrGetter(ExecState*);
</ins><span class="cx"> 
</span><del>-EncodedJSValue jsTestObjConstructorStaticStringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</del><ins>+EncodedJSValue jsTestObjConstructorStaticStringAttr(ExecState* state, EncodedJSValue, PropertyName)
</ins><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
-    UNUSED_PARAM(throwScope);
-    UNUSED_PARAM(thisValue);
</del><ins>+    return JSValue::encode(jsTestObjConstructorStaticStringAttrGetter(state));
+}
+
+static inline JSValue jsTestObjConstructorStaticStringAttrGetter(ExecState* state)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     JSValue result = jsStringWithCache(state, TestObj::staticStringAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjConstructorTestSubObjGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjConstructorTestSubObj(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjConstructorTestSubObjGetter&gt;(state, thisValue, &quot;TestSubObj&quot;);
+}
+
+static inline JSValue jsTestObjConstructorTestSubObjGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;TestSubObj&quot;);
-    }
-    return JSValue::encode(JSTestSubObj::getConstructor(state-&gt;vm(), castedThis-&gt;globalObject()));
</del><ins>+    UNUSED_PARAM(state);
+    return JSTestSubObj::getConstructor(state-&gt;vm(), thisObject-&gt;globalObject());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjTestSubObjEnabledBySettingConstructorGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjTestSubObjEnabledBySettingConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjTestSubObjEnabledBySettingConstructorGetter&gt;(state, thisValue, &quot;TestSubObjEnabledBySetting&quot;);
+}
+
+static inline JSValue jsTestObjTestSubObjEnabledBySettingConstructorGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;TestSubObjEnabledBySetting&quot;);
-    }
-    if (UNLIKELY(!castedThis-&gt;wrapped().frame()))
-        return JSValue::encode(jsUndefined());
-    Settings&amp; settings = castedThis-&gt;wrapped().frame()-&gt;settings();
</del><ins>+    UNUSED_PARAM(state);
+    if (UNLIKELY(!thisObject-&gt;wrapped().frame()))
+        return jsUndefined();
+    Settings&amp; settings = thisObject-&gt;wrapped().frame()-&gt;settings();
</ins><span class="cx">     if (!settings.testSettingEnabled())
</span><del>-        return JSValue::encode(jsUndefined());
-    return JSValue::encode(JSTestSubObj::getConstructor(state-&gt;vm(), castedThis-&gt;globalObject()));
</del><ins>+        return jsUndefined();
+    return JSTestSubObj::getConstructor(state-&gt;vm(), thisObject-&gt;globalObject());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjEnumAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjEnumAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjEnumAttrGetter&gt;(state, thisValue, &quot;enumAttr&quot;);
+}
+
+static inline JSValue jsTestObjEnumAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;enumAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.enumAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjByteAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjByteAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjByteAttrGetter&gt;(state, thisValue, &quot;byteAttr&quot;);
+}
+
+static inline JSValue jsTestObjByteAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;byteAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.byteAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjOctetAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjOctetAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjOctetAttrGetter&gt;(state, thisValue, &quot;octetAttr&quot;);
+}
+
+static inline JSValue jsTestObjOctetAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;octetAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.octetAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjShortAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjShortAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjShortAttrGetter&gt;(state, thisValue, &quot;shortAttr&quot;);
+}
+
+static inline JSValue jsTestObjShortAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;shortAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.shortAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjClampedShortAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjClampedShortAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjClampedShortAttrGetter&gt;(state, thisValue, &quot;clampedShortAttr&quot;);
+}
+
+static inline JSValue jsTestObjClampedShortAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;clampedShortAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.clampedShortAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjEnforceRangeShortAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjEnforceRangeShortAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjEnforceRangeShortAttrGetter&gt;(state, thisValue, &quot;enforceRangeShortAttr&quot;);
+}
+
+static inline JSValue jsTestObjEnforceRangeShortAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;enforceRangeShortAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.enforceRangeShortAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjUnsignedShortAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjUnsignedShortAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjUnsignedShortAttrGetter&gt;(state, thisValue, &quot;unsignedShortAttr&quot;);
+}
+
+static inline JSValue jsTestObjUnsignedShortAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;unsignedShortAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.unsignedShortAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjLongAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjLongAttrGetter&gt;(state, thisValue, &quot;longAttr&quot;);
+}
+
+static inline JSValue jsTestObjLongAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;longAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.longAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjLongLongAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjLongLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjLongLongAttrGetter&gt;(state, thisValue, &quot;longLongAttr&quot;);
+}
+
+static inline JSValue jsTestObjLongLongAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;longLongAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.longLongAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjUnsignedLongLongAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjUnsignedLongLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjUnsignedLongLongAttrGetter&gt;(state, thisValue, &quot;unsignedLongLongAttr&quot;);
+}
+
+static inline JSValue jsTestObjUnsignedLongLongAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;unsignedLongLongAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.unsignedLongLongAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjStringAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjStringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjStringAttrGetter&gt;(state, thisValue, &quot;stringAttr&quot;);
+}
+
+static inline JSValue jsTestObjStringAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;stringAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.stringAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjUsvstringAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjUsvstringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjUsvstringAttrGetter&gt;(state, thisValue, &quot;usvstringAttr&quot;);
+}
+
+static inline JSValue jsTestObjUsvstringAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;usvstringAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.usvstringAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjTestObjAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjTestObjAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjTestObjAttrGetter&gt;(state, thisValue, &quot;testObjAttr&quot;);
+}
+
+static inline JSValue jsTestObjTestObjAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;testObjAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.testObjAttr());
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), impl.testObjAttr());
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjTestNullableObjAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjTestNullableObjAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjTestNullableObjAttrGetter&gt;(state, thisValue, &quot;testNullableObjAttr&quot;);
+}
+
+static inline JSValue jsTestObjTestNullableObjAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;testNullableObjAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.testNullableObjAttr());
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), impl.testNullableObjAttr());
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjLenientTestObjAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjLenientTestObjAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjLenientTestObjAttrGetter, CastedThisErrorBehavior::ReturnEarly&gt;(state, thisValue, &quot;lenientTestObjAttr&quot;);
+}
+
+static inline JSValue jsTestObjLenientTestObjAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return JSValue::encode(jsUndefined());
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.lenientTestObjAttr());
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), impl.lenientTestObjAttr());
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjUnforgeableAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjUnforgeableAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjUnforgeableAttrGetter&gt;(state, thisValue, &quot;unforgeableAttr&quot;);
+}
+
+static inline JSValue jsTestObjUnforgeableAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;unforgeableAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.unforgeableAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjStringAttrTreatingNullAsEmptyStringGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjStringAttrTreatingNullAsEmptyString(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjStringAttrTreatingNullAsEmptyStringGetter&gt;(state, thisValue, &quot;stringAttrTreatingNullAsEmptyString&quot;);
+}
+
+static inline JSValue jsTestObjStringAttrTreatingNullAsEmptyStringGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;stringAttrTreatingNullAsEmptyString&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.stringAttrTreatingNullAsEmptyString());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjUsvstringAttrTreatingNullAsEmptyStringGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjUsvstringAttrTreatingNullAsEmptyString(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjUsvstringAttrTreatingNullAsEmptyStringGetter&gt;(state, thisValue, &quot;usvstringAttrTreatingNullAsEmptyString&quot;);
+}
+
+static inline JSValue jsTestObjUsvstringAttrTreatingNullAsEmptyStringGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;usvstringAttrTreatingNullAsEmptyString&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.usvstringAttrTreatingNullAsEmptyString());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjImplementationEnumAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjImplementationEnumAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjImplementationEnumAttrGetter&gt;(state, thisValue, &quot;implementationEnumAttr&quot;);
+}
+
+static inline JSValue jsTestObjImplementationEnumAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;implementationEnumAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.implementationEnumAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjXMLObjAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjXMLObjAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjXMLObjAttrGetter&gt;(state, thisValue, &quot;XMLObjAttr&quot;);
+}
+
+static inline JSValue jsTestObjXMLObjAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;XMLObjAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.xmlObjAttr());
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), impl.xmlObjAttr());
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjCreateGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjCreate(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjCreateGetter&gt;(state, thisValue, &quot;create&quot;);
+}
+
+static inline JSValue jsTestObjCreateGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;create&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsBoolean(impl.isCreate());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjReflectedStringAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjReflectedStringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjReflectedStringAttrGetter&gt;(state, thisValue, &quot;reflectedStringAttr&quot;);
+}
+
+static inline JSValue jsTestObjReflectedStringAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedStringAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.attributeWithoutSynchronization(WebCore::HTMLNames::reflectedstringattrAttr));
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjReflectedUSVStringAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjReflectedUSVStringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjReflectedUSVStringAttrGetter&gt;(state, thisValue, &quot;reflectedUSVStringAttr&quot;);
+}
+
+static inline JSValue jsTestObjReflectedUSVStringAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedUSVStringAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.attributeWithoutSynchronization(WebCore::HTMLNames::reflectedusvstringattrAttr));
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjReflectedIntegralAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjReflectedIntegralAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjReflectedIntegralAttrGetter&gt;(state, thisValue, &quot;reflectedIntegralAttr&quot;);
+}
+
+static inline JSValue jsTestObjReflectedIntegralAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedIntegralAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.getIntegralAttribute(WebCore::HTMLNames::reflectedintegralattrAttr));
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjReflectedUnsignedIntegralAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjReflectedUnsignedIntegralAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjReflectedUnsignedIntegralAttrGetter&gt;(state, thisValue, &quot;reflectedUnsignedIntegralAttr&quot;);
+}
+
+static inline JSValue jsTestObjReflectedUnsignedIntegralAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedUnsignedIntegralAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(std::max(0, impl.getIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr)));
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjReflectedBooleanAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjReflectedBooleanAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjReflectedBooleanAttrGetter&gt;(state, thisValue, &quot;reflectedBooleanAttr&quot;);
+}
+
+static inline JSValue jsTestObjReflectedBooleanAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedBooleanAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsBoolean(impl.hasAttributeWithoutSynchronization(WebCore::HTMLNames::reflectedbooleanattrAttr));
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjReflectedURLAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjReflectedURLAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjReflectedURLAttrGetter&gt;(state, thisValue, &quot;reflectedURLAttr&quot;);
+}
+
+static inline JSValue jsTestObjReflectedURLAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedURLAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.getURLAttribute(WebCore::HTMLNames::reflectedurlattrAttr));
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjReflectedUSVURLAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjReflectedUSVURLAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjReflectedUSVURLAttrGetter&gt;(state, thisValue, &quot;reflectedUSVURLAttr&quot;);
+}
+
+static inline JSValue jsTestObjReflectedUSVURLAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedUSVURLAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.getURLAttribute(WebCore::HTMLNames::reflectedusvurlattrAttr));
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjReflectedStringAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjReflectedStringAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjReflectedStringAttrGetter&gt;(state, thisValue, &quot;reflectedStringAttr&quot;);
+}
+
+static inline JSValue jsTestObjReflectedStringAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedStringAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.attributeWithoutSynchronization(WebCore::HTMLNames::customContentStringAttrAttr));
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjReflectedCustomIntegralAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjReflectedCustomIntegralAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjReflectedCustomIntegralAttrGetter&gt;(state, thisValue, &quot;reflectedCustomIntegralAttr&quot;);
+}
+
+static inline JSValue jsTestObjReflectedCustomIntegralAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedCustomIntegralAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.getIntegralAttribute(WebCore::HTMLNames::customContentIntegralAttrAttr));
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjReflectedCustomBooleanAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjReflectedCustomBooleanAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjReflectedCustomBooleanAttrGetter&gt;(state, thisValue, &quot;reflectedCustomBooleanAttr&quot;);
+}
+
+static inline JSValue jsTestObjReflectedCustomBooleanAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedCustomBooleanAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsBoolean(impl.hasAttributeWithoutSynchronization(WebCore::HTMLNames::customContentBooleanAttrAttr));
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjReflectedCustomURLAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjReflectedCustomURLAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjReflectedCustomURLAttrGetter&gt;(state, thisValue, &quot;reflectedCustomURLAttr&quot;);
+}
+
+static inline JSValue jsTestObjReflectedCustomURLAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;reflectedCustomURLAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.getURLAttribute(WebCore::HTMLNames::customContentURLAttrAttr));
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if ENABLE(TEST_FEATURE)
+static inline JSValue jsTestObjEnabledAtRuntimeAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><del>-#if ENABLE(TEST_FEATURE)
</del><span class="cx"> EncodedJSValue jsTestObjEnabledAtRuntimeAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjEnabledAtRuntimeAttributeGetter&gt;(state, thisValue, &quot;enabledAtRuntimeAttribute&quot;);
+}
+
+static inline JSValue jsTestObjEnabledAtRuntimeAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;enabledAtRuntimeAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.enabledAtRuntimeAttribute());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjTypedArrayAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestObjTypedArrayAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjTypedArrayAttrGetter&gt;(state, thisValue, &quot;typedArrayAttr&quot;);
+}
+
+static inline JSValue jsTestObjTypedArrayAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;typedArrayAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.typedArrayAttr());
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), impl.typedArrayAttr());
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjAttrWithGetterExceptionGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjAttrWithGetterException(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjAttrWithGetterExceptionGetter&gt;(state, thisValue, &quot;attrWithGetterException&quot;);
+}
+
+static inline JSValue jsTestObjAttrWithGetterExceptionGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;attrWithGetterException&quot;);
-    }
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx">     ExceptionCode ec = 0;
</span><del>-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.attrWithGetterException(ec));
</span><span class="cx">     setDOMException(state, throwScope, ec);
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjAttrWithGetterExceptionWithMessageGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjAttrWithGetterExceptionWithMessage(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjAttrWithGetterExceptionWithMessageGetter&gt;(state, thisValue, &quot;attrWithGetterExceptionWithMessage&quot;);
+}
+
+static inline JSValue jsTestObjAttrWithGetterExceptionWithMessageGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;attrWithGetterExceptionWithMessage&quot;);
-    }
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx">     ExceptionCodeWithMessage ec;
</span><del>-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.attrWithGetterExceptionWithMessage(ec));
</span><span class="cx">     setDOMException(state, throwScope, ec);
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjAttrWithSetterExceptionGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjAttrWithSetterException(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjAttrWithSetterExceptionGetter&gt;(state, thisValue, &quot;attrWithSetterException&quot;);
+}
+
+static inline JSValue jsTestObjAttrWithSetterExceptionGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;attrWithSetterException&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.attrWithSetterException());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjAttrWithSetterExceptionWithMessageGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjAttrWithSetterExceptionWithMessage(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjAttrWithSetterExceptionWithMessageGetter&gt;(state, thisValue, &quot;attrWithSetterExceptionWithMessage&quot;);
+}
+
+static inline JSValue jsTestObjAttrWithSetterExceptionWithMessageGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;attrWithSetterExceptionWithMessage&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.attrWithSetterExceptionWithMessage());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjStringAttrWithGetterExceptionGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjStringAttrWithGetterException(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjStringAttrWithGetterExceptionGetter&gt;(state, thisValue, &quot;stringAttrWithGetterException&quot;);
+}
+
+static inline JSValue jsTestObjStringAttrWithGetterExceptionGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;stringAttrWithGetterException&quot;);
-    }
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx">     ExceptionCode ec = 0;
</span><del>-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.stringAttrWithGetterException(ec));
</span><span class="cx">     setDOMException(state, throwScope, ec);
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjStringAttrWithSetterExceptionGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjStringAttrWithSetterException(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjStringAttrWithSetterExceptionGetter&gt;(state, thisValue, &quot;stringAttrWithSetterException&quot;);
+}
+
+static inline JSValue jsTestObjStringAttrWithSetterExceptionGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;stringAttrWithSetterException&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.stringAttrWithSetterException());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjCustomAttrGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjCustomAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjCustomAttrGetter&gt;(state, thisValue, &quot;customAttr&quot;);
+}
+
+static inline JSValue jsTestObjCustomAttrGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;customAttr&quot;);
-    }
-    return JSValue::encode(castedThis-&gt;customAttr(*state));
</del><ins>+    UNUSED_PARAM(state);
+    return thisObject-&gt;customAttr(*state);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjOnfooGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjOnfoo(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjOnfooGetter&gt;(state, thisValue, &quot;onfoo&quot;);
+}
+
+static inline JSValue jsTestObjOnfooGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;onfoo&quot;);
-    }
</del><span class="cx">     UNUSED_PARAM(state);
</span><del>-    return JSValue::encode(eventHandlerAttribute(castedThis-&gt;wrapped(), eventNames().fooEvent));
</del><ins>+    return eventHandlerAttribute(thisObject-&gt;wrapped(), eventNames().fooEvent);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjOnwebkitfooGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjOnwebkitfoo(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjOnwebkitfooGetter&gt;(state, thisValue, &quot;onwebkitfoo&quot;);
+}
+
+static inline JSValue jsTestObjOnwebkitfooGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;onwebkitfoo&quot;);
-    }
</del><span class="cx">     UNUSED_PARAM(state);
</span><del>-    return JSValue::encode(eventHandlerAttribute(castedThis-&gt;wrapped(), eventNames().fooEvent));
</del><ins>+    return eventHandlerAttribute(thisObject-&gt;wrapped(), eventNames().fooEvent);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjWithScriptStateAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjWithScriptStateAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjWithScriptStateAttributeGetter&gt;(state, thisValue, &quot;withScriptStateAttribute&quot;);
+}
+
+static inline JSValue jsTestObjWithScriptStateAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptStateAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.withScriptStateAttribute(*state));
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjWithCallWithAndSetterCallWithAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjWithCallWithAndSetterCallWithAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjWithCallWithAndSetterCallWithAttributeGetter&gt;(state, thisValue, &quot;withCallWithAndSetterCallWithAttribute&quot;);
+}
+
+static inline JSValue jsTestObjWithCallWithAndSetterCallWithAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withCallWithAndSetterCallWithAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.withCallWithAndSetterCallWithAttribute(*state));
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjWithScriptExecutionContextAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjWithScriptExecutionContextAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjWithScriptExecutionContextAttributeGetter&gt;(state, thisValue, &quot;withScriptExecutionContextAttribute&quot;);
+}
+
+static inline JSValue jsTestObjWithScriptExecutionContextAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptExecutionContextAttribute&quot;);
-    }
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx">     auto* context = jsCast&lt;JSDOMGlobalObject*&gt;(state-&gt;lexicalGlobalObject())-&gt;scriptExecutionContext();
</span><span class="cx">     if (!context)
</span><del>-        return JSValue::encode(jsUndefined());
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.withScriptExecutionContextAttribute(*context));
-    return JSValue::encode(result);
</del><ins>+        return jsUndefined();
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), impl.withScriptExecutionContextAttribute(*context));
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjWithScriptStateAttributeRaisesGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjWithScriptStateAttributeRaises(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjWithScriptStateAttributeRaisesGetter&gt;(state, thisValue, &quot;withScriptStateAttributeRaises&quot;);
+}
+
+static inline JSValue jsTestObjWithScriptStateAttributeRaisesGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptStateAttributeRaises&quot;);
-    }
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx">     ExceptionCode ec = 0;
</span><del>-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.withScriptStateAttributeRaises(*state, ec));
</del><ins>+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), impl.withScriptStateAttributeRaises(*state, ec));
</ins><span class="cx">     setDOMException(state, throwScope, ec);
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjWithScriptExecutionContextAttributeRaisesGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjWithScriptExecutionContextAttributeRaises(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjWithScriptExecutionContextAttributeRaisesGetter&gt;(state, thisValue, &quot;withScriptExecutionContextAttributeRaises&quot;);
+}
+
+static inline JSValue jsTestObjWithScriptExecutionContextAttributeRaisesGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptExecutionContextAttributeRaises&quot;);
-    }
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx">     ExceptionCode ec = 0;
</span><span class="cx">     auto* context = jsCast&lt;JSDOMGlobalObject*&gt;(state-&gt;lexicalGlobalObject())-&gt;scriptExecutionContext();
</span><span class="cx">     if (!context)
</span><del>-        return JSValue::encode(jsUndefined());
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.withScriptExecutionContextAttributeRaises(*context, ec));
</del><ins>+        return jsUndefined();
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), impl.withScriptExecutionContextAttributeRaises(*context, ec));
</ins><span class="cx">     setDOMException(state, throwScope, ec);
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjWithScriptExecutionContextAndScriptStateAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjWithScriptExecutionContextAndScriptStateAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjWithScriptExecutionContextAndScriptStateAttributeGetter&gt;(state, thisValue, &quot;withScriptExecutionContextAndScriptStateAttribute&quot;);
+}
+
+static inline JSValue jsTestObjWithScriptExecutionContextAndScriptStateAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptExecutionContextAndScriptStateAttribute&quot;);
-    }
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx">     auto* context = jsCast&lt;JSDOMGlobalObject*&gt;(state-&gt;lexicalGlobalObject())-&gt;scriptExecutionContext();
</span><span class="cx">     if (!context)
</span><del>-        return JSValue::encode(jsUndefined());
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.withScriptExecutionContextAndScriptStateAttribute(*state, *context));
-    return JSValue::encode(result);
</del><ins>+        return jsUndefined();
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), impl.withScriptExecutionContextAndScriptStateAttribute(*state, *context));
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaisesGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaisesGetter&gt;(state, thisValue, &quot;withScriptExecutionContextAndScriptStateAttributeRaises&quot;);
+}
+
+static inline JSValue jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaisesGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptExecutionContextAndScriptStateAttributeRaises&quot;);
-    }
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx">     ExceptionCode ec = 0;
</span><span class="cx">     auto* context = jsCast&lt;JSDOMGlobalObject*&gt;(state-&gt;lexicalGlobalObject())-&gt;scriptExecutionContext();
</span><span class="cx">     if (!context)
</span><del>-        return JSValue::encode(jsUndefined());
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.withScriptExecutionContextAndScriptStateAttributeRaises(*state, *context, ec));
</del><ins>+        return jsUndefined();
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), impl.withScriptExecutionContextAndScriptStateAttributeRaises(*state, *context, ec));
</ins><span class="cx">     setDOMException(state, throwScope, ec);
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttributeGetter&gt;(state, thisValue, &quot;withScriptExecutionContextAndScriptStateWithSpacesAttribute&quot;);
+}
+
+static inline JSValue jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptExecutionContextAndScriptStateWithSpacesAttribute&quot;);
-    }
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx">     auto* context = jsCast&lt;JSDOMGlobalObject*&gt;(state-&gt;lexicalGlobalObject())-&gt;scriptExecutionContext();
</span><span class="cx">     if (!context)
</span><del>-        return JSValue::encode(jsUndefined());
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.withScriptExecutionContextAndScriptStateWithSpacesAttribute(*state, *context));
-    return JSValue::encode(result);
</del><ins>+        return jsUndefined();
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), impl.withScriptExecutionContextAndScriptStateWithSpacesAttribute(*state, *context));
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjWithScriptArgumentsAndCallStackAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjWithScriptArgumentsAndCallStackAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjWithScriptArgumentsAndCallStackAttributeGetter&gt;(state, thisValue, &quot;withScriptArgumentsAndCallStackAttribute&quot;);
+}
+
+static inline JSValue jsTestObjWithScriptArgumentsAndCallStackAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptArgumentsAndCallStackAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.withScriptArgumentsAndCallStackAttribute());
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), impl.withScriptArgumentsAndCallStackAttribute());
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#if ENABLE(Condition1)
+static inline JSValue jsTestObjConditionalAttr1Getter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><del>-#if ENABLE(Condition1)
</del><span class="cx"> EncodedJSValue jsTestObjConditionalAttr1(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjConditionalAttr1Getter&gt;(state, thisValue, &quot;conditionalAttr1&quot;);
+}
+
+static inline JSValue jsTestObjConditionalAttr1Getter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;conditionalAttr1&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.conditionalAttr1());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition1) &amp;&amp; ENABLE(Condition2)
</span><ins>+static inline JSValue jsTestObjConditionalAttr2Getter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestObjConditionalAttr2(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjConditionalAttr2Getter&gt;(state, thisValue, &quot;conditionalAttr2&quot;);
+}
+
+static inline JSValue jsTestObjConditionalAttr2Getter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;conditionalAttr2&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.conditionalAttr2());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition1) || ENABLE(Condition2)
</span><ins>+static inline JSValue jsTestObjConditionalAttr3Getter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestObjConditionalAttr3(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjConditionalAttr3Getter&gt;(state, thisValue, &quot;conditionalAttr3&quot;);
+}
+
+static inline JSValue jsTestObjConditionalAttr3Getter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;conditionalAttr3&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.conditionalAttr3());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition1)
</span><ins>+static inline JSValue jsTestObjConditionalAttr4ConstructorGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestObjConditionalAttr4Constructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjConditionalAttr4ConstructorGetter&gt;(state, thisValue, &quot;conditionalAttr4&quot;);
+}
+
+static inline JSValue jsTestObjConditionalAttr4ConstructorGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;conditionalAttr4&quot;);
-    }
-    return JSValue::encode(JSTestObjectA::getConstructor(state-&gt;vm(), castedThis-&gt;globalObject()));
</del><ins>+    UNUSED_PARAM(state);
+    return JSTestObjectA::getConstructor(state-&gt;vm(), thisObject-&gt;globalObject());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition1) &amp;&amp; ENABLE(Condition2)
</span><ins>+static inline JSValue jsTestObjConditionalAttr5ConstructorGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestObjConditionalAttr5Constructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjConditionalAttr5ConstructorGetter&gt;(state, thisValue, &quot;conditionalAttr5&quot;);
+}
+
+static inline JSValue jsTestObjConditionalAttr5ConstructorGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;conditionalAttr5&quot;);
-    }
-    return JSValue::encode(JSTestObjectB::getConstructor(state-&gt;vm(), castedThis-&gt;globalObject()));
</del><ins>+    UNUSED_PARAM(state);
+    return JSTestObjectB::getConstructor(state-&gt;vm(), thisObject-&gt;globalObject());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition1) || ENABLE(Condition2)
</span><ins>+static inline JSValue jsTestObjConditionalAttr6ConstructorGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestObjConditionalAttr6Constructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjConditionalAttr6ConstructorGetter&gt;(state, thisValue, &quot;conditionalAttr6&quot;);
+}
+
+static inline JSValue jsTestObjConditionalAttr6ConstructorGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;conditionalAttr6&quot;);
-    }
-    return JSValue::encode(JSTestObjectC::getConstructor(state-&gt;vm(), castedThis-&gt;globalObject()));
</del><ins>+    UNUSED_PARAM(state);
+    return JSTestObjectC::getConstructor(state-&gt;vm(), thisObject-&gt;globalObject());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjCachedAttribute1Getter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestObjCachedAttribute1(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjCachedAttribute1Getter&gt;(state, thisValue, &quot;cachedAttribute1&quot;);
+}
+
+static inline JSValue jsTestObjCachedAttribute1Getter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;cachedAttribute1&quot;);
-    }
-    if (JSValue cachedValue = castedThis-&gt;m_cachedAttribute1.get())
-        return JSValue::encode(cachedValue);
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    if (JSValue cachedValue = thisObject-&gt;m_cachedAttribute1.get())
+        return cachedValue;
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = impl.cachedAttribute1();
</span><del>-    castedThis-&gt;m_cachedAttribute1.set(state-&gt;vm(), castedThis, result);
-    return JSValue::encode(result);
</del><ins>+    thisObject-&gt;m_cachedAttribute1.set(state-&gt;vm(), thisObject, result);
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjCachedAttribute2Getter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjCachedAttribute2(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjCachedAttribute2Getter&gt;(state, thisValue, &quot;cachedAttribute2&quot;);
+}
+
+static inline JSValue jsTestObjCachedAttribute2Getter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;cachedAttribute2&quot;);
-    }
-    if (JSValue cachedValue = castedThis-&gt;m_cachedAttribute2.get())
-        return JSValue::encode(cachedValue);
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    if (JSValue cachedValue = thisObject-&gt;m_cachedAttribute2.get())
+        return cachedValue;
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = impl.cachedAttribute2();
</span><del>-    castedThis-&gt;m_cachedAttribute2.set(state-&gt;vm(), castedThis, result);
-    return JSValue::encode(result);
</del><ins>+    thisObject-&gt;m_cachedAttribute2.set(state-&gt;vm(), thisObject, result);
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjAnyAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjAnyAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjAnyAttributeGetter&gt;(state, thisValue, &quot;anyAttribute&quot;);
+}
+
+static inline JSValue jsTestObjAnyAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;anyAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = impl.anyAttribute();
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjContentDocumentGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjContentDocument(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjContentDocumentGetter&gt;(state, thisValue, &quot;contentDocument&quot;);
+}
+
+static inline JSValue jsTestObjContentDocumentGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;contentDocument&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    return JSValue::encode(shouldAllowAccessToNode(state, impl.contentDocument()) ? toJS(state, castedThis-&gt;globalObject(), impl.contentDocument()) : jsNull());
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    return shouldAllowAccessToNode(state, impl.contentDocument()) ? toJS(state, thisObject-&gt;globalObject(), impl.contentDocument()) : jsNull();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjMutablePointGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjMutablePoint(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjMutablePointGetter&gt;(state, thisValue, &quot;mutablePoint&quot;);
+}
+
+static inline JSValue jsTestObjMutablePointGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;mutablePoint&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), SVGStaticPropertyTearOff&lt;TestObj, SVGPoint&gt;::create(impl, impl.mutablePoint(), &amp;TestObj::updateMutablePoint));
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), SVGStaticPropertyTearOff&lt;TestObj, SVGPoint&gt;::create(impl, impl.mutablePoint(), &amp;TestObj::updateMutablePoint));
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjImmutablePointGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjImmutablePoint(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjImmutablePointGetter&gt;(state, thisValue, &quot;immutablePoint&quot;);
+}
+
+static inline JSValue jsTestObjImmutablePointGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;immutablePoint&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), SVGPropertyTearOff&lt;SVGPoint&gt;::create(impl.immutablePoint()));
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), SVGPropertyTearOff&lt;SVGPoint&gt;::create(impl.immutablePoint()));
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjStrawberryGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjStrawberry(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjStrawberryGetter&gt;(state, thisValue, &quot;strawberry&quot;);
+}
+
+static inline JSValue jsTestObjStrawberryGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;strawberry&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.blueberry());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjDescriptionGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjDescription(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjDescriptionGetter&gt;(state, thisValue, &quot;description&quot;);
+}
+
+static inline JSValue jsTestObjDescriptionGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;description&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.description());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjIdGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjId(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjIdGetter&gt;(state, thisValue, &quot;id&quot;);
+}
+
+static inline JSValue jsTestObjIdGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;id&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.id());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjHashGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjHash(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjHashGetter&gt;(state, thisValue, &quot;hash&quot;);
+}
+
+static inline JSValue jsTestObjHashGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;hash&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.hash());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjReplaceableAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjReplaceableAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjReplaceableAttributeGetter&gt;(state, thisValue, &quot;replaceableAttribute&quot;);
+}
+
+static inline JSValue jsTestObjReplaceableAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;replaceableAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.replaceableAttribute());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjNullableDoubleAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjNullableDoubleAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjNullableDoubleAttributeGetter&gt;(state, thisValue, &quot;nullableDoubleAttribute&quot;);
+}
+
+static inline JSValue jsTestObjNullableDoubleAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;nullableDoubleAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = toNullableJSNumber(impl.nullableDoubleAttribute());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjNullableLongAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjNullableLongAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjNullableLongAttributeGetter&gt;(state, thisValue, &quot;nullableLongAttribute&quot;);
+}
+
+static inline JSValue jsTestObjNullableLongAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;nullableLongAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = toNullableJSNumber(impl.nullableLongAttribute());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjNullableBooleanAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjNullableBooleanAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjNullableBooleanAttributeGetter&gt;(state, thisValue, &quot;nullableBooleanAttribute&quot;);
+}
+
+static inline JSValue jsTestObjNullableBooleanAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;nullableBooleanAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsBoolean(impl.nullableBooleanAttribute());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjNullableStringAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjNullableStringAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjNullableStringAttributeGetter&gt;(state, thisValue, &quot;nullableStringAttribute&quot;);
+}
+
+static inline JSValue jsTestObjNullableStringAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;nullableStringAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringOrNull(state, impl.nullableStringAttribute());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjNullableLongSettableAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjNullableLongSettableAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjNullableLongSettableAttributeGetter&gt;(state, thisValue, &quot;nullableLongSettableAttribute&quot;);
+}
+
+static inline JSValue jsTestObjNullableLongSettableAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;nullableLongSettableAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = toNullableJSNumber(impl.nullableLongSettableAttribute());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjNullableStringSettableAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjNullableStringSettableAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjNullableStringSettableAttributeGetter&gt;(state, thisValue, &quot;nullableStringSettableAttribute&quot;);
+}
+
+static inline JSValue jsTestObjNullableStringSettableAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;nullableStringSettableAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringOrNull(state, impl.nullableStringSettableAttribute());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjNullableUSVStringSettableAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjNullableUSVStringSettableAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjNullableUSVStringSettableAttributeGetter&gt;(state, thisValue, &quot;nullableUSVStringSettableAttribute&quot;);
+}
+
+static inline JSValue jsTestObjNullableUSVStringSettableAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;nullableUSVStringSettableAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringOrNull(state, impl.nullableUSVStringSettableAttribute());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjNullableStringValueGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjNullableStringValue(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjNullableStringValueGetter&gt;(state, thisValue, &quot;nullableStringValue&quot;);
+}
+
+static inline JSValue jsTestObjNullableStringValueGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;nullableStringValue&quot;);
-    }
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx">     ExceptionCode ec = 0;
</span><del>-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = toNullableJSNumber(impl.nullableStringValue(ec));
</span><span class="cx">     setDOMException(state, throwScope, ec);
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjAttributeGetter&gt;(state, thisValue, &quot;attribute&quot;);
+}
+
+static inline JSValue jsTestObjAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;attribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.attribute());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjAttributeWithReservedEnumTypeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjAttributeWithReservedEnumType(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjAttributeWithReservedEnumTypeGetter&gt;(state, thisValue, &quot;attributeWithReservedEnumType&quot;);
+}
+
+static inline JSValue jsTestObjAttributeWithReservedEnumTypeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;attributeWithReservedEnumType&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.attributeWithReservedEnumType());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjPutForwardsAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjPutForwardsAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjPutForwardsAttributeGetter&gt;(state, thisValue, &quot;putForwardsAttribute&quot;);
+}
+
+static inline JSValue jsTestObjPutForwardsAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;putForwardsAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.putForwardsAttribute());
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), impl.putForwardsAttribute());
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjPutForwardsNullableAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjPutForwardsNullableAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjPutForwardsNullableAttributeGetter&gt;(state, thisValue, &quot;putForwardsNullableAttribute&quot;);
+}
+
+static inline JSValue jsTestObjPutForwardsNullableAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;putForwardsNullableAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.putForwardsNullableAttribute());
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = toJS(state, thisObject-&gt;globalObject(), impl.putForwardsNullableAttribute());
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestObjStringifierAttributeGetter(ExecState*, JSTestObj*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjStringifierAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestObjStringifierAttributeGetter&gt;(state, thisValue, &quot;stringifierAttribute&quot;);
+}
+
+static inline JSValue jsTestObjStringifierAttributeGetter(ExecState* state, JSTestObj* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestObj*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;stringifierAttribute&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.stringifierAttribute());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> EncodedJSValue jsTestObjConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = state-&gt;vm();
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -53,6 +53,7 @@
</span><span class="cx"> 
</span><span class="cx">     static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, JSC::PropertyNameArray&amp;, JSC::EnumerationMode = JSC::EnumerationMode());
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><ins>+    static JSTestObj* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</ins><span class="cx">     mutable JSC::WriteBarrier&lt;JSC::Unknown&gt; m_cachedAttribute1;
</span><span class="cx">     mutable JSC::WriteBarrier&lt;JSC::Unknown&gt; m_cachedAttribute2;
</span><span class="cx">     static void visitChildren(JSCell*, JSC::SlotVisitor&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -132,97 +132,97 @@
</span><span class="cx">     thisObject-&gt;JSTestSerializedScriptValueInterface::~JSTestSerializedScriptValueInterface();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline JSTestSerializedScriptValueInterface* JSTestSerializedScriptValueInterface::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
+{
+    return jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(JSValue::decode(thisValue));
+}
+
+static inline JSValue jsTestSerializedScriptValueInterfaceValueGetter(ExecState*, JSTestSerializedScriptValueInterface*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestSerializedScriptValueInterfaceValue(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestSerializedScriptValueInterfaceValueGetter&gt;(state, thisValue, &quot;value&quot;);
+}
+
+static inline JSValue jsTestSerializedScriptValueInterfaceValueGetter(ExecState* state, JSTestSerializedScriptValueInterface* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestSerializedScriptValueInterface&quot;, &quot;value&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = impl.value() ? impl.value()-&gt;deserialize(state, castedThis-&gt;globalObject(), 0) : jsNull();
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = impl.value() ? impl.value()-&gt;deserialize(state, thisObject-&gt;globalObject(), 0) : jsNull();
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestSerializedScriptValueInterfaceReadonlyValueGetter(ExecState*, JSTestSerializedScriptValueInterface*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestSerializedScriptValueInterfaceReadonlyValue(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestSerializedScriptValueInterfaceReadonlyValueGetter&gt;(state, thisValue, &quot;readonlyValue&quot;);
+}
+
+static inline JSValue jsTestSerializedScriptValueInterfaceReadonlyValueGetter(ExecState* state, JSTestSerializedScriptValueInterface* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestSerializedScriptValueInterface&quot;, &quot;readonlyValue&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = impl.readonlyValue() ? impl.readonlyValue()-&gt;deserialize(state, castedThis-&gt;globalObject(), 0) : jsNull();
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = impl.readonlyValue() ? impl.readonlyValue()-&gt;deserialize(state, thisObject-&gt;globalObject(), 0) : jsNull();
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestSerializedScriptValueInterfaceCachedValueGetter(ExecState*, JSTestSerializedScriptValueInterface*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestSerializedScriptValueInterfaceCachedValue(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestSerializedScriptValueInterfaceCachedValueGetter&gt;(state, thisValue, &quot;cachedValue&quot;);
+}
+
+static inline JSValue jsTestSerializedScriptValueInterfaceCachedValueGetter(ExecState* state, JSTestSerializedScriptValueInterface* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestSerializedScriptValueInterface&quot;, &quot;cachedValue&quot;);
-    }
-    if (JSValue cachedValue = castedThis-&gt;m_cachedValue.get())
-        return JSValue::encode(cachedValue);
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = impl.cachedValue() ? impl.cachedValue()-&gt;deserialize(state, castedThis-&gt;globalObject(), 0) : jsNull();
-    castedThis-&gt;m_cachedValue.set(state-&gt;vm(), castedThis, result);
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    if (JSValue cachedValue = thisObject-&gt;m_cachedValue.get())
+        return cachedValue;
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = impl.cachedValue() ? impl.cachedValue()-&gt;deserialize(state, thisObject-&gt;globalObject(), 0) : jsNull();
+    thisObject-&gt;m_cachedValue.set(state-&gt;vm(), thisObject, result);
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestSerializedScriptValueInterfacePortsGetter(ExecState*, JSTestSerializedScriptValueInterface*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestSerializedScriptValueInterfacePorts(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestSerializedScriptValueInterfacePortsGetter&gt;(state, thisValue, &quot;ports&quot;);
+}
+
+static inline JSValue jsTestSerializedScriptValueInterfacePortsGetter(ExecState* state, JSTestSerializedScriptValueInterface* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestSerializedScriptValueInterface&quot;, &quot;ports&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = jsArray(state, castedThis-&gt;globalObject(), impl.ports());
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = jsArray(state, thisObject-&gt;globalObject(), impl.ports());
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestSerializedScriptValueInterfaceCachedReadonlyValueGetter(ExecState*, JSTestSerializedScriptValueInterface*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestSerializedScriptValueInterfaceCachedReadonlyValue(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestSerializedScriptValueInterfaceCachedReadonlyValueGetter&gt;(state, thisValue, &quot;cachedReadonlyValue&quot;);
+}
+
+static inline JSValue jsTestSerializedScriptValueInterfaceCachedReadonlyValueGetter(ExecState* state, JSTestSerializedScriptValueInterface* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestSerializedScriptValueInterface&quot;, &quot;cachedReadonlyValue&quot;);
-    }
-    if (JSValue cachedValue = castedThis-&gt;m_cachedReadonlyValue.get())
-        return JSValue::encode(cachedValue);
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = impl.cachedReadonlyValue() ? impl.cachedReadonlyValue()-&gt;deserialize(state, castedThis-&gt;globalObject(), 0) : jsNull();
-    castedThis-&gt;m_cachedReadonlyValue.set(state-&gt;vm(), castedThis, result);
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    if (JSValue cachedValue = thisObject-&gt;m_cachedReadonlyValue.get())
+        return cachedValue;
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = impl.cachedReadonlyValue() ? impl.cachedReadonlyValue()-&gt;deserialize(state, thisObject-&gt;globalObject(), 0) : jsNull();
+    thisObject-&gt;m_cachedReadonlyValue.set(state-&gt;vm(), thisObject, result);
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> EncodedJSValue jsTestSerializedScriptValueInterfaceConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = state-&gt;vm();
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -51,6 +51,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><ins>+    static JSTestSerializedScriptValueInterface* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</ins><span class="cx">     mutable JSC::WriteBarrier&lt;JSC::Unknown&gt; m_cachedValue;
</span><span class="cx">     mutable JSC::WriteBarrier&lt;JSC::Unknown&gt; m_cachedReadonlyValue;
</span><span class="cx">     static void visitChildren(JSCell*, JSC::SlotVisitor&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestTypedefscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -210,127 +210,125 @@
</span><span class="cx">     thisObject-&gt;JSTestTypedefs::~JSTestTypedefs();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline JSTestTypedefs* JSTestTypedefs::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
+{
+    return jsDynamicCast&lt;JSTestTypedefs*&gt;(JSValue::decode(thisValue));
+}
+
+static inline JSValue jsTestTypedefsUnsignedLongLongAttrGetter(ExecState*, JSTestTypedefs*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsTestTypedefsUnsignedLongLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestTypedefsUnsignedLongLongAttrGetter&gt;(state, thisValue, &quot;unsignedLongLongAttr&quot;);
+}
+
+static inline JSValue jsTestTypedefsUnsignedLongLongAttrGetter(ExecState* state, JSTestTypedefs* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;unsignedLongLongAttr&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.unsignedLongLongAttr());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestTypedefsImmutableSerializedScriptValueGetter(ExecState*, JSTestTypedefs*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestTypedefsImmutableSerializedScriptValue(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestTypedefsImmutableSerializedScriptValueGetter&gt;(state, thisValue, &quot;immutableSerializedScriptValue&quot;);
+}
+
+static inline JSValue jsTestTypedefsImmutableSerializedScriptValueGetter(ExecState* state, JSTestTypedefs* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;immutableSerializedScriptValue&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
-    JSValue result = impl.immutableSerializedScriptValue() ? impl.immutableSerializedScriptValue()-&gt;deserialize(state, castedThis-&gt;globalObject(), 0) : jsNull();
-    return JSValue::encode(result);
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
+    JSValue result = impl.immutableSerializedScriptValue() ? impl.immutableSerializedScriptValue()-&gt;deserialize(state, thisObject-&gt;globalObject(), 0) : jsNull();
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestTypedefsConstructorTestSubObjGetter(ExecState*, JSTestTypedefs*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestTypedefsConstructorTestSubObj(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestTypedefsConstructorTestSubObjGetter&gt;(state, thisValue, &quot;TestSubObj&quot;);
+}
+
+static inline JSValue jsTestTypedefsConstructorTestSubObjGetter(ExecState* state, JSTestTypedefs* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;TestSubObj&quot;);
-    }
-    return JSValue::encode(JSTestSubObj::getConstructor(state-&gt;vm(), castedThis-&gt;globalObject()));
</del><ins>+    UNUSED_PARAM(state);
+    return JSTestSubObj::getConstructor(state-&gt;vm(), thisObject-&gt;globalObject());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestTypedefsAttrWithGetterExceptionGetter(ExecState*, JSTestTypedefs*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestTypedefsAttrWithGetterException(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestTypedefsAttrWithGetterExceptionGetter&gt;(state, thisValue, &quot;attrWithGetterException&quot;);
+}
+
+static inline JSValue jsTestTypedefsAttrWithGetterExceptionGetter(ExecState* state, JSTestTypedefs* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;attrWithGetterException&quot;);
-    }
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx">     ExceptionCode ec = 0;
</span><del>-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.attrWithGetterException(ec));
</span><span class="cx">     setDOMException(state, throwScope, ec);
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestTypedefsAttrWithSetterExceptionGetter(ExecState*, JSTestTypedefs*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestTypedefsAttrWithSetterException(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestTypedefsAttrWithSetterExceptionGetter&gt;(state, thisValue, &quot;attrWithSetterException&quot;);
+}
+
+static inline JSValue jsTestTypedefsAttrWithSetterExceptionGetter(ExecState* state, JSTestTypedefs* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;attrWithSetterException&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsNumber(impl.attrWithSetterException());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestTypedefsStringAttrWithGetterExceptionGetter(ExecState*, JSTestTypedefs*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestTypedefsStringAttrWithGetterException(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestTypedefsStringAttrWithGetterExceptionGetter&gt;(state, thisValue, &quot;stringAttrWithGetterException&quot;);
+}
+
+static inline JSValue jsTestTypedefsStringAttrWithGetterExceptionGetter(ExecState* state, JSTestTypedefs* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;stringAttrWithGetterException&quot;);
-    }
</del><ins>+    UNUSED_PARAM(state);
</ins><span class="cx">     ExceptionCode ec = 0;
</span><del>-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.stringAttrWithGetterException(ec));
</span><span class="cx">     setDOMException(state, throwScope, ec);
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSValue jsTestTypedefsStringAttrWithSetterExceptionGetter(ExecState*, JSTestTypedefs*, ThrowScope&amp; throwScope);
</ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestTypedefsStringAttrWithSetterException(ExecState* state, EncodedJSValue thisValue, PropertyName)
</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;::attribute&lt;jsTestTypedefsStringAttrWithSetterExceptionGetter&gt;(state, thisValue, &quot;stringAttrWithSetterException&quot;);
+}
+
+static inline JSValue jsTestTypedefsStringAttrWithSetterExceptionGetter(ExecState* state, JSTestTypedefs* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;stringAttrWithSetterException&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.stringAttrWithSetterException());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> EncodedJSValue jsTestTypedefsConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = state-&gt;vm();
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestTypedefsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -49,6 +49,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><ins>+    static JSTestTypedefs* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</ins><span class="cx"> public:
</span><span class="cx">     static const unsigned StructureFlags = JSC::HasStaticPropertyTable | Base::StructureFlags;
</span><span class="cx"> protected:
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSattributecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -132,23 +132,27 @@
</span><span class="cx">     thisObject-&gt;JSattribute::~JSattribute();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+inline JSattribute* JSattribute::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
+{
+    return jsDynamicCast&lt;JSattribute*&gt;(JSValue::decode(thisValue));
+}
+
+static inline JSValue jsattributeReadonlyGetter(ExecState*, JSattribute*, ThrowScope&amp; throwScope);
+
</ins><span class="cx"> EncodedJSValue jsattributeReadonly(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSattribute&gt;::attribute&lt;jsattributeReadonlyGetter&gt;(state, thisValue, &quot;readonly&quot;);
+}
+
+static inline JSValue jsattributeReadonlyGetter(ExecState* state, JSattribute* thisObject, ThrowScope&amp; throwScope)
+{
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    UNUSED_PARAM(thisValue);
-    JSValue decodedThisValue = JSValue::decode(thisValue);
-    auto* castedThis = jsDynamicCast&lt;JSattribute*&gt;(decodedThisValue);
-    if (UNLIKELY(!castedThis)) {
-        return throwGetterTypeError(*state, throwScope, &quot;attribute&quot;, &quot;readonly&quot;);
-    }
-    auto&amp; impl = castedThis-&gt;wrapped();
</del><ins>+    UNUSED_PARAM(state);
+    auto&amp; impl = thisObject-&gt;wrapped();
</ins><span class="cx">     JSValue result = jsStringWithCache(state, impl.readonly());
</span><del>-    return JSValue::encode(result);
</del><ins>+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> EncodedJSValue jsattributeConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = state-&gt;vm();
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSattributeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h (206952 => 206953)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h        2016-10-08 11:54:50 UTC (rev 206952)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h        2016-10-08 13:09:30 UTC (rev 206953)
</span><span class="lines">@@ -50,6 +50,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><ins>+    static JSattribute* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</ins><span class="cx"> public:
</span><span class="cx">     static const unsigned StructureFlags = JSC::HasStaticPropertyTable | Base::StructureFlags;
</span><span class="cx"> protected:
</span></span></pre>
</div>
</div>

</body>
</html>