<!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>[207192] 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/207192">207192</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-10-11 23:57:04 -0700 (Tue, 11 Oct 2016)</dd>
</dl>

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

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

Covered by existing tests and binding rebased tests..

Introducing BindingCaller::callMethod and callPromiseMethod to encapsulate casted-this checks for methods.
This is supported for all methods except seralizer and iterators methods.

Introduced castForMethod similarly to castForAttribute.
Moved this from static methods of JSClass to static methods of BindingCaller&lt;JSClass&gt;
This allows removing the corresponding declarations from JSClass header file.

Note the difference of handling thisValue between the two in case of CustomProxyToJSObject.
This should be made more consistent.

In case of bad casted this check, CustomProxyToJSObject objects will throw a TypeError with an error message like other methods.
Before the patch, a TypeError without error message was thrown.

EventTarget being different, added a specialization of BindingCaller for it.
This allows also removing some binding generated code dedicated to EventTarget.
A similar approach might also be done for CustomProxyToJSObject objects to further simplify the binding generator.

* bindings/js/JSDOMBinding.cpp:
(WebCore::rejectPromiseWithThisTypeError):
* bindings/js/JSDOMBinding.h:
(WebCore::BindingCaller::callPromiseMethod):
(WebCore::BindingCaller::callMethod):
* bindings/js/JSEventTargetCustom.h:
(WebCore::BindingCaller&lt;JSEventTarget&gt;::callMethod):
* bindings/scripts/CodeGeneratorJS.pm:
(GenerateHeader):
(GenerateImplementation):
(GenerateFunctionCastedThis): Deleted.
* bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
* bindings/scripts/test/JS/JSTestActiveDOMObject.h:
* bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
* bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
* bindings/scripts/test/JS/JSTestEventTarget.cpp:
* bindings/scripts/test/JS/JSTestEventTarget.h:
* bindings/scripts/test/JS/JSTestGlobalObject.cpp:
* bindings/scripts/test/JS/JSTestGlobalObject.h:
* bindings/scripts/test/JS/JSTestInterface.cpp:
* bindings/scripts/test/JS/JSTestInterface.h:
* bindings/scripts/test/JS/JSTestIterable.cpp:
* bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
* bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
* bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
* bindings/scripts/test/JS/JSTestMediaQueryListListener.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/JSTestOverrideBuiltins.cpp:
* bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
* bindings/scripts/test/JS/JSTestTypedefs.cpp:
* bindings/scripts/test/JS/JSTestTypedefs.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMBindingcpp">trunk/Source/WebCore/bindings/js/JSDOMBinding.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSDOMBindingh">trunk/Source/WebCore/bindings/js/JSDOMBinding.h</a></li>
<li><a href="#trunkSourceWebCorebindingsjsJSEventTargetCustomh">trunk/Source/WebCore/bindings/js/JSEventTargetCustom.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="#trunkSourceWebCorebindingsscriptstestJSJSTestCEReactionscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCEReactionsh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCEReactionsStringifiercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCEReactionsStringifierh">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.h</a></li>
<li><a href="#trunkSourceWebCorebindingsscriptstestJSJSTestCustomNamedGettercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp</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="#trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp</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="#trunkSourceWebCorebindingsscriptstestJSJSTestIterablecpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp</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="#trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenercpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp</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="#trunkSourceWebCorebindingsscriptstestJSJSTestOverrideBuiltinscpp">trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp</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 (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/ChangeLog        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -1,5 +1,69 @@
</span><span class="cx"> 2016-10-11  Youenn Fablet  &lt;youenn@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Refactor binding generated casted-this checks for methods
+        https://bugs.webkit.org/show_bug.cgi?id=163198
+
+        Reviewed by Darin Adler.
+
+        Covered by existing tests and binding rebased tests..
+
+        Introducing BindingCaller::callMethod and callPromiseMethod to encapsulate casted-this checks for methods.
+        This is supported for all methods except seralizer and iterators methods.
+
+        Introduced castForMethod similarly to castForAttribute.
+        Moved this from static methods of JSClass to static methods of BindingCaller&lt;JSClass&gt;
+        This allows removing the corresponding declarations from JSClass header file.
+
+        Note the difference of handling thisValue between the two in case of CustomProxyToJSObject.
+        This should be made more consistent.
+
+        In case of bad casted this check, CustomProxyToJSObject objects will throw a TypeError with an error message like other methods.
+        Before the patch, a TypeError without error message was thrown.
+
+        EventTarget being different, added a specialization of BindingCaller for it.
+        This allows also removing some binding generated code dedicated to EventTarget.
+        A similar approach might also be done for CustomProxyToJSObject objects to further simplify the binding generator.
+
+
+        * bindings/js/JSDOMBinding.cpp:
+        (WebCore::rejectPromiseWithThisTypeError):
+        * bindings/js/JSDOMBinding.h:
+        (WebCore::BindingCaller::callPromiseMethod):
+        (WebCore::BindingCaller::callMethod):
+        * bindings/js/JSEventTargetCustom.h:
+        (WebCore::BindingCaller&lt;JSEventTarget&gt;::callMethod):
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GenerateHeader):
+        (GenerateImplementation):
+        (GenerateFunctionCastedThis): Deleted.
+        * bindings/scripts/test/JS/JSTestActiveDOMObject.cpp:
+        * bindings/scripts/test/JS/JSTestActiveDOMObject.h:
+        * bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp:
+        * bindings/scripts/test/JS/JSTestCustomNamedGetter.h:
+        * bindings/scripts/test/JS/JSTestEventTarget.cpp:
+        * bindings/scripts/test/JS/JSTestEventTarget.h:
+        * bindings/scripts/test/JS/JSTestGlobalObject.cpp:
+        * bindings/scripts/test/JS/JSTestGlobalObject.h:
+        * bindings/scripts/test/JS/JSTestInterface.cpp:
+        * bindings/scripts/test/JS/JSTestInterface.h:
+        * bindings/scripts/test/JS/JSTestIterable.cpp:
+        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp:
+        * bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h:
+        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
+        * bindings/scripts/test/JS/JSTestMediaQueryListListener.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/JSTestOverrideBuiltins.cpp:
+        * bindings/scripts/test/JS/JSTestOverrideBuiltins.h:
+        * bindings/scripts/test/JS/JSTestTypedefs.cpp:
+        * bindings/scripts/test/JS/JSTestTypedefs.h:
+
+2016-10-11  Youenn Fablet  &lt;youenn@apple.com&gt;
+
</ins><span class="cx">         MediaResourceLoader::requestResource should take a ResourceRequest&amp;&amp; as input
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=160397
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMBindingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMBinding.cpp (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMBinding.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/js/JSDOMBinding.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -978,6 +978,17 @@
</span><span class="cx">     return throwTypeError(state, scope, makeThisTypeErrorMessage(interfaceName, functionName));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+JSC::EncodedJSValue rejectPromiseWithThisTypeError(DeferredPromise&amp; promise, const char* interfaceName, const char* methodName)
+{
+    promise.reject(TypeError, makeThisTypeErrorMessage(interfaceName, methodName));
+    return JSValue::encode(jsUndefined());
+}
+
+JSC::EncodedJSValue rejectPromiseWithThisTypeError(JSC::ExecState&amp; state, const char* interfaceName, const char* methodName)
+{
+    return createRejectedPromiseWithTypeError(state, makeThisTypeErrorMessage(interfaceName, methodName));
+}
+
</ins><span class="cx"> void callFunctionWithCurrentArguments(JSC::ExecState&amp; state, JSC::JSObject&amp; thisObject, JSC::JSFunction&amp; function)
</span><span class="cx"> {
</span><span class="cx">     JSC::CallData callData;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSDOMBindingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSDOMBinding.h (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/js/JSDOMBinding.h        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -66,6 +66,7 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> class CachedScript;
</span><ins>+class DeferredPromise;
</ins><span class="cx"> class DOMWindow;
</span><span class="cx"> class Frame;
</span><span class="cx"> class URL;
</span><span class="lines">@@ -135,6 +136,8 @@
</span><span class="cx"> WEBCORE_EXPORT JSC::EncodedJSValue throwThisTypeError(JSC::ExecState&amp;, JSC::ThrowScope&amp;, const char* interfaceName, const char* functionName);
</span><span class="cx"> 
</span><span class="cx"> WEBCORE_EXPORT JSC::EncodedJSValue rejectPromiseWithGetterTypeError(JSC::ExecState&amp;, const char* interfaceName, const char* attributeName);
</span><ins>+WEBCORE_EXPORT JSC::EncodedJSValue rejectPromiseWithThisTypeError(DeferredPromise&amp;, const char* interfaceName, const char* operationName);
+WEBCORE_EXPORT JSC::EncodedJSValue rejectPromiseWithThisTypeError(JSC::ExecState&amp;, const char* interfaceName, const char* operationName);
</ins><span class="cx"> 
</span><span class="cx"> WEBCORE_EXPORT JSC::Structure* getCachedDOMStructure(JSDOMGlobalObject&amp;, const JSC::ClassInfo*);
</span><span class="cx"> WEBCORE_EXPORT JSC::Structure* cacheDOMStructure(JSDOMGlobalObject&amp;, JSC::Structure*, const JSC::ClassInfo*);
</span><span class="lines">@@ -334,13 +337,51 @@
</span><span class="cx"> struct BindingCaller {
</span><span class="cx">     using AttributeSetterFunction = bool(JSC::ExecState*, JSClass*, JSC::JSValue, JSC::ThrowScope&amp;);
</span><span class="cx">     using AttributeGetterFunction = JSC::JSValue(JSC::ExecState&amp;, JSClass&amp;, JSC::ThrowScope&amp;);
</span><ins>+    using OperationCallerFunction = JSC::EncodedJSValue(JSC::ExecState*, JSClass*, JSC::ThrowScope&amp;);
+    using PromiseOperationCallerFunction = JSC::EncodedJSValue(JSC::ExecState*, JSClass*, Ref&lt;DeferredPromise&gt;&amp;&amp;, JSC::ThrowScope&amp;);
</ins><span class="cx"> 
</span><ins>+    static JSClass* castForAttribute(JSC::ExecState&amp;, JSC::EncodedJSValue);
+    static JSClass* castForOperation(JSC::ExecState&amp;);
+
+    template&lt;PromiseOperationCallerFunction operationCaller&gt;
+    static JSC::EncodedJSValue callPromiseOperation(JSC::ExecState* state, Ref&lt;DeferredPromise&gt;&amp;&amp; promise, const char* operationName)
+    {
+        ASSERT(state);
+        auto throwScope = DECLARE_THROW_SCOPE(state-&gt;vm());
+        auto* thisObject = castForOperation(*state);
+        if (UNLIKELY(!thisObject)) {
+            ASSERT(JSClass::info());
+            return rejectPromiseWithThisTypeError(promise.get(), JSClass::info()-&gt;className, operationName);
+        }
+        ASSERT_GC_OBJECT_INHERITS(thisObject, JSClass::info());
+        // FIXME: We should refactor the binding generated code to use references for state and thisObject.
+        return operationCaller(state, thisObject, WTFMove(promise), throwScope);
+    }
+
+    template&lt;OperationCallerFunction operationCaller, CastedThisErrorBehavior shouldThrow = CastedThisErrorBehavior::Throw&gt;
+    static JSC::EncodedJSValue callOperation(JSC::ExecState* state, const char* operationName)
+    {
+        ASSERT(state);
+        auto throwScope = DECLARE_THROW_SCOPE(state-&gt;vm());
+        auto* thisObject = castForOperation(*state);
+        if (UNLIKELY(!thisObject)) {
+            ASSERT(JSClass::info());
+            if (shouldThrow == CastedThisErrorBehavior::Throw)
+                return throwThisTypeError(*state, throwScope, JSClass::info()-&gt;className, operationName);
+            // For custom promise-returning operations
+            return rejectPromiseWithThisTypeError(*state, JSClass::info()-&gt;className, operationName);
+        }
+        ASSERT_GC_OBJECT_INHERITS(thisObject, JSClass::info());
+        // FIXME: We should refactor the binding generated code to use references for state and thisObject.
+        return operationCaller(state, thisObject, throwScope);
+    }
+
</ins><span class="cx">     template&lt;AttributeSetterFunction setter, CastedThisErrorBehavior shouldThrow = CastedThisErrorBehavior::Throw&gt;
</span><span class="cx">     static bool setAttribute(JSC::ExecState* state, JSC::EncodedJSValue thisValue, JSC::EncodedJSValue encodedValue, const char* attributeName)
</span><span class="cx">     {
</span><span class="cx">         ASSERT(state);
</span><span class="cx">         auto throwScope = DECLARE_THROW_SCOPE(state-&gt;vm());
</span><del>-        auto* thisObject = JSClass::castForAttribute(state, thisValue);
</del><ins>+        auto* thisObject = castForAttribute(*state, thisValue);
</ins><span class="cx">         if (UNLIKELY(!thisObject)) {
</span><span class="cx">             ASSERT(JSClass::info());
</span><span class="cx">             return (shouldThrow == CastedThisErrorBehavior::Throw) ? throwSetterTypeError(*state, throwScope, JSClass::info()-&gt;className, attributeName) : false;
</span><span class="lines">@@ -354,7 +395,7 @@
</span><span class="cx">     {
</span><span class="cx">         ASSERT(state);
</span><span class="cx">         auto throwScope = DECLARE_THROW_SCOPE(state-&gt;vm());
</span><del>-        auto* thisObject = JSClass::castForAttribute(state, thisValue);
</del><ins>+        auto* thisObject = castForAttribute(*state, thisValue);
</ins><span class="cx">         if (UNLIKELY(!thisObject)) {
</span><span class="cx">             ASSERT(JSClass::info());
</span><span class="cx">             if (shouldThrow == CastedThisErrorBehavior::Throw)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSEventTargetCustomh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSEventTargetCustom.h (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSEventTargetCustom.h        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/js/JSEventTargetCustom.h        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -23,9 +23,9 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef JSEventTargetCustom_h
-#define JSEventTargetCustom_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><ins>+#include &quot;DOMWindow.h&quot;
</ins><span class="cx"> #include &quot;JSDOMBinding.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -50,6 +50,26 @@
</span><span class="cx"> 
</span><span class="cx"> std::unique_ptr&lt;JSEventTargetWrapper&gt; jsEventTargetCast(JSC::JSValue thisValue);
</span><span class="cx"> 
</span><ins>+template&lt;&gt; struct BindingCaller&lt;JSEventTarget&gt; {
+    using OperationCallerFunction = JSC::EncodedJSValue(JSC::ExecState*, JSEventTargetWrapper*, JSC::ThrowScope&amp;);
+
+    template&lt;OperationCallerFunction operationCaller&gt;
+    static JSC::EncodedJSValue callOperation(JSC::ExecState* state, const char* operationName)
+    {
+        ASSERT(state);
+        auto throwScope = DECLARE_THROW_SCOPE(state-&gt;vm());
+
+        auto thisObject = jsEventTargetCast(state-&gt;thisValue().toThis(state, JSC::NotStrictMode));
+        if (UNLIKELY(!thisObject))
+            return throwThisTypeError(*state, throwScope, &quot;EventTarget&quot;, operationName);
+
+        if (auto* window = thisObject-&gt;wrapped().toDOMWindow()) {
+            if (!window-&gt;frame() || !BindingSecurity::shouldAllowAccessToDOMWindow(state, *window, ThrowSecurityError))
+                return JSC::JSValue::encode(JSC::jsUndefined());
+        }
+
+        return operationCaller(state, thisObject.get(), throwScope);
+    }
+};
+
</ins><span class="cx"> } // namespace WebCore
</span><del>-
-#endif // JSEventTargetCustom_h
</del></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptsCodeGeneratorJSpm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -1432,8 +1432,6 @@
</span><span class="cx"> 
</span><span class="cx">     # Attribute and function enums
</span><span class="cx">     if ($numAttributes &gt; 0) {
</span><del>-        push(@headerContent, &quot;    static ${className}* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);\n&quot;);
-
</del><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">@@ -2926,15 +2924,15 @@
</span><span class="cx">         my $castingFunction = $interface-&gt;extendedAttributes-&gt;{&quot;CustomProxyToJSObject&quot;} ? &quot;to${className}&quot; : GetCastingHelperForThisObject($interface);
</span><span class="cx">         # FIXME: Remove ImplicitThis keyword as it is no longer defined by WebIDL spec and is only used in DOMWindow.
</span><span class="cx">         if ($interface-&gt;extendedAttributes-&gt;{&quot;ImplicitThis&quot;}) {
</span><del>-            push(@implContent, &quot;inline ${className}* ${className}::castForAttribute(ExecState* state, EncodedJSValue thisValue)\n&quot;);
</del><ins>+            push(@implContent, &quot;template&lt;&gt; inline ${className}* BindingCaller&lt;${className}&gt;::castForAttribute(ExecState&amp; state, EncodedJSValue thisValue)\n&quot;);
</ins><span class="cx">             push(@implContent, &quot;{\n&quot;);
</span><del>-            push(@implContent, &quot;    JSValue decodedThisValue = JSValue::decode(thisValue);\n&quot;);
</del><ins>+            push(@implContent, &quot;    auto decodedThisValue = JSValue::decode(thisValue);\n&quot;);
</ins><span class="cx">             push(@implContent, &quot;    if (decodedThisValue.isUndefinedOrNull())\n&quot;);
</span><del>-            push(@implContent, &quot;        decodedThisValue = state-&gt;thisValue().toThis(state, NotStrictMode);\n&quot;);
-            push(@implContent, &quot;    return $castingFunction(decodedThisValue);\n&quot;);
</del><ins>+            push(@implContent, &quot;        decodedThisValue = state.thisValue().toThis(&amp;state, NotStrictMode);\n&quot;);
+            push(@implContent, &quot;    return $castingFunction(decodedThisValue);&quot;);
</ins><span class="cx">             push(@implContent, &quot;}\n\n&quot;);
</span><span class="cx">         } else {
</span><del>-            push(@implContent, &quot;inline ${className}* ${className}::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)\n&quot;);
</del><ins>+            push(@implContent, &quot;template&lt;&gt; inline ${className}* BindingCaller&lt;${className}&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)\n&quot;);
</ins><span class="cx">             push(@implContent, &quot;{\n&quot;);
</span><span class="cx">             push(@implContent, &quot;    return $castingFunction(JSValue::decode(thisValue));\n&quot;);
</span><span class="cx">             push(@implContent, &quot;}\n\n&quot;);
</span><span class="lines">@@ -2941,6 +2939,16 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    if ($numFunctions &gt; 0 &amp;&amp; $interfaceName ne &quot;EventTarget&quot;) {
+        # FIXME: Make consistent castForAttibute and castForOperation in case of CustomProxyToJSObject.
+        my $castingFunction = $interface-&gt;extendedAttributes-&gt;{&quot;CustomProxyToJSObject&quot;} ? &quot;to${className}&quot; : GetCastingHelperForThisObject($interface);
+        my $thisValue = $interface-&gt;extendedAttributes-&gt;{&quot;CustomProxyToJSObject&quot;} ? &quot;state.thisValue().toThis(&amp;state, NotStrictMode)&quot; : &quot;state.thisValue()&quot;;
+        push(@implContent, &quot;template&lt;&gt; inline ${className}* BindingCaller&lt;${className}&gt;::castForOperation(ExecState&amp; state)\n&quot;);
+        push(@implContent, &quot;{\n&quot;);
+        push(@implContent, &quot;    return $castingFunction($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">@@ -3556,6 +3564,13 @@
</span><span class="cx"> 
</span><span class="cx">             AddToImplIncludes(&quot;JSDOMPromise.h&quot;) if IsReturningPromise($function);
</span><span class="cx"> 
</span><ins>+            if (!$function-&gt;isStatic) {
+                my $classParameterType = $className eq &quot;JSEventTarget&quot; ? &quot;JSEventTargetWrapper*&quot; : &quot;${className}*&quot;;
+                my $optionalPromiseParameter = (IsReturningPromise($function) &amp;&amp; !$isCustom) ? &quot; Ref&lt;DeferredPromise&gt;&amp;&amp;,&quot; : &quot;&quot;;
+                push(@implContent, &quot;static inline JSC::EncodedJSValue ${functionName}Caller(JSC::ExecState*, ${classParameterType},${optionalPromiseParameter} JSC::ThrowScope&amp;);\n&quot;);
+                push(@implContent, &quot;\n&quot;);
+            }
+
</ins><span class="cx">             if (IsReturningPromise($function) &amp;&amp; !$isCustom) {
</span><span class="cx">                 my $scope = $interface-&gt;extendedAttributes-&gt;{Exposed} ? &quot;WindowOrWorker&quot; : &quot;WindowOnly&quot;;
</span><span class="cx">                 push(@implContent, &lt;&lt;END);
</span><span class="lines">@@ -3577,10 +3592,6 @@
</span><span class="cx"> 
</span><span class="cx">             $implIncludes{&quot;&lt;runtime/Error.h&gt;&quot;} = 1;
</span><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;);
-
</del><span class="cx">             if ($function-&gt;signature-&gt;extendedAttributes-&gt;{CEReactions}) {
</span><span class="cx">                 push(@implContent, &quot;#if ENABLE(CUSTOM_ELEMENTS)\n&quot;);
</span><span class="cx">                 push(@implContent, &quot;    CustomElementReactionStack customElementReactionStack;\n&quot;);
</span><span class="lines">@@ -3593,6 +3604,10 @@
</span><span class="cx">                     GenerateArgumentsCountCheck(\@implContent, $function, $interface);
</span><span class="cx">                     push(@implContent, &quot;    return JSValue::encode(${className}::&quot; . $functionImplementationName . &quot;(state));\n&quot;);
</span><span class="cx">                 } else {
</span><ins>+                    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;);
+
</ins><span class="cx">                     GenerateArgumentsCountCheck(\@implContent, $function, $interface);
</span><span class="cx"> 
</span><span class="cx">                     push(@implContent, &quot;    ExceptionCode ec = 0;\n&quot;) if $mayThrowLegacyException;
</span><span class="lines">@@ -3601,9 +3616,29 @@
</span><span class="cx">                     GenerateImplementationFunctionCall($function, $functionString, &quot;    &quot;, $svgPropertyType, $interface);
</span><span class="cx">                 }
</span><span class="cx">             } else {
</span><del>-                my $shouldRejectCastedThis = $isCustom &amp;&amp; IsReturningPromise($function);
-                GenerateFunctionCastedThis($interface, $className, $function, $shouldRejectCastedThis);
</del><ins>+                my $methodName = $function-&gt;signature-&gt;name;
+                if (IsReturningPromise($function) &amp;&amp; !$isCustom) {
+                    push(@implContent, &quot;    return BindingCaller&lt;$className&gt;::callPromiseOperation&lt;${functionName}Caller&gt;(state, WTFMove(promise), \&quot;${methodName}\&quot;);\n&quot;);
+                    push(@implContent, &quot;}\n&quot;);
+                    push(@implContent, &quot;\n&quot;);
+                    push(@implContent, &quot;static inline JSC::EncodedJSValue ${functionName}Caller(JSC::ExecState* state, ${className}* castedThis, Ref&lt;DeferredPromise&gt;&amp;&amp; promise, JSC::ThrowScope&amp; throwScope)\n&quot;);
+                } else {
+                    my $classParameterType = $className eq &quot;JSEventTarget&quot; ? &quot;JSEventTargetWrapper*&quot; : &quot;${className}*&quot;;
+                    my $templateParameters = &quot;${functionName}Caller&quot;;
+                    # FIXME: We need this specific handling for custom promise-returning functions.
+                    # It would be better to have the casted-this code calling the promise-specific code.
+                    $templateParameters .= &quot;, CastedThisErrorBehavior::RejectPromise&quot; if IsReturningPromise($function);
</ins><span class="cx"> 
</span><ins>+                    push(@implContent, &quot;    return BindingCaller&lt;$className&gt;::callOperation&lt;${templateParameters}&gt;(state, \&quot;${methodName}\&quot;);\n&quot;);
+                    push(@implContent, &quot;}\n&quot;);
+                    push(@implContent, &quot;\n&quot;);
+                    push(@implContent, &quot;static inline JSC::EncodedJSValue ${functionName}Caller(JSC::ExecState* state, ${classParameterType} castedThis, JSC::ThrowScope&amp; throwScope)\n&quot;);
+                }
+
+                push(@implContent, &quot;{\n&quot;);
+                push(@implContent, &quot;    UNUSED_PARAM(state);\n&quot;);
+                push(@implContent, &quot;    UNUSED_PARAM(throwScope);\n&quot;);
+
</ins><span class="cx">                 if ($interface-&gt;extendedAttributes-&gt;{CheckSecurity} and !$function-&gt;signature-&gt;extendedAttributes-&gt;{DoNotCheckSecurity}) {
</span><span class="cx">                     if ($interfaceName eq &quot;DOMWindow&quot;) {
</span><span class="cx">                         push(@implContent, &quot;    if (!BindingSecurity::shouldAllowAccessToDOMWindow(state, castedThis-&gt;wrapped(), ThrowSecurityError))\n&quot;);
</span><span class="lines">@@ -3626,15 +3661,6 @@
</span><span class="cx">                         $implIncludes{&quot;ExceptionCode.h&quot;} = 1;
</span><span class="cx">                     }
</span><span class="cx"> 
</span><del>-                    # EventTarget needs to do some extra checks if castedThis is a JSDOMWindow.
-                    if ($interface-&gt;name eq &quot;EventTarget&quot;) {
-                        $implIncludes{&quot;DOMWindow.h&quot;} = 1;
-                        push(@implContent, &quot;    if (auto* window = castedThis-&gt;wrapped().toDOMWindow()) {\n&quot;);
-                        push(@implContent, &quot;        if (!window-&gt;frame() || !BindingSecurity::shouldAllowAccessToDOMWindow(state, *window, ThrowSecurityError))\n&quot;);
-                        push(@implContent, &quot;            return JSValue::encode(jsUndefined());\n&quot;);
-                        push(@implContent, &quot;    }\n&quot;);
-                    }
-
</del><span class="cx">                     GenerateArgumentsCountCheck(\@implContent, $function, $interface);
</span><span class="cx"> 
</span><span class="cx">                     push(@implContent, &quot;    ExceptionCode ec = 0;\n&quot;) if $mayThrowLegacyException;
</span><span class="lines">@@ -3915,39 +3941,6 @@
</span><span class="cx">     push(@implContent, &quot;}\n\n&quot;);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-sub GenerateFunctionCastedThis
-{
-    my ($interface, $className, $function, $shouldRejectPromise) = @_;
-
-    if ($interface-&gt;extendedAttributes-&gt;{CustomProxyToJSObject}) {
-        push(@implContent, &quot;    $className* castedThis = to${className}(state-&gt;thisValue().toThis(state, NotStrictMode));\n&quot;);
-        push(@implContent, &quot;    if (UNLIKELY(!castedThis))\n&quot;);
-        push(@implContent, &quot;        return throwVMTypeError(state, throwScope);\n&quot;);
-    } else {
-        push(@implContent, &quot;    JSValue thisValue = state-&gt;thisValue();\n&quot;);
-        my $castingHelper = GetCastingHelperForThisObject($interface);
-        my $interfaceName = $interface-&gt;name;
-        if ($interfaceName eq &quot;EventTarget&quot;) {
-            # We allow calling the EventTarget API without an explicit 'this' value and fall back to using the global object instead.
-            # As of early 2016, this matches Firefox and Chrome's behavior.
-            push(@implContent, &quot;    auto castedThis = $castingHelper(thisValue.toThis(state, NotStrictMode));\n&quot;);
-        } else {
-            push(@implContent, &quot;    auto castedThis = $castingHelper(thisValue);\n&quot;);
-        }
-
-        my $visibleInterfaceName = $codeGenerator-&gt;GetVisibleInterfaceName($interface);
-        my $domFunctionName = $function-&gt;signature-&gt;name;
-        push(@implContent, &quot;    if (UNLIKELY(!castedThis))\n&quot;);
-        if ($shouldRejectPromise) {
-            push(@implContent, &quot;        return createRejectedPromiseWithTypeError(*state, makeThisTypeErrorMessage(\&quot;$visibleInterfaceName\&quot;, \&quot;$domFunctionName\&quot;));\n&quot;);
-        } else {
-            push(@implContent, &quot;        return throwThisTypeError(*state, throwScope, \&quot;$visibleInterfaceName\&quot;, \&quot;$domFunctionName\&quot;);\n&quot;);
-        }
-    }
-
-    push(@implContent, &quot;    ASSERT_GC_OBJECT_INHERITS(castedThis, ${className}::info());\n&quot;) unless $interface-&gt;name eq &quot;EventTarget&quot;;
-}
-
</del><span class="cx"> sub GenerateCallWithUsingReferences
</span><span class="cx"> {
</span><span class="cx">     my ($callWith, $outputArray, $returnValue, $function) = @_;
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -140,11 +140,16 @@
</span><span class="cx">     thisObject-&gt;JSTestActiveDOMObject::~JSTestActiveDOMObject();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline JSTestActiveDOMObject* JSTestActiveDOMObject::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
</del><ins>+template&lt;&gt; inline JSTestActiveDOMObject* BindingCaller&lt;JSTestActiveDOMObject&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)
</ins><span class="cx"> {
</span><span class="cx">     return jsDynamicCast&lt;JSTestActiveDOMObject*&gt;(JSValue::decode(thisValue));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; inline JSTestActiveDOMObject* BindingCaller&lt;JSTestActiveDOMObject&gt;::castForOperation(ExecState&amp; state)
+{
+    return jsDynamicCast&lt;JSTestActiveDOMObject*&gt;(state.thisValue());
+}
+
</ins><span class="cx"> static inline JSValue jsTestActiveDOMObjectExcitingAttrGetter(ExecState&amp;, JSTestActiveDOMObject&amp;, ThrowScope&amp; throwScope);
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestActiveDOMObjectExcitingAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="lines">@@ -192,16 +197,17 @@
</span><span class="cx">     return getDOMConstructor&lt;JSTestActiveDOMObjectConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestActiveDOMObjectPrototypeFunctionExcitingFunctionCaller(JSC::ExecState*, JSTestActiveDOMObject*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestActiveDOMObjectPrototypeFunctionExcitingFunction(ExecState* state)
</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;::callOperation&lt;jsTestActiveDOMObjectPrototypeFunctionExcitingFunctionCaller&gt;(state, &quot;excitingFunction&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestActiveDOMObjectPrototypeFunctionExcitingFunctionCaller(JSC::ExecState* state, JSTestActiveDOMObject* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestActiveDOMObject*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestActiveDOMObject&quot;, &quot;excitingFunction&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestActiveDOMObject::info());
</del><span class="cx">     if (!BindingSecurity::shouldAllowAccessToFrame(state, castedThis-&gt;wrapped().frame(), ThrowSecurityError))
</span><span class="cx">         return JSValue::encode(jsUndefined());
</span><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="lines">@@ -214,16 +220,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestActiveDOMObjectPrototypeFunctionPostMessageCaller(JSC::ExecState*, JSTestActiveDOMObject*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestActiveDOMObjectPrototypeFunctionPostMessage(ExecState* state)
</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;::callOperation&lt;jsTestActiveDOMObjectPrototypeFunctionPostMessageCaller&gt;(state, &quot;postMessage&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestActiveDOMObjectPrototypeFunctionPostMessageCaller(JSC::ExecState* state, JSTestActiveDOMObject* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestActiveDOMObject*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestActiveDOMObject&quot;, &quot;postMessage&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestActiveDOMObject::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestActiveDOMObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.h (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.h        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestActiveDOMObject.h        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -49,7 +49,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><del>-    static JSTestActiveDOMObject* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</del><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="trunkSourceWebCorebindingsscriptstestJSJSTestCEReactionscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -136,11 +136,16 @@
</span><span class="cx">     thisObject-&gt;JSTestCEReactions::~JSTestCEReactions();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline JSTestCEReactions* JSTestCEReactions::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
</del><ins>+template&lt;&gt; inline JSTestCEReactions* BindingCaller&lt;JSTestCEReactions&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)
</ins><span class="cx"> {
</span><span class="cx">     return jsDynamicCast&lt;JSTestCEReactions*&gt;(JSValue::decode(thisValue));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; inline JSTestCEReactions* BindingCaller&lt;JSTestCEReactions&gt;::castForOperation(ExecState&amp; state)
+{
+    return jsDynamicCast&lt;JSTestCEReactions*&gt;(state.thisValue());
+}
+
</ins><span class="cx"> static inline JSValue jsTestCEReactionsAttributeWithCEReactionsGetter(ExecState&amp;, JSTestCEReactions&amp;, ThrowScope&amp; throwScope);
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestCEReactionsAttributeWithCEReactions(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="lines">@@ -285,19 +290,20 @@
</span><span class="cx">     return getDOMConstructor&lt;JSTestCEReactionsConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestCEReactionsPrototypeFunctionMethodWithCEReactionsCaller(JSC::ExecState*, JSTestCEReactions*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestCEReactionsPrototypeFunctionMethodWithCEReactions(ExecState* state)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
-    UNUSED_PARAM(throwScope);
</del><span class="cx"> #if ENABLE(CUSTOM_ELEMENTS)
</span><span class="cx">     CustomElementReactionStack customElementReactionStack;
</span><span class="cx"> #endif
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestCEReactions*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestCEReactions&quot;, &quot;methodWithCEReactions&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestCEReactions::info());
</del><ins>+    return BindingCaller&lt;JSTestCEReactions&gt;::callOperation&lt;jsTestCEReactionsPrototypeFunctionMethodWithCEReactionsCaller&gt;(state, &quot;methodWithCEReactions&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestCEReactionsPrototypeFunctionMethodWithCEReactionsCaller(JSC::ExecState* state, JSTestCEReactions* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
+    UNUSED_PARAM(throwScope);
</ins><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     impl.methodWithCEReactions();
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCEReactionsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.h (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.h        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactions.h        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -49,7 +49,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><del>-    static JSTestCEReactions* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</del><span class="cx"> protected:
</span><span class="cx">     JSTestCEReactions(JSC::Structure*, JSDOMGlobalObject&amp;, Ref&lt;TestCEReactions&gt;&amp;&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCEReactionsStringifiercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -128,11 +128,16 @@
</span><span class="cx">     thisObject-&gt;JSTestCEReactionsStringifier::~JSTestCEReactionsStringifier();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline JSTestCEReactionsStringifier* JSTestCEReactionsStringifier::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
</del><ins>+template&lt;&gt; inline JSTestCEReactionsStringifier* BindingCaller&lt;JSTestCEReactionsStringifier&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)
</ins><span class="cx"> {
</span><span class="cx">     return jsDynamicCast&lt;JSTestCEReactionsStringifier*&gt;(JSValue::decode(thisValue));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; inline JSTestCEReactionsStringifier* BindingCaller&lt;JSTestCEReactionsStringifier&gt;::castForOperation(ExecState&amp; state)
+{
+    return jsDynamicCast&lt;JSTestCEReactionsStringifier*&gt;(state.thisValue());
+}
+
</ins><span class="cx"> static inline JSValue jsTestCEReactionsStringifierValueGetter(ExecState&amp;, JSTestCEReactionsStringifier&amp;, ThrowScope&amp; throwScope);
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestCEReactionsStringifierValue(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="lines">@@ -200,16 +205,17 @@
</span><span class="cx">     return getDOMConstructor&lt;JSTestCEReactionsStringifierConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestCEReactionsStringifierPrototypeFunctionToStringCaller(JSC::ExecState*, JSTestCEReactionsStringifier*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestCEReactionsStringifierPrototypeFunctionToString(ExecState* state)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestCEReactionsStringifier&gt;::callOperation&lt;jsTestCEReactionsStringifierPrototypeFunctionToStringCaller&gt;(state, &quot;toString&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestCEReactionsStringifierPrototypeFunctionToStringCaller(JSC::ExecState* state, JSTestCEReactionsStringifier* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestCEReactionsStringifier*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestCEReactionsStringifier&quot;, &quot;toString&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestCEReactionsStringifier::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     JSValue result = jsStringWithCache(state, impl.value());
</span><span class="cx">     return JSValue::encode(result);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCEReactionsStringifierh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.h (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.h        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCEReactionsStringifier.h        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -49,7 +49,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><del>-    static JSTestCEReactionsStringifier* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</del><span class="cx"> protected:
</span><span class="cx">     JSTestCEReactionsStringifier(JSC::Structure*, JSDOMGlobalObject&amp;, Ref&lt;TestCEReactionsStringifier&gt;&amp;&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestCustomNamedGettercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestCustomNamedGetter.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -158,6 +158,11 @@
</span><span class="cx">     return Base::getOwnPropertySlotByIndex(thisObject, state, index, slot);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; inline JSTestCustomNamedGetter* BindingCaller&lt;JSTestCustomNamedGetter&gt;::castForOperation(ExecState&amp; state)
+{
+    return jsDynamicCast&lt;JSTestCustomNamedGetter*&gt;(state.thisValue());
+}
+
</ins><span class="cx"> EncodedJSValue jsTestCustomNamedGetterConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = state-&gt;vm();
</span><span class="lines">@@ -187,16 +192,17 @@
</span><span class="cx">     return getDOMConstructor&lt;JSTestCustomNamedGetterConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestCustomNamedGetterPrototypeFunctionAnotherFunctionCaller(JSC::ExecState*, JSTestCustomNamedGetter*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestCustomNamedGetterPrototypeFunctionAnotherFunction(ExecState* state)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestCustomNamedGetter&gt;::callOperation&lt;jsTestCustomNamedGetterPrototypeFunctionAnotherFunctionCaller&gt;(state, &quot;anotherFunction&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestCustomNamedGetterPrototypeFunctionAnotherFunctionCaller(JSC::ExecState* state, JSTestCustomNamedGetter* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestCustomNamedGetter*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestCustomNamedGetter&quot;, &quot;anotherFunction&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestCustomNamedGetter::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -178,7 +178,7 @@
</span><span class="cx">     thisObject-&gt;JSTestEventConstructor::~JSTestEventConstructor();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline JSTestEventConstructor* JSTestEventConstructor::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
</del><ins>+template&lt;&gt; inline JSTestEventConstructor* BindingCaller&lt;JSTestEventConstructor&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)
</ins><span class="cx"> {
</span><span class="cx">     return jsDynamicCast&lt;JSTestEventConstructor*&gt;(JSValue::decode(thisValue));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestEventConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventConstructor.h        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -51,7 +51,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><del>-    static JSTestEventConstructor* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</del><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="trunkSourceWebCorebindingsscriptstestJSJSTestEventTargetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestEventTarget.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -158,6 +158,11 @@
</span><span class="cx">     return Base::getOwnPropertySlotByIndex(thisObject, state, index, slot);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; inline JSTestEventTarget* BindingCaller&lt;JSTestEventTarget&gt;::castForOperation(ExecState&amp; state)
+{
+    return jsDynamicCast&lt;JSTestEventTarget*&gt;(state.thisValue());
+}
+
</ins><span class="cx"> EncodedJSValue jsTestEventTargetConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = state-&gt;vm();
</span><span class="lines">@@ -200,16 +205,17 @@
</span><span class="cx">     return getDOMConstructor&lt;JSTestEventTargetConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestEventTargetPrototypeFunctionItemCaller(JSC::ExecState*, JSTestEventTarget*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestEventTargetPrototypeFunctionItem(ExecState* state)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestEventTarget&gt;::callOperation&lt;jsTestEventTargetPrototypeFunctionItemCaller&gt;(state, &quot;item&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestEventTargetPrototypeFunctionItemCaller(JSC::ExecState* state, JSTestEventTarget* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestEventTarget*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestEventTarget&quot;, &quot;item&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestEventTarget::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestExceptioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -132,7 +132,7 @@
</span><span class="cx">     thisObject-&gt;JSTestException::~JSTestException();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline JSTestException* JSTestException::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
</del><ins>+template&lt;&gt; inline JSTestException* BindingCaller&lt;JSTestException&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)
</ins><span class="cx"> {
</span><span class="cx">     return jsDynamicCast&lt;JSTestException*&gt;(JSValue::decode(thisValue));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestExceptionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestException.h        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -50,7 +50,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><del>-    static JSTestException* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</del><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 (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -177,11 +177,16 @@
</span><span class="cx">     thisObject-&gt;JSTestGlobalObject::~JSTestGlobalObject();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline JSTestGlobalObject* JSTestGlobalObject::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
</del><ins>+template&lt;&gt; inline JSTestGlobalObject* BindingCaller&lt;JSTestGlobalObject&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)
</ins><span class="cx"> {
</span><span class="cx">     return jsDynamicCast&lt;JSTestGlobalObject*&gt;(JSValue::decode(thisValue));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; inline JSTestGlobalObject* BindingCaller&lt;JSTestGlobalObject&gt;::castForOperation(ExecState&amp; state)
+{
+    return jsDynamicCast&lt;JSTestGlobalObject*&gt;(state.thisValue());
+}
+
</ins><span class="cx"> static inline JSValue jsTestGlobalObjectRegularAttributeGetter(ExecState&amp;, JSTestGlobalObject&amp;, ThrowScope&amp; throwScope);
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestGlobalObjectRegularAttribute(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="lines">@@ -361,16 +366,17 @@
</span><span class="cx">     return getDOMConstructor&lt;JSTestGlobalObjectConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestGlobalObjectInstanceFunctionRegularOperationCaller(JSC::ExecState*, JSTestGlobalObject*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestGlobalObjectInstanceFunctionRegularOperation(ExecState* state)
</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;::callOperation&lt;jsTestGlobalObjectInstanceFunctionRegularOperationCaller&gt;(state, &quot;regularOperation&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestGlobalObjectInstanceFunctionRegularOperationCaller(JSC::ExecState* state, JSTestGlobalObject* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestGlobalObject*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestGlobalObject&quot;, &quot;regularOperation&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestGlobalObject::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -381,16 +387,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><ins>+static inline JSC::EncodedJSValue jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation1Caller(JSC::ExecState*, JSTestGlobalObject*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation1(ExecState* state)
</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;::callOperation&lt;jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation1Caller&gt;(state, &quot;enabledAtRuntimeOperation&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation1Caller(JSC::ExecState* state, JSTestGlobalObject* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestGlobalObject*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestGlobalObject&quot;, &quot;enabledAtRuntimeOperation&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestGlobalObject::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -403,16 +410,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><ins>+static inline JSC::EncodedJSValue jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation2Caller(JSC::ExecState*, JSTestGlobalObject*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation2(ExecState* state)
</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;::callOperation&lt;jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation2Caller&gt;(state, &quot;enabledAtRuntimeOperation&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestGlobalObjectInstanceFunctionEnabledAtRuntimeOperation2Caller(JSC::ExecState* state, JSTestGlobalObject* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestGlobalObject*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestGlobalObject&quot;, &quot;enabledAtRuntimeOperation&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestGlobalObject::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -446,16 +454,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><ins>+static inline JSC::EncodedJSValue jsTestGlobalObjectInstanceFunctionTestPrivateFunctionCaller(JSC::ExecState*, JSTestGlobalObject*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestGlobalObjectInstanceFunctionTestPrivateFunction(ExecState* state)
</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;::callOperation&lt;jsTestGlobalObjectInstanceFunctionTestPrivateFunctionCaller&gt;(state, &quot;testPrivateFunction&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestGlobalObjectInstanceFunctionTestPrivateFunctionCaller(JSC::ExecState* state, JSTestGlobalObject* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestGlobalObject*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestGlobalObject&quot;, &quot;testPrivateFunction&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestGlobalObject::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     impl.testPrivateFunction();
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestGlobalObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.h (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.h        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestGlobalObject.h        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -51,7 +51,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><del>-    static JSTestGlobalObject* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</del><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 (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -410,11 +410,16 @@
</span><span class="cx">     thisObject-&gt;JSTestInterface::~JSTestInterface();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline JSTestInterface* JSTestInterface::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
</del><ins>+template&lt;&gt; inline JSTestInterface* BindingCaller&lt;JSTestInterface&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)
</ins><span class="cx"> {
</span><span class="cx">     return jsDynamicCast&lt;JSTestInterface*&gt;(JSValue::decode(thisValue));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; inline JSTestInterface* BindingCaller&lt;JSTestInterface&gt;::castForOperation(ExecState&amp; state)
+{
+    return jsDynamicCast&lt;JSTestInterface*&gt;(state.thisValue());
+}
+
</ins><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><span class="cx"> static inline JSValue jsTestInterfaceConstructorImplementsStaticReadOnlyAttrGetter(ExecState&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -837,16 +842,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><ins>+static inline JSC::EncodedJSValue jsTestInterfacePrototypeFunctionImplementsMethod1Caller(JSC::ExecState*, JSTestInterface*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestInterfacePrototypeFunctionImplementsMethod1(ExecState* state)
</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;::callOperation&lt;jsTestInterfacePrototypeFunctionImplementsMethod1Caller&gt;(state, &quot;implementsMethod1&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestInterfacePrototypeFunctionImplementsMethod1Caller(JSC::ExecState* state, JSTestInterface* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;implementsMethod1&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestInterface::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     impl.implementsMethod1();
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="lines">@@ -855,16 +861,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><ins>+static inline JSC::EncodedJSValue jsTestInterfacePrototypeFunctionImplementsMethod2Caller(JSC::ExecState*, JSTestInterface*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestInterfacePrototypeFunctionImplementsMethod2(ExecState* state)
</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;::callOperation&lt;jsTestInterfacePrototypeFunctionImplementsMethod2Caller&gt;(state, &quot;implementsMethod2&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestInterfacePrototypeFunctionImplementsMethod2Caller(JSC::ExecState* state, JSTestInterface* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;implementsMethod2&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestInterface::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 2))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -886,16 +893,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span><ins>+static inline JSC::EncodedJSValue jsTestInterfacePrototypeFunctionImplementsMethod3Caller(JSC::ExecState*, JSTestInterface*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestInterfacePrototypeFunctionImplementsMethod3(ExecState* state)
</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;::callOperation&lt;jsTestInterfacePrototypeFunctionImplementsMethod3Caller&gt;(state, &quot;implementsMethod3&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestInterfacePrototypeFunctionImplementsMethod3Caller(JSC::ExecState* state, JSTestInterface* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;implementsMethod3&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestInterface::info());
</del><span class="cx">     return JSValue::encode(castedThis-&gt;implementsMethod3(*state));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -914,16 +922,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><ins>+static inline JSC::EncodedJSValue jsTestInterfacePrototypeFunctionSupplementalMethod1Caller(JSC::ExecState*, JSTestInterface*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestInterfacePrototypeFunctionSupplementalMethod1(ExecState* state)
</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;::callOperation&lt;jsTestInterfacePrototypeFunctionSupplementalMethod1Caller&gt;(state, &quot;supplementalMethod1&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestInterfacePrototypeFunctionSupplementalMethod1Caller(JSC::ExecState* state, JSTestInterface* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;supplementalMethod1&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestInterface::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     WebCore::TestSupplemental::supplementalMethod1(impl);
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="lines">@@ -932,16 +941,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><ins>+static inline JSC::EncodedJSValue jsTestInterfacePrototypeFunctionSupplementalMethod2Caller(JSC::ExecState*, JSTestInterface*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestInterfacePrototypeFunctionSupplementalMethod2(ExecState* state)
</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;::callOperation&lt;jsTestInterfacePrototypeFunctionSupplementalMethod2Caller&gt;(state, &quot;supplementalMethod2&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestInterfacePrototypeFunctionSupplementalMethod2Caller(JSC::ExecState* state, JSTestInterface* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;supplementalMethod2&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestInterface::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 2))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -963,16 +973,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition11) || ENABLE(Condition12)
</span><ins>+static inline JSC::EncodedJSValue jsTestInterfacePrototypeFunctionSupplementalMethod3Caller(JSC::ExecState*, JSTestInterface*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestInterfacePrototypeFunctionSupplementalMethod3(ExecState* state)
</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;::callOperation&lt;jsTestInterfacePrototypeFunctionSupplementalMethod3Caller&gt;(state, &quot;supplementalMethod3&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestInterfacePrototypeFunctionSupplementalMethod3Caller(JSC::ExecState* state, JSTestInterface* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestInterface*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestInterface&quot;, &quot;supplementalMethod3&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestInterface::info());
</del><span class="cx">     return JSValue::encode(castedThis-&gt;supplementalMethod3(*state));
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestInterfaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestInterface.h        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -54,7 +54,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><del>-    static JSTestInterface* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</del><span class="cx"> 
</span><span class="cx">     // Custom attributes
</span><span class="cx"> #if ENABLE(Condition22) || ENABLE(Condition23)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestIterablecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestIterable.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -129,6 +129,11 @@
</span><span class="cx">     thisObject-&gt;JSTestIterable::~JSTestIterable();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; inline JSTestIterable* BindingCaller&lt;JSTestIterable&gt;::castForOperation(ExecState&amp; state)
+{
+    return jsDynamicCast&lt;JSTestIterable*&gt;(state.thisValue());
+}
+
</ins><span class="cx"> EncodedJSValue jsTestIterableConstructor(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="trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -132,11 +132,16 @@
</span><span class="cx">     thisObject-&gt;JSTestJSBuiltinConstructor::~JSTestJSBuiltinConstructor();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline JSTestJSBuiltinConstructor* JSTestJSBuiltinConstructor::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
</del><ins>+template&lt;&gt; inline JSTestJSBuiltinConstructor* BindingCaller&lt;JSTestJSBuiltinConstructor&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)
</ins><span class="cx"> {
</span><span class="cx">     return jsDynamicCast&lt;JSTestJSBuiltinConstructor*&gt;(JSValue::decode(thisValue));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; inline JSTestJSBuiltinConstructor* BindingCaller&lt;JSTestJSBuiltinConstructor&gt;::castForOperation(ExecState&amp; state)
+{
+    return jsDynamicCast&lt;JSTestJSBuiltinConstructor*&gt;(state.thisValue());
+}
+
</ins><span class="cx"> static inline JSValue jsTestJSBuiltinConstructorTestAttributeCustomGetter(ExecState&amp;, JSTestJSBuiltinConstructor&amp;, ThrowScope&amp; throwScope);
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestJSBuiltinConstructorTestAttributeCustom(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="lines">@@ -210,16 +215,17 @@
</span><span class="cx">     return getDOMConstructor&lt;JSTestJSBuiltinConstructorConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestJSBuiltinConstructorPrototypeFunctionTestCustomFunctionCaller(JSC::ExecState*, JSTestJSBuiltinConstructor*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestJSBuiltinConstructorPrototypeFunctionTestCustomFunction(ExecState* state)
</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;::callOperation&lt;jsTestJSBuiltinConstructorPrototypeFunctionTestCustomFunctionCaller&gt;(state, &quot;testCustomFunction&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestJSBuiltinConstructorPrototypeFunctionTestCustomFunctionCaller(JSC::ExecState* state, JSTestJSBuiltinConstructor* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestJSBuiltinConstructor*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestJSBuiltinConstructor&quot;, &quot;testCustomFunction&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestJSBuiltinConstructor::info());
</del><span class="cx">     return JSValue::encode(castedThis-&gt;testCustomFunction(*state));
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestJSBuiltinConstructorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestJSBuiltinConstructor.h        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -46,7 +46,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><del>-    static JSTestJSBuiltinConstructor* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</del><span class="cx">     static void visitChildren(JSCell*, JSC::SlotVisitor&amp;);
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestMediaQueryListListenercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -123,6 +123,11 @@
</span><span class="cx">     thisObject-&gt;JSTestMediaQueryListListener::~JSTestMediaQueryListListener();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; inline JSTestMediaQueryListListener* BindingCaller&lt;JSTestMediaQueryListListener&gt;::castForOperation(ExecState&amp; state)
+{
+    return jsDynamicCast&lt;JSTestMediaQueryListListener*&gt;(state.thisValue());
+}
+
</ins><span class="cx"> EncodedJSValue jsTestMediaQueryListListenerConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = state-&gt;vm();
</span><span class="lines">@@ -152,16 +157,17 @@
</span><span class="cx">     return getDOMConstructor&lt;JSTestMediaQueryListListenerConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestMediaQueryListListenerPrototypeFunctionMethodCaller(JSC::ExecState*, JSTestMediaQueryListListener*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestMediaQueryListListenerPrototypeFunctionMethod(ExecState* state)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestMediaQueryListListener&gt;::callOperation&lt;jsTestMediaQueryListListenerPrototypeFunctionMethodCaller&gt;(state, &quot;method&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestMediaQueryListListenerPrototypeFunctionMethodCaller(JSC::ExecState* state, JSTestMediaQueryListListener* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestMediaQueryListListener*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestMediaQueryListListener&quot;, &quot;method&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestMediaQueryListListener::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -167,11 +167,16 @@
</span><span class="cx">     return getDOMPrototype&lt;JSTestNode&gt;(vm, globalObject);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline JSTestNode* JSTestNode::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
</del><ins>+template&lt;&gt; inline JSTestNode* BindingCaller&lt;JSTestNode&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)
</ins><span class="cx"> {
</span><span class="cx">     return jsDynamicCast&lt;JSTestNode*&gt;(JSValue::decode(thisValue));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; inline JSTestNode* BindingCaller&lt;JSTestNode&gt;::castForOperation(ExecState&amp; state)
+{
+    return jsDynamicCast&lt;JSTestNode*&gt;(state.thisValue());
+}
+
</ins><span class="cx"> static inline JSValue jsTestNodeNameGetter(ExecState&amp;, JSTestNode&amp;, ThrowScope&amp; throwScope);
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestNodeName(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="lines">@@ -236,6 +241,8 @@
</span><span class="cx">     return getDOMConstructor&lt;JSTestNodeConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestNodePrototypeFunctionTestWorkerPromiseCaller(JSC::ExecState*, JSTestNode*, Ref&lt;DeferredPromise&gt;&amp;&amp;, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static EncodedJSValue jsTestNodePrototypeFunctionTestWorkerPromisePromise(ExecState*, Ref&lt;DeferredPromise&gt;&amp;&amp;);
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestNodePrototypeFunctionTestWorkerPromise(ExecState* state)
</span><span class="lines">@@ -246,14 +253,13 @@
</span><span class="cx"> 
</span><span class="cx"> static inline EncodedJSValue jsTestNodePrototypeFunctionTestWorkerPromisePromise(ExecState* state, Ref&lt;DeferredPromise&gt;&amp;&amp; promise)
</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;::callPromiseOperation&lt;jsTestNodePrototypeFunctionTestWorkerPromiseCaller&gt;(state, WTFMove(promise), &quot;testWorkerPromise&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestNodePrototypeFunctionTestWorkerPromiseCaller(JSC::ExecState* state, JSTestNode* castedThis, Ref&lt;DeferredPromise&gt;&amp;&amp; promise, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestNode*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestNode&quot;, &quot;testWorkerPromise&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestNode::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     impl.testWorkerPromise(WTFMove(promise));
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.h (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.h        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNode.h        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -47,7 +47,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><del>-    static JSTestNode* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</del><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 (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -143,11 +143,16 @@
</span><span class="cx">     thisObject-&gt;JSTestNondeterministic::~JSTestNondeterministic();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline JSTestNondeterministic* JSTestNondeterministic::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
</del><ins>+template&lt;&gt; inline JSTestNondeterministic* BindingCaller&lt;JSTestNondeterministic&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)
</ins><span class="cx"> {
</span><span class="cx">     return jsDynamicCast&lt;JSTestNondeterministic*&gt;(JSValue::decode(thisValue));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; inline JSTestNondeterministic* BindingCaller&lt;JSTestNondeterministic&gt;::castForOperation(ExecState&amp; state)
+{
+    return jsDynamicCast&lt;JSTestNondeterministic*&gt;(state.thisValue());
+}
+
</ins><span class="cx"> static inline JSValue jsTestNondeterministicNondeterministicReadonlyAttrGetter(ExecState&amp;, JSTestNondeterministic&amp;, ThrowScope&amp; throwScope);
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestNondeterministicNondeterministicReadonlyAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="lines">@@ -439,16 +444,17 @@
</span><span class="cx">     return getDOMConstructor&lt;JSTestNondeterministicConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestNondeterministicPrototypeFunctionNondeterministicZeroArgFunctionCaller(JSC::ExecState*, JSTestNondeterministic*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestNondeterministicPrototypeFunctionNondeterministicZeroArgFunction(ExecState* state)
</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;::callOperation&lt;jsTestNondeterministicPrototypeFunctionNondeterministicZeroArgFunctionCaller&gt;(state, &quot;nondeterministicZeroArgFunction&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestNondeterministicPrototypeFunctionNondeterministicZeroArgFunctionCaller(JSC::ExecState* state, JSTestNondeterministic* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestNondeterministic*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestNondeterministic&quot;, &quot;nondeterministicZeroArgFunction&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestNondeterministic::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     JSValue result;
</span><span class="cx"> #if ENABLE(WEB_REPLAY)
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestNondeterministich"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestNondeterministic.h        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -49,7 +49,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><del>-    static JSTestNondeterministic* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</del><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 (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -1697,11 +1697,16 @@
</span><span class="cx">     return Base::getOwnPropertySlotByIndex(thisObject, state, index, slot);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline JSTestObj* JSTestObj::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
</del><ins>+template&lt;&gt; inline JSTestObj* BindingCaller&lt;JSTestObj&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)
</ins><span class="cx"> {
</span><span class="cx">     return jsDynamicCast&lt;JSTestObj*&gt;(JSValue::decode(thisValue));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; inline JSTestObj* BindingCaller&lt;JSTestObj&gt;::castForOperation(ExecState&amp; state)
+{
+    return jsDynamicCast&lt;JSTestObj*&gt;(state.thisValue());
+}
+
</ins><span class="cx"> static inline JSValue jsTestObjReadOnlyLongAttrGetter(ExecState&amp;, JSTestObj&amp;, ThrowScope&amp; throwScope);
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestObjReadOnlyLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="lines">@@ -4670,16 +4675,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionEnabledAtRuntimeOperation1Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionEnabledAtRuntimeOperation1(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionEnabledAtRuntimeOperation1Caller&gt;(state, &quot;enabledAtRuntimeOperation&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionEnabledAtRuntimeOperation1Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;enabledAtRuntimeOperation&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -4692,16 +4698,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(TEST_FEATURE)
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionEnabledAtRuntimeOperation2Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionEnabledAtRuntimeOperation2(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionEnabledAtRuntimeOperation2Caller&gt;(state, &quot;enabledAtRuntimeOperation&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionEnabledAtRuntimeOperation2Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;enabledAtRuntimeOperation&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -4734,31 +4741,33 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionVoidMethodCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionVoidMethod(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionVoidMethodCaller&gt;(state, &quot;voidMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionVoidMethodCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;voidMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     impl.voidMethod();
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionVoidMethodWithArgsCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionVoidMethodWithArgs(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionVoidMethodWithArgsCaller&gt;(state, &quot;voidMethodWithArgs&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionVoidMethodWithArgsCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;voidMethodWithArgs&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 3))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -4773,31 +4782,33 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionByteMethodCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionByteMethod(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionByteMethodCaller&gt;(state, &quot;byteMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionByteMethodCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;byteMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     JSValue result = jsNumber(impl.byteMethod());
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionByteMethodWithArgsCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionByteMethodWithArgs(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionByteMethodWithArgsCaller&gt;(state, &quot;byteMethodWithArgs&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionByteMethodWithArgsCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;byteMethodWithArgs&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 3))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -4812,31 +4823,33 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOctetMethodCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOctetMethod(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOctetMethodCaller&gt;(state, &quot;octetMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOctetMethodCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;octetMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     JSValue result = jsNumber(impl.octetMethod());
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOctetMethodWithArgsCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOctetMethodWithArgs(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOctetMethodWithArgsCaller&gt;(state, &quot;octetMethodWithArgs&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOctetMethodWithArgsCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;octetMethodWithArgs&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 3))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -4851,31 +4864,33 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionLongMethodCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionLongMethod(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionLongMethodCaller&gt;(state, &quot;longMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionLongMethodCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;longMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     JSValue result = jsNumber(impl.longMethod());
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionLongMethodWithArgsCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionLongMethodWithArgs(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionLongMethodWithArgsCaller&gt;(state, &quot;longMethodWithArgs&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionLongMethodWithArgsCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;longMethodWithArgs&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 3))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -4890,31 +4905,33 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionObjMethodCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionObjMethod(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionObjMethodCaller&gt;(state, &quot;objMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionObjMethodCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;objMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.objMethod());
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionObjMethodWithArgsCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionObjMethodWithArgs(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionObjMethodWithArgsCaller&gt;(state, &quot;objMethodWithArgs&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionObjMethodWithArgsCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;objMethodWithArgs&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 3))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -4929,31 +4946,33 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjInstanceFunctionUnforgeableMethodCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjInstanceFunctionUnforgeableMethod(ExecState* state)
</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;::callOperation&lt;jsTestObjInstanceFunctionUnforgeableMethodCaller&gt;(state, &quot;unforgeableMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjInstanceFunctionUnforgeableMethodCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;unforgeableMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     JSValue result = jsNumber(impl.unforgeableMethod());
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithArgTreatingNullAsEmptyStringCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithArgTreatingNullAsEmptyString(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithArgTreatingNullAsEmptyStringCaller&gt;(state, &quot;methodWithArgTreatingNullAsEmptyString&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithArgTreatingNullAsEmptyStringCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithArgTreatingNullAsEmptyString&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -4963,16 +4982,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithXPathNSResolverParameterCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithXPathNSResolverParameter(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithXPathNSResolverParameterCaller&gt;(state, &quot;methodWithXPathNSResolverParameter&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithXPathNSResolverParameterCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithXPathNSResolverParameter&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -4984,16 +5004,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionNullableStringMethodCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionNullableStringMethod(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionNullableStringMethodCaller&gt;(state, &quot;nullableStringMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionNullableStringMethodCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;nullableStringMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     JSValue result = jsStringOrNull(state, impl.nullableStringMethod());
</span><span class="cx">     return JSValue::encode(result);
</span><span class="lines">@@ -5008,16 +5029,17 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionNullableStringSpecialMethodCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionNullableStringSpecialMethod(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionNullableStringSpecialMethodCaller&gt;(state, &quot;nullableStringSpecialMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionNullableStringSpecialMethodCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;nullableStringSpecialMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -5027,16 +5049,17 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithEnumArgCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithEnumArg(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithEnumArgCaller&gt;(state, &quot;methodWithEnumArg&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithEnumArgCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithEnumArg&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -5051,16 +5074,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalEnumArgCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalEnumArg(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalEnumArgCaller&gt;(state, &quot;methodWithOptionalEnumArg&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalEnumArgCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalEnumArg&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto enumArgValue = state-&gt;argument(0);
</span><span class="cx">     Optional&lt;TestObj::EnumType&gt; enumArg;
</span><span class="lines">@@ -5074,16 +5098,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalEnumArgAndDefaultValueCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalEnumArgAndDefaultValue(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalEnumArgAndDefaultValueCaller&gt;(state, &quot;methodWithOptionalEnumArgAndDefaultValue&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalEnumArgAndDefaultValueCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalEnumArgAndDefaultValue&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto enumArgValue = state-&gt;argument(0);
</span><span class="cx">     TestObj::EnumType enumArg;
</span><span class="lines">@@ -5100,16 +5125,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrowsCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrowsCaller&gt;(state, &quot;methodThatRequiresAllArgsAndThrows&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrowsCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodThatRequiresAllArgsAndThrows&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 2))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -5125,16 +5151,17 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithUSVStringArgCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithUSVStringArg(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithUSVStringArgCaller&gt;(state, &quot;methodWithUSVStringArg&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithUSVStringArgCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithUSVStringArg&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -5144,16 +5171,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithNullableUSVStringArgCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithNullableUSVStringArg(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithNullableUSVStringArgCaller&gt;(state, &quot;methodWithNullableUSVStringArg&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithNullableUSVStringArgCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithNullableUSVStringArg&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -5163,16 +5191,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithUSVStringArgTreatingNullAsEmptyStringCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithUSVStringArgTreatingNullAsEmptyString(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithUSVStringArgTreatingNullAsEmptyStringCaller&gt;(state, &quot;methodWithUSVStringArgTreatingNullAsEmptyString&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithUSVStringArgTreatingNullAsEmptyStringCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithUSVStringArgTreatingNullAsEmptyString&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -5182,16 +5211,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionSerializedValueCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionSerializedValue(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionSerializedValueCaller&gt;(state, &quot;serializedValue&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionSerializedValueCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;serializedValue&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -5201,16 +5231,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOptionsObjectCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOptionsObject(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOptionsObjectCaller&gt;(state, &quot;optionsObject&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOptionsObjectCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;optionsObject&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -5220,61 +5251,65 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithExceptionCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithException(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithExceptionCaller&gt;(state, &quot;methodWithException&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithExceptionCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithException&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     propagateException(*state, throwScope, impl.methodWithException());
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithExceptionReturningLongCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithExceptionReturningLong(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithExceptionReturningLongCaller&gt;(state, &quot;methodWithExceptionReturningLong&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithExceptionReturningLongCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithExceptionReturningLong&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     JSValue result = toJSNumber(*state, throwScope, impl.methodWithExceptionReturningLong());
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithExceptionReturningObjectCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithExceptionReturningObject(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithExceptionReturningObjectCaller&gt;(state, &quot;methodWithExceptionReturningObject&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithExceptionReturningObjectCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithExceptionReturningObject&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     JSValue result = toJS(*state, *castedThis-&gt;globalObject(), throwScope, impl.methodWithExceptionReturningObject());
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithLegacyExceptionCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithLegacyException(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithLegacyExceptionCaller&gt;(state, &quot;methodWithLegacyException&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithLegacyExceptionCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithLegacyException&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     ExceptionCode ec = 0;
</span><span class="cx">     impl.methodWithLegacyException(ec);
</span><span class="lines">@@ -5282,42 +5317,45 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionCustomMethodCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionCustomMethod(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionCustomMethodCaller&gt;(state, &quot;customMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionCustomMethodCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;customMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     return JSValue::encode(castedThis-&gt;customMethod(*state));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionCustomMethodWithArgsCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionCustomMethodWithArgs(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionCustomMethodWithArgsCaller&gt;(state, &quot;customMethodWithArgs&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionCustomMethodWithArgsCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;customMethodWithArgs&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     return JSValue::encode(castedThis-&gt;customMethodWithArgs(*state));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionPrivateMethodCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionPrivateMethod(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionPrivateMethodCaller&gt;(state, &quot;privateMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionPrivateMethodCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;privateMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -5327,16 +5365,17 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionPublicAndPrivateMethodCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionPublicAndPrivateMethod(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionPublicAndPrivateMethodCaller&gt;(state, &quot;publicAndPrivateMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionPublicAndPrivateMethodCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;publicAndPrivateMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -5346,16 +5385,17 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionAddEventListenerCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionAddEventListener(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionAddEventListenerCaller&gt;(state, &quot;addEventListener&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionAddEventListenerCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;addEventListener&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 2))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -5370,16 +5410,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionRemoveEventListenerCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionRemoveEventListener(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionRemoveEventListenerCaller&gt;(state, &quot;removeEventListener&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionRemoveEventListenerCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;removeEventListener&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 2))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -5394,31 +5435,33 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptStateVoidCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptStateVoid(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionWithScriptStateVoidCaller&gt;(state, &quot;withScriptStateVoid&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptStateVoidCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptStateVoid&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     impl.withScriptStateVoid(*state);
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptStateObjCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptStateObj(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionWithScriptStateObjCaller&gt;(state, &quot;withScriptStateObj&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptStateObjCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptStateObj&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.withScriptStateObj(*state));
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5425,16 +5468,17 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptStateVoidExceptionCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptStateVoidException(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionWithScriptStateVoidExceptionCaller&gt;(state, &quot;withScriptStateVoidException&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptStateVoidExceptionCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptStateVoidException&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     ExceptionCode ec = 0;
</span><span class="cx">     impl.withScriptStateVoidException(*state, ec);
</span><span class="lines">@@ -5442,16 +5486,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptStateObjExceptionCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptStateObjException(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionWithScriptStateObjExceptionCaller&gt;(state, &quot;withScriptStateObjException&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptStateObjExceptionCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptStateObjException&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     ExceptionCode ec = 0;
</span><span class="cx">     JSValue result = toJS(state, castedThis-&gt;globalObject(), impl.withScriptStateObjException(*state, ec));
</span><span class="lines">@@ -5461,16 +5506,17 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptExecutionContextCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptExecutionContext(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionWithScriptExecutionContextCaller&gt;(state, &quot;withScriptExecutionContext&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptExecutionContextCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptExecutionContext&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto* context = jsCast&lt;JSDOMGlobalObject*&gt;(state-&gt;lexicalGlobalObject())-&gt;scriptExecutionContext();
</span><span class="cx">     if (!context)
</span><span class="lines">@@ -5479,16 +5525,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptState(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateCaller&gt;(state, &quot;withScriptExecutionContextAndScriptState&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptExecutionContextAndScriptState&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto* context = jsCast&lt;JSDOMGlobalObject*&gt;(state-&gt;lexicalGlobalObject())-&gt;scriptExecutionContext();
</span><span class="cx">     if (!context)
</span><span class="lines">@@ -5497,16 +5544,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateObjExceptionCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateObjException(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateObjExceptionCaller&gt;(state, &quot;withScriptExecutionContextAndScriptStateObjException&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateObjExceptionCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptExecutionContextAndScriptStateObjException&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     ExceptionCode ec = 0;
</span><span class="cx">     auto* context = jsCast&lt;JSDOMGlobalObject*&gt;(state-&gt;lexicalGlobalObject())-&gt;scriptExecutionContext();
</span><span class="lines">@@ -5519,16 +5567,17 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateWithSpacesCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateWithSpaces(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateWithSpacesCaller&gt;(state, &quot;withScriptExecutionContextAndScriptStateWithSpaces&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateWithSpacesCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptExecutionContextAndScriptStateWithSpaces&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto* context = jsCast&lt;JSDOMGlobalObject*&gt;(state-&gt;lexicalGlobalObject())-&gt;scriptExecutionContext();
</span><span class="cx">     if (!context)
</span><span class="lines">@@ -5538,16 +5587,17 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStackCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStack(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStackCaller&gt;(state, &quot;withScriptArgumentsAndCallStack&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStackCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withScriptArgumentsAndCallStack&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     RefPtr&lt;Inspector::ScriptArguments&gt; scriptArguments(Inspector::createScriptArguments(state, 0));
</span><span class="cx">     impl.withScriptArgumentsAndCallStack(WTFMove(scriptArguments));
</span><span class="lines">@@ -5554,16 +5604,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithDocumentArgumentCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithDocumentArgument(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionWithDocumentArgumentCaller&gt;(state, &quot;withDocumentArgument&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithDocumentArgumentCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withDocumentArgument&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto* context = jsCast&lt;JSDOMGlobalObject*&gt;(state-&gt;lexicalGlobalObject())-&gt;scriptExecutionContext();
</span><span class="cx">     if (!context)
</span><span class="lines">@@ -5574,16 +5625,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithCallerDocumentArgumentCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithCallerDocumentArgument(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionWithCallerDocumentArgumentCaller&gt;(state, &quot;withCallerDocumentArgument&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithCallerDocumentArgumentCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withCallerDocumentArgument&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto* document = callerDOMWindow(state).document();
</span><span class="cx">     if (!document)
</span><span class="lines">@@ -5592,31 +5644,33 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithCallerWindowArgumentCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithCallerWindowArgument(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionWithCallerWindowArgumentCaller&gt;(state, &quot;withCallerWindowArgument&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionWithCallerWindowArgumentCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;withCallerWindowArgument&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     impl.withCallerWindowArgument(callerDOMWindow(state));
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalArgCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalArg(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalArgCaller&gt;(state, &quot;methodWithOptionalArg&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalArgCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalArg&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto opt = state-&gt;argument(0).isUndefined() ? Optional&lt;int32_t&gt;() : convert&lt;IDLLong&gt;(*state, state-&gt;uncheckedArgument(0), NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5624,16 +5678,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalArgAndDefaultValueCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalArgAndDefaultValue(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalArgAndDefaultValueCaller&gt;(state, &quot;methodWithOptionalArgAndDefaultValue&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalArgAndDefaultValueCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalArgAndDefaultValue&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto opt = state-&gt;argument(0).isUndefined() ? 666 : convert&lt;IDLLong&gt;(*state, state-&gt;uncheckedArgument(0), NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5641,16 +5696,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArgCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArgCaller&gt;(state, &quot;methodWithNonOptionalArgAndOptionalArg&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArgCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithNonOptionalArgAndOptionalArg&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -5662,16 +5718,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgsCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgsCaller&gt;(state, &quot;methodWithNonOptionalArgAndTwoOptionalArgs&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgsCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithNonOptionalArgAndTwoOptionalArgs&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -5685,16 +5742,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalStringCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalString(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalStringCaller&gt;(state, &quot;methodWithOptionalString&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalStringCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalString&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto str = state-&gt;argument(0).isUndefined() ? String() : state-&gt;uncheckedArgument(0).toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5702,16 +5760,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalUSVStringCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalUSVString(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalUSVStringCaller&gt;(state, &quot;methodWithOptionalUSVString&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalUSVStringCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalUSVString&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto str = state-&gt;argument(0).isUndefined() ? String() : valueToUSVString(state, state-&gt;uncheckedArgument(0));
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5719,16 +5778,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalAtomicString(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringCaller&gt;(state, &quot;methodWithOptionalAtomicString&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalAtomicString&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto str = state-&gt;argument(0).isUndefined() ? nullAtom : state-&gt;uncheckedArgument(0).toString(state)-&gt;toAtomicString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5736,16 +5796,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalStringAndDefaultValueCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalStringAndDefaultValue(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalStringAndDefaultValueCaller&gt;(state, &quot;methodWithOptionalStringAndDefaultValue&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalStringAndDefaultValueCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalStringAndDefaultValue&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto str = state-&gt;argument(0).isUndefined() ? ASCIILiteral(&quot;foo&quot;) : state-&gt;uncheckedArgument(0).toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5753,16 +5814,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringAndDefaultValueCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringAndDefaultValue(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringAndDefaultValueCaller&gt;(state, &quot;methodWithOptionalAtomicStringAndDefaultValue&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringAndDefaultValueCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalAtomicStringAndDefaultValue&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto str = state-&gt;argument(0).isUndefined() ? AtomicString(&quot;foo&quot;, AtomicString::ConstructFromLiteral) : state-&gt;uncheckedArgument(0).toString(state)-&gt;toAtomicString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5770,16 +5832,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalStringIsNull(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullCaller&gt;(state, &quot;methodWithOptionalStringIsNull&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalStringIsNull&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto str = state-&gt;argument(0).isUndefined() ? String() : state-&gt;uncheckedArgument(0).toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5787,16 +5850,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefinedCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefined(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefinedCaller&gt;(state, &quot;methodWithOptionalStringIsUndefined&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefinedCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalStringIsUndefined&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto str = state-&gt;argument(0).toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5804,16 +5868,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringIsNullCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringIsNull(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringIsNullCaller&gt;(state, &quot;methodWithOptionalAtomicStringIsNull&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringIsNullCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalAtomicStringIsNull&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto str = state-&gt;argument(0).isUndefined() ? nullAtom : state-&gt;uncheckedArgument(0).toString(state)-&gt;toAtomicString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5821,16 +5886,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalStringIsEmptyStringCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalStringIsEmptyString(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalStringIsEmptyStringCaller&gt;(state, &quot;methodWithOptionalStringIsEmptyString&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalStringIsEmptyStringCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalStringIsEmptyString&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto str = state-&gt;argument(0).isUndefined() ? emptyString() : state-&gt;uncheckedArgument(0).toWTFString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5838,16 +5904,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalUSVStringIsEmptyStringCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalUSVStringIsEmptyString(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalUSVStringIsEmptyStringCaller&gt;(state, &quot;methodWithOptionalUSVStringIsEmptyString&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalUSVStringIsEmptyStringCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalUSVStringIsEmptyString&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto str = state-&gt;argument(0).isUndefined() ? emptyString() : valueToUSVString(state, state-&gt;uncheckedArgument(0));
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5855,16 +5922,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringIsEmptyStringCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringIsEmptyString(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringIsEmptyStringCaller&gt;(state, &quot;methodWithOptionalAtomicStringIsEmptyString&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalAtomicStringIsEmptyStringCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalAtomicStringIsEmptyString&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto str = state-&gt;argument(0).isUndefined() ? emptyAtom : state-&gt;uncheckedArgument(0).toString(state)-&gt;toAtomicString(state);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5872,16 +5940,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalDoubleIsNaNCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalDoubleIsNaN(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalDoubleIsNaNCaller&gt;(state, &quot;methodWithOptionalDoubleIsNaN&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalDoubleIsNaNCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalDoubleIsNaN&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto number = convert&lt;IDLUnrestrictedDouble&gt;(*state, state-&gt;argument(0));
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5889,16 +5958,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalFloatIsNaNCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalFloatIsNaN(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalFloatIsNaNCaller&gt;(state, &quot;methodWithOptionalFloatIsNaN&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalFloatIsNaNCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalFloatIsNaN&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto number = convert&lt;IDLUnrestrictedFloat&gt;(*state, state-&gt;argument(0));
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5906,16 +5976,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalLongLongCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalLongLong(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalLongLongCaller&gt;(state, &quot;methodWithOptionalLongLong&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalLongLongCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalLongLong&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto number = state-&gt;argument(0).isUndefined() ? Optional&lt;int64_t&gt;() : convert&lt;IDLLongLong&gt;(*state, state-&gt;uncheckedArgument(0), NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5923,16 +5994,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalLongLongIsZeroCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalLongLongIsZero(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalLongLongIsZeroCaller&gt;(state, &quot;methodWithOptionalLongLongIsZero&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalLongLongIsZeroCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalLongLongIsZero&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto number = convert&lt;IDLLongLong&gt;(*state, state-&gt;argument(0), NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5940,16 +6012,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLongCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLong(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLongCaller&gt;(state, &quot;methodWithOptionalUnsignedLongLong&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLongCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalUnsignedLongLong&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto number = state-&gt;argument(0).isUndefined() ? Optional&lt;uint64_t&gt;() : convert&lt;IDLUnsignedLongLong&gt;(*state, state-&gt;uncheckedArgument(0), NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5957,16 +6030,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLongIsZeroCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLongIsZero(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLongIsZeroCaller&gt;(state, &quot;methodWithOptionalUnsignedLongLongIsZero&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalUnsignedLongLongIsZeroCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalUnsignedLongLongIsZero&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto number = convert&lt;IDLUnsignedLongLong&gt;(*state, state-&gt;argument(0), NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5974,16 +6048,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalSequenceCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalSequence(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalSequenceCaller&gt;(state, &quot;methodWithOptionalSequence&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalSequenceCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalSequence&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto array = state-&gt;argument(0).isUndefined() ? Optional&lt;Vector&lt;String&gt;&gt;() : convert&lt;IDLSequence&lt;IDLDOMString&gt;&gt;(*state, state-&gt;uncheckedArgument(0));
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -5991,16 +6066,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalSequenceIsEmptyCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalSequenceIsEmpty(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalSequenceIsEmptyCaller&gt;(state, &quot;methodWithOptionalSequenceIsEmpty&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalSequenceIsEmptyCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalSequenceIsEmpty&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto array = state-&gt;argument(0).isUndefined() ? Vector&lt;String&gt;() : convert&lt;IDLSequence&lt;IDLDOMString&gt;&gt;(*state, state-&gt;uncheckedArgument(0));
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -6008,16 +6084,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalBooleanCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalBoolean(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalBooleanCaller&gt;(state, &quot;methodWithOptionalBoolean&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalBooleanCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalBoolean&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto b = state-&gt;argument(0).isUndefined() ? Optional&lt;bool&gt;() : convert&lt;IDLBoolean&gt;(*state, state-&gt;uncheckedArgument(0));
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -6025,16 +6102,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalBooleanIsFalseCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalBooleanIsFalse(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalBooleanIsFalseCaller&gt;(state, &quot;methodWithOptionalBooleanIsFalse&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalBooleanIsFalseCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalBooleanIsFalse&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto b = convert&lt;IDLBoolean&gt;(*state, state-&gt;argument(0));
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -6042,16 +6120,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalAnyCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalAny(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalAnyCaller&gt;(state, &quot;methodWithOptionalAny&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalAnyCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalAny&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto a = convert&lt;IDLAny&gt;(*state, state-&gt;argument(0));
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -6059,16 +6138,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapperCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapper(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapperCaller&gt;(state, &quot;methodWithOptionalNullableWrapper&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapperCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalNullableWrapper&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     TestObj* obj = nullptr;
</span><span class="cx">     if (!state-&gt;argument(0).isUndefinedOrNull()) {
</span><span class="lines">@@ -6080,16 +6160,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapperIsNullCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapperIsNull(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapperIsNullCaller&gt;(state, &quot;methodWithOptionalNullableWrapperIsNull&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalNullableWrapperIsNullCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalNullableWrapperIsNull&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     TestObj* obj = nullptr;
</span><span class="cx">     if (!state-&gt;argument(0).isUndefinedOrNull()) {
</span><span class="lines">@@ -6101,16 +6182,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalXPathNSResolverCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalXPathNSResolver(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithOptionalXPathNSResolverCaller&gt;(state, &quot;methodWithOptionalXPathNSResolver&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithOptionalXPathNSResolverCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithOptionalXPathNSResolver&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     RefPtr&lt;XPathNSResolver&gt; resolver = nullptr;
</span><span class="cx">     if (!state-&gt;argument(0).isUndefinedOrNull()) {
</span><span class="lines">@@ -6123,16 +6205,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithCallbackArgCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithCallbackArg(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithCallbackArgCaller&gt;(state, &quot;methodWithCallbackArg&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithCallbackArgCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithCallbackArg&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6143,16 +6226,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArgCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArgCaller&gt;(state, &quot;methodWithNonCallbackArgAndCallbackArg&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArgCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithNonCallbackArgAndCallbackArg&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 2))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6165,16 +6249,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArgCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArgCaller&gt;(state, &quot;methodWithCallbackAndOptionalArg&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArgCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithCallbackAndOptionalArg&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     RefPtr&lt;TestCallback&gt; callback;
</span><span class="cx">     if (!state-&gt;argument(0).isUndefinedOrNull()) {
</span><span class="lines">@@ -6186,16 +6271,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithCallbackFunctionArgCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithCallbackFunctionArg(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithCallbackFunctionArgCaller&gt;(state, &quot;methodWithCallbackFunctionArg&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithCallbackFunctionArgCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithCallbackFunctionArg&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6206,16 +6292,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackFunctionArgCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackFunctionArg(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackFunctionArgCaller&gt;(state, &quot;methodWithNonCallbackArgAndCallbackFunctionArg&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackFunctionArgCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithNonCallbackArgAndCallbackFunctionArg&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 2))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6228,16 +6315,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithCallbackFunctionAndOptionalArgCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithCallbackFunctionAndOptionalArg(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithCallbackFunctionAndOptionalArgCaller&gt;(state, &quot;methodWithCallbackFunctionAndOptionalArg&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithCallbackFunctionAndOptionalArgCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithCallbackFunctionAndOptionalArg&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     RefPtr&lt;TestCallbackFunction&gt; callback;
</span><span class="cx">     if (!state-&gt;argument(0).isUndefinedOrNull()) {
</span><span class="lines">@@ -6279,16 +6367,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition1)
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConditionalMethod1Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConditionalMethod1(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionConditionalMethod1Caller&gt;(state, &quot;conditionalMethod1&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConditionalMethod1Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;conditionalMethod1&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     JSValue result = jsStringWithCache(state, impl.conditionalMethod1());
</span><span class="cx">     return JSValue::encode(result);
</span><span class="lines">@@ -6297,16 +6386,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition1) &amp;&amp; ENABLE(Condition2)
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConditionalMethod2Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConditionalMethod2(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionConditionalMethod2Caller&gt;(state, &quot;conditionalMethod2&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConditionalMethod2Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;conditionalMethod2&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     impl.conditionalMethod2();
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="lines">@@ -6315,16 +6405,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(Condition1) || ENABLE(Condition2)
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConditionalMethod3Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConditionalMethod3(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionConditionalMethod3Caller&gt;(state, &quot;conditionalMethod3&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConditionalMethod3Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;conditionalMethod3&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     impl.conditionalMethod3();
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="lines">@@ -6332,16 +6423,17 @@
</span><span class="cx"> 
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod1Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod1(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOverloadedMethod1Caller&gt;(state, &quot;overloadedMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod1Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;overloadedMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 2))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6357,16 +6449,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod2Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod2(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOverloadedMethod2Caller&gt;(state, &quot;overloadedMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod2Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;overloadedMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6382,16 +6475,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod3Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod3(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOverloadedMethod3Caller&gt;(state, &quot;overloadedMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod3Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;overloadedMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6401,16 +6495,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod4Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod4(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOverloadedMethod4Caller&gt;(state, &quot;overloadedMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod4Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;overloadedMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6420,16 +6515,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod5Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod5(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOverloadedMethod5Caller&gt;(state, &quot;overloadedMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod5Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;overloadedMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6440,16 +6536,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod6Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod6(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOverloadedMethod6Caller&gt;(state, &quot;overloadedMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod6Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;overloadedMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6463,16 +6560,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod7Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod7(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOverloadedMethod7Caller&gt;(state, &quot;overloadedMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod7Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;overloadedMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6482,16 +6580,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod8Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod8(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOverloadedMethod8Caller&gt;(state, &quot;overloadedMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod8Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;overloadedMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6502,16 +6601,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod9Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod9(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOverloadedMethod9Caller&gt;(state, &quot;overloadedMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod9Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;overloadedMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6522,16 +6622,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod10Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod10(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOverloadedMethod10Caller&gt;(state, &quot;overloadedMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod10Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;overloadedMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6541,16 +6642,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod11Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod11(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOverloadedMethod11Caller&gt;(state, &quot;overloadedMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod11Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;overloadedMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6560,16 +6662,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod12Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod12(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOverloadedMethod12Caller&gt;(state, &quot;overloadedMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod12Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;overloadedMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6579,16 +6682,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod13Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod13(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOverloadedMethod13Caller&gt;(state, &quot;overloadedMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethod13Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;overloadedMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto blobArgs = convertVariadicArguments&lt;IDLInterface&lt;Blob&gt;&gt;(*state, 0);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -6642,16 +6746,17 @@
</span><span class="cx">     return throwVMTypeError(state, throwScope);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter1Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter1(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter1Caller&gt;(state, &quot;overloadedMethodWithOptionalParameter&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter1Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;overloadedMethodWithOptionalParameter&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6667,16 +6772,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter2Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter2(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter2Caller&gt;(state, &quot;overloadedMethodWithOptionalParameter&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter2Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;overloadedMethodWithOptionalParameter&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6739,9 +6845,6 @@
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjConstructorFunctionClassMethod2(ExecState* state)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
-    UNUSED_PARAM(throwScope);
</del><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="cx">     return JSValue::encode(JSTestObj::classMethod2(state));
</span><span class="lines">@@ -6800,16 +6903,17 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionClassMethodWithClampCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionClassMethodWithClamp(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionClassMethodWithClampCaller&gt;(state, &quot;classMethodWithClamp&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionClassMethodWithClampCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;classMethodWithClamp&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 2))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6821,16 +6925,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionClassMethodWithEnforceRangeCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionClassMethodWithEnforceRange(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionClassMethodWithEnforceRangeCaller&gt;(state, &quot;classMethodWithEnforceRange&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionClassMethodWithEnforceRangeCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;classMethodWithEnforceRange&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 2))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6842,16 +6947,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithUnsignedLongSequenceCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithUnsignedLongSequence(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithUnsignedLongSequenceCaller&gt;(state, &quot;methodWithUnsignedLongSequence&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithUnsignedLongSequenceCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithUnsignedLongSequence&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6861,16 +6967,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionStringArrayFunctionCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionStringArrayFunction(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionStringArrayFunctionCaller&gt;(state, &quot;stringArrayFunction&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionStringArrayFunctionCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;stringArrayFunction&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6883,16 +6990,17 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionDomStringListFunctionCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionDomStringListFunction(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionDomStringListFunctionCaller&gt;(state, &quot;domStringListFunction&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionDomStringListFunctionCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;domStringListFunction&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6906,16 +7014,17 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithAndWithoutNullableSequenceCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithAndWithoutNullableSequence(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMethodWithAndWithoutNullableSequenceCaller&gt;(state, &quot;methodWithAndWithoutNullableSequence&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMethodWithAndWithoutNullableSequenceCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;methodWithAndWithoutNullableSequence&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 2))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6927,16 +7036,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionGetElementByIdCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionGetElementById(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionGetElementByIdCaller&gt;(state, &quot;getElementById&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionGetElementByIdCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;getElementById&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6946,16 +7056,17 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionGetSVGDocumentCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionGetSVGDocument(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionGetSVGDocumentCaller&gt;(state, &quot;getSVGDocument&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionGetSVGDocumentCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;getSVGDocument&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     ExceptionCode ec = 0;
</span><span class="cx">     if (!shouldAllowAccessToNode(state, impl.getSVGDocument(ec)))
</span><span class="lines">@@ -6966,16 +7077,17 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConvert1Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConvert1(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionConvert1Caller&gt;(state, &quot;convert1&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConvert1Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;convert1&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -6986,16 +7098,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConvert2Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConvert2(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionConvert2Caller&gt;(state, &quot;convert2&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConvert2Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;convert2&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -7009,16 +7122,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConvert3Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConvert3(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionConvert3Caller&gt;(state, &quot;convert3&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConvert3Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;convert3&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -7028,16 +7142,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConvert4Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConvert4(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionConvert4Caller&gt;(state, &quot;convert4&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConvert4Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;convert4&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -7047,61 +7162,65 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMutablePointFunctionCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMutablePointFunction(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionMutablePointFunctionCaller&gt;(state, &quot;mutablePointFunction&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionMutablePointFunctionCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;mutablePointFunction&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     JSValue result = toJS(state, castedThis-&gt;globalObject(), SVGPropertyTearOff&lt;SVGPoint&gt;::create(impl.mutablePointFunction()));
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionImmutablePointFunctionCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionImmutablePointFunction(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionImmutablePointFunctionCaller&gt;(state, &quot;immutablePointFunction&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionImmutablePointFunctionCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;immutablePointFunction&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     JSValue result = toJS(state, castedThis-&gt;globalObject(), SVGPropertyTearOff&lt;SVGPoint&gt;::create(impl.immutablePointFunction()));
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOrangeCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOrange(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOrangeCaller&gt;(state, &quot;orange&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOrangeCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;orange&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     impl.banana();
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionVariadicStringMethodCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionVariadicStringMethod(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionVariadicStringMethodCaller&gt;(state, &quot;variadicStringMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionVariadicStringMethodCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;variadicStringMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -7113,16 +7232,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionVariadicDoubleMethodCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionVariadicDoubleMethod(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionVariadicDoubleMethodCaller&gt;(state, &quot;variadicDoubleMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionVariadicDoubleMethodCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;variadicDoubleMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -7134,16 +7254,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionVariadicNodeMethodCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionVariadicNodeMethod(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionVariadicNodeMethodCaller&gt;(state, &quot;variadicNodeMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionVariadicNodeMethodCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;variadicNodeMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -7156,16 +7277,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionVariadicUnionMethodCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionVariadicUnionMethod(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionVariadicUnionMethodCaller&gt;(state, &quot;variadicUnionMethod&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionVariadicUnionMethodCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;variadicUnionMethod&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -7177,16 +7299,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionAnyCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionAny(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionAnyCaller&gt;(state, &quot;any&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionAnyCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;any&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 2))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -7198,6 +7321,8 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionTestPromiseFunctionCaller(JSC::ExecState*, JSTestObj*, Ref&lt;DeferredPromise&gt;&amp;&amp;, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static EncodedJSValue jsTestObjPrototypeFunctionTestPromiseFunctionPromise(ExecState*, Ref&lt;DeferredPromise&gt;&amp;&amp;);
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionTestPromiseFunction(ExecState* state)
</span><span class="lines">@@ -7208,19 +7333,20 @@
</span><span class="cx"> 
</span><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionTestPromiseFunctionPromise(ExecState* state, Ref&lt;DeferredPromise&gt;&amp;&amp; promise)
</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;::callPromiseOperation&lt;jsTestObjPrototypeFunctionTestPromiseFunctionCaller&gt;(state, WTFMove(promise), &quot;testPromiseFunction&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionTestPromiseFunctionCaller(JSC::ExecState* state, JSTestObj* castedThis, Ref&lt;DeferredPromise&gt;&amp;&amp; promise, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;testPromiseFunction&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     impl.testPromiseFunction(WTFMove(promise));
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgumentCaller(JSC::ExecState*, JSTestObj*, Ref&lt;DeferredPromise&gt;&amp;&amp;, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static EncodedJSValue jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgumentPromise(ExecState*, Ref&lt;DeferredPromise&gt;&amp;&amp;);
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgument(ExecState* state)
</span><span class="lines">@@ -7231,14 +7357,13 @@
</span><span class="cx"> 
</span><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgumentPromise(ExecState* state, Ref&lt;DeferredPromise&gt;&amp;&amp; promise)
</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;::callPromiseOperation&lt;jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgumentCaller&gt;(state, WTFMove(promise), &quot;testPromiseFunctionWithFloatArgument&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgumentCaller(JSC::ExecState* state, JSTestObj* castedThis, Ref&lt;DeferredPromise&gt;&amp;&amp; promise, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;testPromiseFunctionWithFloatArgument&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -7248,6 +7373,8 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionTestPromiseFunctionWithExceptionCaller(JSC::ExecState*, JSTestObj*, Ref&lt;DeferredPromise&gt;&amp;&amp;, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static EncodedJSValue jsTestObjPrototypeFunctionTestPromiseFunctionWithExceptionPromise(ExecState*, Ref&lt;DeferredPromise&gt;&amp;&amp;);
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionTestPromiseFunctionWithException(ExecState* state)
</span><span class="lines">@@ -7258,14 +7385,13 @@
</span><span class="cx"> 
</span><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionTestPromiseFunctionWithExceptionPromise(ExecState* state, Ref&lt;DeferredPromise&gt;&amp;&amp; promise)
</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;::callPromiseOperation&lt;jsTestObjPrototypeFunctionTestPromiseFunctionWithExceptionCaller&gt;(state, WTFMove(promise), &quot;testPromiseFunctionWithException&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionTestPromiseFunctionWithExceptionCaller(JSC::ExecState* state, JSTestObj* castedThis, Ref&lt;DeferredPromise&gt;&amp;&amp; promise, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;testPromiseFunctionWithException&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     ExceptionCode ec = 0;
</span><span class="cx">     impl.testPromiseFunctionWithException(WTFMove(promise), ec);
</span><span class="lines">@@ -7273,6 +7399,8 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgumentCaller(JSC::ExecState*, JSTestObj*, Ref&lt;DeferredPromise&gt;&amp;&amp;, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static EncodedJSValue jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgumentPromise(ExecState*, Ref&lt;DeferredPromise&gt;&amp;&amp;);
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgument(ExecState* state)
</span><span class="lines">@@ -7283,14 +7411,13 @@
</span><span class="cx"> 
</span><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgumentPromise(ExecState* state, Ref&lt;DeferredPromise&gt;&amp;&amp; promise)
</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;::callPromiseOperation&lt;jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgumentCaller&gt;(state, WTFMove(promise), &quot;testPromiseFunctionWithOptionalIntArgument&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgumentCaller(JSC::ExecState* state, JSTestObj* castedThis, Ref&lt;DeferredPromise&gt;&amp;&amp; promise, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;testPromiseFunctionWithOptionalIntArgument&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto a = state-&gt;argument(0).isUndefined() ? Optional&lt;int32_t&gt;() : convert&lt;IDLLong&gt;(*state, state-&gt;uncheckedArgument(0), NormalConversion);
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -7298,6 +7425,8 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionTestPromiseOverloadedFunction1Caller(JSC::ExecState*, JSTestObj*, Ref&lt;DeferredPromise&gt;&amp;&amp;, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static EncodedJSValue jsTestObjPrototypeFunctionTestPromiseOverloadedFunction1Promise(ExecState*, Ref&lt;DeferredPromise&gt;&amp;&amp;);
</span><span class="cx"> 
</span><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionTestPromiseOverloadedFunction1(ExecState* state)
</span><span class="lines">@@ -7308,14 +7437,13 @@
</span><span class="cx"> 
</span><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionTestPromiseOverloadedFunction1Promise(ExecState* state, Ref&lt;DeferredPromise&gt;&amp;&amp; promise)
</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;::callPromiseOperation&lt;jsTestObjPrototypeFunctionTestPromiseOverloadedFunction1Caller&gt;(state, WTFMove(promise), &quot;testPromiseOverloadedFunction&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionTestPromiseOverloadedFunction1Caller(JSC::ExecState* state, JSTestObj* castedThis, Ref&lt;DeferredPromise&gt;&amp;&amp; promise, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;testPromiseOverloadedFunction&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -7325,6 +7453,8 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionTestPromiseOverloadedFunction2Caller(JSC::ExecState*, JSTestObj*, Ref&lt;DeferredPromise&gt;&amp;&amp;, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static EncodedJSValue jsTestObjPrototypeFunctionTestPromiseOverloadedFunction2Promise(ExecState*, Ref&lt;DeferredPromise&gt;&amp;&amp;);
</span><span class="cx"> 
</span><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionTestPromiseOverloadedFunction2(ExecState* state)
</span><span class="lines">@@ -7335,14 +7465,13 @@
</span><span class="cx"> 
</span><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionTestPromiseOverloadedFunction2Promise(ExecState* state, Ref&lt;DeferredPromise&gt;&amp;&amp; promise)
</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;::callPromiseOperation&lt;jsTestObjPrototypeFunctionTestPromiseOverloadedFunction2Caller&gt;(state, WTFMove(promise), &quot;testPromiseOverloadedFunction&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionTestPromiseOverloadedFunction2Caller(JSC::ExecState* state, JSTestObj* castedThis, Ref&lt;DeferredPromise&gt;&amp;&amp; promise, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;testPromiseOverloadedFunction&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -7406,30 +7535,32 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionTestCustomPromiseFunctionCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionTestCustomPromiseFunction(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionTestCustomPromiseFunctionCaller, CastedThisErrorBehavior::RejectPromise&gt;(state, &quot;testCustomPromiseFunction&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionTestCustomPromiseFunctionCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return createRejectedPromiseWithTypeError(*state, makeThisTypeErrorMessage(&quot;TestObject&quot;, &quot;testCustomPromiseFunction&quot;));
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     return JSValue::encode(castedThis-&gt;testCustomPromiseFunction(*state));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONDITION1)
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConditionalOverload1Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionConditionalOverload1(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionConditionalOverload1Caller&gt;(state, &quot;conditionalOverload&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConditionalOverload1Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;conditionalOverload&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -7442,16 +7573,17 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONDITION2)
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConditionalOverload2Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionConditionalOverload2(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionConditionalOverload2Caller&gt;(state, &quot;conditionalOverload&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionConditionalOverload2Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;conditionalOverload&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -7484,16 +7616,17 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionSingleConditionalOverload1Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionSingleConditionalOverload1(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionSingleConditionalOverload1Caller&gt;(state, &quot;singleConditionalOverload&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionSingleConditionalOverload1Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;singleConditionalOverload&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -7504,16 +7637,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CONDITION)
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionSingleConditionalOverload2Caller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> static inline EncodedJSValue jsTestObjPrototypeFunctionSingleConditionalOverload2(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionSingleConditionalOverload2Caller&gt;(state, &quot;singleConditionalOverload&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionSingleConditionalOverload2Caller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;singleConditionalOverload&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -7542,16 +7676,17 @@
</span><span class="cx">     return argsCount &lt; 1 ? throwVMError(state, throwScope, createNotEnoughArgumentsError(state)) : throwVMTypeError(state, throwScope);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionAttachShadowRootCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionAttachShadowRoot(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionAttachShadowRootCaller&gt;(state, &quot;attachShadowRoot&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionAttachShadowRootCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;attachShadowRoot&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -7561,16 +7696,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOperationWithExternalDictionaryParameterCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOperationWithExternalDictionaryParameter(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionOperationWithExternalDictionaryParameterCaller&gt;(state, &quot;operationWithExternalDictionaryParameter&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionOperationWithExternalDictionaryParameterCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;operationWithExternalDictionaryParameter&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -7580,16 +7716,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionToStringCaller(JSC::ExecState*, JSTestObj*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionToString(ExecState* state)
</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;::callOperation&lt;jsTestObjPrototypeFunctionToStringCaller&gt;(state, &quot;toString&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestObjPrototypeFunctionToStringCaller(JSC::ExecState* state, JSTestObj* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestObj*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestObject&quot;, &quot;toString&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     JSValue result = jsStringWithCache(state, impl.stringifierAttribute());
</span><span class="cx">     return JSValue::encode(result);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestObjh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestObj.h        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -53,7 +53,6 @@
</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><del>-    static JSTestObj* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</del><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="trunkSourceWebCorebindingsscriptstestJSJSTestOverrideBuiltinscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestOverrideBuiltins.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -156,6 +156,11 @@
</span><span class="cx">     return Base::getOwnPropertySlotByIndex(thisObject, state, index, slot);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; inline JSTestOverrideBuiltins* BindingCaller&lt;JSTestOverrideBuiltins&gt;::castForOperation(ExecState&amp; state)
+{
+    return jsDynamicCast&lt;JSTestOverrideBuiltins*&gt;(state.thisValue());
+}
+
</ins><span class="cx"> EncodedJSValue jsTestOverrideBuiltinsConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="cx"> {
</span><span class="cx">     VM&amp; vm = state-&gt;vm();
</span><span class="lines">@@ -196,16 +201,17 @@
</span><span class="cx">     return getDOMConstructor&lt;JSTestOverrideBuiltinsConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestOverrideBuiltinsPrototypeFunctionNamedItemCaller(JSC::ExecState*, JSTestOverrideBuiltins*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestOverrideBuiltinsPrototypeFunctionNamedItem(ExecState* state)
</span><span class="cx"> {
</span><del>-    VM&amp; vm = state-&gt;vm();
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
</del><ins>+    return BindingCaller&lt;JSTestOverrideBuiltins&gt;::callOperation&lt;jsTestOverrideBuiltinsPrototypeFunctionNamedItemCaller&gt;(state, &quot;namedItem&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestOverrideBuiltinsPrototypeFunctionNamedItemCaller(JSC::ExecState* state, JSTestOverrideBuiltins* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestOverrideBuiltins*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestOverrideBuiltins&quot;, &quot;namedItem&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestOverrideBuiltins::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfacecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -132,7 +132,7 @@
</span><span class="cx">     thisObject-&gt;JSTestSerializedScriptValueInterface::~JSTestSerializedScriptValueInterface();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline JSTestSerializedScriptValueInterface* JSTestSerializedScriptValueInterface::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
</del><ins>+template&lt;&gt; inline JSTestSerializedScriptValueInterface* BindingCaller&lt;JSTestSerializedScriptValueInterface&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)
</ins><span class="cx"> {
</span><span class="cx">     return jsDynamicCast&lt;JSTestSerializedScriptValueInterface*&gt;(JSValue::decode(thisValue));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestSerializedScriptValueInterfaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestSerializedScriptValueInterface.h        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -51,7 +51,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><del>-    static JSTestSerializedScriptValueInterface* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</del><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 (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -216,11 +216,16 @@
</span><span class="cx">     thisObject-&gt;JSTestTypedefs::~JSTestTypedefs();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline JSTestTypedefs* JSTestTypedefs::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
</del><ins>+template&lt;&gt; inline JSTestTypedefs* BindingCaller&lt;JSTestTypedefs&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)
</ins><span class="cx"> {
</span><span class="cx">     return jsDynamicCast&lt;JSTestTypedefs*&gt;(JSValue::decode(thisValue));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+template&lt;&gt; inline JSTestTypedefs* BindingCaller&lt;JSTestTypedefs&gt;::castForOperation(ExecState&amp; state)
+{
+    return jsDynamicCast&lt;JSTestTypedefs*&gt;(state.thisValue());
+}
+
</ins><span class="cx"> static inline JSValue jsTestTypedefsUnsignedLongLongAttrGetter(ExecState&amp;, JSTestTypedefs&amp;, ThrowScope&amp; throwScope);
</span><span class="cx"> 
</span><span class="cx"> EncodedJSValue jsTestTypedefsUnsignedLongLongAttr(ExecState* state, EncodedJSValue thisValue, PropertyName)
</span><span class="lines">@@ -482,16 +487,17 @@
</span><span class="cx">     return getDOMConstructor&lt;JSTestTypedefsConstructor&gt;(vm, *jsCast&lt;const JSDOMGlobalObject*&gt;(globalObject));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionFuncCaller(JSC::ExecState*, JSTestTypedefs*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestTypedefsPrototypeFunctionFunc(ExecState* state)
</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;::callOperation&lt;jsTestTypedefsPrototypeFunctionFuncCaller&gt;(state, &quot;func&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionFuncCaller(JSC::ExecState* state, JSTestTypedefs* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;func&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestTypedefs::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     auto x = state-&gt;argument(0).isUndefined() ? Vector&lt;int32_t&gt;() : convert&lt;IDLSequence&lt;IDLLong&gt;&gt;(*state, state-&gt;uncheckedArgument(0));
</span><span class="cx">     RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
</span><span class="lines">@@ -499,16 +505,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionSetShadowCaller(JSC::ExecState*, JSTestTypedefs*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestTypedefsPrototypeFunctionSetShadow(ExecState* state)
</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;::callOperation&lt;jsTestTypedefsPrototypeFunctionSetShadowCaller&gt;(state, &quot;setShadow&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionSetShadowCaller(JSC::ExecState* state, JSTestTypedefs* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;setShadow&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestTypedefs::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 3))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -526,16 +533,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionMethodWithSequenceArgCaller(JSC::ExecState*, JSTestTypedefs*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestTypedefsPrototypeFunctionMethodWithSequenceArg(ExecState* state)
</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;::callOperation&lt;jsTestTypedefsPrototypeFunctionMethodWithSequenceArgCaller&gt;(state, &quot;methodWithSequenceArg&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionMethodWithSequenceArgCaller(JSC::ExecState* state, JSTestTypedefs* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;methodWithSequenceArg&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestTypedefs::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -545,16 +553,17 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionNullableSequenceArgCaller(JSC::ExecState*, JSTestTypedefs*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestTypedefsPrototypeFunctionNullableSequenceArg(ExecState* state)
</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;::callOperation&lt;jsTestTypedefsPrototypeFunctionNullableSequenceArgCaller&gt;(state, &quot;nullableSequenceArg&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionNullableSequenceArgCaller(JSC::ExecState* state, JSTestTypedefs* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;nullableSequenceArg&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestTypedefs::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -564,16 +573,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionSequenceOfNullablesArgCaller(JSC::ExecState*, JSTestTypedefs*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestTypedefsPrototypeFunctionSequenceOfNullablesArg(ExecState* state)
</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;::callOperation&lt;jsTestTypedefsPrototypeFunctionSequenceOfNullablesArgCaller&gt;(state, &quot;sequenceOfNullablesArg&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionSequenceOfNullablesArgCaller(JSC::ExecState* state, JSTestTypedefs* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;sequenceOfNullablesArg&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestTypedefs::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -583,16 +593,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionNullableSequenceOfNullablesArgCaller(JSC::ExecState*, JSTestTypedefs*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestTypedefsPrototypeFunctionNullableSequenceOfNullablesArg(ExecState* state)
</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;::callOperation&lt;jsTestTypedefsPrototypeFunctionNullableSequenceOfNullablesArgCaller&gt;(state, &quot;nullableSequenceOfNullablesArg&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionNullableSequenceOfNullablesArgCaller(JSC::ExecState* state, JSTestTypedefs* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;nullableSequenceOfNullablesArg&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestTypedefs::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -602,16 +613,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionUnionArgCaller(JSC::ExecState*, JSTestTypedefs*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestTypedefsPrototypeFunctionUnionArg(ExecState* state)
</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;::callOperation&lt;jsTestTypedefsPrototypeFunctionUnionArgCaller&gt;(state, &quot;unionArg&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionUnionArgCaller(JSC::ExecState* state, JSTestTypedefs* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;unionArg&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestTypedefs::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -621,16 +633,17 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionFuncWithClampCaller(JSC::ExecState*, JSTestTypedefs*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestTypedefsPrototypeFunctionFuncWithClamp(ExecState* state)
</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;::callOperation&lt;jsTestTypedefsPrototypeFunctionFuncWithClampCaller&gt;(state, &quot;funcWithClamp&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionFuncWithClampCaller(JSC::ExecState* state, JSTestTypedefs* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;funcWithClamp&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestTypedefs::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -642,31 +655,33 @@
</span><span class="cx">     return JSValue::encode(jsUndefined());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionImmutablePointFunctionCaller(JSC::ExecState*, JSTestTypedefs*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestTypedefsPrototypeFunctionImmutablePointFunction(ExecState* state)
</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;::callOperation&lt;jsTestTypedefsPrototypeFunctionImmutablePointFunctionCaller&gt;(state, &quot;immutablePointFunction&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionImmutablePointFunctionCaller(JSC::ExecState* state, JSTestTypedefs* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;immutablePointFunction&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestTypedefs::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     JSValue result = toJS(state, castedThis-&gt;globalObject(), SVGPropertyTearOff&lt;SVGPoint&gt;::create(impl.immutablePointFunction()));
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionStringSequenceFunctionCaller(JSC::ExecState*, JSTestTypedefs*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestTypedefsPrototypeFunctionStringSequenceFunction(ExecState* state)
</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;::callOperation&lt;jsTestTypedefsPrototypeFunctionStringSequenceFunctionCaller&gt;(state, &quot;stringSequenceFunction&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionStringSequenceFunctionCaller(JSC::ExecState* state, JSTestTypedefs* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;stringSequenceFunction&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestTypedefs::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -679,16 +694,17 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionStringSequenceFunction2Caller(JSC::ExecState*, JSTestTypedefs*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestTypedefsPrototypeFunctionStringSequenceFunction2(ExecState* state)
</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;::callOperation&lt;jsTestTypedefsPrototypeFunctionStringSequenceFunction2Caller&gt;(state, &quot;stringSequenceFunction2&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionStringSequenceFunction2Caller(JSC::ExecState* state, JSTestTypedefs* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;stringSequenceFunction2&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestTypedefs::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -701,16 +717,17 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionCallWithSequenceThatRequiresIncludeCaller(JSC::ExecState*, JSTestTypedefs*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestTypedefsPrototypeFunctionCallWithSequenceThatRequiresInclude(ExecState* state)
</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;::callOperation&lt;jsTestTypedefsPrototypeFunctionCallWithSequenceThatRequiresIncludeCaller&gt;(state, &quot;callWithSequenceThatRequiresInclude&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionCallWithSequenceThatRequiresIncludeCaller(JSC::ExecState* state, JSTestTypedefs* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;callWithSequenceThatRequiresInclude&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestTypedefs::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
</span><span class="cx">         return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
</span><span class="lines">@@ -720,16 +737,17 @@
</span><span class="cx">     return JSValue::encode(result);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionMethodWithExceptionCaller(JSC::ExecState*, JSTestTypedefs*, JSC::ThrowScope&amp;);
+
</ins><span class="cx"> EncodedJSValue JSC_HOST_CALL jsTestTypedefsPrototypeFunctionMethodWithException(ExecState* state)
</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;::callOperation&lt;jsTestTypedefsPrototypeFunctionMethodWithExceptionCaller&gt;(state, &quot;methodWithException&quot;);
+}
+
+static inline JSC::EncodedJSValue jsTestTypedefsPrototypeFunctionMethodWithExceptionCaller(JSC::ExecState* state, JSTestTypedefs* castedThis, JSC::ThrowScope&amp; throwScope)
+{
+    UNUSED_PARAM(state);
</ins><span class="cx">     UNUSED_PARAM(throwScope);
</span><del>-    JSValue thisValue = state-&gt;thisValue();
-    auto castedThis = jsDynamicCast&lt;JSTestTypedefs*&gt;(thisValue);
-    if (UNLIKELY(!castedThis))
-        return throwThisTypeError(*state, throwScope, &quot;TestTypedefs&quot;, &quot;methodWithException&quot;);
-    ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestTypedefs::info());
</del><span class="cx">     auto&amp; impl = castedThis-&gt;wrapped();
</span><span class="cx">     ExceptionCode ec = 0;
</span><span class="cx">     impl.methodWithException(ec);
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSTestTypedefsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSTestTypedefs.h        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -49,7 +49,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><del>-    static JSTestTypedefs* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</del><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 (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.cpp        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -132,7 +132,7 @@
</span><span class="cx">     thisObject-&gt;JSattribute::~JSattribute();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline JSattribute* JSattribute::castForAttribute(JSC::ExecState*, EncodedJSValue thisValue)
</del><ins>+template&lt;&gt; inline JSattribute* BindingCaller&lt;JSattribute&gt;::castForAttribute(ExecState&amp;, EncodedJSValue thisValue)
</ins><span class="cx"> {
</span><span class="cx">     return jsDynamicCast&lt;JSattribute*&gt;(JSValue::decode(thisValue));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsscriptstestJSJSattributeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h (207191 => 207192)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h        2016-10-12 06:39:44 UTC (rev 207191)
+++ trunk/Source/WebCore/bindings/scripts/test/JS/JSattribute.h        2016-10-12 06:57:04 UTC (rev 207192)
</span><span class="lines">@@ -50,7 +50,6 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     static JSC::JSValue getConstructor(JSC::VM&amp;, const JSC::JSGlobalObject*);
</span><del>-    static JSattribute* castForAttribute(JSC::ExecState*, JSC::EncodedJSValue);
</del><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>