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