Make our bindings' GetOwnPropertySlot() behave according to specification
[WebKit-https.git] / Source / WebCore / bindings / scripts / test / JS / JSTestObj.cpp
1 /*
2     This file is part of the WebKit open source project.
3     This file has been generated by generate-bindings.pl. DO NOT MODIFY!
4
5     This library is free software; you can redistribute it and/or
6     modify it under the terms of the GNU Library General Public
7     License as published by the Free Software Foundation; either
8     version 2 of the License, or (at your option) any later version.
9
10     This library is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13     Library General Public License for more details.
14
15     You should have received a copy of the GNU Library General Public License
16     along with this library; see the file COPYING.LIB.  If not, write to
17     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18     Boston, MA 02110-1301, USA.
19 */
20
21 #include "config.h"
22 #include "JSTestObj.h"
23
24 #include "CallbackFunction.h"
25 #include "DOMStringList.h"
26 #include "Dictionary.h"
27 #include "Document.h"
28 #include "ExceptionCode.h"
29 #include "Frame.h"
30 #include "HTMLNames.h"
31 #include "JSDOMBinding.h"
32 #include "JSDOMPromise.h"
33 #include "JSDOMStringList.h"
34 #include "JSDocument.h"
35 #include "JSEventListener.h"
36 #include "JSNode.h"
37 #include "JSSVGDocument.h"
38 #include "JSSVGPoint.h"
39 #include "JSScriptProfile.h"
40 #include "JSTestCallback.h"
41 #include "JSTestNode.h"
42 #include "JSTestObj.h"
43 #include "JSTestSubObj.h"
44 #include "JSbool.h"
45 #include "SVGDocument.h"
46 #include "SVGPoint.h"
47 #include "SVGStaticPropertyTearOff.h"
48 #include "ScriptProfile.h"
49 #include "SerializedScriptValue.h"
50 #include "Settings.h"
51 #include "TestObj.h"
52 #include "URL.h"
53 #include "bool.h"
54 #include <bindings/ScriptValue.h>
55 #include <inspector/ScriptArguments.h>
56 #include <inspector/ScriptCallStackFactory.h>
57 #include <runtime/Error.h>
58 #include <runtime/JSArray.h>
59 #include <runtime/JSString.h>
60 #include <wtf/GetPtr.h>
61
62 #if ENABLE(Condition1)
63 #include "JSTestObjectA.h"
64 #endif
65
66 #if ENABLE(Condition1) && ENABLE(Condition2)
67 #include "JSTestObjectB.h"
68 #endif
69
70 #if ENABLE(Condition1) || ENABLE(Condition2)
71 #include "JSTestObjectC.h"
72 #endif
73
74 using namespace JSC;
75
76 namespace WebCore {
77
78 // Functions
79
80 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionVoidMethod(JSC::ExecState*);
81 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionVoidMethodWithArgs(JSC::ExecState*);
82 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionByteMethod(JSC::ExecState*);
83 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionByteMethodWithArgs(JSC::ExecState*);
84 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOctetMethod(JSC::ExecState*);
85 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOctetMethodWithArgs(JSC::ExecState*);
86 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionLongMethod(JSC::ExecState*);
87 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionLongMethodWithArgs(JSC::ExecState*);
88 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionObjMethod(JSC::ExecState*);
89 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionObjMethodWithArgs(JSC::ExecState*);
90 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithSequenceArg(JSC::ExecState*);
91 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodReturningSequence(JSC::ExecState*);
92 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithEnumArg(JSC::ExecState*);
93 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows(JSC::ExecState*);
94 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionSerializedValue(JSC::ExecState*);
95 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOptionsObject(JSC::ExecState*);
96 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithException(JSC::ExecState*);
97 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionCustomMethod(JSC::ExecState*);
98 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionCustomMethodWithArgs(JSC::ExecState*);
99 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionAddEventListener(JSC::ExecState*);
100 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionRemoveEventListener(JSC::ExecState*);
101 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptStateVoid(JSC::ExecState*);
102 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptStateObj(JSC::ExecState*);
103 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptStateVoidException(JSC::ExecState*);
104 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptStateObjException(JSC::ExecState*);
105 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptExecutionContext(JSC::ExecState*);
106 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptState(JSC::ExecState*);
107 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateObjException(JSC::ExecState*);
108 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateWithSpaces(JSC::ExecState*);
109 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStack(JSC::ExecState*);
110 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalArg(JSC::ExecState*);
111 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg(JSC::ExecState*);
112 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs(JSC::ExecState*);
113 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalString(JSC::ExecState*);
114 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefined(JSC::ExecState*);
115 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullString(JSC::ExecState*);
116 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithCallbackArg(JSC::ExecState*);
117 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg(JSC::ExecState*);
118 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg(JSC::ExecState*);
119 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjConstructorFunctionStaticMethodWithCallbackAndOptionalArg(JSC::ExecState*);
120 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjConstructorFunctionStaticMethodWithCallbackArg(JSC::ExecState*);
121 #if ENABLE(Condition1)
122 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConditionalMethod1(JSC::ExecState*);
123 #endif
124 #if ENABLE(Condition1) && ENABLE(Condition2)
125 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConditionalMethod2(JSC::ExecState*);
126 #endif
127 #if ENABLE(Condition1) || ENABLE(Condition2)
128 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConditionalMethod3(JSC::ExecState*);
129 #endif
130 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOverloadedMethod(JSC::ExecState*);
131 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter(JSC::ExecState*);
132 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjConstructorFunctionClassMethod(JSC::ExecState*);
133 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjConstructorFunctionClassMethodWithOptional(JSC::ExecState*);
134 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjConstructorFunctionClassMethod2(JSC::ExecState*);
135 #if ENABLE(Condition1)
136 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjConstructorFunctionOverloadedMethod1(JSC::ExecState*);
137 #endif
138 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionClassMethodWithClamp(JSC::ExecState*);
139 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithUnsignedLongSequence(JSC::ExecState*);
140 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionStringArrayFunction(JSC::ExecState*);
141 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionDomStringListFunction(JSC::ExecState*);
142 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithAndWithoutNullableSequence(JSC::ExecState*);
143 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithAndWithoutNullableSequence2(JSC::ExecState*);
144 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionGetSVGDocument(JSC::ExecState*);
145 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConvert1(JSC::ExecState*);
146 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConvert2(JSC::ExecState*);
147 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConvert4(JSC::ExecState*);
148 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionConvert5(JSC::ExecState*);
149 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMutablePointFunction(JSC::ExecState*);
150 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionImmutablePointFunction(JSC::ExecState*);
151 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOrange(JSC::ExecState*);
152 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionStrictFunction(JSC::ExecState*);
153 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionStrictFunctionWithSequence(JSC::ExecState*);
154 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionStrictFunctionWithArray(JSC::ExecState*);
155 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionVariadicStringMethod(JSC::ExecState*);
156 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionVariadicDoubleMethod(JSC::ExecState*);
157 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionVariadicNodeMethod(JSC::ExecState*);
158 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionAny(JSC::ExecState*);
159 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionTestPromiseFunction(JSC::ExecState*);
160 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgument(JSC::ExecState*);
161 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionTestPromiseFunctionWithException(JSC::ExecState*);
162 JSC::EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgument(JSC::ExecState*);
163
164 // Attributes
165
166 JSC::EncodedJSValue jsTestObjReadOnlyLongAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
167 JSC::EncodedJSValue jsTestObjReadOnlyStringAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
168 JSC::EncodedJSValue jsTestObjReadOnlyTestObjAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
169 JSC::EncodedJSValue jsTestObjConstructorStaticReadOnlyLongAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
170 JSC::EncodedJSValue jsTestObjConstructorStaticStringAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
171 void setJSTestObjConstructorStaticStringAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
172 JSC::EncodedJSValue jsTestObjConstructorTestSubObj(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
173 JSC::EncodedJSValue jsTestObjTestSubObjEnabledBySettingConstructor(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
174 void setJSTestObjTestSubObjEnabledBySettingConstructor(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
175 JSC::EncodedJSValue jsTestObjEnumAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
176 void setJSTestObjEnumAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
177 JSC::EncodedJSValue jsTestObjByteAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
178 void setJSTestObjByteAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
179 JSC::EncodedJSValue jsTestObjOctetAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
180 void setJSTestObjOctetAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
181 JSC::EncodedJSValue jsTestObjShortAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
182 void setJSTestObjShortAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
183 JSC::EncodedJSValue jsTestObjUnsignedShortAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
184 void setJSTestObjUnsignedShortAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
185 JSC::EncodedJSValue jsTestObjLongAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
186 void setJSTestObjLongAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
187 JSC::EncodedJSValue jsTestObjLongLongAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
188 void setJSTestObjLongLongAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
189 JSC::EncodedJSValue jsTestObjUnsignedLongLongAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
190 void setJSTestObjUnsignedLongLongAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
191 JSC::EncodedJSValue jsTestObjStringAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
192 void setJSTestObjStringAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
193 JSC::EncodedJSValue jsTestObjTestObjAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
194 void setJSTestObjTestObjAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
195 JSC::EncodedJSValue jsTestObjXMLObjAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
196 void setJSTestObjXMLObjAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
197 JSC::EncodedJSValue jsTestObjCreate(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
198 void setJSTestObjCreate(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
199 JSC::EncodedJSValue jsTestObjReflectedStringAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
200 void setJSTestObjReflectedStringAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
201 JSC::EncodedJSValue jsTestObjReflectedIntegralAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
202 void setJSTestObjReflectedIntegralAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
203 JSC::EncodedJSValue jsTestObjReflectedUnsignedIntegralAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
204 void setJSTestObjReflectedUnsignedIntegralAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
205 JSC::EncodedJSValue jsTestObjReflectedBooleanAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
206 void setJSTestObjReflectedBooleanAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
207 JSC::EncodedJSValue jsTestObjReflectedURLAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
208 void setJSTestObjReflectedURLAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
209 JSC::EncodedJSValue jsTestObjReflectedStringAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
210 void setJSTestObjReflectedStringAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
211 JSC::EncodedJSValue jsTestObjReflectedCustomIntegralAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
212 void setJSTestObjReflectedCustomIntegralAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
213 JSC::EncodedJSValue jsTestObjReflectedCustomBooleanAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
214 void setJSTestObjReflectedCustomBooleanAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
215 JSC::EncodedJSValue jsTestObjReflectedCustomURLAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
216 void setJSTestObjReflectedCustomURLAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
217 JSC::EncodedJSValue jsTestObjTypedArrayAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
218 void setJSTestObjTypedArrayAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
219 JSC::EncodedJSValue jsTestObjAttrWithGetterException(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
220 void setJSTestObjAttrWithGetterException(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
221 JSC::EncodedJSValue jsTestObjAttrWithSetterException(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
222 void setJSTestObjAttrWithSetterException(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
223 JSC::EncodedJSValue jsTestObjStringAttrWithGetterException(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
224 void setJSTestObjStringAttrWithGetterException(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
225 JSC::EncodedJSValue jsTestObjStringAttrWithSetterException(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
226 void setJSTestObjStringAttrWithSetterException(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
227 JSC::EncodedJSValue jsTestObjCustomAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
228 void setJSTestObjCustomAttr(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
229 JSC::EncodedJSValue jsTestObjOnfoo(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
230 void setJSTestObjOnfoo(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
231 JSC::EncodedJSValue jsTestObjWithScriptStateAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
232 void setJSTestObjWithScriptStateAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
233 JSC::EncodedJSValue jsTestObjWithScriptExecutionContextAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
234 void setJSTestObjWithScriptExecutionContextAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
235 JSC::EncodedJSValue jsTestObjWithScriptStateAttributeRaises(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
236 void setJSTestObjWithScriptStateAttributeRaises(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
237 JSC::EncodedJSValue jsTestObjWithScriptExecutionContextAttributeRaises(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
238 void setJSTestObjWithScriptExecutionContextAttributeRaises(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
239 JSC::EncodedJSValue jsTestObjWithScriptExecutionContextAndScriptStateAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
240 void setJSTestObjWithScriptExecutionContextAndScriptStateAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
241 JSC::EncodedJSValue jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
242 void setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
243 JSC::EncodedJSValue jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
244 void setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
245 JSC::EncodedJSValue jsTestObjWithScriptArgumentsAndCallStackAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
246 void setJSTestObjWithScriptArgumentsAndCallStackAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
247 #if ENABLE(Condition1)
248 JSC::EncodedJSValue jsTestObjConditionalAttr1(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
249 void setJSTestObjConditionalAttr1(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
250 #endif
251 #if ENABLE(Condition1) && ENABLE(Condition2)
252 JSC::EncodedJSValue jsTestObjConditionalAttr2(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
253 void setJSTestObjConditionalAttr2(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
254 #endif
255 #if ENABLE(Condition1) || ENABLE(Condition2)
256 JSC::EncodedJSValue jsTestObjConditionalAttr3(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
257 void setJSTestObjConditionalAttr3(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
258 #endif
259 #if ENABLE(Condition1)
260 JSC::EncodedJSValue jsTestObjConditionalAttr4Constructor(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
261 void setJSTestObjConditionalAttr4Constructor(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
262 #endif
263 #if ENABLE(Condition1) && ENABLE(Condition2)
264 JSC::EncodedJSValue jsTestObjConditionalAttr5Constructor(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
265 void setJSTestObjConditionalAttr5Constructor(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
266 #endif
267 #if ENABLE(Condition1) || ENABLE(Condition2)
268 JSC::EncodedJSValue jsTestObjConditionalAttr6Constructor(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
269 void setJSTestObjConditionalAttr6Constructor(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
270 #endif
271 JSC::EncodedJSValue jsTestObjCachedAttribute1(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
272 JSC::EncodedJSValue jsTestObjCachedAttribute2(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
273 JSC::EncodedJSValue jsTestObjAnyAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
274 void setJSTestObjAnyAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
275 JSC::EncodedJSValue jsTestObjContentDocument(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
276 JSC::EncodedJSValue jsTestObjMutablePoint(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
277 void setJSTestObjMutablePoint(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
278 JSC::EncodedJSValue jsTestObjImmutablePoint(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
279 void setJSTestObjImmutablePoint(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
280 JSC::EncodedJSValue jsTestObjStrawberry(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
281 void setJSTestObjStrawberry(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
282 JSC::EncodedJSValue jsTestObjStrictFloat(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
283 void setJSTestObjStrictFloat(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
284 JSC::EncodedJSValue jsTestObjDescription(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
285 JSC::EncodedJSValue jsTestObjId(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
286 void setJSTestObjId(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
287 JSC::EncodedJSValue jsTestObjHash(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
288 JSC::EncodedJSValue jsTestObjReplaceableAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
289 void setJSTestObjReplaceableAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
290 JSC::EncodedJSValue jsTestObjNullableDoubleAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
291 JSC::EncodedJSValue jsTestObjNullableLongAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
292 JSC::EncodedJSValue jsTestObjNullableBooleanAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
293 JSC::EncodedJSValue jsTestObjNullableStringAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
294 JSC::EncodedJSValue jsTestObjNullableLongSettableAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
295 void setJSTestObjNullableLongSettableAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
296 JSC::EncodedJSValue jsTestObjNullableStringValue(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
297 void setJSTestObjNullableStringValue(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
298 JSC::EncodedJSValue jsTestObjAttribute(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
299 JSC::EncodedJSValue jsTestObjAttributeWithReservedEnumType(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
300 void setJSTestObjAttributeWithReservedEnumType(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::EncodedJSValue);
301 JSC::EncodedJSValue jsTestObjConstructor(JSC::ExecState*, JSC::JSObject*, JSC::EncodedJSValue, JSC::PropertyName);
302
303 class JSTestObjPrototype : public JSC::JSNonFinalObject {
304 public:
305     typedef JSC::JSNonFinalObject Base;
306     static JSTestObjPrototype* create(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::Structure* structure)
307     {
308         JSTestObjPrototype* ptr = new (NotNull, JSC::allocateCell<JSTestObjPrototype>(vm.heap)) JSTestObjPrototype(vm, globalObject, structure);
309         ptr->finishCreation(vm);
310         return ptr;
311     }
312
313     DECLARE_INFO;
314     static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
315     {
316         return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
317     }
318
319 private:
320     JSTestObjPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
321         : JSC::JSNonFinalObject(vm, structure)
322     {
323     }
324
325     void finishCreation(JSC::VM&);
326 };
327
328 class JSTestObjConstructor : public DOMConstructorObject {
329 private:
330     JSTestObjConstructor(JSC::Structure*, JSDOMGlobalObject*);
331     void finishCreation(JSC::VM&, JSDOMGlobalObject*);
332
333 public:
334     typedef DOMConstructorObject Base;
335     static JSTestObjConstructor* create(JSC::VM& vm, JSC::Structure* structure, JSDOMGlobalObject* globalObject)
336     {
337         JSTestObjConstructor* ptr = new (NotNull, JSC::allocateCell<JSTestObjConstructor>(vm.heap)) JSTestObjConstructor(structure, globalObject);
338         ptr->finishCreation(vm, globalObject);
339         return ptr;
340     }
341
342     DECLARE_INFO;
343     static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
344     {
345         return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
346     }
347 protected:
348     static JSC::EncodedJSValue JSC_HOST_CALL constructJSTestObj(JSC::ExecState*);
349     static JSC::ConstructType getConstructData(JSC::JSCell*, JSC::ConstructData&);
350 };
351
352 /* Hash table */
353
354 static const struct CompactHashIndex JSTestObjTableIndex[17] = {
355     { 5, -1 },
356     { -1, -1 },
357     { -1, -1 },
358     { -1, -1 },
359     { -1, -1 },
360     { -1, -1 },
361     { 4, -1 },
362     { -1, -1 },
363     { -1, -1 },
364     { 2, -1 },
365     { 0, 16 },
366     { -1, -1 },
367     { 1, -1 },
368     { -1, -1 },
369     { -1, -1 },
370     { -1, -1 },
371     { 3, -1 },
372 };
373
374
375 static const HashTableValue JSTestObjTableValues[] =
376 {
377     { "TestSubObjEnabledBySetting", DontEnum, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjTestSubObjEnabledBySettingConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjTestSubObjEnabledBySettingConstructor) },
378     { "customAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCustomAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjCustomAttr) },
379 #if ENABLE(Condition1)
380     { "conditionalAttr4", DontEnum, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr4Constructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr4Constructor) },
381 #else
382     { 0, 0, NoIntrinsic, 0, 0 },
383 #endif
384 #if ENABLE(Condition1) && ENABLE(Condition2)
385     { "conditionalAttr5", DontEnum, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr5Constructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr5Constructor) },
386 #else
387     { 0, 0, NoIntrinsic, 0, 0 },
388 #endif
389 #if ENABLE(Condition1) || ENABLE(Condition2)
390     { "conditionalAttr6", DontEnum, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr6Constructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr6Constructor) },
391 #else
392     { 0, 0, NoIntrinsic, 0, 0 },
393 #endif
394     { "contentDocument", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjContentDocument), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
395 };
396
397 static const HashTable JSTestObjTable = { 6, 15, true, JSTestObjTableValues, 0, JSTestObjTableIndex };
398 /* Hash table for constructor */
399
400 static const HashTableValue JSTestObjConstructorTableValues[] =
401 {
402 #if ENABLE(Condition1)
403     { "CONDITIONAL_CONST", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(0), (intptr_t) (0) },
404 #else
405     { 0, 0, NoIntrinsic, 0, 0 },
406 #endif
407     { "CONST_VALUE_0", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(0), (intptr_t) (0) },
408     { "CONST_VALUE_1", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(1), (intptr_t) (0) },
409     { "CONST_VALUE_2", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(2), (intptr_t) (0) },
410     { "CONST_VALUE_4", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(4), (intptr_t) (0) },
411     { "CONST_VALUE_8", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(8), (intptr_t) (0) },
412     { "CONST_VALUE_9", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(-1), (intptr_t) (0) },
413     { "CONST_VALUE_11", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(0xffffffff), (intptr_t) (0) },
414     { "CONST_VALUE_12", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(0x01), (intptr_t) (0) },
415     { "CONST_VALUE_13", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(0X20), (intptr_t) (0) },
416     { "CONST_VALUE_14", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(0x1abc), (intptr_t) (0) },
417     { "CONST_JAVASCRIPT", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(15), (intptr_t) (0) },
418     { "readonly", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(0), (intptr_t) (0) },
419     { "staticReadOnlyLongAttr", DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConstructorStaticReadOnlyLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
420     { "staticStringAttr", DontDelete, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConstructorStaticStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConstructorStaticStringAttr) },
421     { "TestSubObj", DontDelete | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConstructorTestSubObj), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
422     { "staticMethodWithCallbackAndOptionalArg", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjConstructorFunctionStaticMethodWithCallbackAndOptionalArg), (intptr_t) (0) },
423     { "staticMethodWithCallbackArg", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjConstructorFunctionStaticMethodWithCallbackArg), (intptr_t) (1) },
424     { "classMethod", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjConstructorFunctionClassMethod), (intptr_t) (0) },
425     { "classMethodWithOptional", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjConstructorFunctionClassMethodWithOptional), (intptr_t) (0) },
426     { "classMethod2", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjConstructorFunctionClassMethod2), (intptr_t) (1) },
427 #if ENABLE(Condition1)
428     { "overloadedMethod1", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjConstructorFunctionOverloadedMethod1), (intptr_t) (1) },
429 #else
430     { 0, 0, NoIntrinsic, 0, 0 },
431 #endif
432 };
433
434
435 #if ENABLE(Condition1)
436 COMPILE_ASSERT(0 == TestObj::CONDITIONAL_CONST, TestObjEnumCONDITIONAL_CONSTIsWrongUseDoNotCheckConstants);
437 #endif
438 COMPILE_ASSERT(0 == TestObj::CONST_VALUE_0, TestObjEnumCONST_VALUE_0IsWrongUseDoNotCheckConstants);
439 COMPILE_ASSERT(1 == TestObj::CONST_VALUE_1, TestObjEnumCONST_VALUE_1IsWrongUseDoNotCheckConstants);
440 COMPILE_ASSERT(2 == TestObj::CONST_VALUE_2, TestObjEnumCONST_VALUE_2IsWrongUseDoNotCheckConstants);
441 COMPILE_ASSERT(4 == TestObj::CONST_VALUE_4, TestObjEnumCONST_VALUE_4IsWrongUseDoNotCheckConstants);
442 COMPILE_ASSERT(8 == TestObj::CONST_VALUE_8, TestObjEnumCONST_VALUE_8IsWrongUseDoNotCheckConstants);
443 COMPILE_ASSERT(-1 == TestObj::CONST_VALUE_9, TestObjEnumCONST_VALUE_9IsWrongUseDoNotCheckConstants);
444 COMPILE_ASSERT(0xffffffff == TestObj::CONST_VALUE_11, TestObjEnumCONST_VALUE_11IsWrongUseDoNotCheckConstants);
445 COMPILE_ASSERT(0x01 == TestObj::CONST_VALUE_12, TestObjEnumCONST_VALUE_12IsWrongUseDoNotCheckConstants);
446 COMPILE_ASSERT(0X20 == TestObj::CONST_VALUE_13, TestObjEnumCONST_VALUE_13IsWrongUseDoNotCheckConstants);
447 COMPILE_ASSERT(0x1abc == TestObj::CONST_VALUE_14, TestObjEnumCONST_VALUE_14IsWrongUseDoNotCheckConstants);
448 COMPILE_ASSERT(15 == TestObj::CONST_IMPL, TestObjEnumCONST_IMPLIsWrongUseDoNotCheckConstants);
449 COMPILE_ASSERT(0 == TestObj::readonly, TestObjEnumreadonlyIsWrongUseDoNotCheckConstants);
450
451 EncodedJSValue JSC_HOST_CALL JSTestObjConstructor::constructJSTestObj(ExecState* exec)
452 {
453     auto* castedThis = jsCast<JSTestObjConstructor*>(exec->callee());
454     if (UNLIKELY(exec->argumentCount() < 1))
455         return throwVMError(exec, createNotEnoughArgumentsError(exec));
456     if (!exec->argument(0).isFunction())
457         return throwArgumentMustBeFunctionError(*exec, 0, "testCallback", "TestObj", nullptr);
458     RefPtr<TestCallback> testCallback = JSTestCallback::create(asObject(exec->uncheckedArgument(0)), castedThis->globalObject());
459     RefPtr<TestObj> object = TestObj::create(testCallback);
460     return JSValue::encode(asObject(toJS(exec, castedThis->globalObject(), object.get())));
461 }
462
463 const ClassInfo JSTestObjConstructor::s_info = { "TestObjectConstructor", &Base::s_info, 0, CREATE_METHOD_TABLE(JSTestObjConstructor) };
464
465 JSTestObjConstructor::JSTestObjConstructor(Structure* structure, JSDOMGlobalObject* globalObject)
466     : DOMConstructorObject(structure, globalObject)
467 {
468 }
469
470 void JSTestObjConstructor::finishCreation(VM& vm, JSDOMGlobalObject* globalObject)
471 {
472     Base::finishCreation(vm);
473     ASSERT(inherits(info()));
474     putDirect(vm, vm.propertyNames->prototype, JSTestObj::getPrototype(vm, globalObject), DontDelete | ReadOnly | DontEnum);
475     putDirect(vm, vm.propertyNames->name, jsNontrivialString(&vm, String(ASCIILiteral("TestObject"))), ReadOnly | DontEnum);
476     putDirect(vm, vm.propertyNames->length, jsNumber(1), ReadOnly | DontEnum);
477     reifyStaticProperties(vm, JSTestObjConstructorTableValues, *this);
478 }
479
480 ConstructType JSTestObjConstructor::getConstructData(JSCell*, ConstructData& constructData)
481 {
482     constructData.native.function = constructJSTestObj;
483     return ConstructTypeHost;
484 }
485
486 /* Hash table for prototype */
487
488 static const HashTableValue JSTestObjPrototypeTableValues[] =
489 {
490     { "constructor", DontEnum | ReadOnly, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
491     { "readOnlyLongAttr", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
492     { "readOnlyStringAttr", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
493     { "readOnlyTestObjAttr", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReadOnlyTestObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
494     { "enumAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjEnumAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjEnumAttr) },
495     { "byteAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjByteAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjByteAttr) },
496     { "octetAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjOctetAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjOctetAttr) },
497     { "shortAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjShortAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjShortAttr) },
498     { "unsignedShortAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUnsignedShortAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUnsignedShortAttr) },
499     { "longAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjLongAttr) },
500     { "longLongAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjLongLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjLongLongAttr) },
501     { "unsignedLongLongAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjUnsignedLongLongAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjUnsignedLongLongAttr) },
502     { "stringAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttr) },
503     { "testObjAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjTestObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjTestObjAttr) },
504     { "XMLObjAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjXMLObjAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjXMLObjAttr) },
505     { "create", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCreate), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjCreate) },
506     { "reflectedStringAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedStringAttr) },
507     { "reflectedIntegralAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedIntegralAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedIntegralAttr) },
508     { "reflectedUnsignedIntegralAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedUnsignedIntegralAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedUnsignedIntegralAttr) },
509     { "reflectedBooleanAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedBooleanAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedBooleanAttr) },
510     { "reflectedURLAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedURLAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedURLAttr) },
511     { "reflectedStringAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedStringAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedStringAttr) },
512     { "reflectedCustomIntegralAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomIntegralAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedCustomIntegralAttr) },
513     { "reflectedCustomBooleanAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomBooleanAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedCustomBooleanAttr) },
514     { "reflectedCustomURLAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReflectedCustomURLAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReflectedCustomURLAttr) },
515     { "typedArrayAttr", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjTypedArrayAttr), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjTypedArrayAttr) },
516     { "attrWithGetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttrWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAttrWithGetterException) },
517     { "attrWithSetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAttrWithSetterException) },
518     { "stringAttrWithGetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttrWithGetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttrWithGetterException) },
519     { "stringAttrWithSetterException", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStringAttrWithSetterException), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStringAttrWithSetterException) },
520     { "onfoo", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjOnfoo), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjOnfoo) },
521     { "withScriptStateAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptStateAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptStateAttribute) },
522     { "withScriptExecutionContextAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAttribute) },
523     { "withScriptStateAttributeRaises", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptStateAttributeRaises), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptStateAttributeRaises) },
524     { "withScriptExecutionContextAttributeRaises", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAttributeRaises), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAttributeRaises) },
525     { "withScriptExecutionContextAndScriptStateAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAndScriptStateAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAndScriptStateAttribute) },
526     { "withScriptExecutionContextAndScriptStateAttributeRaises", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises) },
527     { "withScriptExecutionContextAndScriptStateWithSpacesAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute) },
528     { "withScriptArgumentsAndCallStackAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjWithScriptArgumentsAndCallStackAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjWithScriptArgumentsAndCallStackAttribute) },
529 #if ENABLE(Condition1)
530     { "conditionalAttr1", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr1) },
531 #else
532     { 0, 0, NoIntrinsic, 0, 0 },
533 #endif
534 #if ENABLE(Condition1) && ENABLE(Condition2)
535     { "conditionalAttr2", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr2) },
536 #else
537     { 0, 0, NoIntrinsic, 0, 0 },
538 #endif
539 #if ENABLE(Condition1) || ENABLE(Condition2)
540     { "conditionalAttr3", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjConditionalAttr3), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjConditionalAttr3) },
541 #else
542     { 0, 0, NoIntrinsic, 0, 0 },
543 #endif
544     { "cachedAttribute1", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCachedAttribute1), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
545     { "cachedAttribute2", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjCachedAttribute2), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
546     { "anyAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAnyAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAnyAttribute) },
547     { "mutablePoint", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjMutablePoint), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjMutablePoint) },
548     { "immutablePoint", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjImmutablePoint), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjImmutablePoint) },
549     { "strawberry", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStrawberry), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStrawberry) },
550     { "strictFloat", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjStrictFloat), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjStrictFloat) },
551     { "description", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjDescription), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
552     { "id", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjId), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjId) },
553     { "hash", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjHash), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
554     { "replaceableAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjReplaceableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjReplaceableAttribute) },
555     { "nullableDoubleAttribute", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableDoubleAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
556     { "nullableLongAttribute", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableLongAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
557     { "nullableBooleanAttribute", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableBooleanAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
558     { "nullableStringAttribute", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableStringAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
559     { "nullableLongSettableAttribute", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableLongSettableAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableLongSettableAttribute) },
560     { "nullableStringValue", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjNullableStringValue), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjNullableStringValue) },
561     { "attribute", DontDelete | ReadOnly | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttribute), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) },
562     { "attributeWithReservedEnumType", DontDelete | CustomAccessor, NoIntrinsic, (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsTestObjAttributeWithReservedEnumType), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSTestObjAttributeWithReservedEnumType) },
563 #if ENABLE(Condition1)
564     { "CONDITIONAL_CONST", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(0), (intptr_t) (0) },
565 #else
566     { 0, 0, NoIntrinsic, 0, 0 },
567 #endif
568     { "CONST_VALUE_0", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(0), (intptr_t) (0) },
569     { "CONST_VALUE_1", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(1), (intptr_t) (0) },
570     { "CONST_VALUE_2", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(2), (intptr_t) (0) },
571     { "CONST_VALUE_4", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(4), (intptr_t) (0) },
572     { "CONST_VALUE_8", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(8), (intptr_t) (0) },
573     { "CONST_VALUE_9", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(-1), (intptr_t) (0) },
574     { "CONST_VALUE_11", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(0xffffffff), (intptr_t) (0) },
575     { "CONST_VALUE_12", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(0x01), (intptr_t) (0) },
576     { "CONST_VALUE_13", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(0X20), (intptr_t) (0) },
577     { "CONST_VALUE_14", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(0x1abc), (intptr_t) (0) },
578     { "CONST_JAVASCRIPT", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(15), (intptr_t) (0) },
579     { "readonly", DontDelete | ReadOnly | ConstantInteger, NoIntrinsic, (intptr_t)(0), (intptr_t) (0) },
580     { "voidMethod", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionVoidMethod), (intptr_t) (0) },
581     { "voidMethodWithArgs", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionVoidMethodWithArgs), (intptr_t) (3) },
582     { "byteMethod", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionByteMethod), (intptr_t) (0) },
583     { "byteMethodWithArgs", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionByteMethodWithArgs), (intptr_t) (3) },
584     { "octetMethod", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionOctetMethod), (intptr_t) (0) },
585     { "octetMethodWithArgs", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionOctetMethodWithArgs), (intptr_t) (3) },
586     { "longMethod", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionLongMethod), (intptr_t) (0) },
587     { "longMethodWithArgs", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionLongMethodWithArgs), (intptr_t) (3) },
588     { "objMethod", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionObjMethod), (intptr_t) (0) },
589     { "objMethodWithArgs", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionObjMethodWithArgs), (intptr_t) (3) },
590     { "methodWithSequenceArg", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithSequenceArg), (intptr_t) (1) },
591     { "methodReturningSequence", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodReturningSequence), (intptr_t) (1) },
592     { "methodWithEnumArg", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithEnumArg), (intptr_t) (1) },
593     { "methodThatRequiresAllArgsAndThrows", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows), (intptr_t) (2) },
594     { "serializedValue", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionSerializedValue), (intptr_t) (1) },
595     { "optionsObject", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionOptionsObject), (intptr_t) (1) },
596     { "methodWithException", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithException), (intptr_t) (0) },
597     { "customMethod", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionCustomMethod), (intptr_t) (0) },
598     { "customMethodWithArgs", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionCustomMethodWithArgs), (intptr_t) (3) },
599     { "customBindingMethod", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionCustomBindingMethod), (intptr_t) (0) },
600     { "customBindingMethodWithArgs", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionCustomBindingMethodWithArgs), (intptr_t) (3) },
601     { "addEventListener", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionAddEventListener), (intptr_t) (2) },
602     { "removeEventListener", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionRemoveEventListener), (intptr_t) (2) },
603     { "withScriptStateVoid", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionWithScriptStateVoid), (intptr_t) (0) },
604     { "withScriptStateObj", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionWithScriptStateObj), (intptr_t) (0) },
605     { "withScriptStateVoidException", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionWithScriptStateVoidException), (intptr_t) (0) },
606     { "withScriptStateObjException", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionWithScriptStateObjException), (intptr_t) (0) },
607     { "withScriptExecutionContext", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionWithScriptExecutionContext), (intptr_t) (0) },
608     { "withScriptExecutionContextAndScriptState", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptState), (intptr_t) (0) },
609     { "withScriptExecutionContextAndScriptStateObjException", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateObjException), (intptr_t) (0) },
610     { "withScriptExecutionContextAndScriptStateWithSpaces", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateWithSpaces), (intptr_t) (0) },
611     { "withScriptArgumentsAndCallStack", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStack), (intptr_t) (0) },
612     { "methodWithOptionalArg", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithOptionalArg), (intptr_t) (0) },
613     { "methodWithNonOptionalArgAndOptionalArg", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg), (intptr_t) (1) },
614     { "methodWithNonOptionalArgAndTwoOptionalArgs", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs), (intptr_t) (1) },
615     { "methodWithOptionalString", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithOptionalString), (intptr_t) (0) },
616     { "methodWithOptionalStringIsUndefined", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefined), (intptr_t) (0) },
617     { "methodWithOptionalStringIsNullString", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullString), (intptr_t) (0) },
618     { "methodWithCallbackArg", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithCallbackArg), (intptr_t) (1) },
619     { "methodWithNonCallbackArgAndCallbackArg", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg), (intptr_t) (2) },
620     { "methodWithCallbackAndOptionalArg", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg), (intptr_t) (0) },
621 #if ENABLE(Condition1)
622     { "conditionalMethod1", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionConditionalMethod1), (intptr_t) (0) },
623 #else
624     { 0, 0, NoIntrinsic, 0, 0 },
625 #endif
626 #if ENABLE(Condition1) && ENABLE(Condition2)
627     { "conditionalMethod2", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionConditionalMethod2), (intptr_t) (0) },
628 #else
629     { 0, 0, NoIntrinsic, 0, 0 },
630 #endif
631 #if ENABLE(Condition1) || ENABLE(Condition2)
632     { "conditionalMethod3", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionConditionalMethod3), (intptr_t) (0) },
633 #else
634     { 0, 0, NoIntrinsic, 0, 0 },
635 #endif
636     { "overloadedMethod", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionOverloadedMethod), (intptr_t) (2) },
637     { "overloadedMethodWithOptionalParameter", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionOverloadedMethodWithOptionalParameter), (intptr_t) (1) },
638     { "classMethodWithClamp", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionClassMethodWithClamp), (intptr_t) (2) },
639     { "methodWithUnsignedLongSequence", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithUnsignedLongSequence), (intptr_t) (1) },
640     { "stringArrayFunction", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionStringArrayFunction), (intptr_t) (1) },
641     { "domStringListFunction", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionDomStringListFunction), (intptr_t) (1) },
642     { "methodWithAndWithoutNullableSequence", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithAndWithoutNullableSequence), (intptr_t) (2) },
643     { "methodWithAndWithoutNullableSequence2", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMethodWithAndWithoutNullableSequence2), (intptr_t) (2) },
644     { "getSVGDocument", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionGetSVGDocument), (intptr_t) (0) },
645     { "convert1", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionConvert1), (intptr_t) (1) },
646     { "convert2", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionConvert2), (intptr_t) (1) },
647     { "convert4", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionConvert4), (intptr_t) (1) },
648     { "convert5", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionConvert5), (intptr_t) (1) },
649     { "mutablePointFunction", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionMutablePointFunction), (intptr_t) (0) },
650     { "immutablePointFunction", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionImmutablePointFunction), (intptr_t) (0) },
651     { "orange", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionOrange), (intptr_t) (0) },
652     { "strictFunction", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionStrictFunction), (intptr_t) (3) },
653     { "strictFunctionWithSequence", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionStrictFunctionWithSequence), (intptr_t) (2) },
654     { "strictFunctionWithArray", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionStrictFunctionWithArray), (intptr_t) (2) },
655     { "variadicStringMethod", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionVariadicStringMethod), (intptr_t) (2) },
656     { "variadicDoubleMethod", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionVariadicDoubleMethod), (intptr_t) (2) },
657     { "variadicNodeMethod", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionVariadicNodeMethod), (intptr_t) (2) },
658     { "any", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionAny), (intptr_t) (2) },
659     { "testPromiseFunction", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionTestPromiseFunction), (intptr_t) (0) },
660     { "testPromiseFunctionWithFloatArgument", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionTestPromiseFunctionWithFloatArgument), (intptr_t) (1) },
661     { "testPromiseFunctionWithException", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionTestPromiseFunctionWithException), (intptr_t) (0) },
662     { "testPromiseFunctionWithOptionalIntArgument", JSC::Function, NoIntrinsic, (intptr_t)static_cast<NativeFunction>(jsTestObjPrototypeFunctionTestPromiseFunctionWithOptionalIntArgument), (intptr_t) (0) },
663 };
664
665 const ClassInfo JSTestObjPrototype::s_info = { "TestObjectPrototype", &Base::s_info, 0, CREATE_METHOD_TABLE(JSTestObjPrototype) };
666
667 void JSTestObjPrototype::finishCreation(VM& vm)
668 {
669     Base::finishCreation(vm);
670     reifyStaticProperties(vm, JSTestObjPrototypeTableValues, *this);
671 }
672
673 const ClassInfo JSTestObj::s_info = { "TestObject", &Base::s_info, &JSTestObjTable, CREATE_METHOD_TABLE(JSTestObj) };
674
675 JSTestObj::JSTestObj(Structure* structure, JSDOMGlobalObject* globalObject, Ref<TestObj>&& impl)
676     : JSDOMWrapper(structure, globalObject)
677     , m_impl(&impl.leakRef())
678 {
679 }
680
681 JSObject* JSTestObj::createPrototype(VM& vm, JSGlobalObject* globalObject)
682 {
683     return JSTestObjPrototype::create(vm, globalObject, JSTestObjPrototype::createStructure(vm, globalObject, globalObject->objectPrototype()));
684 }
685
686 JSObject* JSTestObj::getPrototype(VM& vm, JSGlobalObject* globalObject)
687 {
688     return getDOMPrototype<JSTestObj>(vm, globalObject);
689 }
690
691 void JSTestObj::destroy(JSC::JSCell* cell)
692 {
693     JSTestObj* thisObject = static_cast<JSTestObj*>(cell);
694     thisObject->JSTestObj::~JSTestObj();
695 }
696
697 JSTestObj::~JSTestObj()
698 {
699     releaseImpl();
700 }
701
702 bool JSTestObj::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
703 {
704     auto* thisObject = jsCast<JSTestObj*>(object);
705     ASSERT_GC_OBJECT_INHERITS(thisObject, info());
706     if (getStaticValueSlot<JSTestObj, Base>(exec, JSTestObjTable, thisObject, propertyName, slot))
707         return true;
708     return false;
709 }
710
711 EncodedJSValue jsTestObjReadOnlyLongAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
712 {
713     UNUSED_PARAM(exec);
714     UNUSED_PARAM(slotBase);
715     UNUSED_PARAM(thisValue);
716     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
717     if (UNLIKELY(!castedThis)) {
718         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
719             return reportDeprecatedGetterError(*exec, "TestObj", "readOnlyLongAttr");
720         return throwGetterTypeError(*exec, "TestObj", "readOnlyLongAttr");
721     }
722     auto& impl = castedThis->impl();
723     JSValue result = jsNumber(impl.readOnlyLongAttr());
724     return JSValue::encode(result);
725 }
726
727
728 EncodedJSValue jsTestObjReadOnlyStringAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
729 {
730     UNUSED_PARAM(exec);
731     UNUSED_PARAM(slotBase);
732     UNUSED_PARAM(thisValue);
733     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
734     if (UNLIKELY(!castedThis)) {
735         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
736             return reportDeprecatedGetterError(*exec, "TestObj", "readOnlyStringAttr");
737         return throwGetterTypeError(*exec, "TestObj", "readOnlyStringAttr");
738     }
739     auto& impl = castedThis->impl();
740     JSValue result = jsStringWithCache(exec, impl.readOnlyStringAttr());
741     return JSValue::encode(result);
742 }
743
744
745 EncodedJSValue jsTestObjReadOnlyTestObjAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
746 {
747     UNUSED_PARAM(exec);
748     UNUSED_PARAM(slotBase);
749     UNUSED_PARAM(thisValue);
750     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
751     if (UNLIKELY(!castedThis)) {
752         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
753             return reportDeprecatedGetterError(*exec, "TestObj", "readOnlyTestObjAttr");
754         return throwGetterTypeError(*exec, "TestObj", "readOnlyTestObjAttr");
755     }
756     auto& impl = castedThis->impl();
757     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.readOnlyTestObjAttr()));
758     return JSValue::encode(result);
759 }
760
761
762 EncodedJSValue jsTestObjConstructorStaticReadOnlyLongAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
763 {
764     UNUSED_PARAM(exec);
765     UNUSED_PARAM(slotBase);
766     UNUSED_PARAM(thisValue);
767     JSValue result = jsNumber(TestObj::staticReadOnlyLongAttr());
768     return JSValue::encode(result);
769 }
770
771
772 EncodedJSValue jsTestObjConstructorStaticStringAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
773 {
774     UNUSED_PARAM(exec);
775     UNUSED_PARAM(slotBase);
776     UNUSED_PARAM(thisValue);
777     JSValue result = jsStringWithCache(exec, TestObj::staticStringAttr());
778     return JSValue::encode(result);
779 }
780
781
782 EncodedJSValue jsTestObjConstructorTestSubObj(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
783 {
784     UNUSED_PARAM(exec);
785     UNUSED_PARAM(slotBase);
786     UNUSED_PARAM(thisValue);
787     auto* castedThis = jsCast<JSTestObj*>(slotBase);
788     return JSValue::encode(JSTestSubObj::getConstructor(exec->vm(), castedThis->globalObject()));
789 }
790
791
792 EncodedJSValue jsTestObjTestSubObjEnabledBySettingConstructor(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
793 {
794     UNUSED_PARAM(exec);
795     UNUSED_PARAM(slotBase);
796     UNUSED_PARAM(thisValue);
797     auto* castedThis = jsCast<JSTestObj*>(slotBase);
798     if (!castedThis->impl().frame())
799         return JSValue::encode(jsUndefined());
800     Settings& settings = castedThis->impl().frame()->settings();
801     if (!settings.testSettingEnabled())
802         return JSValue::encode(jsUndefined());
803     return JSValue::encode(JSTestSubObj::getConstructor(exec->vm(), castedThis->globalObject()));
804 }
805
806
807 EncodedJSValue jsTestObjEnumAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
808 {
809     UNUSED_PARAM(exec);
810     UNUSED_PARAM(slotBase);
811     UNUSED_PARAM(thisValue);
812     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
813     if (UNLIKELY(!castedThis)) {
814         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
815             return reportDeprecatedGetterError(*exec, "TestObj", "enumAttr");
816         return throwGetterTypeError(*exec, "TestObj", "enumAttr");
817     }
818     auto& impl = castedThis->impl();
819     JSValue result = jsStringWithCache(exec, impl.enumAttr());
820     return JSValue::encode(result);
821 }
822
823
824 EncodedJSValue jsTestObjByteAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
825 {
826     UNUSED_PARAM(exec);
827     UNUSED_PARAM(slotBase);
828     UNUSED_PARAM(thisValue);
829     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
830     if (UNLIKELY(!castedThis)) {
831         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
832             return reportDeprecatedGetterError(*exec, "TestObj", "byteAttr");
833         return throwGetterTypeError(*exec, "TestObj", "byteAttr");
834     }
835     auto& impl = castedThis->impl();
836     JSValue result = jsNumber(impl.byteAttr());
837     return JSValue::encode(result);
838 }
839
840
841 EncodedJSValue jsTestObjOctetAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
842 {
843     UNUSED_PARAM(exec);
844     UNUSED_PARAM(slotBase);
845     UNUSED_PARAM(thisValue);
846     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
847     if (UNLIKELY(!castedThis)) {
848         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
849             return reportDeprecatedGetterError(*exec, "TestObj", "octetAttr");
850         return throwGetterTypeError(*exec, "TestObj", "octetAttr");
851     }
852     auto& impl = castedThis->impl();
853     JSValue result = jsNumber(impl.octetAttr());
854     return JSValue::encode(result);
855 }
856
857
858 EncodedJSValue jsTestObjShortAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
859 {
860     UNUSED_PARAM(exec);
861     UNUSED_PARAM(slotBase);
862     UNUSED_PARAM(thisValue);
863     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
864     if (UNLIKELY(!castedThis)) {
865         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
866             return reportDeprecatedGetterError(*exec, "TestObj", "shortAttr");
867         return throwGetterTypeError(*exec, "TestObj", "shortAttr");
868     }
869     auto& impl = castedThis->impl();
870     JSValue result = jsNumber(impl.shortAttr());
871     return JSValue::encode(result);
872 }
873
874
875 EncodedJSValue jsTestObjUnsignedShortAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
876 {
877     UNUSED_PARAM(exec);
878     UNUSED_PARAM(slotBase);
879     UNUSED_PARAM(thisValue);
880     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
881     if (UNLIKELY(!castedThis)) {
882         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
883             return reportDeprecatedGetterError(*exec, "TestObj", "unsignedShortAttr");
884         return throwGetterTypeError(*exec, "TestObj", "unsignedShortAttr");
885     }
886     auto& impl = castedThis->impl();
887     JSValue result = jsNumber(impl.unsignedShortAttr());
888     return JSValue::encode(result);
889 }
890
891
892 EncodedJSValue jsTestObjLongAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
893 {
894     UNUSED_PARAM(exec);
895     UNUSED_PARAM(slotBase);
896     UNUSED_PARAM(thisValue);
897     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
898     if (UNLIKELY(!castedThis)) {
899         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
900             return reportDeprecatedGetterError(*exec, "TestObj", "longAttr");
901         return throwGetterTypeError(*exec, "TestObj", "longAttr");
902     }
903     auto& impl = castedThis->impl();
904     JSValue result = jsNumber(impl.longAttr());
905     return JSValue::encode(result);
906 }
907
908
909 EncodedJSValue jsTestObjLongLongAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
910 {
911     UNUSED_PARAM(exec);
912     UNUSED_PARAM(slotBase);
913     UNUSED_PARAM(thisValue);
914     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
915     if (UNLIKELY(!castedThis)) {
916         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
917             return reportDeprecatedGetterError(*exec, "TestObj", "longLongAttr");
918         return throwGetterTypeError(*exec, "TestObj", "longLongAttr");
919     }
920     auto& impl = castedThis->impl();
921     JSValue result = jsNumber(impl.longLongAttr());
922     return JSValue::encode(result);
923 }
924
925
926 EncodedJSValue jsTestObjUnsignedLongLongAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
927 {
928     UNUSED_PARAM(exec);
929     UNUSED_PARAM(slotBase);
930     UNUSED_PARAM(thisValue);
931     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
932     if (UNLIKELY(!castedThis)) {
933         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
934             return reportDeprecatedGetterError(*exec, "TestObj", "unsignedLongLongAttr");
935         return throwGetterTypeError(*exec, "TestObj", "unsignedLongLongAttr");
936     }
937     auto& impl = castedThis->impl();
938     JSValue result = jsNumber(impl.unsignedLongLongAttr());
939     return JSValue::encode(result);
940 }
941
942
943 EncodedJSValue jsTestObjStringAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
944 {
945     UNUSED_PARAM(exec);
946     UNUSED_PARAM(slotBase);
947     UNUSED_PARAM(thisValue);
948     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
949     if (UNLIKELY(!castedThis)) {
950         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
951             return reportDeprecatedGetterError(*exec, "TestObj", "stringAttr");
952         return throwGetterTypeError(*exec, "TestObj", "stringAttr");
953     }
954     auto& impl = castedThis->impl();
955     JSValue result = jsStringWithCache(exec, impl.stringAttr());
956     return JSValue::encode(result);
957 }
958
959
960 EncodedJSValue jsTestObjTestObjAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
961 {
962     UNUSED_PARAM(exec);
963     UNUSED_PARAM(slotBase);
964     UNUSED_PARAM(thisValue);
965     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
966     if (UNLIKELY(!castedThis)) {
967         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
968             return reportDeprecatedGetterError(*exec, "TestObj", "testObjAttr");
969         return throwGetterTypeError(*exec, "TestObj", "testObjAttr");
970     }
971     auto& impl = castedThis->impl();
972     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.testObjAttr()));
973     return JSValue::encode(result);
974 }
975
976
977 EncodedJSValue jsTestObjXMLObjAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
978 {
979     UNUSED_PARAM(exec);
980     UNUSED_PARAM(slotBase);
981     UNUSED_PARAM(thisValue);
982     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
983     if (UNLIKELY(!castedThis)) {
984         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
985             return reportDeprecatedGetterError(*exec, "TestObj", "XMLObjAttr");
986         return throwGetterTypeError(*exec, "TestObj", "XMLObjAttr");
987     }
988     auto& impl = castedThis->impl();
989     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.xmlObjAttr()));
990     return JSValue::encode(result);
991 }
992
993
994 EncodedJSValue jsTestObjCreate(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
995 {
996     UNUSED_PARAM(exec);
997     UNUSED_PARAM(slotBase);
998     UNUSED_PARAM(thisValue);
999     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1000     if (UNLIKELY(!castedThis)) {
1001         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1002             return reportDeprecatedGetterError(*exec, "TestObj", "create");
1003         return throwGetterTypeError(*exec, "TestObj", "create");
1004     }
1005     auto& impl = castedThis->impl();
1006     JSValue result = jsBoolean(impl.isCreate());
1007     return JSValue::encode(result);
1008 }
1009
1010
1011 EncodedJSValue jsTestObjReflectedStringAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1012 {
1013     UNUSED_PARAM(exec);
1014     UNUSED_PARAM(slotBase);
1015     UNUSED_PARAM(thisValue);
1016     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1017     if (UNLIKELY(!castedThis)) {
1018         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1019             return reportDeprecatedGetterError(*exec, "TestObj", "reflectedStringAttr");
1020         return throwGetterTypeError(*exec, "TestObj", "reflectedStringAttr");
1021     }
1022     auto& impl = castedThis->impl();
1023     JSValue result = jsStringWithCache(exec, impl.fastGetAttribute(WebCore::HTMLNames::reflectedstringattrAttr));
1024     return JSValue::encode(result);
1025 }
1026
1027
1028 EncodedJSValue jsTestObjReflectedIntegralAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1029 {
1030     UNUSED_PARAM(exec);
1031     UNUSED_PARAM(slotBase);
1032     UNUSED_PARAM(thisValue);
1033     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1034     if (UNLIKELY(!castedThis)) {
1035         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1036             return reportDeprecatedGetterError(*exec, "TestObj", "reflectedIntegralAttr");
1037         return throwGetterTypeError(*exec, "TestObj", "reflectedIntegralAttr");
1038     }
1039     auto& impl = castedThis->impl();
1040     JSValue result = jsNumber(impl.getIntegralAttribute(WebCore::HTMLNames::reflectedintegralattrAttr));
1041     return JSValue::encode(result);
1042 }
1043
1044
1045 EncodedJSValue jsTestObjReflectedUnsignedIntegralAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1046 {
1047     UNUSED_PARAM(exec);
1048     UNUSED_PARAM(slotBase);
1049     UNUSED_PARAM(thisValue);
1050     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1051     if (UNLIKELY(!castedThis)) {
1052         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1053             return reportDeprecatedGetterError(*exec, "TestObj", "reflectedUnsignedIntegralAttr");
1054         return throwGetterTypeError(*exec, "TestObj", "reflectedUnsignedIntegralAttr");
1055     }
1056     auto& impl = castedThis->impl();
1057     JSValue result = jsNumber(std::max(0, impl.getIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr)));
1058     return JSValue::encode(result);
1059 }
1060
1061
1062 EncodedJSValue jsTestObjReflectedBooleanAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1063 {
1064     UNUSED_PARAM(exec);
1065     UNUSED_PARAM(slotBase);
1066     UNUSED_PARAM(thisValue);
1067     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1068     if (UNLIKELY(!castedThis)) {
1069         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1070             return reportDeprecatedGetterError(*exec, "TestObj", "reflectedBooleanAttr");
1071         return throwGetterTypeError(*exec, "TestObj", "reflectedBooleanAttr");
1072     }
1073     auto& impl = castedThis->impl();
1074     JSValue result = jsBoolean(impl.fastHasAttribute(WebCore::HTMLNames::reflectedbooleanattrAttr));
1075     return JSValue::encode(result);
1076 }
1077
1078
1079 EncodedJSValue jsTestObjReflectedURLAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1080 {
1081     UNUSED_PARAM(exec);
1082     UNUSED_PARAM(slotBase);
1083     UNUSED_PARAM(thisValue);
1084     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1085     if (UNLIKELY(!castedThis)) {
1086         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1087             return reportDeprecatedGetterError(*exec, "TestObj", "reflectedURLAttr");
1088         return throwGetterTypeError(*exec, "TestObj", "reflectedURLAttr");
1089     }
1090     auto& impl = castedThis->impl();
1091     JSValue result = jsStringWithCache(exec, impl.getURLAttribute(WebCore::HTMLNames::reflectedurlattrAttr));
1092     return JSValue::encode(result);
1093 }
1094
1095
1096 EncodedJSValue jsTestObjReflectedStringAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1097 {
1098     UNUSED_PARAM(exec);
1099     UNUSED_PARAM(slotBase);
1100     UNUSED_PARAM(thisValue);
1101     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1102     if (UNLIKELY(!castedThis)) {
1103         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1104             return reportDeprecatedGetterError(*exec, "TestObj", "reflectedStringAttr");
1105         return throwGetterTypeError(*exec, "TestObj", "reflectedStringAttr");
1106     }
1107     auto& impl = castedThis->impl();
1108     JSValue result = jsStringWithCache(exec, impl.fastGetAttribute(WebCore::HTMLNames::customContentStringAttrAttr));
1109     return JSValue::encode(result);
1110 }
1111
1112
1113 EncodedJSValue jsTestObjReflectedCustomIntegralAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1114 {
1115     UNUSED_PARAM(exec);
1116     UNUSED_PARAM(slotBase);
1117     UNUSED_PARAM(thisValue);
1118     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1119     if (UNLIKELY(!castedThis)) {
1120         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1121             return reportDeprecatedGetterError(*exec, "TestObj", "reflectedCustomIntegralAttr");
1122         return throwGetterTypeError(*exec, "TestObj", "reflectedCustomIntegralAttr");
1123     }
1124     auto& impl = castedThis->impl();
1125     JSValue result = jsNumber(impl.getIntegralAttribute(WebCore::HTMLNames::customContentIntegralAttrAttr));
1126     return JSValue::encode(result);
1127 }
1128
1129
1130 EncodedJSValue jsTestObjReflectedCustomBooleanAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1131 {
1132     UNUSED_PARAM(exec);
1133     UNUSED_PARAM(slotBase);
1134     UNUSED_PARAM(thisValue);
1135     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1136     if (UNLIKELY(!castedThis)) {
1137         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1138             return reportDeprecatedGetterError(*exec, "TestObj", "reflectedCustomBooleanAttr");
1139         return throwGetterTypeError(*exec, "TestObj", "reflectedCustomBooleanAttr");
1140     }
1141     auto& impl = castedThis->impl();
1142     JSValue result = jsBoolean(impl.fastHasAttribute(WebCore::HTMLNames::customContentBooleanAttrAttr));
1143     return JSValue::encode(result);
1144 }
1145
1146
1147 EncodedJSValue jsTestObjReflectedCustomURLAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1148 {
1149     UNUSED_PARAM(exec);
1150     UNUSED_PARAM(slotBase);
1151     UNUSED_PARAM(thisValue);
1152     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1153     if (UNLIKELY(!castedThis)) {
1154         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1155             return reportDeprecatedGetterError(*exec, "TestObj", "reflectedCustomURLAttr");
1156         return throwGetterTypeError(*exec, "TestObj", "reflectedCustomURLAttr");
1157     }
1158     auto& impl = castedThis->impl();
1159     JSValue result = jsStringWithCache(exec, impl.getURLAttribute(WebCore::HTMLNames::customContentURLAttrAttr));
1160     return JSValue::encode(result);
1161 }
1162
1163
1164 EncodedJSValue jsTestObjTypedArrayAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1165 {
1166     UNUSED_PARAM(exec);
1167     UNUSED_PARAM(slotBase);
1168     UNUSED_PARAM(thisValue);
1169     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1170     if (UNLIKELY(!castedThis)) {
1171         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1172             return reportDeprecatedGetterError(*exec, "TestObj", "typedArrayAttr");
1173         return throwGetterTypeError(*exec, "TestObj", "typedArrayAttr");
1174     }
1175     auto& impl = castedThis->impl();
1176     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.typedArrayAttr()));
1177     return JSValue::encode(result);
1178 }
1179
1180
1181 EncodedJSValue jsTestObjAttrWithGetterException(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1182 {
1183     UNUSED_PARAM(exec);
1184     UNUSED_PARAM(slotBase);
1185     UNUSED_PARAM(thisValue);
1186     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1187     if (UNLIKELY(!castedThis)) {
1188         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1189             return reportDeprecatedGetterError(*exec, "TestObj", "attrWithGetterException");
1190         return throwGetterTypeError(*exec, "TestObj", "attrWithGetterException");
1191     }
1192     ExceptionCode ec = 0;
1193     auto& impl = castedThis->impl();
1194     JSValue result = jsNumber(impl.attrWithGetterException(ec));
1195     setDOMException(exec, ec);
1196     return JSValue::encode(result);
1197 }
1198
1199
1200 EncodedJSValue jsTestObjAttrWithSetterException(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1201 {
1202     UNUSED_PARAM(exec);
1203     UNUSED_PARAM(slotBase);
1204     UNUSED_PARAM(thisValue);
1205     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1206     if (UNLIKELY(!castedThis)) {
1207         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1208             return reportDeprecatedGetterError(*exec, "TestObj", "attrWithSetterException");
1209         return throwGetterTypeError(*exec, "TestObj", "attrWithSetterException");
1210     }
1211     auto& impl = castedThis->impl();
1212     JSValue result = jsNumber(impl.attrWithSetterException());
1213     return JSValue::encode(result);
1214 }
1215
1216
1217 EncodedJSValue jsTestObjStringAttrWithGetterException(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1218 {
1219     UNUSED_PARAM(exec);
1220     UNUSED_PARAM(slotBase);
1221     UNUSED_PARAM(thisValue);
1222     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1223     if (UNLIKELY(!castedThis)) {
1224         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1225             return reportDeprecatedGetterError(*exec, "TestObj", "stringAttrWithGetterException");
1226         return throwGetterTypeError(*exec, "TestObj", "stringAttrWithGetterException");
1227     }
1228     ExceptionCode ec = 0;
1229     auto& impl = castedThis->impl();
1230     JSValue result = jsStringWithCache(exec, impl.stringAttrWithGetterException(ec));
1231     setDOMException(exec, ec);
1232     return JSValue::encode(result);
1233 }
1234
1235
1236 EncodedJSValue jsTestObjStringAttrWithSetterException(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1237 {
1238     UNUSED_PARAM(exec);
1239     UNUSED_PARAM(slotBase);
1240     UNUSED_PARAM(thisValue);
1241     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1242     if (UNLIKELY(!castedThis)) {
1243         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1244             return reportDeprecatedGetterError(*exec, "TestObj", "stringAttrWithSetterException");
1245         return throwGetterTypeError(*exec, "TestObj", "stringAttrWithSetterException");
1246     }
1247     auto& impl = castedThis->impl();
1248     JSValue result = jsStringWithCache(exec, impl.stringAttrWithSetterException());
1249     return JSValue::encode(result);
1250 }
1251
1252
1253 EncodedJSValue jsTestObjCustomAttr(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1254 {
1255     UNUSED_PARAM(exec);
1256     UNUSED_PARAM(slotBase);
1257     UNUSED_PARAM(thisValue);
1258     auto* castedThis = jsCast<JSTestObj*>(slotBase);
1259     return JSValue::encode(castedThis->customAttr(exec));
1260 }
1261
1262
1263 EncodedJSValue jsTestObjOnfoo(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1264 {
1265     UNUSED_PARAM(exec);
1266     UNUSED_PARAM(slotBase);
1267     UNUSED_PARAM(thisValue);
1268     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1269     if (UNLIKELY(!castedThis)) {
1270         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1271             return reportDeprecatedGetterError(*exec, "TestObj", "onfoo");
1272         return throwGetterTypeError(*exec, "TestObj", "onfoo");
1273     }
1274     UNUSED_PARAM(exec);
1275     return JSValue::encode(eventHandlerAttribute(castedThis->impl(), eventNames().fooEvent));
1276 }
1277
1278
1279 EncodedJSValue jsTestObjWithScriptStateAttribute(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1280 {
1281     UNUSED_PARAM(exec);
1282     UNUSED_PARAM(slotBase);
1283     UNUSED_PARAM(thisValue);
1284     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1285     if (UNLIKELY(!castedThis)) {
1286         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1287             return reportDeprecatedGetterError(*exec, "TestObj", "withScriptStateAttribute");
1288         return throwGetterTypeError(*exec, "TestObj", "withScriptStateAttribute");
1289     }
1290     auto& impl = castedThis->impl();
1291     JSValue result = jsNumber(impl.withScriptStateAttribute(exec));
1292     return JSValue::encode(result);
1293 }
1294
1295
1296 EncodedJSValue jsTestObjWithScriptExecutionContextAttribute(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1297 {
1298     UNUSED_PARAM(exec);
1299     UNUSED_PARAM(slotBase);
1300     UNUSED_PARAM(thisValue);
1301     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1302     if (UNLIKELY(!castedThis)) {
1303         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1304             return reportDeprecatedGetterError(*exec, "TestObj", "withScriptExecutionContextAttribute");
1305         return throwGetterTypeError(*exec, "TestObj", "withScriptExecutionContextAttribute");
1306     }
1307     auto* scriptContext = jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject())->scriptExecutionContext();
1308     if (!scriptContext)
1309         return JSValue::encode(jsUndefined());
1310     auto& impl = castedThis->impl();
1311     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.withScriptExecutionContextAttribute(scriptContext)));
1312     return JSValue::encode(result);
1313 }
1314
1315
1316 EncodedJSValue jsTestObjWithScriptStateAttributeRaises(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1317 {
1318     UNUSED_PARAM(exec);
1319     UNUSED_PARAM(slotBase);
1320     UNUSED_PARAM(thisValue);
1321     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1322     if (UNLIKELY(!castedThis)) {
1323         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1324             return reportDeprecatedGetterError(*exec, "TestObj", "withScriptStateAttributeRaises");
1325         return throwGetterTypeError(*exec, "TestObj", "withScriptStateAttributeRaises");
1326     }
1327     ExceptionCode ec = 0;
1328     auto& impl = castedThis->impl();
1329     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.withScriptStateAttributeRaises(exec, ec)));
1330     setDOMException(exec, ec);
1331     return JSValue::encode(result);
1332 }
1333
1334
1335 EncodedJSValue jsTestObjWithScriptExecutionContextAttributeRaises(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1336 {
1337     UNUSED_PARAM(exec);
1338     UNUSED_PARAM(slotBase);
1339     UNUSED_PARAM(thisValue);
1340     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1341     if (UNLIKELY(!castedThis)) {
1342         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1343             return reportDeprecatedGetterError(*exec, "TestObj", "withScriptExecutionContextAttributeRaises");
1344         return throwGetterTypeError(*exec, "TestObj", "withScriptExecutionContextAttributeRaises");
1345     }
1346     ExceptionCode ec = 0;
1347     auto* scriptContext = jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject())->scriptExecutionContext();
1348     if (!scriptContext)
1349         return JSValue::encode(jsUndefined());
1350     auto& impl = castedThis->impl();
1351     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.withScriptExecutionContextAttributeRaises(scriptContext, ec)));
1352     setDOMException(exec, ec);
1353     return JSValue::encode(result);
1354 }
1355
1356
1357 EncodedJSValue jsTestObjWithScriptExecutionContextAndScriptStateAttribute(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1358 {
1359     UNUSED_PARAM(exec);
1360     UNUSED_PARAM(slotBase);
1361     UNUSED_PARAM(thisValue);
1362     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1363     if (UNLIKELY(!castedThis)) {
1364         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1365             return reportDeprecatedGetterError(*exec, "TestObj", "withScriptExecutionContextAndScriptStateAttribute");
1366         return throwGetterTypeError(*exec, "TestObj", "withScriptExecutionContextAndScriptStateAttribute");
1367     }
1368     auto* scriptContext = jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject())->scriptExecutionContext();
1369     if (!scriptContext)
1370         return JSValue::encode(jsUndefined());
1371     auto& impl = castedThis->impl();
1372     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.withScriptExecutionContextAndScriptStateAttribute(exec, scriptContext)));
1373     return JSValue::encode(result);
1374 }
1375
1376
1377 EncodedJSValue jsTestObjWithScriptExecutionContextAndScriptStateAttributeRaises(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1378 {
1379     UNUSED_PARAM(exec);
1380     UNUSED_PARAM(slotBase);
1381     UNUSED_PARAM(thisValue);
1382     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1383     if (UNLIKELY(!castedThis)) {
1384         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1385             return reportDeprecatedGetterError(*exec, "TestObj", "withScriptExecutionContextAndScriptStateAttributeRaises");
1386         return throwGetterTypeError(*exec, "TestObj", "withScriptExecutionContextAndScriptStateAttributeRaises");
1387     }
1388     ExceptionCode ec = 0;
1389     auto* scriptContext = jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject())->scriptExecutionContext();
1390     if (!scriptContext)
1391         return JSValue::encode(jsUndefined());
1392     auto& impl = castedThis->impl();
1393     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.withScriptExecutionContextAndScriptStateAttributeRaises(exec, scriptContext, ec)));
1394     setDOMException(exec, ec);
1395     return JSValue::encode(result);
1396 }
1397
1398
1399 EncodedJSValue jsTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1400 {
1401     UNUSED_PARAM(exec);
1402     UNUSED_PARAM(slotBase);
1403     UNUSED_PARAM(thisValue);
1404     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1405     if (UNLIKELY(!castedThis)) {
1406         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1407             return reportDeprecatedGetterError(*exec, "TestObj", "withScriptExecutionContextAndScriptStateWithSpacesAttribute");
1408         return throwGetterTypeError(*exec, "TestObj", "withScriptExecutionContextAndScriptStateWithSpacesAttribute");
1409     }
1410     auto* scriptContext = jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject())->scriptExecutionContext();
1411     if (!scriptContext)
1412         return JSValue::encode(jsUndefined());
1413     auto& impl = castedThis->impl();
1414     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.withScriptExecutionContextAndScriptStateWithSpacesAttribute(exec, scriptContext)));
1415     return JSValue::encode(result);
1416 }
1417
1418
1419 EncodedJSValue jsTestObjWithScriptArgumentsAndCallStackAttribute(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1420 {
1421     UNUSED_PARAM(exec);
1422     UNUSED_PARAM(slotBase);
1423     UNUSED_PARAM(thisValue);
1424     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1425     if (UNLIKELY(!castedThis)) {
1426         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1427             return reportDeprecatedGetterError(*exec, "TestObj", "withScriptArgumentsAndCallStackAttribute");
1428         return throwGetterTypeError(*exec, "TestObj", "withScriptArgumentsAndCallStackAttribute");
1429     }
1430     auto& impl = castedThis->impl();
1431     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.withScriptArgumentsAndCallStackAttribute()));
1432     return JSValue::encode(result);
1433 }
1434
1435
1436 #if ENABLE(Condition1)
1437 EncodedJSValue jsTestObjConditionalAttr1(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1438 {
1439     UNUSED_PARAM(exec);
1440     UNUSED_PARAM(slotBase);
1441     UNUSED_PARAM(thisValue);
1442     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1443     if (UNLIKELY(!castedThis)) {
1444         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1445             return reportDeprecatedGetterError(*exec, "TestObj", "conditionalAttr1");
1446         return throwGetterTypeError(*exec, "TestObj", "conditionalAttr1");
1447     }
1448     auto& impl = castedThis->impl();
1449     JSValue result = jsNumber(impl.conditionalAttr1());
1450     return JSValue::encode(result);
1451 }
1452
1453 #endif
1454
1455 #if ENABLE(Condition1) && ENABLE(Condition2)
1456 EncodedJSValue jsTestObjConditionalAttr2(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1457 {
1458     UNUSED_PARAM(exec);
1459     UNUSED_PARAM(slotBase);
1460     UNUSED_PARAM(thisValue);
1461     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1462     if (UNLIKELY(!castedThis)) {
1463         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1464             return reportDeprecatedGetterError(*exec, "TestObj", "conditionalAttr2");
1465         return throwGetterTypeError(*exec, "TestObj", "conditionalAttr2");
1466     }
1467     auto& impl = castedThis->impl();
1468     JSValue result = jsNumber(impl.conditionalAttr2());
1469     return JSValue::encode(result);
1470 }
1471
1472 #endif
1473
1474 #if ENABLE(Condition1) || ENABLE(Condition2)
1475 EncodedJSValue jsTestObjConditionalAttr3(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1476 {
1477     UNUSED_PARAM(exec);
1478     UNUSED_PARAM(slotBase);
1479     UNUSED_PARAM(thisValue);
1480     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1481     if (UNLIKELY(!castedThis)) {
1482         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1483             return reportDeprecatedGetterError(*exec, "TestObj", "conditionalAttr3");
1484         return throwGetterTypeError(*exec, "TestObj", "conditionalAttr3");
1485     }
1486     auto& impl = castedThis->impl();
1487     JSValue result = jsNumber(impl.conditionalAttr3());
1488     return JSValue::encode(result);
1489 }
1490
1491 #endif
1492
1493 #if ENABLE(Condition1)
1494 EncodedJSValue jsTestObjConditionalAttr4Constructor(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1495 {
1496     UNUSED_PARAM(exec);
1497     UNUSED_PARAM(slotBase);
1498     UNUSED_PARAM(thisValue);
1499     auto* castedThis = jsCast<JSTestObj*>(slotBase);
1500     return JSValue::encode(JSTestObjectA::getConstructor(exec->vm(), castedThis->globalObject()));
1501 }
1502
1503 #endif
1504
1505 #if ENABLE(Condition1) && ENABLE(Condition2)
1506 EncodedJSValue jsTestObjConditionalAttr5Constructor(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1507 {
1508     UNUSED_PARAM(exec);
1509     UNUSED_PARAM(slotBase);
1510     UNUSED_PARAM(thisValue);
1511     auto* castedThis = jsCast<JSTestObj*>(slotBase);
1512     return JSValue::encode(JSTestObjectB::getConstructor(exec->vm(), castedThis->globalObject()));
1513 }
1514
1515 #endif
1516
1517 #if ENABLE(Condition1) || ENABLE(Condition2)
1518 EncodedJSValue jsTestObjConditionalAttr6Constructor(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1519 {
1520     UNUSED_PARAM(exec);
1521     UNUSED_PARAM(slotBase);
1522     UNUSED_PARAM(thisValue);
1523     auto* castedThis = jsCast<JSTestObj*>(slotBase);
1524     return JSValue::encode(JSTestObjectC::getConstructor(exec->vm(), castedThis->globalObject()));
1525 }
1526
1527 #endif
1528
1529 EncodedJSValue jsTestObjCachedAttribute1(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1530 {
1531     UNUSED_PARAM(exec);
1532     UNUSED_PARAM(slotBase);
1533     UNUSED_PARAM(thisValue);
1534     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1535     if (UNLIKELY(!castedThis)) {
1536         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1537             return reportDeprecatedGetterError(*exec, "TestObj", "cachedAttribute1");
1538         return throwGetterTypeError(*exec, "TestObj", "cachedAttribute1");
1539     }
1540     if (JSValue cachedValue = castedThis->m_cachedAttribute1.get())
1541         return JSValue::encode(cachedValue);
1542     auto& impl = castedThis->impl();
1543     JSValue result = (impl.cachedAttribute1().hasNoValue() ? jsNull() : impl.cachedAttribute1().jsValue());
1544     castedThis->m_cachedAttribute1.set(exec->vm(), castedThis, result);
1545     return JSValue::encode(result);
1546 }
1547
1548
1549 EncodedJSValue jsTestObjCachedAttribute2(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1550 {
1551     UNUSED_PARAM(exec);
1552     UNUSED_PARAM(slotBase);
1553     UNUSED_PARAM(thisValue);
1554     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1555     if (UNLIKELY(!castedThis)) {
1556         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1557             return reportDeprecatedGetterError(*exec, "TestObj", "cachedAttribute2");
1558         return throwGetterTypeError(*exec, "TestObj", "cachedAttribute2");
1559     }
1560     if (JSValue cachedValue = castedThis->m_cachedAttribute2.get())
1561         return JSValue::encode(cachedValue);
1562     auto& impl = castedThis->impl();
1563     JSValue result = (impl.cachedAttribute2().hasNoValue() ? jsNull() : impl.cachedAttribute2().jsValue());
1564     castedThis->m_cachedAttribute2.set(exec->vm(), castedThis, result);
1565     return JSValue::encode(result);
1566 }
1567
1568
1569 EncodedJSValue jsTestObjAnyAttribute(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1570 {
1571     UNUSED_PARAM(exec);
1572     UNUSED_PARAM(slotBase);
1573     UNUSED_PARAM(thisValue);
1574     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1575     if (UNLIKELY(!castedThis)) {
1576         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1577             return reportDeprecatedGetterError(*exec, "TestObj", "anyAttribute");
1578         return throwGetterTypeError(*exec, "TestObj", "anyAttribute");
1579     }
1580     auto& impl = castedThis->impl();
1581     JSValue result = (impl.anyAttribute().hasNoValue() ? jsNull() : impl.anyAttribute().jsValue());
1582     return JSValue::encode(result);
1583 }
1584
1585
1586 EncodedJSValue jsTestObjContentDocument(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1587 {
1588     UNUSED_PARAM(exec);
1589     UNUSED_PARAM(slotBase);
1590     UNUSED_PARAM(thisValue);
1591     auto* castedThis = jsCast<JSTestObj*>(slotBase);
1592     auto& impl = castedThis->impl();
1593     return JSValue::encode(shouldAllowAccessToNode(exec, impl.contentDocument()) ? toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.contentDocument())) : jsNull());
1594 }
1595
1596
1597 EncodedJSValue jsTestObjMutablePoint(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1598 {
1599     UNUSED_PARAM(exec);
1600     UNUSED_PARAM(slotBase);
1601     UNUSED_PARAM(thisValue);
1602     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1603     if (UNLIKELY(!castedThis)) {
1604         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1605             return reportDeprecatedGetterError(*exec, "TestObj", "mutablePoint");
1606         return throwGetterTypeError(*exec, "TestObj", "mutablePoint");
1607     }
1608     auto& impl = castedThis->impl();
1609     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(SVGStaticPropertyTearOff<TestObj, SVGPoint>::create(impl, impl.mutablePoint(), &TestObj::updateMutablePoint)));
1610     return JSValue::encode(result);
1611 }
1612
1613
1614 EncodedJSValue jsTestObjImmutablePoint(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1615 {
1616     UNUSED_PARAM(exec);
1617     UNUSED_PARAM(slotBase);
1618     UNUSED_PARAM(thisValue);
1619     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1620     if (UNLIKELY(!castedThis)) {
1621         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1622             return reportDeprecatedGetterError(*exec, "TestObj", "immutablePoint");
1623         return throwGetterTypeError(*exec, "TestObj", "immutablePoint");
1624     }
1625     auto& impl = castedThis->impl();
1626     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(SVGPropertyTearOff<SVGPoint>::create(impl.immutablePoint())));
1627     return JSValue::encode(result);
1628 }
1629
1630
1631 EncodedJSValue jsTestObjStrawberry(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1632 {
1633     UNUSED_PARAM(exec);
1634     UNUSED_PARAM(slotBase);
1635     UNUSED_PARAM(thisValue);
1636     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1637     if (UNLIKELY(!castedThis)) {
1638         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1639             return reportDeprecatedGetterError(*exec, "TestObj", "strawberry");
1640         return throwGetterTypeError(*exec, "TestObj", "strawberry");
1641     }
1642     auto& impl = castedThis->impl();
1643     JSValue result = jsNumber(impl.blueberry());
1644     return JSValue::encode(result);
1645 }
1646
1647
1648 EncodedJSValue jsTestObjStrictFloat(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1649 {
1650     UNUSED_PARAM(exec);
1651     UNUSED_PARAM(slotBase);
1652     UNUSED_PARAM(thisValue);
1653     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1654     if (UNLIKELY(!castedThis)) {
1655         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1656             return reportDeprecatedGetterError(*exec, "TestObj", "strictFloat");
1657         return throwGetterTypeError(*exec, "TestObj", "strictFloat");
1658     }
1659     auto& impl = castedThis->impl();
1660     JSValue result = jsNumber(impl.strictFloat());
1661     return JSValue::encode(result);
1662 }
1663
1664
1665 EncodedJSValue jsTestObjDescription(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1666 {
1667     UNUSED_PARAM(exec);
1668     UNUSED_PARAM(slotBase);
1669     UNUSED_PARAM(thisValue);
1670     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1671     if (UNLIKELY(!castedThis)) {
1672         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1673             return reportDeprecatedGetterError(*exec, "TestObj", "description");
1674         return throwGetterTypeError(*exec, "TestObj", "description");
1675     }
1676     auto& impl = castedThis->impl();
1677     JSValue result = jsNumber(impl.description());
1678     return JSValue::encode(result);
1679 }
1680
1681
1682 EncodedJSValue jsTestObjId(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1683 {
1684     UNUSED_PARAM(exec);
1685     UNUSED_PARAM(slotBase);
1686     UNUSED_PARAM(thisValue);
1687     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1688     if (UNLIKELY(!castedThis)) {
1689         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1690             return reportDeprecatedGetterError(*exec, "TestObj", "id");
1691         return throwGetterTypeError(*exec, "TestObj", "id");
1692     }
1693     auto& impl = castedThis->impl();
1694     JSValue result = jsNumber(impl.id());
1695     return JSValue::encode(result);
1696 }
1697
1698
1699 EncodedJSValue jsTestObjHash(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1700 {
1701     UNUSED_PARAM(exec);
1702     UNUSED_PARAM(slotBase);
1703     UNUSED_PARAM(thisValue);
1704     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1705     if (UNLIKELY(!castedThis)) {
1706         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1707             return reportDeprecatedGetterError(*exec, "TestObj", "hash");
1708         return throwGetterTypeError(*exec, "TestObj", "hash");
1709     }
1710     auto& impl = castedThis->impl();
1711     JSValue result = jsStringWithCache(exec, impl.hash());
1712     return JSValue::encode(result);
1713 }
1714
1715
1716 EncodedJSValue jsTestObjReplaceableAttribute(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1717 {
1718     UNUSED_PARAM(exec);
1719     UNUSED_PARAM(slotBase);
1720     UNUSED_PARAM(thisValue);
1721     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1722     if (UNLIKELY(!castedThis)) {
1723         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1724             return reportDeprecatedGetterError(*exec, "TestObj", "replaceableAttribute");
1725         return throwGetterTypeError(*exec, "TestObj", "replaceableAttribute");
1726     }
1727     auto& impl = castedThis->impl();
1728     JSValue result = jsNumber(impl.replaceableAttribute());
1729     return JSValue::encode(result);
1730 }
1731
1732
1733 EncodedJSValue jsTestObjNullableDoubleAttribute(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1734 {
1735     UNUSED_PARAM(exec);
1736     UNUSED_PARAM(slotBase);
1737     UNUSED_PARAM(thisValue);
1738     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1739     if (UNLIKELY(!castedThis)) {
1740         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1741             return reportDeprecatedGetterError(*exec, "TestObj", "nullableDoubleAttribute");
1742         return throwGetterTypeError(*exec, "TestObj", "nullableDoubleAttribute");
1743     }
1744     bool isNull = false;
1745     auto& impl = castedThis->impl();
1746     JSValue result = jsNumber(impl.nullableDoubleAttribute(isNull));
1747     if (isNull)
1748         return JSValue::encode(jsNull());
1749     return JSValue::encode(result);
1750 }
1751
1752
1753 EncodedJSValue jsTestObjNullableLongAttribute(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1754 {
1755     UNUSED_PARAM(exec);
1756     UNUSED_PARAM(slotBase);
1757     UNUSED_PARAM(thisValue);
1758     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1759     if (UNLIKELY(!castedThis)) {
1760         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1761             return reportDeprecatedGetterError(*exec, "TestObj", "nullableLongAttribute");
1762         return throwGetterTypeError(*exec, "TestObj", "nullableLongAttribute");
1763     }
1764     bool isNull = false;
1765     auto& impl = castedThis->impl();
1766     JSValue result = jsNumber(impl.nullableLongAttribute(isNull));
1767     if (isNull)
1768         return JSValue::encode(jsNull());
1769     return JSValue::encode(result);
1770 }
1771
1772
1773 EncodedJSValue jsTestObjNullableBooleanAttribute(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1774 {
1775     UNUSED_PARAM(exec);
1776     UNUSED_PARAM(slotBase);
1777     UNUSED_PARAM(thisValue);
1778     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1779     if (UNLIKELY(!castedThis)) {
1780         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1781             return reportDeprecatedGetterError(*exec, "TestObj", "nullableBooleanAttribute");
1782         return throwGetterTypeError(*exec, "TestObj", "nullableBooleanAttribute");
1783     }
1784     bool isNull = false;
1785     auto& impl = castedThis->impl();
1786     JSValue result = jsBoolean(impl.nullableBooleanAttribute(isNull));
1787     if (isNull)
1788         return JSValue::encode(jsNull());
1789     return JSValue::encode(result);
1790 }
1791
1792
1793 EncodedJSValue jsTestObjNullableStringAttribute(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1794 {
1795     UNUSED_PARAM(exec);
1796     UNUSED_PARAM(slotBase);
1797     UNUSED_PARAM(thisValue);
1798     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1799     if (UNLIKELY(!castedThis)) {
1800         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1801             return reportDeprecatedGetterError(*exec, "TestObj", "nullableStringAttribute");
1802         return throwGetterTypeError(*exec, "TestObj", "nullableStringAttribute");
1803     }
1804     bool isNull = false;
1805     auto& impl = castedThis->impl();
1806     JSValue result = jsStringWithCache(exec, impl.nullableStringAttribute(isNull));
1807     if (isNull)
1808         return JSValue::encode(jsNull());
1809     return JSValue::encode(result);
1810 }
1811
1812
1813 EncodedJSValue jsTestObjNullableLongSettableAttribute(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1814 {
1815     UNUSED_PARAM(exec);
1816     UNUSED_PARAM(slotBase);
1817     UNUSED_PARAM(thisValue);
1818     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1819     if (UNLIKELY(!castedThis)) {
1820         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1821             return reportDeprecatedGetterError(*exec, "TestObj", "nullableLongSettableAttribute");
1822         return throwGetterTypeError(*exec, "TestObj", "nullableLongSettableAttribute");
1823     }
1824     bool isNull = false;
1825     auto& impl = castedThis->impl();
1826     JSValue result = jsNumber(impl.nullableLongSettableAttribute(isNull));
1827     if (isNull)
1828         return JSValue::encode(jsNull());
1829     return JSValue::encode(result);
1830 }
1831
1832
1833 EncodedJSValue jsTestObjNullableStringValue(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1834 {
1835     UNUSED_PARAM(exec);
1836     UNUSED_PARAM(slotBase);
1837     UNUSED_PARAM(thisValue);
1838     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1839     if (UNLIKELY(!castedThis)) {
1840         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1841             return reportDeprecatedGetterError(*exec, "TestObj", "nullableStringValue");
1842         return throwGetterTypeError(*exec, "TestObj", "nullableStringValue");
1843     }
1844     ExceptionCode ec = 0;
1845     bool isNull = false;
1846     auto& impl = castedThis->impl();
1847     JSValue result = jsNumber(impl.nullableStringValue(isNull, ec));
1848     setDOMException(exec, ec);
1849     if (isNull)
1850         return JSValue::encode(jsNull());
1851     return JSValue::encode(result);
1852 }
1853
1854
1855 EncodedJSValue jsTestObjAttribute(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1856 {
1857     UNUSED_PARAM(exec);
1858     UNUSED_PARAM(slotBase);
1859     UNUSED_PARAM(thisValue);
1860     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1861     if (UNLIKELY(!castedThis)) {
1862         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1863             return reportDeprecatedGetterError(*exec, "TestObj", "attribute");
1864         return throwGetterTypeError(*exec, "TestObj", "attribute");
1865     }
1866     auto& impl = castedThis->impl();
1867     JSValue result = jsStringWithCache(exec, impl.attribute());
1868     return JSValue::encode(result);
1869 }
1870
1871
1872 EncodedJSValue jsTestObjAttributeWithReservedEnumType(ExecState* exec, JSObject* slotBase, EncodedJSValue thisValue, PropertyName)
1873 {
1874     UNUSED_PARAM(exec);
1875     UNUSED_PARAM(slotBase);
1876     UNUSED_PARAM(thisValue);
1877     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1878     if (UNLIKELY(!castedThis)) {
1879         if (jsDynamicCast<JSTestObjPrototype*>(slotBase))
1880             return reportDeprecatedGetterError(*exec, "TestObj", "attributeWithReservedEnumType");
1881         return throwGetterTypeError(*exec, "TestObj", "attributeWithReservedEnumType");
1882     }
1883     auto& impl = castedThis->impl();
1884     JSValue result = jsStringWithCache(exec, impl.attributeWithReservedEnumType());
1885     return JSValue::encode(result);
1886 }
1887
1888
1889 EncodedJSValue jsTestObjConstructor(ExecState* exec, JSObject* baseValue, EncodedJSValue, PropertyName)
1890 {
1891     JSTestObjPrototype* domObject = jsDynamicCast<JSTestObjPrototype*>(baseValue);
1892     if (!domObject)
1893         return throwVMTypeError(exec);
1894     return JSValue::encode(JSTestObj::getConstructor(exec->vm(), domObject->globalObject()));
1895 }
1896
1897 void setJSTestObjConstructorStaticStringAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue, EncodedJSValue encodedValue)
1898 {
1899     JSValue value = JSValue::decode(encodedValue);
1900     UNUSED_PARAM(baseObject);
1901     String nativeValue = value.toString(exec)->value(exec);
1902     if (UNLIKELY(exec->hadException()))
1903         return;
1904     TestObj::setStaticStringAttr(nativeValue);
1905 }
1906
1907
1908 void setJSTestObjTestSubObjEnabledBySettingConstructor(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
1909 {
1910     JSValue value = JSValue::decode(encodedValue);
1911     UNUSED_PARAM(baseObject);
1912     UNUSED_PARAM(thisValue);
1913     auto* castedThis = jsCast<JSTestObj*>(baseObject);
1914     UNUSED_PARAM(thisValue);
1915     UNUSED_PARAM(exec);
1916     // Shadowing a built-in constructor.
1917     castedThis->putDirect(exec->vm(), Identifier::fromString(exec, "TestSubObjEnabledBySetting"), value);
1918 }
1919
1920
1921 void setJSTestObjEnumAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
1922 {
1923     JSValue value = JSValue::decode(encodedValue);
1924     UNUSED_PARAM(baseObject);
1925     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1926     if (UNLIKELY(!castedThis)) {
1927         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
1928             reportDeprecatedSetterError(*exec, "TestObj", "enumAttr");
1929         else
1930             throwSetterTypeError(*exec, "TestObj", "enumAttr");
1931         return;
1932     }
1933     auto& impl = castedThis->impl();
1934     String nativeValue = value.toString(exec)->value(exec);
1935     if (UNLIKELY(exec->hadException()))
1936         return;
1937     if (nativeValue != "" && nativeValue != "EnumValue1" && nativeValue != "EnumValue2" && nativeValue != "EnumValue3")
1938         return;
1939     impl.setEnumAttr(nativeValue);
1940 }
1941
1942
1943 void setJSTestObjByteAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
1944 {
1945     JSValue value = JSValue::decode(encodedValue);
1946     UNUSED_PARAM(baseObject);
1947     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1948     if (UNLIKELY(!castedThis)) {
1949         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
1950             reportDeprecatedSetterError(*exec, "TestObj", "byteAttr");
1951         else
1952             throwSetterTypeError(*exec, "TestObj", "byteAttr");
1953         return;
1954     }
1955     auto& impl = castedThis->impl();
1956     int8_t nativeValue = toInt8(exec, value, NormalConversion);
1957     if (UNLIKELY(exec->hadException()))
1958         return;
1959     impl.setByteAttr(nativeValue);
1960 }
1961
1962
1963 void setJSTestObjOctetAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
1964 {
1965     JSValue value = JSValue::decode(encodedValue);
1966     UNUSED_PARAM(baseObject);
1967     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1968     if (UNLIKELY(!castedThis)) {
1969         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
1970             reportDeprecatedSetterError(*exec, "TestObj", "octetAttr");
1971         else
1972             throwSetterTypeError(*exec, "TestObj", "octetAttr");
1973         return;
1974     }
1975     auto& impl = castedThis->impl();
1976     uint8_t nativeValue = toUInt8(exec, value, NormalConversion);
1977     if (UNLIKELY(exec->hadException()))
1978         return;
1979     impl.setOctetAttr(nativeValue);
1980 }
1981
1982
1983 void setJSTestObjShortAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
1984 {
1985     JSValue value = JSValue::decode(encodedValue);
1986     UNUSED_PARAM(baseObject);
1987     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
1988     if (UNLIKELY(!castedThis)) {
1989         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
1990             reportDeprecatedSetterError(*exec, "TestObj", "shortAttr");
1991         else
1992             throwSetterTypeError(*exec, "TestObj", "shortAttr");
1993         return;
1994     }
1995     auto& impl = castedThis->impl();
1996     int16_t nativeValue = toInt16(exec, value, NormalConversion);
1997     if (UNLIKELY(exec->hadException()))
1998         return;
1999     impl.setShortAttr(nativeValue);
2000 }
2001
2002
2003 void setJSTestObjUnsignedShortAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2004 {
2005     JSValue value = JSValue::decode(encodedValue);
2006     UNUSED_PARAM(baseObject);
2007     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2008     if (UNLIKELY(!castedThis)) {
2009         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2010             reportDeprecatedSetterError(*exec, "TestObj", "unsignedShortAttr");
2011         else
2012             throwSetterTypeError(*exec, "TestObj", "unsignedShortAttr");
2013         return;
2014     }
2015     auto& impl = castedThis->impl();
2016     uint16_t nativeValue = toUInt16(exec, value, NormalConversion);
2017     if (UNLIKELY(exec->hadException()))
2018         return;
2019     impl.setUnsignedShortAttr(nativeValue);
2020 }
2021
2022
2023 void setJSTestObjLongAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2024 {
2025     JSValue value = JSValue::decode(encodedValue);
2026     UNUSED_PARAM(baseObject);
2027     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2028     if (UNLIKELY(!castedThis)) {
2029         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2030             reportDeprecatedSetterError(*exec, "TestObj", "longAttr");
2031         else
2032             throwSetterTypeError(*exec, "TestObj", "longAttr");
2033         return;
2034     }
2035     auto& impl = castedThis->impl();
2036     int nativeValue = toInt32(exec, value, NormalConversion);
2037     if (UNLIKELY(exec->hadException()))
2038         return;
2039     impl.setLongAttr(nativeValue);
2040 }
2041
2042
2043 void setJSTestObjLongLongAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2044 {
2045     JSValue value = JSValue::decode(encodedValue);
2046     UNUSED_PARAM(baseObject);
2047     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2048     if (UNLIKELY(!castedThis)) {
2049         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2050             reportDeprecatedSetterError(*exec, "TestObj", "longLongAttr");
2051         else
2052             throwSetterTypeError(*exec, "TestObj", "longLongAttr");
2053         return;
2054     }
2055     auto& impl = castedThis->impl();
2056     long long nativeValue = toInt64(exec, value, NormalConversion);
2057     if (UNLIKELY(exec->hadException()))
2058         return;
2059     impl.setLongLongAttr(nativeValue);
2060 }
2061
2062
2063 void setJSTestObjUnsignedLongLongAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2064 {
2065     JSValue value = JSValue::decode(encodedValue);
2066     UNUSED_PARAM(baseObject);
2067     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2068     if (UNLIKELY(!castedThis)) {
2069         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2070             reportDeprecatedSetterError(*exec, "TestObj", "unsignedLongLongAttr");
2071         else
2072             throwSetterTypeError(*exec, "TestObj", "unsignedLongLongAttr");
2073         return;
2074     }
2075     auto& impl = castedThis->impl();
2076     unsigned long long nativeValue = toUInt64(exec, value, NormalConversion);
2077     if (UNLIKELY(exec->hadException()))
2078         return;
2079     impl.setUnsignedLongLongAttr(nativeValue);
2080 }
2081
2082
2083 void setJSTestObjStringAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2084 {
2085     JSValue value = JSValue::decode(encodedValue);
2086     UNUSED_PARAM(baseObject);
2087     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2088     if (UNLIKELY(!castedThis)) {
2089         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2090             reportDeprecatedSetterError(*exec, "TestObj", "stringAttr");
2091         else
2092             throwSetterTypeError(*exec, "TestObj", "stringAttr");
2093         return;
2094     }
2095     auto& impl = castedThis->impl();
2096     String nativeValue = value.toString(exec)->value(exec);
2097     if (UNLIKELY(exec->hadException()))
2098         return;
2099     impl.setStringAttr(nativeValue);
2100 }
2101
2102
2103 void setJSTestObjTestObjAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2104 {
2105     JSValue value = JSValue::decode(encodedValue);
2106     UNUSED_PARAM(baseObject);
2107     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2108     if (UNLIKELY(!castedThis)) {
2109         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2110             reportDeprecatedSetterError(*exec, "TestObj", "testObjAttr");
2111         else
2112             throwSetterTypeError(*exec, "TestObj", "testObjAttr");
2113         return;
2114     }
2115     auto& impl = castedThis->impl();
2116     TestObj* nativeValue = JSTestObj::toWrapped(value);
2117     if (UNLIKELY(exec->hadException()))
2118         return;
2119     impl.setTestObjAttr(nativeValue);
2120 }
2121
2122
2123 void setJSTestObjXMLObjAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2124 {
2125     JSValue value = JSValue::decode(encodedValue);
2126     UNUSED_PARAM(baseObject);
2127     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2128     if (UNLIKELY(!castedThis)) {
2129         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2130             reportDeprecatedSetterError(*exec, "TestObj", "XMLObjAttr");
2131         else
2132             throwSetterTypeError(*exec, "TestObj", "XMLObjAttr");
2133         return;
2134     }
2135     auto& impl = castedThis->impl();
2136     TestObj* nativeValue = JSTestObj::toWrapped(value);
2137     if (UNLIKELY(exec->hadException()))
2138         return;
2139     impl.setXMLObjAttr(nativeValue);
2140 }
2141
2142
2143 void setJSTestObjCreate(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2144 {
2145     JSValue value = JSValue::decode(encodedValue);
2146     UNUSED_PARAM(baseObject);
2147     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2148     if (UNLIKELY(!castedThis)) {
2149         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2150             reportDeprecatedSetterError(*exec, "TestObj", "create");
2151         else
2152             throwSetterTypeError(*exec, "TestObj", "create");
2153         return;
2154     }
2155     auto& impl = castedThis->impl();
2156     bool nativeValue = value.toBoolean(exec);
2157     if (UNLIKELY(exec->hadException()))
2158         return;
2159     impl.setCreate(nativeValue);
2160 }
2161
2162
2163 void setJSTestObjReflectedStringAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2164 {
2165     JSValue value = JSValue::decode(encodedValue);
2166     UNUSED_PARAM(baseObject);
2167     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2168     if (UNLIKELY(!castedThis)) {
2169         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2170             reportDeprecatedSetterError(*exec, "TestObj", "reflectedStringAttr");
2171         else
2172             throwSetterTypeError(*exec, "TestObj", "reflectedStringAttr");
2173         return;
2174     }
2175     auto& impl = castedThis->impl();
2176     String nativeValue = valueToStringWithNullCheck(exec, value);
2177     if (UNLIKELY(exec->hadException()))
2178         return;
2179     impl.setAttributeWithoutSynchronization(WebCore::HTMLNames::reflectedstringattrAttr, nativeValue);
2180 }
2181
2182
2183 void setJSTestObjReflectedIntegralAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2184 {
2185     JSValue value = JSValue::decode(encodedValue);
2186     UNUSED_PARAM(baseObject);
2187     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2188     if (UNLIKELY(!castedThis)) {
2189         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2190             reportDeprecatedSetterError(*exec, "TestObj", "reflectedIntegralAttr");
2191         else
2192             throwSetterTypeError(*exec, "TestObj", "reflectedIntegralAttr");
2193         return;
2194     }
2195     auto& impl = castedThis->impl();
2196     int nativeValue = toInt32(exec, value, NormalConversion);
2197     if (UNLIKELY(exec->hadException()))
2198         return;
2199     impl.setIntegralAttribute(WebCore::HTMLNames::reflectedintegralattrAttr, nativeValue);
2200 }
2201
2202
2203 void setJSTestObjReflectedUnsignedIntegralAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2204 {
2205     JSValue value = JSValue::decode(encodedValue);
2206     UNUSED_PARAM(baseObject);
2207     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2208     if (UNLIKELY(!castedThis)) {
2209         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2210             reportDeprecatedSetterError(*exec, "TestObj", "reflectedUnsignedIntegralAttr");
2211         else
2212             throwSetterTypeError(*exec, "TestObj", "reflectedUnsignedIntegralAttr");
2213         return;
2214     }
2215     auto& impl = castedThis->impl();
2216     unsigned nativeValue = toUInt32(exec, value, NormalConversion);
2217     if (UNLIKELY(exec->hadException()))
2218         return;
2219     impl.setUnsignedIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr, nativeValue);
2220 }
2221
2222
2223 void setJSTestObjReflectedBooleanAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2224 {
2225     JSValue value = JSValue::decode(encodedValue);
2226     UNUSED_PARAM(baseObject);
2227     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2228     if (UNLIKELY(!castedThis)) {
2229         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2230             reportDeprecatedSetterError(*exec, "TestObj", "reflectedBooleanAttr");
2231         else
2232             throwSetterTypeError(*exec, "TestObj", "reflectedBooleanAttr");
2233         return;
2234     }
2235     auto& impl = castedThis->impl();
2236     bool nativeValue = value.toBoolean(exec);
2237     if (UNLIKELY(exec->hadException()))
2238         return;
2239     impl.setBooleanAttribute(WebCore::HTMLNames::reflectedbooleanattrAttr, nativeValue);
2240 }
2241
2242
2243 void setJSTestObjReflectedURLAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2244 {
2245     JSValue value = JSValue::decode(encodedValue);
2246     UNUSED_PARAM(baseObject);
2247     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2248     if (UNLIKELY(!castedThis)) {
2249         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2250             reportDeprecatedSetterError(*exec, "TestObj", "reflectedURLAttr");
2251         else
2252             throwSetterTypeError(*exec, "TestObj", "reflectedURLAttr");
2253         return;
2254     }
2255     auto& impl = castedThis->impl();
2256     String nativeValue = valueToStringWithNullCheck(exec, value);
2257     if (UNLIKELY(exec->hadException()))
2258         return;
2259     impl.setAttributeWithoutSynchronization(WebCore::HTMLNames::reflectedurlattrAttr, nativeValue);
2260 }
2261
2262
2263 void setJSTestObjReflectedStringAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2264 {
2265     JSValue value = JSValue::decode(encodedValue);
2266     UNUSED_PARAM(baseObject);
2267     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2268     if (UNLIKELY(!castedThis)) {
2269         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2270             reportDeprecatedSetterError(*exec, "TestObj", "reflectedStringAttr");
2271         else
2272             throwSetterTypeError(*exec, "TestObj", "reflectedStringAttr");
2273         return;
2274     }
2275     auto& impl = castedThis->impl();
2276     String nativeValue = valueToStringWithNullCheck(exec, value);
2277     if (UNLIKELY(exec->hadException()))
2278         return;
2279     impl.setAttributeWithoutSynchronization(WebCore::HTMLNames::customContentStringAttrAttr, nativeValue);
2280 }
2281
2282
2283 void setJSTestObjReflectedCustomIntegralAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2284 {
2285     JSValue value = JSValue::decode(encodedValue);
2286     UNUSED_PARAM(baseObject);
2287     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2288     if (UNLIKELY(!castedThis)) {
2289         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2290             reportDeprecatedSetterError(*exec, "TestObj", "reflectedCustomIntegralAttr");
2291         else
2292             throwSetterTypeError(*exec, "TestObj", "reflectedCustomIntegralAttr");
2293         return;
2294     }
2295     auto& impl = castedThis->impl();
2296     int nativeValue = toInt32(exec, value, NormalConversion);
2297     if (UNLIKELY(exec->hadException()))
2298         return;
2299     impl.setIntegralAttribute(WebCore::HTMLNames::customContentIntegralAttrAttr, nativeValue);
2300 }
2301
2302
2303 void setJSTestObjReflectedCustomBooleanAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2304 {
2305     JSValue value = JSValue::decode(encodedValue);
2306     UNUSED_PARAM(baseObject);
2307     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2308     if (UNLIKELY(!castedThis)) {
2309         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2310             reportDeprecatedSetterError(*exec, "TestObj", "reflectedCustomBooleanAttr");
2311         else
2312             throwSetterTypeError(*exec, "TestObj", "reflectedCustomBooleanAttr");
2313         return;
2314     }
2315     auto& impl = castedThis->impl();
2316     bool nativeValue = value.toBoolean(exec);
2317     if (UNLIKELY(exec->hadException()))
2318         return;
2319     impl.setBooleanAttribute(WebCore::HTMLNames::customContentBooleanAttrAttr, nativeValue);
2320 }
2321
2322
2323 void setJSTestObjReflectedCustomURLAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2324 {
2325     JSValue value = JSValue::decode(encodedValue);
2326     UNUSED_PARAM(baseObject);
2327     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2328     if (UNLIKELY(!castedThis)) {
2329         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2330             reportDeprecatedSetterError(*exec, "TestObj", "reflectedCustomURLAttr");
2331         else
2332             throwSetterTypeError(*exec, "TestObj", "reflectedCustomURLAttr");
2333         return;
2334     }
2335     auto& impl = castedThis->impl();
2336     String nativeValue = valueToStringWithNullCheck(exec, value);
2337     if (UNLIKELY(exec->hadException()))
2338         return;
2339     impl.setAttributeWithoutSynchronization(WebCore::HTMLNames::customContentURLAttrAttr, nativeValue);
2340 }
2341
2342
2343 void setJSTestObjTypedArrayAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2344 {
2345     JSValue value = JSValue::decode(encodedValue);
2346     UNUSED_PARAM(baseObject);
2347     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2348     if (UNLIKELY(!castedThis)) {
2349         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2350             reportDeprecatedSetterError(*exec, "TestObj", "typedArrayAttr");
2351         else
2352             throwSetterTypeError(*exec, "TestObj", "typedArrayAttr");
2353         return;
2354     }
2355     auto& impl = castedThis->impl();
2356     RefPtr<Float32Array> nativeValue = toFloat32Array(value);
2357     if (UNLIKELY(exec->hadException()))
2358         return;
2359     impl.setTypedArrayAttr(nativeValue.get());
2360 }
2361
2362
2363 void setJSTestObjAttrWithGetterException(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2364 {
2365     JSValue value = JSValue::decode(encodedValue);
2366     UNUSED_PARAM(baseObject);
2367     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2368     if (UNLIKELY(!castedThis)) {
2369         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2370             reportDeprecatedSetterError(*exec, "TestObj", "attrWithGetterException");
2371         else
2372             throwSetterTypeError(*exec, "TestObj", "attrWithGetterException");
2373         return;
2374     }
2375     auto& impl = castedThis->impl();
2376     int nativeValue = toInt32(exec, value, NormalConversion);
2377     if (UNLIKELY(exec->hadException()))
2378         return;
2379     impl.setAttrWithGetterException(nativeValue);
2380 }
2381
2382
2383 void setJSTestObjAttrWithSetterException(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2384 {
2385     JSValue value = JSValue::decode(encodedValue);
2386     UNUSED_PARAM(baseObject);
2387     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2388     if (UNLIKELY(!castedThis)) {
2389         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2390             reportDeprecatedSetterError(*exec, "TestObj", "attrWithSetterException");
2391         else
2392             throwSetterTypeError(*exec, "TestObj", "attrWithSetterException");
2393         return;
2394     }
2395     auto& impl = castedThis->impl();
2396     ExceptionCode ec = 0;
2397     int nativeValue = toInt32(exec, value, NormalConversion);
2398     if (UNLIKELY(exec->hadException()))
2399         return;
2400     impl.setAttrWithSetterException(nativeValue, ec);
2401     setDOMException(exec, ec);
2402 }
2403
2404
2405 void setJSTestObjStringAttrWithGetterException(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2406 {
2407     JSValue value = JSValue::decode(encodedValue);
2408     UNUSED_PARAM(baseObject);
2409     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2410     if (UNLIKELY(!castedThis)) {
2411         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2412             reportDeprecatedSetterError(*exec, "TestObj", "stringAttrWithGetterException");
2413         else
2414             throwSetterTypeError(*exec, "TestObj", "stringAttrWithGetterException");
2415         return;
2416     }
2417     auto& impl = castedThis->impl();
2418     String nativeValue = value.toString(exec)->value(exec);
2419     if (UNLIKELY(exec->hadException()))
2420         return;
2421     impl.setStringAttrWithGetterException(nativeValue);
2422 }
2423
2424
2425 void setJSTestObjStringAttrWithSetterException(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2426 {
2427     JSValue value = JSValue::decode(encodedValue);
2428     UNUSED_PARAM(baseObject);
2429     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2430     if (UNLIKELY(!castedThis)) {
2431         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2432             reportDeprecatedSetterError(*exec, "TestObj", "stringAttrWithSetterException");
2433         else
2434             throwSetterTypeError(*exec, "TestObj", "stringAttrWithSetterException");
2435         return;
2436     }
2437     auto& impl = castedThis->impl();
2438     ExceptionCode ec = 0;
2439     String nativeValue = value.toString(exec)->value(exec);
2440     if (UNLIKELY(exec->hadException()))
2441         return;
2442     impl.setStringAttrWithSetterException(nativeValue, ec);
2443     setDOMException(exec, ec);
2444 }
2445
2446
2447 void setJSTestObjCustomAttr(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2448 {
2449     JSValue value = JSValue::decode(encodedValue);
2450     UNUSED_PARAM(baseObject);
2451     UNUSED_PARAM(thisValue);
2452     auto* castedThis = jsCast<JSTestObj*>(baseObject);
2453     UNUSED_PARAM(thisValue);
2454     UNUSED_PARAM(exec);
2455     castedThis->setCustomAttr(exec, value);
2456 }
2457
2458
2459 void setJSTestObjOnfoo(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2460 {
2461     JSValue value = JSValue::decode(encodedValue);
2462     UNUSED_PARAM(baseObject);
2463     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2464     if (UNLIKELY(!castedThis)) {
2465         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2466             reportDeprecatedSetterError(*exec, "TestObj", "onfoo");
2467         else
2468             throwSetterTypeError(*exec, "TestObj", "onfoo");
2469         return;
2470     }
2471     setEventHandlerAttribute(*exec, *castedThis, castedThis->impl(), eventNames().fooEvent, value);
2472 }
2473
2474
2475 void setJSTestObjWithScriptStateAttribute(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2476 {
2477     JSValue value = JSValue::decode(encodedValue);
2478     UNUSED_PARAM(baseObject);
2479     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2480     if (UNLIKELY(!castedThis)) {
2481         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2482             reportDeprecatedSetterError(*exec, "TestObj", "withScriptStateAttribute");
2483         else
2484             throwSetterTypeError(*exec, "TestObj", "withScriptStateAttribute");
2485         return;
2486     }
2487     auto& impl = castedThis->impl();
2488     int nativeValue = toInt32(exec, value, NormalConversion);
2489     if (UNLIKELY(exec->hadException()))
2490         return;
2491     impl.setWithScriptStateAttribute(exec, nativeValue);
2492 }
2493
2494
2495 void setJSTestObjWithScriptExecutionContextAttribute(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2496 {
2497     JSValue value = JSValue::decode(encodedValue);
2498     UNUSED_PARAM(baseObject);
2499     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2500     if (UNLIKELY(!castedThis)) {
2501         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2502             reportDeprecatedSetterError(*exec, "TestObj", "withScriptExecutionContextAttribute");
2503         else
2504             throwSetterTypeError(*exec, "TestObj", "withScriptExecutionContextAttribute");
2505         return;
2506     }
2507     auto& impl = castedThis->impl();
2508     TestObj* nativeValue = JSTestObj::toWrapped(value);
2509     if (UNLIKELY(exec->hadException()))
2510         return;
2511     auto* scriptContext = jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject())->scriptExecutionContext();
2512     if (!scriptContext)
2513         return;
2514     impl.setWithScriptExecutionContextAttribute(scriptContext, nativeValue);
2515 }
2516
2517
2518 void setJSTestObjWithScriptStateAttributeRaises(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2519 {
2520     JSValue value = JSValue::decode(encodedValue);
2521     UNUSED_PARAM(baseObject);
2522     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2523     if (UNLIKELY(!castedThis)) {
2524         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2525             reportDeprecatedSetterError(*exec, "TestObj", "withScriptStateAttributeRaises");
2526         else
2527             throwSetterTypeError(*exec, "TestObj", "withScriptStateAttributeRaises");
2528         return;
2529     }
2530     auto& impl = castedThis->impl();
2531     TestObj* nativeValue = JSTestObj::toWrapped(value);
2532     if (UNLIKELY(exec->hadException()))
2533         return;
2534     impl.setWithScriptStateAttributeRaises(exec, nativeValue);
2535 }
2536
2537
2538 void setJSTestObjWithScriptExecutionContextAttributeRaises(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2539 {
2540     JSValue value = JSValue::decode(encodedValue);
2541     UNUSED_PARAM(baseObject);
2542     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2543     if (UNLIKELY(!castedThis)) {
2544         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2545             reportDeprecatedSetterError(*exec, "TestObj", "withScriptExecutionContextAttributeRaises");
2546         else
2547             throwSetterTypeError(*exec, "TestObj", "withScriptExecutionContextAttributeRaises");
2548         return;
2549     }
2550     auto& impl = castedThis->impl();
2551     TestObj* nativeValue = JSTestObj::toWrapped(value);
2552     if (UNLIKELY(exec->hadException()))
2553         return;
2554     auto* scriptContext = jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject())->scriptExecutionContext();
2555     if (!scriptContext)
2556         return;
2557     impl.setWithScriptExecutionContextAttributeRaises(scriptContext, nativeValue);
2558 }
2559
2560
2561 void setJSTestObjWithScriptExecutionContextAndScriptStateAttribute(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2562 {
2563     JSValue value = JSValue::decode(encodedValue);
2564     UNUSED_PARAM(baseObject);
2565     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2566     if (UNLIKELY(!castedThis)) {
2567         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2568             reportDeprecatedSetterError(*exec, "TestObj", "withScriptExecutionContextAndScriptStateAttribute");
2569         else
2570             throwSetterTypeError(*exec, "TestObj", "withScriptExecutionContextAndScriptStateAttribute");
2571         return;
2572     }
2573     auto& impl = castedThis->impl();
2574     TestObj* nativeValue = JSTestObj::toWrapped(value);
2575     if (UNLIKELY(exec->hadException()))
2576         return;
2577     auto* scriptContext = jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject())->scriptExecutionContext();
2578     if (!scriptContext)
2579         return;
2580     impl.setWithScriptExecutionContextAndScriptStateAttribute(exec, scriptContext, nativeValue);
2581 }
2582
2583
2584 void setJSTestObjWithScriptExecutionContextAndScriptStateAttributeRaises(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2585 {
2586     JSValue value = JSValue::decode(encodedValue);
2587     UNUSED_PARAM(baseObject);
2588     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2589     if (UNLIKELY(!castedThis)) {
2590         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2591             reportDeprecatedSetterError(*exec, "TestObj", "withScriptExecutionContextAndScriptStateAttributeRaises");
2592         else
2593             throwSetterTypeError(*exec, "TestObj", "withScriptExecutionContextAndScriptStateAttributeRaises");
2594         return;
2595     }
2596     auto& impl = castedThis->impl();
2597     TestObj* nativeValue = JSTestObj::toWrapped(value);
2598     if (UNLIKELY(exec->hadException()))
2599         return;
2600     auto* scriptContext = jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject())->scriptExecutionContext();
2601     if (!scriptContext)
2602         return;
2603     impl.setWithScriptExecutionContextAndScriptStateAttributeRaises(exec, scriptContext, nativeValue);
2604 }
2605
2606
2607 void setJSTestObjWithScriptExecutionContextAndScriptStateWithSpacesAttribute(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2608 {
2609     JSValue value = JSValue::decode(encodedValue);
2610     UNUSED_PARAM(baseObject);
2611     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2612     if (UNLIKELY(!castedThis)) {
2613         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2614             reportDeprecatedSetterError(*exec, "TestObj", "withScriptExecutionContextAndScriptStateWithSpacesAttribute");
2615         else
2616             throwSetterTypeError(*exec, "TestObj", "withScriptExecutionContextAndScriptStateWithSpacesAttribute");
2617         return;
2618     }
2619     auto& impl = castedThis->impl();
2620     TestObj* nativeValue = JSTestObj::toWrapped(value);
2621     if (UNLIKELY(exec->hadException()))
2622         return;
2623     auto* scriptContext = jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject())->scriptExecutionContext();
2624     if (!scriptContext)
2625         return;
2626     impl.setWithScriptExecutionContextAndScriptStateWithSpacesAttribute(exec, scriptContext, nativeValue);
2627 }
2628
2629
2630 void setJSTestObjWithScriptArgumentsAndCallStackAttribute(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2631 {
2632     JSValue value = JSValue::decode(encodedValue);
2633     UNUSED_PARAM(baseObject);
2634     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2635     if (UNLIKELY(!castedThis)) {
2636         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2637             reportDeprecatedSetterError(*exec, "TestObj", "withScriptArgumentsAndCallStackAttribute");
2638         else
2639             throwSetterTypeError(*exec, "TestObj", "withScriptArgumentsAndCallStackAttribute");
2640         return;
2641     }
2642     auto& impl = castedThis->impl();
2643     TestObj* nativeValue = JSTestObj::toWrapped(value);
2644     if (UNLIKELY(exec->hadException()))
2645         return;
2646     impl.setWithScriptArgumentsAndCallStackAttribute(nativeValue);
2647 }
2648
2649
2650 #if ENABLE(Condition1)
2651 void setJSTestObjConditionalAttr1(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2652 {
2653     JSValue value = JSValue::decode(encodedValue);
2654     UNUSED_PARAM(baseObject);
2655     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2656     if (UNLIKELY(!castedThis)) {
2657         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2658             reportDeprecatedSetterError(*exec, "TestObj", "conditionalAttr1");
2659         else
2660             throwSetterTypeError(*exec, "TestObj", "conditionalAttr1");
2661         return;
2662     }
2663     auto& impl = castedThis->impl();
2664     int nativeValue = toInt32(exec, value, NormalConversion);
2665     if (UNLIKELY(exec->hadException()))
2666         return;
2667     impl.setConditionalAttr1(nativeValue);
2668 }
2669
2670 #endif
2671
2672 #if ENABLE(Condition1) && ENABLE(Condition2)
2673 void setJSTestObjConditionalAttr2(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2674 {
2675     JSValue value = JSValue::decode(encodedValue);
2676     UNUSED_PARAM(baseObject);
2677     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2678     if (UNLIKELY(!castedThis)) {
2679         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2680             reportDeprecatedSetterError(*exec, "TestObj", "conditionalAttr2");
2681         else
2682             throwSetterTypeError(*exec, "TestObj", "conditionalAttr2");
2683         return;
2684     }
2685     auto& impl = castedThis->impl();
2686     int nativeValue = toInt32(exec, value, NormalConversion);
2687     if (UNLIKELY(exec->hadException()))
2688         return;
2689     impl.setConditionalAttr2(nativeValue);
2690 }
2691
2692 #endif
2693
2694 #if ENABLE(Condition1) || ENABLE(Condition2)
2695 void setJSTestObjConditionalAttr3(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2696 {
2697     JSValue value = JSValue::decode(encodedValue);
2698     UNUSED_PARAM(baseObject);
2699     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2700     if (UNLIKELY(!castedThis)) {
2701         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2702             reportDeprecatedSetterError(*exec, "TestObj", "conditionalAttr3");
2703         else
2704             throwSetterTypeError(*exec, "TestObj", "conditionalAttr3");
2705         return;
2706     }
2707     auto& impl = castedThis->impl();
2708     int nativeValue = toInt32(exec, value, NormalConversion);
2709     if (UNLIKELY(exec->hadException()))
2710         return;
2711     impl.setConditionalAttr3(nativeValue);
2712 }
2713
2714 #endif
2715
2716 #if ENABLE(Condition1)
2717 void setJSTestObjConditionalAttr4Constructor(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2718 {
2719     JSValue value = JSValue::decode(encodedValue);
2720     UNUSED_PARAM(baseObject);
2721     UNUSED_PARAM(thisValue);
2722     auto* castedThis = jsCast<JSTestObj*>(baseObject);
2723     UNUSED_PARAM(thisValue);
2724     UNUSED_PARAM(exec);
2725     // Shadowing a built-in constructor.
2726     castedThis->putDirect(exec->vm(), Identifier::fromString(exec, "conditionalAttr4"), value);
2727 }
2728
2729 #endif
2730
2731 #if ENABLE(Condition1) && ENABLE(Condition2)
2732 void setJSTestObjConditionalAttr5Constructor(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2733 {
2734     JSValue value = JSValue::decode(encodedValue);
2735     UNUSED_PARAM(baseObject);
2736     UNUSED_PARAM(thisValue);
2737     auto* castedThis = jsCast<JSTestObj*>(baseObject);
2738     UNUSED_PARAM(thisValue);
2739     UNUSED_PARAM(exec);
2740     // Shadowing a built-in constructor.
2741     castedThis->putDirect(exec->vm(), Identifier::fromString(exec, "conditionalAttr5"), value);
2742 }
2743
2744 #endif
2745
2746 #if ENABLE(Condition1) || ENABLE(Condition2)
2747 void setJSTestObjConditionalAttr6Constructor(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2748 {
2749     JSValue value = JSValue::decode(encodedValue);
2750     UNUSED_PARAM(baseObject);
2751     UNUSED_PARAM(thisValue);
2752     auto* castedThis = jsCast<JSTestObj*>(baseObject);
2753     UNUSED_PARAM(thisValue);
2754     UNUSED_PARAM(exec);
2755     // Shadowing a built-in constructor.
2756     castedThis->putDirect(exec->vm(), Identifier::fromString(exec, "conditionalAttr6"), value);
2757 }
2758
2759 #endif
2760
2761 void setJSTestObjAnyAttribute(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2762 {
2763     JSValue value = JSValue::decode(encodedValue);
2764     UNUSED_PARAM(baseObject);
2765     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2766     if (UNLIKELY(!castedThis)) {
2767         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2768             reportDeprecatedSetterError(*exec, "TestObj", "anyAttribute");
2769         else
2770             throwSetterTypeError(*exec, "TestObj", "anyAttribute");
2771         return;
2772     }
2773     auto& impl = castedThis->impl();
2774     Deprecated::ScriptValue nativeValue = { exec->vm(), value };
2775     if (UNLIKELY(exec->hadException()))
2776         return;
2777     impl.setAnyAttribute(nativeValue);
2778 }
2779
2780
2781 void setJSTestObjMutablePoint(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2782 {
2783     JSValue value = JSValue::decode(encodedValue);
2784     UNUSED_PARAM(baseObject);
2785     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2786     if (UNLIKELY(!castedThis)) {
2787         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2788             reportDeprecatedSetterError(*exec, "TestObj", "mutablePoint");
2789         else
2790             throwSetterTypeError(*exec, "TestObj", "mutablePoint");
2791         return;
2792     }
2793     auto& impl = castedThis->impl();
2794     SVGPropertyTearOff<SVGPoint>* nativeValue = JSSVGPoint::toWrapped(value);
2795     if (UNLIKELY(exec->hadException()))
2796         return;
2797     impl.setMutablePoint(nativeValue);
2798 }
2799
2800
2801 void setJSTestObjImmutablePoint(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2802 {
2803     JSValue value = JSValue::decode(encodedValue);
2804     UNUSED_PARAM(baseObject);
2805     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2806     if (UNLIKELY(!castedThis)) {
2807         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2808             reportDeprecatedSetterError(*exec, "TestObj", "immutablePoint");
2809         else
2810             throwSetterTypeError(*exec, "TestObj", "immutablePoint");
2811         return;
2812     }
2813     auto& impl = castedThis->impl();
2814     SVGPropertyTearOff<SVGPoint>* nativeValue = JSSVGPoint::toWrapped(value);
2815     if (UNLIKELY(exec->hadException()))
2816         return;
2817     impl.setImmutablePoint(nativeValue);
2818 }
2819
2820
2821 void setJSTestObjStrawberry(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2822 {
2823     JSValue value = JSValue::decode(encodedValue);
2824     UNUSED_PARAM(baseObject);
2825     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2826     if (UNLIKELY(!castedThis)) {
2827         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2828             reportDeprecatedSetterError(*exec, "TestObj", "strawberry");
2829         else
2830             throwSetterTypeError(*exec, "TestObj", "strawberry");
2831         return;
2832     }
2833     auto& impl = castedThis->impl();
2834     int nativeValue = toInt32(exec, value, NormalConversion);
2835     if (UNLIKELY(exec->hadException()))
2836         return;
2837     impl.setBlueberry(nativeValue);
2838 }
2839
2840
2841 void setJSTestObjStrictFloat(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2842 {
2843     JSValue value = JSValue::decode(encodedValue);
2844     UNUSED_PARAM(baseObject);
2845     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2846     if (UNLIKELY(!castedThis)) {
2847         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2848             reportDeprecatedSetterError(*exec, "TestObj", "strictFloat");
2849         else
2850             throwSetterTypeError(*exec, "TestObj", "strictFloat");
2851         return;
2852     }
2853     auto& impl = castedThis->impl();
2854     float nativeValue = value.toFloat(exec);
2855     if (UNLIKELY(exec->hadException()))
2856         return;
2857     impl.setStrictFloat(nativeValue);
2858 }
2859
2860
2861 void setJSTestObjId(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2862 {
2863     JSValue value = JSValue::decode(encodedValue);
2864     UNUSED_PARAM(baseObject);
2865     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2866     if (UNLIKELY(!castedThis)) {
2867         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2868             reportDeprecatedSetterError(*exec, "TestObj", "id");
2869         else
2870             throwSetterTypeError(*exec, "TestObj", "id");
2871         return;
2872     }
2873     auto& impl = castedThis->impl();
2874     int nativeValue = toInt32(exec, value, NormalConversion);
2875     if (UNLIKELY(exec->hadException()))
2876         return;
2877     impl.setId(nativeValue);
2878 }
2879
2880
2881 void setJSTestObjReplaceableAttribute(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2882 {
2883     JSValue value = JSValue::decode(encodedValue);
2884     UNUSED_PARAM(baseObject);
2885     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2886     if (UNLIKELY(!castedThis)) {
2887         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2888             reportDeprecatedSetterError(*exec, "TestObj", "replaceableAttribute");
2889         else
2890             throwSetterTypeError(*exec, "TestObj", "replaceableAttribute");
2891         return;
2892     }
2893     // Shadowing a built-in object.
2894     castedThis->putDirect(exec->vm(), Identifier::fromString(exec, "replaceableAttribute"), value);
2895 }
2896
2897
2898 void setJSTestObjNullableLongSettableAttribute(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2899 {
2900     JSValue value = JSValue::decode(encodedValue);
2901     UNUSED_PARAM(baseObject);
2902     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2903     if (UNLIKELY(!castedThis)) {
2904         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2905             reportDeprecatedSetterError(*exec, "TestObj", "nullableLongSettableAttribute");
2906         else
2907             throwSetterTypeError(*exec, "TestObj", "nullableLongSettableAttribute");
2908         return;
2909     }
2910     auto& impl = castedThis->impl();
2911     int nativeValue = toInt32(exec, value, NormalConversion);
2912     if (UNLIKELY(exec->hadException()))
2913         return;
2914     impl.setNullableLongSettableAttribute(nativeValue);
2915 }
2916
2917
2918 void setJSTestObjNullableStringValue(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2919 {
2920     JSValue value = JSValue::decode(encodedValue);
2921     UNUSED_PARAM(baseObject);
2922     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2923     if (UNLIKELY(!castedThis)) {
2924         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2925             reportDeprecatedSetterError(*exec, "TestObj", "nullableStringValue");
2926         else
2927             throwSetterTypeError(*exec, "TestObj", "nullableStringValue");
2928         return;
2929     }
2930     auto& impl = castedThis->impl();
2931     int nativeValue = toInt32(exec, value, NormalConversion);
2932     if (UNLIKELY(exec->hadException()))
2933         return;
2934     impl.setNullableStringValue(nativeValue);
2935 }
2936
2937
2938 void setJSTestObjAttributeWithReservedEnumType(ExecState* exec, JSObject* baseObject, EncodedJSValue thisValue, EncodedJSValue encodedValue)
2939 {
2940     JSValue value = JSValue::decode(encodedValue);
2941     UNUSED_PARAM(baseObject);
2942     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(JSValue::decode(thisValue));
2943     if (UNLIKELY(!castedThis)) {
2944         if (jsDynamicCast<JSTestObjPrototype*>(JSValue::decode(thisValue)))
2945             reportDeprecatedSetterError(*exec, "TestObj", "attributeWithReservedEnumType");
2946         else
2947             throwSetterTypeError(*exec, "TestObj", "attributeWithReservedEnumType");
2948         return;
2949     }
2950     auto& impl = castedThis->impl();
2951     String nativeValue = value.toString(exec)->value(exec);
2952     if (UNLIKELY(exec->hadException()))
2953         return;
2954     if (nativeValue != "" && nativeValue != "OptionalValue1" && nativeValue != "OptionalValue2" && nativeValue != "OptionalValue3")
2955         return;
2956     impl.setAttributeWithReservedEnumType(nativeValue);
2957 }
2958
2959
2960 JSValue JSTestObj::getConstructor(VM& vm, JSGlobalObject* globalObject)
2961 {
2962     return getDOMConstructor<JSTestObjConstructor>(vm, jsCast<JSDOMGlobalObject*>(globalObject));
2963 }
2964
2965 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionVoidMethod(ExecState* exec)
2966 {
2967     JSValue thisValue = exec->thisValue();
2968     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
2969     if (UNLIKELY(!castedThis))
2970         return throwThisTypeError(*exec, "TestObj", "voidMethod");
2971     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
2972     auto& impl = castedThis->impl();
2973     impl.voidMethod();
2974     return JSValue::encode(jsUndefined());
2975 }
2976
2977 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionVoidMethodWithArgs(ExecState* exec)
2978 {
2979     JSValue thisValue = exec->thisValue();
2980     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
2981     if (UNLIKELY(!castedThis))
2982         return throwThisTypeError(*exec, "TestObj", "voidMethodWithArgs");
2983     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
2984     auto& impl = castedThis->impl();
2985     if (UNLIKELY(exec->argumentCount() < 3))
2986         return throwVMError(exec, createNotEnoughArgumentsError(exec));
2987     int longArg = toInt32(exec, exec->argument(0), NormalConversion);
2988     if (UNLIKELY(exec->hadException()))
2989         return JSValue::encode(jsUndefined());
2990     String strArg = exec->argument(1).toString(exec)->value(exec);
2991     if (UNLIKELY(exec->hadException()))
2992         return JSValue::encode(jsUndefined());
2993     TestObj* objArg = JSTestObj::toWrapped(exec->argument(2));
2994     if (UNLIKELY(exec->hadException()))
2995         return JSValue::encode(jsUndefined());
2996     impl.voidMethodWithArgs(longArg, strArg, objArg);
2997     return JSValue::encode(jsUndefined());
2998 }
2999
3000 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionByteMethod(ExecState* exec)
3001 {
3002     JSValue thisValue = exec->thisValue();
3003     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3004     if (UNLIKELY(!castedThis))
3005         return throwThisTypeError(*exec, "TestObj", "byteMethod");
3006     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3007     auto& impl = castedThis->impl();
3008     JSValue result = jsNumber(impl.byteMethod());
3009     return JSValue::encode(result);
3010 }
3011
3012 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionByteMethodWithArgs(ExecState* exec)
3013 {
3014     JSValue thisValue = exec->thisValue();
3015     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3016     if (UNLIKELY(!castedThis))
3017         return throwThisTypeError(*exec, "TestObj", "byteMethodWithArgs");
3018     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3019     auto& impl = castedThis->impl();
3020     if (UNLIKELY(exec->argumentCount() < 3))
3021         return throwVMError(exec, createNotEnoughArgumentsError(exec));
3022     int8_t byteArg = toInt8(exec, exec->argument(0), NormalConversion);
3023     if (UNLIKELY(exec->hadException()))
3024         return JSValue::encode(jsUndefined());
3025     String strArg = exec->argument(1).toString(exec)->value(exec);
3026     if (UNLIKELY(exec->hadException()))
3027         return JSValue::encode(jsUndefined());
3028     TestObj* objArg = JSTestObj::toWrapped(exec->argument(2));
3029     if (UNLIKELY(exec->hadException()))
3030         return JSValue::encode(jsUndefined());
3031     JSValue result = jsNumber(impl.byteMethodWithArgs(byteArg, strArg, objArg));
3032     return JSValue::encode(result);
3033 }
3034
3035 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOctetMethod(ExecState* exec)
3036 {
3037     JSValue thisValue = exec->thisValue();
3038     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3039     if (UNLIKELY(!castedThis))
3040         return throwThisTypeError(*exec, "TestObj", "octetMethod");
3041     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3042     auto& impl = castedThis->impl();
3043     JSValue result = jsNumber(impl.octetMethod());
3044     return JSValue::encode(result);
3045 }
3046
3047 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOctetMethodWithArgs(ExecState* exec)
3048 {
3049     JSValue thisValue = exec->thisValue();
3050     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3051     if (UNLIKELY(!castedThis))
3052         return throwThisTypeError(*exec, "TestObj", "octetMethodWithArgs");
3053     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3054     auto& impl = castedThis->impl();
3055     if (UNLIKELY(exec->argumentCount() < 3))
3056         return throwVMError(exec, createNotEnoughArgumentsError(exec));
3057     uint8_t octetArg = toUInt8(exec, exec->argument(0), NormalConversion);
3058     if (UNLIKELY(exec->hadException()))
3059         return JSValue::encode(jsUndefined());
3060     String strArg = exec->argument(1).toString(exec)->value(exec);
3061     if (UNLIKELY(exec->hadException()))
3062         return JSValue::encode(jsUndefined());
3063     TestObj* objArg = JSTestObj::toWrapped(exec->argument(2));
3064     if (UNLIKELY(exec->hadException()))
3065         return JSValue::encode(jsUndefined());
3066     JSValue result = jsNumber(impl.octetMethodWithArgs(octetArg, strArg, objArg));
3067     return JSValue::encode(result);
3068 }
3069
3070 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionLongMethod(ExecState* exec)
3071 {
3072     JSValue thisValue = exec->thisValue();
3073     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3074     if (UNLIKELY(!castedThis))
3075         return throwThisTypeError(*exec, "TestObj", "longMethod");
3076     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3077     auto& impl = castedThis->impl();
3078     JSValue result = jsNumber(impl.longMethod());
3079     return JSValue::encode(result);
3080 }
3081
3082 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionLongMethodWithArgs(ExecState* exec)
3083 {
3084     JSValue thisValue = exec->thisValue();
3085     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3086     if (UNLIKELY(!castedThis))
3087         return throwThisTypeError(*exec, "TestObj", "longMethodWithArgs");
3088     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3089     auto& impl = castedThis->impl();
3090     if (UNLIKELY(exec->argumentCount() < 3))
3091         return throwVMError(exec, createNotEnoughArgumentsError(exec));
3092     int longArg = toInt32(exec, exec->argument(0), NormalConversion);
3093     if (UNLIKELY(exec->hadException()))
3094         return JSValue::encode(jsUndefined());
3095     String strArg = exec->argument(1).toString(exec)->value(exec);
3096     if (UNLIKELY(exec->hadException()))
3097         return JSValue::encode(jsUndefined());
3098     TestObj* objArg = JSTestObj::toWrapped(exec->argument(2));
3099     if (UNLIKELY(exec->hadException()))
3100         return JSValue::encode(jsUndefined());
3101     JSValue result = jsNumber(impl.longMethodWithArgs(longArg, strArg, objArg));
3102     return JSValue::encode(result);
3103 }
3104
3105 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionObjMethod(ExecState* exec)
3106 {
3107     JSValue thisValue = exec->thisValue();
3108     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3109     if (UNLIKELY(!castedThis))
3110         return throwThisTypeError(*exec, "TestObj", "objMethod");
3111     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3112     auto& impl = castedThis->impl();
3113     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.objMethod()));
3114     return JSValue::encode(result);
3115 }
3116
3117 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionObjMethodWithArgs(ExecState* exec)
3118 {
3119     JSValue thisValue = exec->thisValue();
3120     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3121     if (UNLIKELY(!castedThis))
3122         return throwThisTypeError(*exec, "TestObj", "objMethodWithArgs");
3123     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3124     auto& impl = castedThis->impl();
3125     if (UNLIKELY(exec->argumentCount() < 3))
3126         return throwVMError(exec, createNotEnoughArgumentsError(exec));
3127     int longArg = toInt32(exec, exec->argument(0), NormalConversion);
3128     if (UNLIKELY(exec->hadException()))
3129         return JSValue::encode(jsUndefined());
3130     String strArg = exec->argument(1).toString(exec)->value(exec);
3131     if (UNLIKELY(exec->hadException()))
3132         return JSValue::encode(jsUndefined());
3133     TestObj* objArg = JSTestObj::toWrapped(exec->argument(2));
3134     if (UNLIKELY(exec->hadException()))
3135         return JSValue::encode(jsUndefined());
3136     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.objMethodWithArgs(longArg, strArg, objArg)));
3137     return JSValue::encode(result);
3138 }
3139
3140 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithSequenceArg(ExecState* exec)
3141 {
3142     JSValue thisValue = exec->thisValue();
3143     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3144     if (UNLIKELY(!castedThis))
3145         return throwThisTypeError(*exec, "TestObj", "methodWithSequenceArg");
3146     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3147     auto& impl = castedThis->impl();
3148     if (UNLIKELY(exec->argumentCount() < 1))
3149         return throwVMError(exec, createNotEnoughArgumentsError(exec));
3150     Vector<RefPtr<ScriptProfile>> sequenceArg = (toRefPtrNativeArray<ScriptProfile, JSScriptProfile>(exec, exec->argument(0), &JSScriptProfile::toWrapped));
3151     if (UNLIKELY(exec->hadException()))
3152         return JSValue::encode(jsUndefined());
3153     impl.methodWithSequenceArg(sequenceArg);
3154     return JSValue::encode(jsUndefined());
3155 }
3156
3157 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodReturningSequence(ExecState* exec)
3158 {
3159     JSValue thisValue = exec->thisValue();
3160     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3161     if (UNLIKELY(!castedThis))
3162         return throwThisTypeError(*exec, "TestObj", "methodReturningSequence");
3163     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3164     auto& impl = castedThis->impl();
3165     if (UNLIKELY(exec->argumentCount() < 1))
3166         return throwVMError(exec, createNotEnoughArgumentsError(exec));
3167     int longArg = toInt32(exec, exec->argument(0), NormalConversion);
3168     if (UNLIKELY(exec->hadException()))
3169         return JSValue::encode(jsUndefined());
3170     JSValue result = jsArray(exec, castedThis->globalObject(), impl.methodReturningSequence(longArg));
3171     return JSValue::encode(result);
3172 }
3173
3174 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithEnumArg(ExecState* exec)
3175 {
3176     JSValue thisValue = exec->thisValue();
3177     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3178     if (UNLIKELY(!castedThis))
3179         return throwThisTypeError(*exec, "TestObj", "methodWithEnumArg");
3180     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3181     auto& impl = castedThis->impl();
3182     if (UNLIKELY(exec->argumentCount() < 1))
3183         return throwVMError(exec, createNotEnoughArgumentsError(exec));
3184     // Keep pointer to the JSString in a local so we don't need to ref the String.
3185     auto* enumArgString = exec->argument(0).toString(exec);
3186     if (UNLIKELY(exec->hadException()))
3187         return JSValue::encode(jsUndefined());
3188     auto& enumArg = enumArgString->value(exec);
3189     if (enumArg != "" && enumArg != "EnumValue1" && enumArg != "EnumValue2" && enumArg != "EnumValue3")
3190         return throwArgumentMustBeEnumError(*exec, 0, "enumArg", "TestObj", "methodWithEnumArg", "\"\", \"EnumValue1\", \"EnumValue2\", \"EnumValue3\"");
3191     impl.methodWithEnumArg(enumArg);
3192     return JSValue::encode(jsUndefined());
3193 }
3194
3195 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows(ExecState* exec)
3196 {
3197     JSValue thisValue = exec->thisValue();
3198     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3199     if (UNLIKELY(!castedThis))
3200         return throwThisTypeError(*exec, "TestObj", "methodThatRequiresAllArgsAndThrows");
3201     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3202     auto& impl = castedThis->impl();
3203     if (UNLIKELY(exec->argumentCount() < 2))
3204         return throwVMError(exec, createNotEnoughArgumentsError(exec));
3205     ExceptionCode ec = 0;
3206     String strArg = exec->argument(0).toString(exec)->value(exec);
3207     if (UNLIKELY(exec->hadException()))
3208         return JSValue::encode(jsUndefined());
3209     TestObj* objArg = JSTestObj::toWrapped(exec->argument(1));
3210     if (UNLIKELY(exec->hadException()))
3211         return JSValue::encode(jsUndefined());
3212     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.methodThatRequiresAllArgsAndThrows(strArg, objArg, ec)));
3213
3214     setDOMException(exec, ec);
3215     return JSValue::encode(result);
3216 }
3217
3218 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionSerializedValue(ExecState* exec)
3219 {
3220     JSValue thisValue = exec->thisValue();
3221     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3222     if (UNLIKELY(!castedThis))
3223         return throwThisTypeError(*exec, "TestObj", "serializedValue");
3224     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3225     auto& impl = castedThis->impl();
3226     if (UNLIKELY(exec->argumentCount() < 1))
3227         return throwVMError(exec, createNotEnoughArgumentsError(exec));
3228     RefPtr<SerializedScriptValue> serializedArg = SerializedScriptValue::create(exec, exec->argument(0), 0, 0);
3229     if (UNLIKELY(exec->hadException()))
3230         return JSValue::encode(jsUndefined());
3231     impl.serializedValue(serializedArg);
3232     return JSValue::encode(jsUndefined());
3233 }
3234
3235 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionOptionsObject(ExecState* exec)
3236 {
3237     JSValue thisValue = exec->thisValue();
3238     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3239     if (UNLIKELY(!castedThis))
3240         return throwThisTypeError(*exec, "TestObj", "optionsObject");
3241     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3242     auto& impl = castedThis->impl();
3243     if (UNLIKELY(exec->argumentCount() < 1))
3244         return throwVMError(exec, createNotEnoughArgumentsError(exec));
3245     Dictionary oo = { exec, exec->argument(0) };
3246     if (UNLIKELY(exec->hadException()))
3247         return JSValue::encode(jsUndefined());
3248     Dictionary ooo = { exec, exec->argument(1) };
3249     if (UNLIKELY(exec->hadException()))
3250         return JSValue::encode(jsUndefined());
3251     impl.optionsObject(oo, ooo);
3252     return JSValue::encode(jsUndefined());
3253 }
3254
3255 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithException(ExecState* exec)
3256 {
3257     JSValue thisValue = exec->thisValue();
3258     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3259     if (UNLIKELY(!castedThis))
3260         return throwThisTypeError(*exec, "TestObj", "methodWithException");
3261     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3262     auto& impl = castedThis->impl();
3263     ExceptionCode ec = 0;
3264     impl.methodWithException(ec);
3265     setDOMException(exec, ec);
3266     return JSValue::encode(jsUndefined());
3267 }
3268
3269 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionCustomMethod(ExecState* exec)
3270 {
3271     JSValue thisValue = exec->thisValue();
3272     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3273     if (UNLIKELY(!castedThis))
3274         return throwThisTypeError(*exec, "TestObj", "customMethod");
3275     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3276     return JSValue::encode(castedThis->customMethod(exec));
3277 }
3278
3279 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionCustomMethodWithArgs(ExecState* exec)
3280 {
3281     JSValue thisValue = exec->thisValue();
3282     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3283     if (UNLIKELY(!castedThis))
3284         return throwThisTypeError(*exec, "TestObj", "customMethodWithArgs");
3285     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3286     return JSValue::encode(castedThis->customMethodWithArgs(exec));
3287 }
3288
3289 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionAddEventListener(ExecState* exec)
3290 {
3291     JSValue thisValue = exec->thisValue();
3292     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3293     if (UNLIKELY(!castedThis))
3294         return throwThisTypeError(*exec, "TestObj", "addEventListener");
3295     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3296     auto& impl = castedThis->impl();
3297     JSValue listener = exec->argument(1);
3298     if (UNLIKELY(!listener.isObject()))
3299         return JSValue::encode(jsUndefined());
3300     impl.addEventListener(exec->argument(0).toString(exec)->toAtomicString(exec), createJSEventListenerForAdd(*exec, *asObject(listener), *castedThis), exec->argument(2).toBoolean(exec));
3301     return JSValue::encode(jsUndefined());
3302 }
3303
3304 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionRemoveEventListener(ExecState* exec)
3305 {
3306     JSValue thisValue = exec->thisValue();
3307     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3308     if (UNLIKELY(!castedThis))
3309         return throwThisTypeError(*exec, "TestObj", "removeEventListener");
3310     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3311     auto& impl = castedThis->impl();
3312     JSValue listener = exec->argument(1);
3313     if (UNLIKELY(!listener.isObject()))
3314         return JSValue::encode(jsUndefined());
3315     impl.removeEventListener(exec->argument(0).toString(exec)->toAtomicString(exec), createJSEventListenerForRemove(*exec, *asObject(listener), *castedThis).ptr(), exec->argument(2).toBoolean(exec));
3316     return JSValue::encode(jsUndefined());
3317 }
3318
3319 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptStateVoid(ExecState* exec)
3320 {
3321     JSValue thisValue = exec->thisValue();
3322     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3323     if (UNLIKELY(!castedThis))
3324         return throwThisTypeError(*exec, "TestObj", "withScriptStateVoid");
3325     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3326     auto& impl = castedThis->impl();
3327     impl.withScriptStateVoid(exec);
3328     return JSValue::encode(jsUndefined());
3329 }
3330
3331 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptStateObj(ExecState* exec)
3332 {
3333     JSValue thisValue = exec->thisValue();
3334     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3335     if (UNLIKELY(!castedThis))
3336         return throwThisTypeError(*exec, "TestObj", "withScriptStateObj");
3337     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3338     auto& impl = castedThis->impl();
3339     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.withScriptStateObj(exec)));
3340     if (UNLIKELY(exec->hadException()))
3341         return JSValue::encode(jsUndefined());
3342     return JSValue::encode(result);
3343 }
3344
3345 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptStateVoidException(ExecState* exec)
3346 {
3347     JSValue thisValue = exec->thisValue();
3348     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3349     if (UNLIKELY(!castedThis))
3350         return throwThisTypeError(*exec, "TestObj", "withScriptStateVoidException");
3351     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3352     auto& impl = castedThis->impl();
3353     ExceptionCode ec = 0;
3354     impl.withScriptStateVoidException(exec, ec);
3355     setDOMException(exec, ec);
3356     return JSValue::encode(jsUndefined());
3357 }
3358
3359 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptStateObjException(ExecState* exec)
3360 {
3361     JSValue thisValue = exec->thisValue();
3362     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3363     if (UNLIKELY(!castedThis))
3364         return throwThisTypeError(*exec, "TestObj", "withScriptStateObjException");
3365     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3366     auto& impl = castedThis->impl();
3367     ExceptionCode ec = 0;
3368     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.withScriptStateObjException(exec, ec)));
3369
3370     setDOMException(exec, ec);
3371     if (UNLIKELY(exec->hadException()))
3372         return JSValue::encode(jsUndefined());
3373     return JSValue::encode(result);
3374 }
3375
3376 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptExecutionContext(ExecState* exec)
3377 {
3378     JSValue thisValue = exec->thisValue();
3379     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3380     if (UNLIKELY(!castedThis))
3381         return throwThisTypeError(*exec, "TestObj", "withScriptExecutionContext");
3382     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3383     auto& impl = castedThis->impl();
3384     auto* scriptContext = jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject())->scriptExecutionContext();
3385     if (!scriptContext)
3386         return JSValue::encode(jsUndefined());
3387     impl.withScriptExecutionContext(scriptContext);
3388     return JSValue::encode(jsUndefined());
3389 }
3390
3391 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptState(ExecState* exec)
3392 {
3393     JSValue thisValue = exec->thisValue();
3394     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3395     if (UNLIKELY(!castedThis))
3396         return throwThisTypeError(*exec, "TestObj", "withScriptExecutionContextAndScriptState");
3397     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3398     auto& impl = castedThis->impl();
3399     auto* scriptContext = jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject())->scriptExecutionContext();
3400     if (!scriptContext)
3401         return JSValue::encode(jsUndefined());
3402     impl.withScriptExecutionContextAndScriptState(exec, scriptContext);
3403     return JSValue::encode(jsUndefined());
3404 }
3405
3406 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateObjException(ExecState* exec)
3407 {
3408     JSValue thisValue = exec->thisValue();
3409     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3410     if (UNLIKELY(!castedThis))
3411         return throwThisTypeError(*exec, "TestObj", "withScriptExecutionContextAndScriptStateObjException");
3412     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3413     auto& impl = castedThis->impl();
3414     ExceptionCode ec = 0;
3415     auto* scriptContext = jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject())->scriptExecutionContext();
3416     if (!scriptContext)
3417         return JSValue::encode(jsUndefined());
3418     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.withScriptExecutionContextAndScriptStateObjException(exec, scriptContext, ec)));
3419
3420     setDOMException(exec, ec);
3421     if (UNLIKELY(exec->hadException()))
3422         return JSValue::encode(jsUndefined());
3423     return JSValue::encode(result);
3424 }
3425
3426 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptExecutionContextAndScriptStateWithSpaces(ExecState* exec)
3427 {
3428     JSValue thisValue = exec->thisValue();
3429     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3430     if (UNLIKELY(!castedThis))
3431         return throwThisTypeError(*exec, "TestObj", "withScriptExecutionContextAndScriptStateWithSpaces");
3432     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3433     auto& impl = castedThis->impl();
3434     auto* scriptContext = jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject())->scriptExecutionContext();
3435     if (!scriptContext)
3436         return JSValue::encode(jsUndefined());
3437     JSValue result = toJS(exec, castedThis->globalObject(), WTF::getPtr(impl.withScriptExecutionContextAndScriptStateWithSpaces(exec, scriptContext)));
3438     if (UNLIKELY(exec->hadException()))
3439         return JSValue::encode(jsUndefined());
3440     return JSValue::encode(result);
3441 }
3442
3443 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionWithScriptArgumentsAndCallStack(ExecState* exec)
3444 {
3445     JSValue thisValue = exec->thisValue();
3446     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3447     if (UNLIKELY(!castedThis))
3448         return throwThisTypeError(*exec, "TestObj", "withScriptArgumentsAndCallStack");
3449     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3450     auto& impl = castedThis->impl();
3451     RefPtr<Inspector::ScriptArguments> scriptArguments(Inspector::createScriptArguments(exec, 0));
3452     impl.withScriptArgumentsAndCallStack(scriptArguments.release());
3453     return JSValue::encode(jsUndefined());
3454 }
3455
3456 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalArg(ExecState* exec)
3457 {
3458     JSValue thisValue = exec->thisValue();
3459     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3460     if (UNLIKELY(!castedThis))
3461         return throwThisTypeError(*exec, "TestObj", "methodWithOptionalArg");
3462     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3463     auto& impl = castedThis->impl();
3464
3465     size_t argsCount = exec->argumentCount();
3466     if (argsCount <= 0) {
3467         impl.methodWithOptionalArg();
3468         return JSValue::encode(jsUndefined());
3469     }
3470
3471     int opt = toInt32(exec, exec->argument(0), NormalConversion);
3472     if (UNLIKELY(exec->hadException()))
3473         return JSValue::encode(jsUndefined());
3474     impl.methodWithOptionalArg(opt);
3475     return JSValue::encode(jsUndefined());
3476 }
3477
3478 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg(ExecState* exec)
3479 {
3480     JSValue thisValue = exec->thisValue();
3481     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3482     if (UNLIKELY(!castedThis))
3483         return throwThisTypeError(*exec, "TestObj", "methodWithNonOptionalArgAndOptionalArg");
3484     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3485     auto& impl = castedThis->impl();
3486     if (UNLIKELY(exec->argumentCount() < 1))
3487         return throwVMError(exec, createNotEnoughArgumentsError(exec));
3488     int nonOpt = toInt32(exec, exec->argument(0), NormalConversion);
3489     if (UNLIKELY(exec->hadException()))
3490         return JSValue::encode(jsUndefined());
3491
3492     size_t argsCount = exec->argumentCount();
3493     if (argsCount <= 1) {
3494         impl.methodWithNonOptionalArgAndOptionalArg(nonOpt);
3495         return JSValue::encode(jsUndefined());
3496     }
3497
3498     int opt = toInt32(exec, exec->argument(1), NormalConversion);
3499     if (UNLIKELY(exec->hadException()))
3500         return JSValue::encode(jsUndefined());
3501     impl.methodWithNonOptionalArgAndOptionalArg(nonOpt, opt);
3502     return JSValue::encode(jsUndefined());
3503 }
3504
3505 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs(ExecState* exec)
3506 {
3507     JSValue thisValue = exec->thisValue();
3508     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3509     if (UNLIKELY(!castedThis))
3510         return throwThisTypeError(*exec, "TestObj", "methodWithNonOptionalArgAndTwoOptionalArgs");
3511     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3512     auto& impl = castedThis->impl();
3513     if (UNLIKELY(exec->argumentCount() < 1))
3514         return throwVMError(exec, createNotEnoughArgumentsError(exec));
3515     int nonOpt = toInt32(exec, exec->argument(0), NormalConversion);
3516     if (UNLIKELY(exec->hadException()))
3517         return JSValue::encode(jsUndefined());
3518
3519     size_t argsCount = exec->argumentCount();
3520     if (argsCount <= 1) {
3521         impl.methodWithNonOptionalArgAndTwoOptionalArgs(nonOpt);
3522         return JSValue::encode(jsUndefined());
3523     }
3524
3525     int opt1 = toInt32(exec, exec->argument(1), NormalConversion);
3526     if (UNLIKELY(exec->hadException()))
3527         return JSValue::encode(jsUndefined());
3528     if (argsCount <= 2) {
3529         impl.methodWithNonOptionalArgAndTwoOptionalArgs(nonOpt, opt1);
3530         return JSValue::encode(jsUndefined());
3531     }
3532
3533     int opt2 = toInt32(exec, exec->argument(2), NormalConversion);
3534     if (UNLIKELY(exec->hadException()))
3535         return JSValue::encode(jsUndefined());
3536     impl.methodWithNonOptionalArgAndTwoOptionalArgs(nonOpt, opt1, opt2);
3537     return JSValue::encode(jsUndefined());
3538 }
3539
3540 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalString(ExecState* exec)
3541 {
3542     JSValue thisValue = exec->thisValue();
3543     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3544     if (UNLIKELY(!castedThis))
3545         return throwThisTypeError(*exec, "TestObj", "methodWithOptionalString");
3546     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3547     auto& impl = castedThis->impl();
3548
3549     size_t argsCount = exec->argumentCount();
3550     if (argsCount <= 0) {
3551         impl.methodWithOptionalString();
3552         return JSValue::encode(jsUndefined());
3553     }
3554
3555     String str = exec->argument(0).toString(exec)->value(exec);
3556     if (UNLIKELY(exec->hadException()))
3557         return JSValue::encode(jsUndefined());
3558     impl.methodWithOptionalString(str);
3559     return JSValue::encode(jsUndefined());
3560 }
3561
3562 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalStringIsUndefined(ExecState* exec)
3563 {
3564     JSValue thisValue = exec->thisValue();
3565     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3566     if (UNLIKELY(!castedThis))
3567         return throwThisTypeError(*exec, "TestObj", "methodWithOptionalStringIsUndefined");
3568     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3569     auto& impl = castedThis->impl();
3570     String str = exec->argument(0).toString(exec)->value(exec);
3571     if (UNLIKELY(exec->hadException()))
3572         return JSValue::encode(jsUndefined());
3573     impl.methodWithOptionalStringIsUndefined(str);
3574     return JSValue::encode(jsUndefined());
3575 }
3576
3577 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithOptionalStringIsNullString(ExecState* exec)
3578 {
3579     JSValue thisValue = exec->thisValue();
3580     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3581     if (UNLIKELY(!castedThis))
3582         return throwThisTypeError(*exec, "TestObj", "methodWithOptionalStringIsNullString");
3583     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3584     auto& impl = castedThis->impl();
3585     String str = exec->argumentCount() <= 0 ? String() : exec->uncheckedArgument(0).toString(exec)->value(exec);
3586     if (UNLIKELY(exec->hadException()))
3587         return JSValue::encode(jsUndefined());
3588     impl.methodWithOptionalStringIsNullString(str);
3589     return JSValue::encode(jsUndefined());
3590 }
3591
3592 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithCallbackArg(ExecState* exec)
3593 {
3594     JSValue thisValue = exec->thisValue();
3595     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3596     if (UNLIKELY(!castedThis))
3597         return throwThisTypeError(*exec, "TestObj", "methodWithCallbackArg");
3598     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3599     auto& impl = castedThis->impl();
3600     if (UNLIKELY(exec->argumentCount() < 1))
3601         return throwVMError(exec, createNotEnoughArgumentsError(exec));
3602     if (!exec->argument(0).isFunction())
3603         return throwArgumentMustBeFunctionError(*exec, 0, "callback", "TestObj", "methodWithCallbackArg");
3604     RefPtr<TestCallback> callback = JSTestCallback::create(asObject(exec->uncheckedArgument(0)), castedThis->globalObject());
3605     impl.methodWithCallbackArg(callback);
3606     return JSValue::encode(jsUndefined());
3607 }
3608
3609 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg(ExecState* exec)
3610 {
3611     JSValue thisValue = exec->thisValue();
3612     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3613     if (UNLIKELY(!castedThis))
3614         return throwThisTypeError(*exec, "TestObj", "methodWithNonCallbackArgAndCallbackArg");
3615     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3616     auto& impl = castedThis->impl();
3617     if (UNLIKELY(exec->argumentCount() < 2))
3618         return throwVMError(exec, createNotEnoughArgumentsError(exec));
3619     int nonCallback = toInt32(exec, exec->argument(0), NormalConversion);
3620     if (UNLIKELY(exec->hadException()))
3621         return JSValue::encode(jsUndefined());
3622     if (!exec->argument(1).isFunction())
3623         return throwArgumentMustBeFunctionError(*exec, 1, "callback", "TestObj", "methodWithNonCallbackArgAndCallbackArg");
3624     RefPtr<TestCallback> callback = JSTestCallback::create(asObject(exec->uncheckedArgument(1)), castedThis->globalObject());
3625     impl.methodWithNonCallbackArgAndCallbackArg(nonCallback, callback);
3626     return JSValue::encode(jsUndefined());
3627 }
3628
3629 EncodedJSValue JSC_HOST_CALL jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg(ExecState* exec)
3630 {
3631     JSValue thisValue = exec->thisValue();
3632     JSTestObj* castedThis = jsDynamicCast<JSTestObj*>(thisValue);
3633     if (UNLIKELY(!castedThis))
3634         return throwThisTypeError(*exec, "TestObj", "methodWithCallbackAndOptionalArg");
3635     ASSERT_GC_OBJECT_INHERITS(castedThis, JSTestObj::info());
3636     auto& impl = castedThis->impl();
3637     RefPtr<TestCallback> callback;
3638     if (!exec->argument(0).isUndefinedOrNull()) {
3639         if (!exec->uncheckedArgument(0).isFunction())
3640             return throwArgumentMustBeFunctionError(*exec, 0, "callback", "TestObj", "methodWithCallbackAndOptionalArg");
3641         callback = JSTestCallback::create(asObject(exec->uncheckedArgument(0)), castedThis->globalObject());
3642     }
3643     impl.methodWithCallbackAndOptionalArg(callback);
3644     return JSValue::encode(jsUndefined());
3645 }
3646
3647 EncodedJSValue JSC_HOST_CALL jsTestObjConstructorFunctionStaticMethodWithCallbackAndOptionalArg(ExecState* exec)
3648 {
3649     RefPtr<TestCallback> callback;
3650     if (!exec->argument(0).isUndefinedOrNull()) {
3651         if (!exec->uncheckedArgument(0).isFunction())
3652             return throwArgumentMustBeFunctionError(*exec, 0, "callback", "TestObj", "staticMethodWithCallbackAndOptionalArg");
3653         callback = createFunctionOnlyCallback<JSTestCallback>(exec, jsCast<JSDOMGlobalObject*>(exec->lexicalGlobalObject()), exec->uncheckedArgument(0));
3654     }
3655     TestObj::staticMethodWithCallbackAndOptionalArg(callback);
3656     return JSValue::encode(jsUndefined());
3657 }
3658
3659 EncodedJSValue JSC_HOST_CALL jsTestObjConstructorFunctionStaticMethodWithCallbackArg(ExecState* exec)
3660 {
3661     if (UNLIKELY(exec->argumentCount() < 1))
3662         return throwVMError(e