V8TestObj.cpp revision cad810f21b803229eb11403f9209855525a25d57
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., 59 Temple Place - Suite 330,
18    Boston, MA 02111-1307, USA.
19*/
20
21#include "config.h"
22#include "V8TestObj.h"
23
24#include "ExceptionCode.h"
25#include "HTMLNames.h"
26#include "IDBBindingUtilities.h"
27#include "IDBKey.h"
28#include "OptionsObject.h"
29#include "RuntimeEnabledFeatures.h"
30#include "ScriptArguments.h"
31#include "ScriptCallStack.h"
32#include "ScriptCallStackFactory.h"
33#include "SerializedScriptValue.h"
34#include "V8Binding.h"
35#include "V8BindingMacros.h"
36#include "V8BindingState.h"
37#include "V8DOMWrapper.h"
38#include "V8IsolatedContext.h"
39#include "V8Proxy.h"
40#include "V8TestCallback.h"
41#include "V8int.h"
42#include "V8log.h"
43#include <wtf/GetPtr.h>
44#include <wtf/RefCounted.h>
45#include <wtf/RefPtr.h>
46
47namespace WebCore {
48
49WrapperTypeInfo V8TestObj::info = { V8TestObj::GetTemplate, V8TestObj::derefObject, 0 };
50
51namespace TestObjInternal {
52
53template <typename T> void V8_USE(T) { }
54
55static v8::Handle<v8::Value> readOnlyIntAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
56{
57    INC_STATS("DOM.TestObj.readOnlyIntAttr._get");
58    TestObj* imp = V8TestObj::toNative(info.Holder());
59    return v8::Integer::New(imp->readOnlyIntAttr());
60}
61
62static v8::Handle<v8::Value> readOnlyStringAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
63{
64    INC_STATS("DOM.TestObj.readOnlyStringAttr._get");
65    TestObj* imp = V8TestObj::toNative(info.Holder());
66    return v8String(imp->readOnlyStringAttr());
67}
68
69static v8::Handle<v8::Value> readOnlyTestObjAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
70{
71    INC_STATS("DOM.TestObj.readOnlyTestObjAttr._get");
72    TestObj* imp = V8TestObj::toNative(info.Holder());
73    RefPtr<TestObj> result = imp->readOnlyTestObjAttr();
74    v8::Handle<v8::Value> wrapper = result.get() ? getDOMObjectMap().get(result.get()) : v8::Handle<v8::Value>();
75    if (wrapper.IsEmpty()) {
76        wrapper = toV8(result.get());
77        if (!wrapper.IsEmpty())
78            V8DOMWrapper::setHiddenReference(info.Holder(), wrapper);
79    }
80    return wrapper;
81}
82
83static v8::Handle<v8::Value> shortAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
84{
85    INC_STATS("DOM.TestObj.shortAttr._get");
86    TestObj* imp = V8TestObj::toNative(info.Holder());
87    return v8::Integer::New(imp->shortAttr());
88}
89
90static void shortAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
91{
92    INC_STATS("DOM.TestObj.shortAttr._set");
93    TestObj* imp = V8TestObj::toNative(info.Holder());
94    int v = toInt32(value);
95    imp->setShortAttr(v);
96    return;
97}
98
99static v8::Handle<v8::Value> unsignedShortAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
100{
101    INC_STATS("DOM.TestObj.unsignedShortAttr._get");
102    TestObj* imp = V8TestObj::toNative(info.Holder());
103    return v8::Integer::New(imp->unsignedShortAttr());
104}
105
106static void unsignedShortAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
107{
108    INC_STATS("DOM.TestObj.unsignedShortAttr._set");
109    TestObj* imp = V8TestObj::toNative(info.Holder());
110    int v = toUInt32(value);
111    imp->setUnsignedShortAttr(v);
112    return;
113}
114
115static v8::Handle<v8::Value> intAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
116{
117    INC_STATS("DOM.TestObj.intAttr._get");
118    TestObj* imp = V8TestObj::toNative(info.Holder());
119    return v8::Integer::New(imp->intAttr());
120}
121
122static void intAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
123{
124    INC_STATS("DOM.TestObj.intAttr._set");
125    TestObj* imp = V8TestObj::toNative(info.Holder());
126    int v = toInt32(value);
127    imp->setIntAttr(v);
128    return;
129}
130
131static v8::Handle<v8::Value> longLongAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
132{
133    INC_STATS("DOM.TestObj.longLongAttr._get");
134    TestObj* imp = V8TestObj::toNative(info.Holder());
135    return v8::Number::New(static_cast<double>(imp->longLongAttr()));
136}
137
138static void longLongAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
139{
140    INC_STATS("DOM.TestObj.longLongAttr._set");
141    TestObj* imp = V8TestObj::toNative(info.Holder());
142    long long v = toInt64(value);
143    imp->setLongLongAttr(WTF::getPtr(v));
144    return;
145}
146
147static v8::Handle<v8::Value> unsignedLongLongAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
148{
149    INC_STATS("DOM.TestObj.unsignedLongLongAttr._get");
150    TestObj* imp = V8TestObj::toNative(info.Holder());
151    return v8::Number::New(static_cast<double>(imp->unsignedLongLongAttr()));
152}
153
154static void unsignedLongLongAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
155{
156    INC_STATS("DOM.TestObj.unsignedLongLongAttr._set");
157    TestObj* imp = V8TestObj::toNative(info.Holder());
158    unsigned long long v = toInt64(value);
159    imp->setUnsignedLongLongAttr(WTF::getPtr(v));
160    return;
161}
162
163static v8::Handle<v8::Value> stringAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
164{
165    INC_STATS("DOM.TestObj.stringAttr._get");
166    TestObj* imp = V8TestObj::toNative(info.Holder());
167    return v8String(imp->stringAttr());
168}
169
170static void stringAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
171{
172    INC_STATS("DOM.TestObj.stringAttr._set");
173    TestObj* imp = V8TestObj::toNative(info.Holder());
174    STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<>, v, value);
175    imp->setStringAttr(v);
176    return;
177}
178
179static v8::Handle<v8::Value> testObjAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
180{
181    INC_STATS("DOM.TestObj.testObjAttr._get");
182    TestObj* imp = V8TestObj::toNative(info.Holder());
183    return toV8(imp->testObjAttr());
184}
185
186static void testObjAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
187{
188    INC_STATS("DOM.TestObj.testObjAttr._set");
189    TestObj* imp = V8TestObj::toNative(info.Holder());
190    TestObj* v = V8TestObj::HasInstance(value) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(value)) : 0;
191    imp->setTestObjAttr(WTF::getPtr(v));
192    return;
193}
194
195static v8::Handle<v8::Value> XMLObjAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
196{
197    INC_STATS("DOM.TestObj.XMLObjAttr._get");
198    TestObj* imp = V8TestObj::toNative(info.Holder());
199    return toV8(imp->xmlObjAttr());
200}
201
202static void XMLObjAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
203{
204    INC_STATS("DOM.TestObj.XMLObjAttr._set");
205    TestObj* imp = V8TestObj::toNative(info.Holder());
206    TestObj* v = V8TestObj::HasInstance(value) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(value)) : 0;
207    imp->setXMLObjAttr(WTF::getPtr(v));
208    return;
209}
210
211static v8::Handle<v8::Value> createAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
212{
213    INC_STATS("DOM.TestObj.create._get");
214    TestObj* imp = V8TestObj::toNative(info.Holder());
215    return v8Boolean(imp->isCreate());
216}
217
218static void createAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
219{
220    INC_STATS("DOM.TestObj.create._set");
221    TestObj* imp = V8TestObj::toNative(info.Holder());
222    bool v = value->BooleanValue();
223    imp->setCreate(v);
224    return;
225}
226
227static v8::Handle<v8::Value> reflectedStringAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
228{
229    INC_STATS("DOM.TestObj.reflectedStringAttr._get");
230    TestObj* imp = V8TestObj::toNative(info.Holder());
231    return v8String(imp->getAttribute(WebCore::HTMLNames::reflectedstringattrAttr));
232}
233
234static void reflectedStringAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
235{
236    INC_STATS("DOM.TestObj.reflectedStringAttr._set");
237    TestObj* imp = V8TestObj::toNative(info.Holder());
238    STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<WithNullCheck>, v, value);
239    imp->setAttribute(WebCore::HTMLNames::reflectedstringattrAttr, v);
240    return;
241}
242
243static v8::Handle<v8::Value> reflectedIntegralAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
244{
245    INC_STATS("DOM.TestObj.reflectedIntegralAttr._get");
246    TestObj* imp = V8TestObj::toNative(info.Holder());
247    return v8::Integer::New(imp->getIntegralAttribute(WebCore::HTMLNames::reflectedintegralattrAttr));
248}
249
250static void reflectedIntegralAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
251{
252    INC_STATS("DOM.TestObj.reflectedIntegralAttr._set");
253    TestObj* imp = V8TestObj::toNative(info.Holder());
254    int v = toInt32(value);
255    imp->setIntegralAttribute(WebCore::HTMLNames::reflectedintegralattrAttr, v);
256    return;
257}
258
259static v8::Handle<v8::Value> reflectedUnsignedIntegralAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
260{
261    INC_STATS("DOM.TestObj.reflectedUnsignedIntegralAttr._get");
262    TestObj* imp = V8TestObj::toNative(info.Holder());
263    return v8::Integer::NewFromUnsigned(imp->getUnsignedIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr));
264}
265
266static void reflectedUnsignedIntegralAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
267{
268    INC_STATS("DOM.TestObj.reflectedUnsignedIntegralAttr._set");
269    TestObj* imp = V8TestObj::toNative(info.Holder());
270    unsigned v = toUInt32(value);
271    imp->setUnsignedIntegralAttribute(WebCore::HTMLNames::reflectedunsignedintegralattrAttr, v);
272    return;
273}
274
275static v8::Handle<v8::Value> reflectedBooleanAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
276{
277    INC_STATS("DOM.TestObj.reflectedBooleanAttr._get");
278    TestObj* imp = V8TestObj::toNative(info.Holder());
279    return v8Boolean(imp->hasAttribute(WebCore::HTMLNames::reflectedbooleanattrAttr));
280}
281
282static void reflectedBooleanAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
283{
284    INC_STATS("DOM.TestObj.reflectedBooleanAttr._set");
285    TestObj* imp = V8TestObj::toNative(info.Holder());
286    bool v = value->BooleanValue();
287    imp->setBooleanAttribute(WebCore::HTMLNames::reflectedbooleanattrAttr, v);
288    return;
289}
290
291static v8::Handle<v8::Value> reflectedURLAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
292{
293    INC_STATS("DOM.TestObj.reflectedURLAttr._get");
294    TestObj* imp = V8TestObj::toNative(info.Holder());
295    return v8String(imp->getURLAttribute(WebCore::HTMLNames::reflectedurlattrAttr));
296}
297
298static void reflectedURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
299{
300    INC_STATS("DOM.TestObj.reflectedURLAttr._set");
301    TestObj* imp = V8TestObj::toNative(info.Holder());
302    STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<WithNullCheck>, v, value);
303    imp->setAttribute(WebCore::HTMLNames::reflectedurlattrAttr, v);
304    return;
305}
306
307static v8::Handle<v8::Value> reflectedNonEmptyURLAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
308{
309    INC_STATS("DOM.TestObj.reflectedNonEmptyURLAttr._get");
310    TestObj* imp = V8TestObj::toNative(info.Holder());
311    return v8String(imp->getNonEmptyURLAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr));
312}
313
314static void reflectedNonEmptyURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
315{
316    INC_STATS("DOM.TestObj.reflectedNonEmptyURLAttr._set");
317    TestObj* imp = V8TestObj::toNative(info.Holder());
318    STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<WithNullCheck>, v, value);
319    imp->setAttribute(WebCore::HTMLNames::reflectednonemptyurlattrAttr, v);
320    return;
321}
322
323static v8::Handle<v8::Value> reflectedStringAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
324{
325    INC_STATS("DOM.TestObj.reflectedStringAttr._get");
326    TestObj* imp = V8TestObj::toNative(info.Holder());
327    return v8String(imp->getAttribute(WebCore::HTMLNames::customContentStringAttrAttr));
328}
329
330static void reflectedStringAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
331{
332    INC_STATS("DOM.TestObj.reflectedStringAttr._set");
333    TestObj* imp = V8TestObj::toNative(info.Holder());
334    STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<WithNullCheck>, v, value);
335    imp->setAttribute(WebCore::HTMLNames::customContentStringAttrAttr, v);
336    return;
337}
338
339static v8::Handle<v8::Value> reflectedCustomIntegralAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
340{
341    INC_STATS("DOM.TestObj.reflectedCustomIntegralAttr._get");
342    TestObj* imp = V8TestObj::toNative(info.Holder());
343    return v8::Integer::New(imp->getIntegralAttribute(WebCore::HTMLNames::customContentIntegralAttrAttr));
344}
345
346static void reflectedCustomIntegralAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
347{
348    INC_STATS("DOM.TestObj.reflectedCustomIntegralAttr._set");
349    TestObj* imp = V8TestObj::toNative(info.Holder());
350    int v = toInt32(value);
351    imp->setIntegralAttribute(WebCore::HTMLNames::customContentIntegralAttrAttr, v);
352    return;
353}
354
355static v8::Handle<v8::Value> reflectedCustomBooleanAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
356{
357    INC_STATS("DOM.TestObj.reflectedCustomBooleanAttr._get");
358    TestObj* imp = V8TestObj::toNative(info.Holder());
359    return v8Boolean(imp->hasAttribute(WebCore::HTMLNames::customContentBooleanAttrAttr));
360}
361
362static void reflectedCustomBooleanAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
363{
364    INC_STATS("DOM.TestObj.reflectedCustomBooleanAttr._set");
365    TestObj* imp = V8TestObj::toNative(info.Holder());
366    bool v = value->BooleanValue();
367    imp->setBooleanAttribute(WebCore::HTMLNames::customContentBooleanAttrAttr, v);
368    return;
369}
370
371static v8::Handle<v8::Value> reflectedCustomURLAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
372{
373    INC_STATS("DOM.TestObj.reflectedCustomURLAttr._get");
374    TestObj* imp = V8TestObj::toNative(info.Holder());
375    return v8String(imp->getURLAttribute(WebCore::HTMLNames::customContentURLAttrAttr));
376}
377
378static void reflectedCustomURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
379{
380    INC_STATS("DOM.TestObj.reflectedCustomURLAttr._set");
381    TestObj* imp = V8TestObj::toNative(info.Holder());
382    STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<WithNullCheck>, v, value);
383    imp->setAttribute(WebCore::HTMLNames::customContentURLAttrAttr, v);
384    return;
385}
386
387static v8::Handle<v8::Value> reflectedCustomNonEmptyURLAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
388{
389    INC_STATS("DOM.TestObj.reflectedCustomNonEmptyURLAttr._get");
390    TestObj* imp = V8TestObj::toNative(info.Holder());
391    return v8String(imp->getNonEmptyURLAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr));
392}
393
394static void reflectedCustomNonEmptyURLAttrAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
395{
396    INC_STATS("DOM.TestObj.reflectedCustomNonEmptyURLAttr._set");
397    TestObj* imp = V8TestObj::toNative(info.Holder());
398    STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<WithNullCheck>, v, value);
399    imp->setAttribute(WebCore::HTMLNames::customContentNonEmptyURLAttrAttr, v);
400    return;
401}
402
403static v8::Handle<v8::Value> attrWithGetterExceptionAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
404{
405    INC_STATS("DOM.TestObj.attrWithGetterException._get");
406    TestObj* imp = V8TestObj::toNative(info.Holder());
407    ExceptionCode ec = 0;
408    int v = imp->attrWithGetterException(ec);
409    if (UNLIKELY(ec)) {
410        V8Proxy::setDOMException(ec);
411        return v8::Handle<v8::Value>();
412    }
413    return v8::Integer::New(v);
414}
415
416static void attrWithGetterExceptionAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
417{
418    INC_STATS("DOM.TestObj.attrWithGetterException._set");
419    TestObj* imp = V8TestObj::toNative(info.Holder());
420    int v = toInt32(value);
421    ExceptionCode ec = 0;
422    imp->setAttrWithGetterException(v, ec);
423    if (UNLIKELY(ec))
424        V8Proxy::setDOMException(ec);
425    return;
426}
427
428static v8::Handle<v8::Value> attrWithSetterExceptionAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
429{
430    INC_STATS("DOM.TestObj.attrWithSetterException._get");
431    TestObj* imp = V8TestObj::toNative(info.Holder());
432    return v8::Integer::New(imp->attrWithSetterException());
433}
434
435static void attrWithSetterExceptionAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
436{
437    INC_STATS("DOM.TestObj.attrWithSetterException._set");
438    TestObj* imp = V8TestObj::toNative(info.Holder());
439    int v = toInt32(value);
440    ExceptionCode ec = 0;
441    imp->setAttrWithSetterException(v, ec);
442    if (UNLIKELY(ec))
443        V8Proxy::setDOMException(ec);
444    return;
445}
446
447static v8::Handle<v8::Value> stringAttrWithGetterExceptionAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
448{
449    INC_STATS("DOM.TestObj.stringAttrWithGetterException._get");
450    TestObj* imp = V8TestObj::toNative(info.Holder());
451    ExceptionCode ec = 0;
452    String v = imp->stringAttrWithGetterException(ec);
453    if (UNLIKELY(ec)) {
454        V8Proxy::setDOMException(ec);
455        return v8::Handle<v8::Value>();
456    }
457    return v8String(v);
458}
459
460static void stringAttrWithGetterExceptionAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
461{
462    INC_STATS("DOM.TestObj.stringAttrWithGetterException._set");
463    TestObj* imp = V8TestObj::toNative(info.Holder());
464    STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<>, v, value);
465    ExceptionCode ec = 0;
466    imp->setStringAttrWithGetterException(v, ec);
467    if (UNLIKELY(ec))
468        V8Proxy::setDOMException(ec);
469    return;
470}
471
472static v8::Handle<v8::Value> stringAttrWithSetterExceptionAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
473{
474    INC_STATS("DOM.TestObj.stringAttrWithSetterException._get");
475    TestObj* imp = V8TestObj::toNative(info.Holder());
476    return v8String(imp->stringAttrWithSetterException());
477}
478
479static void stringAttrWithSetterExceptionAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
480{
481    INC_STATS("DOM.TestObj.stringAttrWithSetterException._set");
482    TestObj* imp = V8TestObj::toNative(info.Holder());
483    STRING_TO_V8PARAMETER_EXCEPTION_BLOCK_VOID(V8Parameter<>, v, value);
484    ExceptionCode ec = 0;
485    imp->setStringAttrWithSetterException(v, ec);
486    if (UNLIKELY(ec))
487        V8Proxy::setDOMException(ec);
488    return;
489}
490
491static v8::Handle<v8::Value> scriptStringAttrAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
492{
493    INC_STATS("DOM.TestObj.scriptStringAttr._get");
494    TestObj* imp = V8TestObj::toNative(info.Holder());
495    return v8StringOrNull(imp->scriptStringAttr());
496}
497
498#if ENABLE(Condition1)
499
500static v8::Handle<v8::Value> conditionalAttr1AttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
501{
502    INC_STATS("DOM.TestObj.conditionalAttr1._get");
503    TestObj* imp = V8TestObj::toNative(info.Holder());
504    return v8::Integer::New(imp->conditionalAttr1());
505}
506
507#endif // ENABLE(Condition1)
508
509#if ENABLE(Condition1)
510
511static void conditionalAttr1AttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
512{
513    INC_STATS("DOM.TestObj.conditionalAttr1._set");
514    TestObj* imp = V8TestObj::toNative(info.Holder());
515    int v = toInt32(value);
516    imp->setConditionalAttr1(v);
517    return;
518}
519
520#endif // ENABLE(Condition1)
521
522#if ENABLE(Condition1) && ENABLE(Condition2)
523
524static v8::Handle<v8::Value> conditionalAttr2AttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
525{
526    INC_STATS("DOM.TestObj.conditionalAttr2._get");
527    TestObj* imp = V8TestObj::toNative(info.Holder());
528    return v8::Integer::New(imp->conditionalAttr2());
529}
530
531#endif // ENABLE(Condition1) && ENABLE(Condition2)
532
533#if ENABLE(Condition1) && ENABLE(Condition2)
534
535static void conditionalAttr2AttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
536{
537    INC_STATS("DOM.TestObj.conditionalAttr2._set");
538    TestObj* imp = V8TestObj::toNative(info.Holder());
539    int v = toInt32(value);
540    imp->setConditionalAttr2(v);
541    return;
542}
543
544#endif // ENABLE(Condition1) && ENABLE(Condition2)
545
546#if ENABLE(Condition1) || ENABLE(Condition2)
547
548static v8::Handle<v8::Value> conditionalAttr3AttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
549{
550    INC_STATS("DOM.TestObj.conditionalAttr3._get");
551    TestObj* imp = V8TestObj::toNative(info.Holder());
552    return v8::Integer::New(imp->conditionalAttr3());
553}
554
555#endif // ENABLE(Condition1) || ENABLE(Condition2)
556
557#if ENABLE(Condition1) || ENABLE(Condition2)
558
559static void conditionalAttr3AttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
560{
561    INC_STATS("DOM.TestObj.conditionalAttr3._set");
562    TestObj* imp = V8TestObj::toNative(info.Holder());
563    int v = toInt32(value);
564    imp->setConditionalAttr3(v);
565    return;
566}
567
568#endif // ENABLE(Condition1) || ENABLE(Condition2)
569
570static v8::Handle<v8::Value> enabledAtRuntimeAttr1AttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
571{
572    INC_STATS("DOM.TestObj.enabledAtRuntimeAttr1._get");
573    TestObj* imp = V8TestObj::toNative(info.Holder());
574    return v8::Integer::New(imp->enabledAtRuntimeAttr1());
575}
576
577static void enabledAtRuntimeAttr1AttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
578{
579    INC_STATS("DOM.TestObj.enabledAtRuntimeAttr1._set");
580    TestObj* imp = V8TestObj::toNative(info.Holder());
581    int v = toInt32(value);
582    imp->setEnabledAtRuntimeAttr1(v);
583    return;
584}
585
586static v8::Handle<v8::Value> enabledAtRuntimeAttr2AttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
587{
588    INC_STATS("DOM.TestObj.enabledAtRuntimeAttr2._get");
589    TestObj* imp = V8TestObj::toNative(info.Holder());
590    return v8::Integer::New(imp->enabledAtRuntimeAttr2());
591}
592
593static void enabledAtRuntimeAttr2AttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
594{
595    INC_STATS("DOM.TestObj.enabledAtRuntimeAttr2._set");
596    TestObj* imp = V8TestObj::toNative(info.Holder());
597    int v = toInt32(value);
598    imp->setEnabledAtRuntimeAttr2(v);
599    return;
600}
601
602static v8::Handle<v8::Value> descriptionAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
603{
604    INC_STATS("DOM.TestObj.description._get");
605    TestObj* imp = V8TestObj::toNative(info.Holder());
606    return v8::Integer::New(imp->description());
607}
608
609static v8::Handle<v8::Value> idAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
610{
611    INC_STATS("DOM.TestObj.id._get");
612    TestObj* imp = V8TestObj::toNative(info.Holder());
613    return v8::Integer::New(imp->id());
614}
615
616static void idAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
617{
618    INC_STATS("DOM.TestObj.id._set");
619    TestObj* imp = V8TestObj::toNative(info.Holder());
620    int v = toInt32(value);
621    imp->setId(v);
622    return;
623}
624
625static v8::Handle<v8::Value> hashAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
626{
627    INC_STATS("DOM.TestObj.hash._get");
628    TestObj* imp = V8TestObj::toNative(info.Holder());
629    return v8String(imp->hash());
630}
631
632static v8::Handle<v8::Value> voidMethodCallback(const v8::Arguments& args)
633{
634    INC_STATS("DOM.TestObj.voidMethod");
635    TestObj* imp = V8TestObj::toNative(args.Holder());
636    imp->voidMethod();
637    return v8::Handle<v8::Value>();
638}
639
640static v8::Handle<v8::Value> voidMethodWithArgsCallback(const v8::Arguments& args)
641{
642    INC_STATS("DOM.TestObj.voidMethodWithArgs");
643    TestObj* imp = V8TestObj::toNative(args.Holder());
644    EXCEPTION_BLOCK(int, intArg, toInt32(args[0]));
645    STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, strArg, args[1]);
646    EXCEPTION_BLOCK(TestObj*, objArg, V8TestObj::HasInstance(args[2]) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(args[2])) : 0);
647    imp->voidMethodWithArgs(intArg, strArg, objArg);
648    return v8::Handle<v8::Value>();
649}
650
651static v8::Handle<v8::Value> intMethodCallback(const v8::Arguments& args)
652{
653    INC_STATS("DOM.TestObj.intMethod");
654    TestObj* imp = V8TestObj::toNative(args.Holder());
655    return v8::Integer::New(imp->intMethod());
656}
657
658static v8::Handle<v8::Value> intMethodWithArgsCallback(const v8::Arguments& args)
659{
660    INC_STATS("DOM.TestObj.intMethodWithArgs");
661    TestObj* imp = V8TestObj::toNative(args.Holder());
662    EXCEPTION_BLOCK(int, intArg, toInt32(args[0]));
663    STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, strArg, args[1]);
664    EXCEPTION_BLOCK(TestObj*, objArg, V8TestObj::HasInstance(args[2]) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(args[2])) : 0);
665    return v8::Integer::New(imp->intMethodWithArgs(intArg, strArg, objArg));
666}
667
668static v8::Handle<v8::Value> objMethodCallback(const v8::Arguments& args)
669{
670    INC_STATS("DOM.TestObj.objMethod");
671    TestObj* imp = V8TestObj::toNative(args.Holder());
672    return toV8(imp->objMethod());
673}
674
675static v8::Handle<v8::Value> objMethodWithArgsCallback(const v8::Arguments& args)
676{
677    INC_STATS("DOM.TestObj.objMethodWithArgs");
678    TestObj* imp = V8TestObj::toNative(args.Holder());
679    EXCEPTION_BLOCK(int, intArg, toInt32(args[0]));
680    STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, strArg, args[1]);
681    EXCEPTION_BLOCK(TestObj*, objArg, V8TestObj::HasInstance(args[2]) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(args[2])) : 0);
682    return toV8(imp->objMethodWithArgs(intArg, strArg, objArg));
683}
684
685static v8::Handle<v8::Value> methodThatRequiresAllArgsCallback(const v8::Arguments& args)
686{
687    INC_STATS("DOM.TestObj.methodThatRequiresAllArgs");
688    if (args.Length() < 2)
689        return v8::Handle<v8::Value>();
690    TestObj* imp = V8TestObj::toNative(args.Holder());
691    STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, strArg, args[0]);
692    EXCEPTION_BLOCK(TestObj*, objArg, V8TestObj::HasInstance(args[1]) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(args[1])) : 0);
693    return toV8(imp->methodThatRequiresAllArgs(strArg, objArg));
694}
695
696static v8::Handle<v8::Value> methodThatRequiresAllArgsAndThrowsCallback(const v8::Arguments& args)
697{
698    INC_STATS("DOM.TestObj.methodThatRequiresAllArgsAndThrows");
699    if (args.Length() < 2)
700        return throwError("Not enough arguments", V8Proxy::SyntaxError);
701    TestObj* imp = V8TestObj::toNative(args.Holder());
702    ExceptionCode ec = 0;
703    {
704    STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, strArg, args[0]);
705    EXCEPTION_BLOCK(TestObj*, objArg, V8TestObj::HasInstance(args[1]) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(args[1])) : 0);
706    RefPtr<TestObj> result = imp->methodThatRequiresAllArgsAndThrows(strArg, objArg, ec);
707    if (UNLIKELY(ec))
708        goto fail;
709    return toV8(result.release());
710    }
711    fail:
712    V8Proxy::setDOMException(ec);
713    return v8::Handle<v8::Value>();
714}
715
716static v8::Handle<v8::Value> serializedValueCallback(const v8::Arguments& args)
717{
718    INC_STATS("DOM.TestObj.serializedValue");
719    TestObj* imp = V8TestObj::toNative(args.Holder());
720    bool serializedArgDidThrow = false;
721    RefPtr<SerializedScriptValue> serializedArg = SerializedScriptValue::create(args[0], serializedArgDidThrow);
722    if (serializedArgDidThrow)
723        return v8::Undefined();
724    imp->serializedValue(serializedArg);
725    return v8::Handle<v8::Value>();
726}
727
728static v8::Handle<v8::Value> idbKeyCallback(const v8::Arguments& args)
729{
730    INC_STATS("DOM.TestObj.idbKey");
731    TestObj* imp = V8TestObj::toNative(args.Holder());
732    ExceptionCode ec = 0;
733    {
734    RefPtr<IDBKey> key = createIDBKeyFromValue(args[0]);
735    if (UNLIKELY(!key)) {
736        ec = TYPE_MISMATCH_ERR;
737        goto fail;
738    }
739    imp->idbKey(key);
740    return v8::Handle<v8::Value>();
741    }
742    fail:
743    V8Proxy::setDOMException(ec);
744    return v8::Handle<v8::Value>();
745}
746
747static v8::Handle<v8::Value> optionsObjectCallback(const v8::Arguments& args)
748{
749    INC_STATS("DOM.TestObj.optionsObject");
750    TestObj* imp = V8TestObj::toNative(args.Holder());
751    EXCEPTION_BLOCK(OptionsObject, oo, args[0]);
752    if (args.Length() <= 1) {
753        imp->optionsObject(oo);
754        return v8::Handle<v8::Value>();
755    }
756    EXCEPTION_BLOCK(OptionsObject, ooo, args[1]);
757    imp->optionsObject(oo, ooo);
758    return v8::Handle<v8::Value>();
759}
760
761static v8::Handle<v8::Value> methodWithExceptionCallback(const v8::Arguments& args)
762{
763    INC_STATS("DOM.TestObj.methodWithException");
764    TestObj* imp = V8TestObj::toNative(args.Holder());
765    ExceptionCode ec = 0;
766    {
767    imp->methodWithException(ec);
768    if (UNLIKELY(ec))
769        goto fail;
770    return v8::Handle<v8::Value>();
771    }
772    fail:
773    V8Proxy::setDOMException(ec);
774    return v8::Handle<v8::Value>();
775}
776
777static v8::Handle<v8::Value> customArgsAndExceptionCallback(const v8::Arguments& args)
778{
779    INC_STATS("DOM.TestObj.customArgsAndException");
780    TestObj* imp = V8TestObj::toNative(args.Holder());
781    ExceptionCode ec = 0;
782    {
783    RefPtr<ScriptArguments> scriptArguments(createScriptArguments(args, 1));
784    size_t maxStackSize = imp->shouldCaptureFullStackTrace() ? ScriptCallStack::maxCallStackSizeToCapture : 1;
785    RefPtr<ScriptCallStack> callStack(createScriptCallStack(maxStackSize));
786    if (!callStack)
787        return v8::Undefined();
788    EXCEPTION_BLOCK(log*, intArg, V8log::HasInstance(args[0]) ? V8log::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0);
789    imp->customArgsAndException(intArg, scriptArguments, callStack, ec);
790    if (UNLIKELY(ec))
791        goto fail;
792    return v8::Handle<v8::Value>();
793    }
794    fail:
795    V8Proxy::setDOMException(ec);
796    return v8::Handle<v8::Value>();
797}
798
799static v8::Handle<v8::Value> addEventListenerCallback(const v8::Arguments& args)
800{
801    INC_STATS("DOM.TestObj.addEventListener()");
802    RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFindOrCreate);
803    if (listener) {
804        V8TestObj::toNative(args.Holder())->addEventListener(v8ValueToAtomicWebCoreString(args[0]), listener, args[2]->BooleanValue());
805        createHiddenDependency(args.Holder(), args[1], V8TestObj::eventListenerCacheIndex);
806    }
807    return v8::Undefined();
808}
809
810static v8::Handle<v8::Value> removeEventListenerCallback(const v8::Arguments& args)
811{
812    INC_STATS("DOM.TestObj.removeEventListener()");
813    RefPtr<EventListener> listener = V8DOMWrapper::getEventListener(args[1], false, ListenerFindOnly);
814    if (listener) {
815        V8TestObj::toNative(args.Holder())->removeEventListener(v8ValueToAtomicWebCoreString(args[0]), listener.get(), args[2]->BooleanValue());
816        removeHiddenDependency(args.Holder(), args[1], V8TestObj::eventListenerCacheIndex);
817    }
818    return v8::Undefined();
819}
820
821static v8::Handle<v8::Value> withDynamicFrameCallback(const v8::Arguments& args)
822{
823    INC_STATS("DOM.TestObj.withDynamicFrame");
824    TestObj* imp = V8TestObj::toNative(args.Holder());
825    Frame* enteredFrame = V8Proxy::retrieveFrameForEnteredContext();
826    if (!enteredFrame)
827        return v8::Undefined();
828    imp->withDynamicFrame(enteredFrame);
829    return v8::Handle<v8::Value>();
830}
831
832static v8::Handle<v8::Value> withDynamicFrameAndArgCallback(const v8::Arguments& args)
833{
834    INC_STATS("DOM.TestObj.withDynamicFrameAndArg");
835    TestObj* imp = V8TestObj::toNative(args.Holder());
836    EXCEPTION_BLOCK(int, intArg, toInt32(args[0]));
837    Frame* enteredFrame = V8Proxy::retrieveFrameForEnteredContext();
838    if (!enteredFrame)
839        return v8::Undefined();
840    imp->withDynamicFrameAndArg(enteredFrame, intArg);
841    return v8::Handle<v8::Value>();
842}
843
844static v8::Handle<v8::Value> withDynamicFrameAndOptionalArgCallback(const v8::Arguments& args)
845{
846    INC_STATS("DOM.TestObj.withDynamicFrameAndOptionalArg");
847    TestObj* imp = V8TestObj::toNative(args.Holder());
848    EXCEPTION_BLOCK(int, intArg, toInt32(args[0]));
849    if (args.Length() <= 1) {
850        Frame* enteredFrame = V8Proxy::retrieveFrameForEnteredContext();
851        if (!enteredFrame)
852            return v8::Undefined();
853        imp->withDynamicFrameAndOptionalArg(enteredFrame, intArg);
854        return v8::Handle<v8::Value>();
855    }
856    EXCEPTION_BLOCK(int, optionalArg, toInt32(args[1]));
857    Frame* enteredFrame = V8Proxy::retrieveFrameForEnteredContext();
858    if (!enteredFrame)
859        return v8::Undefined();
860    imp->withDynamicFrameAndOptionalArg(enteredFrame, intArg, optionalArg);
861    return v8::Handle<v8::Value>();
862}
863
864static v8::Handle<v8::Value> withDynamicFrameAndUserGestureCallback(const v8::Arguments& args)
865{
866    INC_STATS("DOM.TestObj.withDynamicFrameAndUserGesture");
867    TestObj* imp = V8TestObj::toNative(args.Holder());
868    EXCEPTION_BLOCK(int, intArg, toInt32(args[0]));
869    Frame* enteredFrame = V8Proxy::retrieveFrameForEnteredContext();
870    if (!enteredFrame)
871        return v8::Undefined();
872    imp->withDynamicFrameAndUserGesture(enteredFrame, intArg, processingUserGesture());
873    return v8::Handle<v8::Value>();
874}
875
876static v8::Handle<v8::Value> withDynamicFrameAndUserGestureASADCallback(const v8::Arguments& args)
877{
878    INC_STATS("DOM.TestObj.withDynamicFrameAndUserGestureASAD");
879    TestObj* imp = V8TestObj::toNative(args.Holder());
880    EXCEPTION_BLOCK(int, intArg, toInt32(args[0]));
881    if (args.Length() <= 1) {
882        Frame* enteredFrame = V8Proxy::retrieveFrameForEnteredContext();
883        if (!enteredFrame)
884            return v8::Undefined();
885        imp->withDynamicFrameAndUserGestureASAD(enteredFrame, intArg, processingUserGesture());
886        return v8::Handle<v8::Value>();
887    }
888    EXCEPTION_BLOCK(int, optionalArg, toInt32(args[1]));
889    Frame* enteredFrame = V8Proxy::retrieveFrameForEnteredContext();
890    if (!enteredFrame)
891        return v8::Undefined();
892    imp->withDynamicFrameAndUserGestureASAD(enteredFrame, intArg, optionalArg, processingUserGesture());
893    return v8::Handle<v8::Value>();
894}
895
896static v8::Handle<v8::Value> withScriptStateVoidCallback(const v8::Arguments& args)
897{
898    INC_STATS("DOM.TestObj.withScriptStateVoid");
899    TestObj* imp = V8TestObj::toNative(args.Holder());
900    EmptyScriptState state;
901    imp->withScriptStateVoid(&state);
902    if (state.hadException())
903        return throwError(state.exception());
904    return v8::Handle<v8::Value>();
905}
906
907static v8::Handle<v8::Value> withScriptStateObjCallback(const v8::Arguments& args)
908{
909    INC_STATS("DOM.TestObj.withScriptStateObj");
910    TestObj* imp = V8TestObj::toNative(args.Holder());
911    EmptyScriptState state;
912    RefPtr<TestObj> result = imp->withScriptStateObj(&state);
913    if (state.hadException())
914        return throwError(state.exception());
915    return toV8(result.release());
916}
917
918static v8::Handle<v8::Value> withScriptStateVoidExceptionCallback(const v8::Arguments& args)
919{
920    INC_STATS("DOM.TestObj.withScriptStateVoidException");
921    TestObj* imp = V8TestObj::toNative(args.Holder());
922    ExceptionCode ec = 0;
923    {
924    EmptyScriptState state;
925    imp->withScriptStateVoidException(&state, ec);
926    if (UNLIKELY(ec))
927        goto fail;
928    if (state.hadException())
929        return throwError(state.exception());
930    return v8::Handle<v8::Value>();
931    }
932    fail:
933    V8Proxy::setDOMException(ec);
934    return v8::Handle<v8::Value>();
935}
936
937static v8::Handle<v8::Value> withScriptStateObjExceptionCallback(const v8::Arguments& args)
938{
939    INC_STATS("DOM.TestObj.withScriptStateObjException");
940    TestObj* imp = V8TestObj::toNative(args.Holder());
941    ExceptionCode ec = 0;
942    {
943    EmptyScriptState state;
944    RefPtr<TestObj> result = imp->withScriptStateObjException(&state, ec);
945    if (UNLIKELY(ec))
946        goto fail;
947    if (state.hadException())
948        return throwError(state.exception());
949    return toV8(result.release());
950    }
951    fail:
952    V8Proxy::setDOMException(ec);
953    return v8::Handle<v8::Value>();
954}
955
956static v8::Handle<v8::Value> withScriptExecutionContextCallback(const v8::Arguments& args)
957{
958    INC_STATS("DOM.TestObj.withScriptExecutionContext");
959    TestObj* imp = V8TestObj::toNative(args.Holder());
960    ScriptExecutionContext* scriptContext = getScriptExecutionContext();
961    if (!scriptContext)
962        return v8::Undefined();
963    imp->withScriptExecutionContext(scriptContext);
964    return v8::Handle<v8::Value>();
965}
966
967static v8::Handle<v8::Value> methodWithOptionalArgCallback(const v8::Arguments& args)
968{
969    INC_STATS("DOM.TestObj.methodWithOptionalArg");
970    TestObj* imp = V8TestObj::toNative(args.Holder());
971    if (args.Length() <= 0) {
972        imp->methodWithOptionalArg();
973        return v8::Handle<v8::Value>();
974    }
975    EXCEPTION_BLOCK(int, opt, toInt32(args[0]));
976    imp->methodWithOptionalArg(opt);
977    return v8::Handle<v8::Value>();
978}
979
980static v8::Handle<v8::Value> methodWithNonOptionalArgAndOptionalArgCallback(const v8::Arguments& args)
981{
982    INC_STATS("DOM.TestObj.methodWithNonOptionalArgAndOptionalArg");
983    TestObj* imp = V8TestObj::toNative(args.Holder());
984    EXCEPTION_BLOCK(int, nonOpt, toInt32(args[0]));
985    if (args.Length() <= 1) {
986        imp->methodWithNonOptionalArgAndOptionalArg(nonOpt);
987        return v8::Handle<v8::Value>();
988    }
989    EXCEPTION_BLOCK(int, opt, toInt32(args[1]));
990    imp->methodWithNonOptionalArgAndOptionalArg(nonOpt, opt);
991    return v8::Handle<v8::Value>();
992}
993
994static v8::Handle<v8::Value> methodWithNonOptionalArgAndTwoOptionalArgsCallback(const v8::Arguments& args)
995{
996    INC_STATS("DOM.TestObj.methodWithNonOptionalArgAndTwoOptionalArgs");
997    TestObj* imp = V8TestObj::toNative(args.Holder());
998    EXCEPTION_BLOCK(int, nonOpt, toInt32(args[0]));
999    if (args.Length() <= 1) {
1000        imp->methodWithNonOptionalArgAndTwoOptionalArgs(nonOpt);
1001        return v8::Handle<v8::Value>();
1002    }
1003    EXCEPTION_BLOCK(int, opt1, toInt32(args[1]));
1004    EXCEPTION_BLOCK(int, opt2, toInt32(args[2]));
1005    imp->methodWithNonOptionalArgAndTwoOptionalArgs(nonOpt, opt1, opt2);
1006    return v8::Handle<v8::Value>();
1007}
1008
1009static v8::Handle<v8::Value> methodWithCallbackArgCallback(const v8::Arguments& args)
1010{
1011    INC_STATS("DOM.TestObj.methodWithCallbackArg");
1012    TestObj* imp = V8TestObj::toNative(args.Holder());
1013    if (args.Length() <= 0 || !args[0]->IsObject())
1014        return throwError(TYPE_MISMATCH_ERR);
1015    RefPtr<TestCallback> callback = V8TestCallback::create(args[0], getScriptExecutionContext());
1016    imp->methodWithCallbackArg(callback);
1017    return v8::Handle<v8::Value>();
1018}
1019
1020static v8::Handle<v8::Value> methodWithNonCallbackArgAndCallbackArgCallback(const v8::Arguments& args)
1021{
1022    INC_STATS("DOM.TestObj.methodWithNonCallbackArgAndCallbackArg");
1023    TestObj* imp = V8TestObj::toNative(args.Holder());
1024    EXCEPTION_BLOCK(int, nonCallback, toInt32(args[0]));
1025    if (args.Length() <= 1 || !args[1]->IsObject())
1026        return throwError(TYPE_MISMATCH_ERR);
1027    RefPtr<TestCallback> callback = V8TestCallback::create(args[1], getScriptExecutionContext());
1028    imp->methodWithNonCallbackArgAndCallbackArg(nonCallback, callback);
1029    return v8::Handle<v8::Value>();
1030}
1031
1032static v8::Handle<v8::Value> methodWithCallbackAndOptionalArgCallback(const v8::Arguments& args)
1033{
1034    INC_STATS("DOM.TestObj.methodWithCallbackAndOptionalArg");
1035    TestObj* imp = V8TestObj::toNative(args.Holder());
1036    RefPtr<TestCallback> callback;
1037    if (args.Length() > 0 && !args[0]->IsNull() && !args[0]->IsUndefined()) {
1038        if (!args[0]->IsObject())
1039            return throwError(TYPE_MISMATCH_ERR);
1040        callback = V8TestCallback::create(args[0], getScriptExecutionContext());
1041    }
1042    imp->methodWithCallbackAndOptionalArg(callback);
1043    return v8::Handle<v8::Value>();
1044}
1045
1046static v8::Handle<v8::Value> overloadedMethod1Callback(const v8::Arguments& args)
1047{
1048    INC_STATS("DOM.TestObj.overloadedMethod1");
1049    TestObj* imp = V8TestObj::toNative(args.Holder());
1050    EXCEPTION_BLOCK(TestObj*, objArg, V8TestObj::HasInstance(args[0]) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0);
1051    STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, strArg, args[1]);
1052    imp->overloadedMethod(objArg, strArg);
1053    return v8::Handle<v8::Value>();
1054}
1055
1056static v8::Handle<v8::Value> overloadedMethod2Callback(const v8::Arguments& args)
1057{
1058    INC_STATS("DOM.TestObj.overloadedMethod2");
1059    TestObj* imp = V8TestObj::toNative(args.Holder());
1060    EXCEPTION_BLOCK(TestObj*, objArg, V8TestObj::HasInstance(args[0]) ? V8TestObj::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0);
1061    if (args.Length() <= 1) {
1062        imp->overloadedMethod(objArg);
1063        return v8::Handle<v8::Value>();
1064    }
1065    EXCEPTION_BLOCK(int, intArg, toInt32(args[1]));
1066    imp->overloadedMethod(objArg, intArg);
1067    return v8::Handle<v8::Value>();
1068}
1069
1070static v8::Handle<v8::Value> overloadedMethod3Callback(const v8::Arguments& args)
1071{
1072    INC_STATS("DOM.TestObj.overloadedMethod3");
1073    TestObj* imp = V8TestObj::toNative(args.Holder());
1074    STRING_TO_V8PARAMETER_EXCEPTION_BLOCK(V8Parameter<>, strArg, args[0]);
1075    imp->overloadedMethod(strArg);
1076    return v8::Handle<v8::Value>();
1077}
1078
1079static v8::Handle<v8::Value> overloadedMethod4Callback(const v8::Arguments& args)
1080{
1081    INC_STATS("DOM.TestObj.overloadedMethod4");
1082    TestObj* imp = V8TestObj::toNative(args.Holder());
1083    EXCEPTION_BLOCK(int, intArg, toInt32(args[0]));
1084    imp->overloadedMethod(intArg);
1085    return v8::Handle<v8::Value>();
1086}
1087
1088static v8::Handle<v8::Value> overloadedMethod5Callback(const v8::Arguments& args)
1089{
1090    INC_STATS("DOM.TestObj.overloadedMethod5");
1091    TestObj* imp = V8TestObj::toNative(args.Holder());
1092    if (args.Length() <= 0 || !args[0]->IsObject())
1093        return throwError(TYPE_MISMATCH_ERR);
1094    RefPtr<TestCallback> callback = V8TestCallback::create(args[0], getScriptExecutionContext());
1095    imp->overloadedMethod(callback);
1096    return v8::Handle<v8::Value>();
1097}
1098
1099static v8::Handle<v8::Value> overloadedMethodCallback(const v8::Arguments& args)
1100{
1101    INC_STATS("DOM.TestObj.overloadedMethod");
1102    if ((args.Length() == 2 && (args[0]->IsNull() || V8TestObj::HasInstance(args[0])) && (args[1]->IsNull() || args[1]->IsUndefined() || args[1]->IsString() || args[1]->IsObject())))
1103        return overloadedMethod1Callback(args);
1104    if ((args.Length() == 1 && (args[0]->IsNull() || V8TestObj::HasInstance(args[0]))) || (args.Length() == 2 && (args[0]->IsNull() || V8TestObj::HasInstance(args[0]))))
1105        return overloadedMethod2Callback(args);
1106    if ((args.Length() == 1 && (args[0]->IsNull() || args[0]->IsUndefined() || args[0]->IsString() || args[0]->IsObject())))
1107        return overloadedMethod3Callback(args);
1108    if (args.Length() == 1)
1109        return overloadedMethod4Callback(args);
1110    if ((args.Length() == 1 && (args[0]->IsNull() || args[0]->IsObject())))
1111        return overloadedMethod5Callback(args);
1112    V8Proxy::throwTypeError();
1113    return notHandledByInterceptor();
1114}
1115
1116static v8::Handle<v8::Value> classMethodCallback(const v8::Arguments& args)
1117{
1118    INC_STATS("DOM.TestObj.classMethod");
1119    TestObj::classMethod();
1120    return v8::Handle<v8::Value>();
1121}
1122
1123static v8::Handle<v8::Value> classMethodWithOptionalCallback(const v8::Arguments& args)
1124{
1125    INC_STATS("DOM.TestObj.classMethodWithOptional");
1126    if (args.Length() <= 0) {
1127        return v8::Integer::New(TestObj::classMethodWithOptional());
1128    }
1129    EXCEPTION_BLOCK(int, arg, toInt32(args[0]));
1130    return v8::Integer::New(TestObj::classMethodWithOptional(arg));
1131}
1132
1133static v8::Handle<v8::Value> enabledAtRuntimeMethod1Callback(const v8::Arguments& args)
1134{
1135    INC_STATS("DOM.TestObj.enabledAtRuntimeMethod1");
1136    TestObj* imp = V8TestObj::toNative(args.Holder());
1137    EXCEPTION_BLOCK(int, intArg, V8int::HasInstance(args[0]) ? V8int::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0);
1138    imp->enabledAtRuntimeMethod1(intArg);
1139    return v8::Handle<v8::Value>();
1140}
1141
1142static v8::Handle<v8::Value> enabledAtRuntimeMethod2Callback(const v8::Arguments& args)
1143{
1144    INC_STATS("DOM.TestObj.enabledAtRuntimeMethod2");
1145    TestObj* imp = V8TestObj::toNative(args.Holder());
1146    EXCEPTION_BLOCK(int, intArg, V8int::HasInstance(args[0]) ? V8int::toNative(v8::Handle<v8::Object>::Cast(args[0])) : 0);
1147    imp->enabledAtRuntimeMethod2(intArg);
1148    return v8::Handle<v8::Value>();
1149}
1150
1151} // namespace TestObjInternal
1152
1153static const BatchedAttribute TestObjAttrs[] = {
1154    // Attribute 'readOnlyIntAttr' (Type: 'readonly attribute' ExtAttr: '')
1155    {"readOnlyIntAttr", TestObjInternal::readOnlyIntAttrAttrGetter, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1156    // Attribute 'readOnlyStringAttr' (Type: 'readonly attribute' ExtAttr: '')
1157    {"readOnlyStringAttr", TestObjInternal::readOnlyStringAttrAttrGetter, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1158    // Attribute 'readOnlyTestObjAttr' (Type: 'readonly attribute' ExtAttr: '')
1159    {"readOnlyTestObjAttr", TestObjInternal::readOnlyTestObjAttrAttrGetter, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1160    // Attribute 'shortAttr' (Type: 'attribute' ExtAttr: '')
1161    {"shortAttr", TestObjInternal::shortAttrAttrGetter, TestObjInternal::shortAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1162    // Attribute 'unsignedShortAttr' (Type: 'attribute' ExtAttr: '')
1163    {"unsignedShortAttr", TestObjInternal::unsignedShortAttrAttrGetter, TestObjInternal::unsignedShortAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1164    // Attribute 'intAttr' (Type: 'attribute' ExtAttr: '')
1165    {"intAttr", TestObjInternal::intAttrAttrGetter, TestObjInternal::intAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1166    // Attribute 'longLongAttr' (Type: 'attribute' ExtAttr: '')
1167    {"longLongAttr", TestObjInternal::longLongAttrAttrGetter, TestObjInternal::longLongAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1168    // Attribute 'unsignedLongLongAttr' (Type: 'attribute' ExtAttr: '')
1169    {"unsignedLongLongAttr", TestObjInternal::unsignedLongLongAttrAttrGetter, TestObjInternal::unsignedLongLongAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1170    // Attribute 'stringAttr' (Type: 'attribute' ExtAttr: '')
1171    {"stringAttr", TestObjInternal::stringAttrAttrGetter, TestObjInternal::stringAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1172    // Attribute 'testObjAttr' (Type: 'attribute' ExtAttr: '')
1173    {"testObjAttr", TestObjInternal::testObjAttrAttrGetter, TestObjInternal::testObjAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1174    // Attribute 'XMLObjAttr' (Type: 'attribute' ExtAttr: '')
1175    {"XMLObjAttr", TestObjInternal::XMLObjAttrAttrGetter, TestObjInternal::XMLObjAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1176    // Attribute 'create' (Type: 'attribute' ExtAttr: '')
1177    {"create", TestObjInternal::createAttrGetter, TestObjInternal::createAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1178    // Attribute 'reflectedStringAttr' (Type: 'attribute' ExtAttr: 'Reflect')
1179    {"reflectedStringAttr", TestObjInternal::reflectedStringAttrAttrGetter, TestObjInternal::reflectedStringAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1180    // Attribute 'reflectedIntegralAttr' (Type: 'attribute' ExtAttr: 'Reflect')
1181    {"reflectedIntegralAttr", TestObjInternal::reflectedIntegralAttrAttrGetter, TestObjInternal::reflectedIntegralAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1182    // Attribute 'reflectedUnsignedIntegralAttr' (Type: 'attribute' ExtAttr: 'Reflect')
1183    {"reflectedUnsignedIntegralAttr", TestObjInternal::reflectedUnsignedIntegralAttrAttrGetter, TestObjInternal::reflectedUnsignedIntegralAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1184    // Attribute 'reflectedBooleanAttr' (Type: 'attribute' ExtAttr: 'Reflect')
1185    {"reflectedBooleanAttr", TestObjInternal::reflectedBooleanAttrAttrGetter, TestObjInternal::reflectedBooleanAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1186    // Attribute 'reflectedURLAttr' (Type: 'attribute' ExtAttr: 'URL Reflect')
1187    {"reflectedURLAttr", TestObjInternal::reflectedURLAttrAttrGetter, TestObjInternal::reflectedURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1188    // Attribute 'reflectedNonEmptyURLAttr' (Type: 'attribute' ExtAttr: 'URL NonEmpty Reflect')
1189    {"reflectedNonEmptyURLAttr", TestObjInternal::reflectedNonEmptyURLAttrAttrGetter, TestObjInternal::reflectedNonEmptyURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1190    // Attribute 'reflectedStringAttr' (Type: 'attribute' ExtAttr: 'Reflect')
1191    {"reflectedStringAttr", TestObjInternal::reflectedStringAttrAttrGetter, TestObjInternal::reflectedStringAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1192    // Attribute 'reflectedCustomIntegralAttr' (Type: 'attribute' ExtAttr: 'Reflect')
1193    {"reflectedCustomIntegralAttr", TestObjInternal::reflectedCustomIntegralAttrAttrGetter, TestObjInternal::reflectedCustomIntegralAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1194    // Attribute 'reflectedCustomBooleanAttr' (Type: 'attribute' ExtAttr: 'Reflect')
1195    {"reflectedCustomBooleanAttr", TestObjInternal::reflectedCustomBooleanAttrAttrGetter, TestObjInternal::reflectedCustomBooleanAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1196    // Attribute 'reflectedCustomURLAttr' (Type: 'attribute' ExtAttr: 'URL Reflect')
1197    {"reflectedCustomURLAttr", TestObjInternal::reflectedCustomURLAttrAttrGetter, TestObjInternal::reflectedCustomURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1198    // Attribute 'reflectedCustomNonEmptyURLAttr' (Type: 'attribute' ExtAttr: 'URL NonEmpty Reflect')
1199    {"reflectedCustomNonEmptyURLAttr", TestObjInternal::reflectedCustomNonEmptyURLAttrAttrGetter, TestObjInternal::reflectedCustomNonEmptyURLAttrAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1200    // Attribute 'attrWithGetterException' (Type: 'attribute' ExtAttr: '')
1201    {"attrWithGetterException", TestObjInternal::attrWithGetterExceptionAttrGetter, TestObjInternal::attrWithGetterExceptionAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1202    // Attribute 'attrWithSetterException' (Type: 'attribute' ExtAttr: '')
1203    {"attrWithSetterException", TestObjInternal::attrWithSetterExceptionAttrGetter, TestObjInternal::attrWithSetterExceptionAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1204    // Attribute 'stringAttrWithGetterException' (Type: 'attribute' ExtAttr: '')
1205    {"stringAttrWithGetterException", TestObjInternal::stringAttrWithGetterExceptionAttrGetter, TestObjInternal::stringAttrWithGetterExceptionAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1206    // Attribute 'stringAttrWithSetterException' (Type: 'attribute' ExtAttr: '')
1207    {"stringAttrWithSetterException", TestObjInternal::stringAttrWithSetterExceptionAttrGetter, TestObjInternal::stringAttrWithSetterExceptionAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1208    // Attribute 'customAttr' (Type: 'attribute' ExtAttr: 'Custom')
1209    {"customAttr", V8TestObj::customAttrAccessorGetter, V8TestObj::customAttrAccessorSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1210    // Attribute 'scriptStringAttr' (Type: 'readonly attribute' ExtAttr: 'ConvertScriptString')
1211    {"scriptStringAttr", TestObjInternal::scriptStringAttrAttrGetter, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1212#if ENABLE(Condition1)
1213    // Attribute 'conditionalAttr1' (Type: 'attribute' ExtAttr: 'Conditional')
1214    {"conditionalAttr1", TestObjInternal::conditionalAttr1AttrGetter, TestObjInternal::conditionalAttr1AttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1215#endif // ENABLE(Condition1)
1216#if ENABLE(Condition1) && ENABLE(Condition2)
1217    // Attribute 'conditionalAttr2' (Type: 'attribute' ExtAttr: 'Conditional')
1218    {"conditionalAttr2", TestObjInternal::conditionalAttr2AttrGetter, TestObjInternal::conditionalAttr2AttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1219#endif // ENABLE(Condition1) && ENABLE(Condition2)
1220#if ENABLE(Condition1) || ENABLE(Condition2)
1221    // Attribute 'conditionalAttr3' (Type: 'attribute' ExtAttr: 'Conditional')
1222    {"conditionalAttr3", TestObjInternal::conditionalAttr3AttrGetter, TestObjInternal::conditionalAttr3AttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1223#endif // ENABLE(Condition1) || ENABLE(Condition2)
1224    // Attribute 'description' (Type: 'readonly attribute' ExtAttr: '')
1225    {"description", TestObjInternal::descriptionAttrGetter, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1226    // Attribute 'id' (Type: 'attribute' ExtAttr: '')
1227    {"id", TestObjInternal::idAttrGetter, TestObjInternal::idAttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1228    // Attribute 'hash' (Type: 'readonly attribute' ExtAttr: '')
1229    {"hash", TestObjInternal::hashAttrGetter, 0, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */},
1230};
1231static const BatchedCallback TestObjCallbacks[] = {
1232    {"voidMethod", TestObjInternal::voidMethodCallback},
1233    {"intMethod", TestObjInternal::intMethodCallback},
1234    {"objMethod", TestObjInternal::objMethodCallback},
1235    {"serializedValue", TestObjInternal::serializedValueCallback},
1236    {"idbKey", TestObjInternal::idbKeyCallback},
1237    {"optionsObject", TestObjInternal::optionsObjectCallback},
1238    {"methodWithException", TestObjInternal::methodWithExceptionCallback},
1239    {"customMethod", V8TestObj::customMethodCallback},
1240    {"customMethodWithArgs", V8TestObj::customMethodWithArgsCallback},
1241    {"addEventListener", TestObjInternal::addEventListenerCallback},
1242    {"removeEventListener", TestObjInternal::removeEventListenerCallback},
1243    {"withDynamicFrame", TestObjInternal::withDynamicFrameCallback},
1244    {"withDynamicFrameAndArg", TestObjInternal::withDynamicFrameAndArgCallback},
1245    {"withDynamicFrameAndOptionalArg", TestObjInternal::withDynamicFrameAndOptionalArgCallback},
1246    {"withDynamicFrameAndUserGesture", TestObjInternal::withDynamicFrameAndUserGestureCallback},
1247    {"withDynamicFrameAndUserGestureASAD", TestObjInternal::withDynamicFrameAndUserGestureASADCallback},
1248    {"withScriptStateVoid", TestObjInternal::withScriptStateVoidCallback},
1249    {"withScriptStateObj", TestObjInternal::withScriptStateObjCallback},
1250    {"withScriptStateVoidException", TestObjInternal::withScriptStateVoidExceptionCallback},
1251    {"withScriptStateObjException", TestObjInternal::withScriptStateObjExceptionCallback},
1252    {"withScriptExecutionContext", TestObjInternal::withScriptExecutionContextCallback},
1253    {"methodWithOptionalArg", TestObjInternal::methodWithOptionalArgCallback},
1254    {"methodWithNonOptionalArgAndOptionalArg", TestObjInternal::methodWithNonOptionalArgAndOptionalArgCallback},
1255    {"methodWithNonOptionalArgAndTwoOptionalArgs", TestObjInternal::methodWithNonOptionalArgAndTwoOptionalArgsCallback},
1256    {"methodWithCallbackArg", TestObjInternal::methodWithCallbackArgCallback},
1257    {"methodWithNonCallbackArgAndCallbackArg", TestObjInternal::methodWithNonCallbackArgAndCallbackArgCallback},
1258    {"methodWithCallbackAndOptionalArg", TestObjInternal::methodWithCallbackAndOptionalArgCallback},
1259    {"overloadedMethod", TestObjInternal::overloadedMethodCallback},
1260};
1261static const BatchedConstant TestObjConsts[] = {
1262    {"CONST_VALUE_0", static_cast<signed int>(0)},
1263    {"CONST_VALUE_1", static_cast<signed int>(1)},
1264    {"CONST_VALUE_2", static_cast<signed int>(2)},
1265    {"CONST_VALUE_4", static_cast<signed int>(4)},
1266    {"CONST_VALUE_8", static_cast<signed int>(8)},
1267    {"CONST_VALUE_9", static_cast<signed int>(-1)},
1268    {"CONST_VALUE_10", static_cast<signed int>("my constant string")},
1269    {"CONST_VALUE_11", static_cast<signed int>(0xffffffff)},
1270    {"CONST_VALUE_12", static_cast<signed int>(0x01)},
1271    {"CONST_VALUE_13", static_cast<signed int>(0X20)},
1272    {"CONST_VALUE_14", static_cast<signed int>(0x1abc)},
1273};
1274
1275COMPILE_ASSERT(0 == TestObj::CONST_VALUE_0, TestObjEnumCONST_VALUE_0IsWrongUseDontCheckEnums);
1276COMPILE_ASSERT(1 == TestObj::CONST_VALUE_1, TestObjEnumCONST_VALUE_1IsWrongUseDontCheckEnums);
1277COMPILE_ASSERT(2 == TestObj::CONST_VALUE_2, TestObjEnumCONST_VALUE_2IsWrongUseDontCheckEnums);
1278COMPILE_ASSERT(4 == TestObj::CONST_VALUE_4, TestObjEnumCONST_VALUE_4IsWrongUseDontCheckEnums);
1279COMPILE_ASSERT(8 == TestObj::CONST_VALUE_8, TestObjEnumCONST_VALUE_8IsWrongUseDontCheckEnums);
1280COMPILE_ASSERT(-1 == TestObj::CONST_VALUE_9, TestObjEnumCONST_VALUE_9IsWrongUseDontCheckEnums);
1281COMPILE_ASSERT("my constant string" == TestObj::CONST_VALUE_10, TestObjEnumCONST_VALUE_10IsWrongUseDontCheckEnums);
1282COMPILE_ASSERT(0xffffffff == TestObj::CONST_VALUE_11, TestObjEnumCONST_VALUE_11IsWrongUseDontCheckEnums);
1283COMPILE_ASSERT(0x01 == TestObj::CONST_VALUE_12, TestObjEnumCONST_VALUE_12IsWrongUseDontCheckEnums);
1284COMPILE_ASSERT(0X20 == TestObj::CONST_VALUE_13, TestObjEnumCONST_VALUE_13IsWrongUseDontCheckEnums);
1285COMPILE_ASSERT(0x1abc == TestObj::CONST_VALUE_14, TestObjEnumCONST_VALUE_14IsWrongUseDontCheckEnums);
1286
1287static v8::Persistent<v8::FunctionTemplate> ConfigureV8TestObjTemplate(v8::Persistent<v8::FunctionTemplate> desc)
1288{
1289    v8::Local<v8::Signature> defaultSignature = configureTemplate(desc, "TestObj", v8::Persistent<v8::FunctionTemplate>(), V8TestObj::internalFieldCount,
1290        TestObjAttrs, WTF_ARRAY_LENGTH(TestObjAttrs),
1291        TestObjCallbacks, WTF_ARRAY_LENGTH(TestObjCallbacks));
1292    v8::Local<v8::ObjectTemplate> instance = desc->InstanceTemplate();
1293    v8::Local<v8::ObjectTemplate> proto = desc->PrototypeTemplate();
1294
1295    if (RuntimeEnabledFeatures::enabledAtRuntimeAttr1Enabled()) {
1296        static const BatchedAttribute attrData =\
1297        // Attribute 'enabledAtRuntimeAttr1' (Type: 'attribute' ExtAttr: 'EnabledAtRuntime')
1298        {"enabledAtRuntimeAttr1", TestObjInternal::enabledAtRuntimeAttr1AttrGetter, TestObjInternal::enabledAtRuntimeAttr1AttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */};
1299        configureAttribute(instance, proto, attrData);
1300    }
1301    if (RuntimeEnabledFeatures::featureNameEnabled()) {
1302        static const BatchedAttribute attrData =\
1303        // Attribute 'enabledAtRuntimeAttr2' (Type: 'attribute' ExtAttr: 'EnabledAtRuntime')
1304        {"enabledAtRuntimeAttr2", TestObjInternal::enabledAtRuntimeAttr2AttrGetter, TestObjInternal::enabledAtRuntimeAttr2AttrSetter, 0 /* no data */, static_cast<v8::AccessControl>(v8::DEFAULT), static_cast<v8::PropertyAttribute>(v8::None), 0 /* on instance */};
1305        configureAttribute(instance, proto, attrData);
1306    }
1307
1308    // Custom Signature 'voidMethodWithArgs'
1309    const int voidMethodWithArgsArgc = 3;
1310    v8::Handle<v8::FunctionTemplate> voidMethodWithArgsArgv[voidMethodWithArgsArgc] = { v8::Handle<v8::FunctionTemplate>(), v8::Handle<v8::FunctionTemplate>(), V8TestObj::GetRawTemplate() };
1311    v8::Handle<v8::Signature> voidMethodWithArgsSignature = v8::Signature::New(desc, voidMethodWithArgsArgc, voidMethodWithArgsArgv);
1312    proto->Set(v8::String::New("voidMethodWithArgs"), v8::FunctionTemplate::New(TestObjInternal::voidMethodWithArgsCallback, v8::Handle<v8::Value>(), voidMethodWithArgsSignature));
1313
1314    // Custom Signature 'intMethodWithArgs'
1315    const int intMethodWithArgsArgc = 3;
1316    v8::Handle<v8::FunctionTemplate> intMethodWithArgsArgv[intMethodWithArgsArgc] = { v8::Handle<v8::FunctionTemplate>(), v8::Handle<v8::FunctionTemplate>(), V8TestObj::GetRawTemplate() };
1317    v8::Handle<v8::Signature> intMethodWithArgsSignature = v8::Signature::New(desc, intMethodWithArgsArgc, intMethodWithArgsArgv);
1318    proto->Set(v8::String::New("intMethodWithArgs"), v8::FunctionTemplate::New(TestObjInternal::intMethodWithArgsCallback, v8::Handle<v8::Value>(), intMethodWithArgsSignature));
1319
1320    // Custom Signature 'objMethodWithArgs'
1321    const int objMethodWithArgsArgc = 3;
1322    v8::Handle<v8::FunctionTemplate> objMethodWithArgsArgv[objMethodWithArgsArgc] = { v8::Handle<v8::FunctionTemplate>(), v8::Handle<v8::FunctionTemplate>(), V8TestObj::GetRawTemplate() };
1323    v8::Handle<v8::Signature> objMethodWithArgsSignature = v8::Signature::New(desc, objMethodWithArgsArgc, objMethodWithArgsArgv);
1324    proto->Set(v8::String::New("objMethodWithArgs"), v8::FunctionTemplate::New(TestObjInternal::objMethodWithArgsCallback, v8::Handle<v8::Value>(), objMethodWithArgsSignature));
1325
1326    // Custom Signature 'methodThatRequiresAllArgs'
1327    const int methodThatRequiresAllArgsArgc = 2;
1328    v8::Handle<v8::FunctionTemplate> methodThatRequiresAllArgsArgv[methodThatRequiresAllArgsArgc] = { v8::Handle<v8::FunctionTemplate>(), V8TestObj::GetRawTemplate() };
1329    v8::Handle<v8::Signature> methodThatRequiresAllArgsSignature = v8::Signature::New(desc, methodThatRequiresAllArgsArgc, methodThatRequiresAllArgsArgv);
1330    proto->Set(v8::String::New("methodThatRequiresAllArgs"), v8::FunctionTemplate::New(TestObjInternal::methodThatRequiresAllArgsCallback, v8::Handle<v8::Value>(), methodThatRequiresAllArgsSignature));
1331
1332    // Custom Signature 'methodThatRequiresAllArgsAndThrows'
1333    const int methodThatRequiresAllArgsAndThrowsArgc = 2;
1334    v8::Handle<v8::FunctionTemplate> methodThatRequiresAllArgsAndThrowsArgv[methodThatRequiresAllArgsAndThrowsArgc] = { v8::Handle<v8::FunctionTemplate>(), V8TestObj::GetRawTemplate() };
1335    v8::Handle<v8::Signature> methodThatRequiresAllArgsAndThrowsSignature = v8::Signature::New(desc, methodThatRequiresAllArgsAndThrowsArgc, methodThatRequiresAllArgsAndThrowsArgv);
1336    proto->Set(v8::String::New("methodThatRequiresAllArgsAndThrows"), v8::FunctionTemplate::New(TestObjInternal::methodThatRequiresAllArgsAndThrowsCallback, v8::Handle<v8::Value>(), methodThatRequiresAllArgsAndThrowsSignature));
1337
1338    // Custom Signature 'customArgsAndException'
1339    const int customArgsAndExceptionArgc = 1;
1340    v8::Handle<v8::FunctionTemplate> customArgsAndExceptionArgv[customArgsAndExceptionArgc] = { V8log::GetRawTemplate() };
1341    v8::Handle<v8::Signature> customArgsAndExceptionSignature = v8::Signature::New(desc, customArgsAndExceptionArgc, customArgsAndExceptionArgv);
1342    proto->Set(v8::String::New("customArgsAndException"), v8::FunctionTemplate::New(TestObjInternal::customArgsAndExceptionCallback, v8::Handle<v8::Value>(), customArgsAndExceptionSignature));
1343    desc->Set(v8::String::New("classMethod"), v8::FunctionTemplate::New(TestObjInternal::classMethodCallback, v8::Handle<v8::Value>(), v8::Local<v8::Signature>()));
1344    desc->Set(v8::String::New("classMethodWithOptional"), v8::FunctionTemplate::New(TestObjInternal::classMethodWithOptionalCallback, v8::Handle<v8::Value>(), v8::Local<v8::Signature>()));
1345    if (RuntimeEnabledFeatures::enabledAtRuntimeMethod1Enabled())
1346        proto->Set(v8::String::New("enabledAtRuntimeMethod1"), v8::FunctionTemplate::New(TestObjInternal::enabledAtRuntimeMethod1Callback, v8::Handle<v8::Value>(), defaultSignature));
1347    if (RuntimeEnabledFeatures::featureNameEnabled())
1348        proto->Set(v8::String::New("enabledAtRuntimeMethod2"), v8::FunctionTemplate::New(TestObjInternal::enabledAtRuntimeMethod2Callback, v8::Handle<v8::Value>(), defaultSignature));
1349    batchConfigureConstants(desc, proto, TestObjConsts, WTF_ARRAY_LENGTH(TestObjConsts));
1350
1351    // Custom toString template
1352    desc->Set(getToStringName(), getToStringTemplate());
1353    return desc;
1354}
1355
1356v8::Persistent<v8::FunctionTemplate> V8TestObj::GetRawTemplate()
1357{
1358    static v8::Persistent<v8::FunctionTemplate> V8TestObjRawCache = createRawTemplate();
1359    return V8TestObjRawCache;
1360}
1361
1362v8::Persistent<v8::FunctionTemplate> V8TestObj::GetTemplate()
1363{
1364    static v8::Persistent<v8::FunctionTemplate> V8TestObjCache = ConfigureV8TestObjTemplate(GetRawTemplate());
1365    return V8TestObjCache;
1366}
1367
1368bool V8TestObj::HasInstance(v8::Handle<v8::Value> value)
1369{
1370    return GetRawTemplate()->HasInstance(value);
1371}
1372
1373
1374v8::Handle<v8::Object> V8TestObj::wrapSlow(TestObj* impl)
1375{
1376    v8::Handle<v8::Object> wrapper;
1377    V8Proxy* proxy = 0;
1378    wrapper = V8DOMWrapper::instantiateV8Object(proxy, &info, impl);
1379    if (wrapper.IsEmpty())
1380        return wrapper;
1381
1382    impl->ref();
1383    getDOMObjectMap().set(impl, v8::Persistent<v8::Object>::New(wrapper));
1384    return wrapper;
1385}
1386
1387void V8TestObj::derefObject(void* object)
1388{
1389    static_cast<TestObj*>(object)->deref();
1390}
1391
1392} // namespace WebCore
1393