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