Add support for dumping GC heap snapshots, and a viewer
[WebKit.git] / Source / WebCore / bindings / scripts / test / JS / JSTestObj.h
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 #pragma once
22
23 #include "JSDOMConvertDictionary.h"
24 #include "JSDOMConvertEnumeration.h"
25 #include "JSDOMWrapper.h"
26 #include "TestObj.h"
27 #include <JavaScriptCore/CallData.h>
28 #include <wtf/NeverDestroyed.h>
29
30 namespace WebCore {
31
32 class JSTestObj : public JSDOMWrapper<TestObj> {
33 public:
34     using Base = JSDOMWrapper<TestObj>;
35     static JSTestObj* create(JSC::Structure* structure, JSDOMGlobalObject* globalObject, Ref<TestObj>&& impl)
36     {
37         JSTestObj* ptr = new (NotNull, JSC::allocateCell<JSTestObj>(globalObject->vm().heap)) JSTestObj(structure, *globalObject, WTFMove(impl));
38         ptr->finishCreation(globalObject->vm());
39         return ptr;
40     }
41
42     static JSC::JSObject* createPrototype(JSC::VM&, JSDOMGlobalObject&);
43     static JSC::JSObject* prototype(JSC::VM&, JSDOMGlobalObject&);
44     static TestObj* toWrapped(JSC::VM&, JSC::JSValue);
45     static bool getOwnPropertySlot(JSC::JSObject*, JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot&);
46     static bool getOwnPropertySlotByIndex(JSC::JSObject*, JSC::ExecState*, unsigned propertyName, JSC::PropertySlot&);
47     static void getOwnPropertyNames(JSC::JSObject*, JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode = JSC::EnumerationMode());
48     static JSC::CallType getCallData(JSC::JSCell*, JSC::CallData&);
49
50     static void destroy(JSC::JSCell*);
51
52     DECLARE_INFO;
53
54     static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
55     {
56         return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
57     }
58
59     static JSC::JSValue getConstructor(JSC::VM&, const JSC::JSGlobalObject*);
60     static JSC::JSObject* serialize(JSC::ExecState&, JSTestObj& thisObject, JSDOMGlobalObject&, JSC::ThrowScope&);
61     mutable JSC::WriteBarrier<JSC::Unknown> m_cachedAttribute1;
62     mutable JSC::WriteBarrier<JSC::Unknown> m_cachedAttribute2;
63     static void visitChildren(JSCell*, JSC::SlotVisitor&);
64
65     static void heapSnapshot(JSCell*, JSC::HeapSnapshotBuilder&);
66
67     // Custom attributes
68     JSC::JSValue customAttr(JSC::ExecState&) const;
69     void setCustomAttr(JSC::ExecState&, JSC::JSValue);
70
71     // Custom functions
72     JSC::JSValue customMethod(JSC::ExecState&);
73     JSC::JSValue customMethodWithArgs(JSC::ExecState&);
74     static JSC::JSValue classMethod2(JSC::ExecState&);
75     JSC::JSValue testCustomPromiseFunction(JSC::ExecState&, Ref<DeferredPromise>&&);
76     static JSC::JSValue testStaticCustomPromiseFunction(JSC::ExecState&, Ref<DeferredPromise>&&);
77     JSC::JSValue testCustomReturnsOwnPromiseFunction(JSC::ExecState&);
78 public:
79     static const unsigned StructureFlags = JSC::HasStaticPropertyTable | JSC::InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero | JSC::OverridesGetCallData | JSC::OverridesGetOwnPropertySlot | JSC::OverridesGetPropertyNames | Base::StructureFlags;
80 protected:
81     JSTestObj(JSC::Structure*, JSDOMGlobalObject&, Ref<TestObj>&&);
82
83     void finishCreation(JSC::VM&);
84 };
85
86 class JSTestObjOwner : public JSC::WeakHandleOwner {
87 public:
88     virtual bool isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown>, void* context, JSC::SlotVisitor&, const char**);
89     virtual void finalize(JSC::Handle<JSC::Unknown>, void* context);
90 };
91
92 inline JSC::WeakHandleOwner* wrapperOwner(DOMWrapperWorld&, TestObj*)
93 {
94     static NeverDestroyed<JSTestObjOwner> owner;
95     return &owner.get();
96 }
97
98 inline void* wrapperKey(TestObj* wrappableObject)
99 {
100     return wrappableObject;
101 }
102
103 JSC::JSValue toJS(JSC::ExecState*, JSDOMGlobalObject*, TestObj&);
104 inline JSC::JSValue toJS(JSC::ExecState* state, JSDOMGlobalObject* globalObject, TestObj* impl) { return impl ? toJS(state, globalObject, *impl) : JSC::jsNull(); }
105 JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject*, Ref<TestObj>&&);
106 inline JSC::JSValue toJSNewlyCreated(JSC::ExecState* state, JSDOMGlobalObject* globalObject, RefPtr<TestObj>&& impl) { return impl ? toJSNewlyCreated(state, globalObject, impl.releaseNonNull()) : JSC::jsNull(); }
107
108 template<> struct JSDOMWrapperConverterTraits<TestObj> {
109     using WrapperClass = JSTestObj;
110     using ToWrappedReturnType = TestObj*;
111 };
112 String convertEnumerationToString(TestObj::EnumType);
113 template<> JSC::JSString* convertEnumerationToJS(JSC::ExecState&, TestObj::EnumType);
114
115 template<> std::optional<TestObj::EnumType> parseEnumeration<TestObj::EnumType>(JSC::ExecState&, JSC::JSValue);
116 template<> const char* expectedEnumerationValues<TestObj::EnumType>();
117
118 String convertEnumerationToString(TestObj::Optional);
119 template<> JSC::JSString* convertEnumerationToJS(JSC::ExecState&, TestObj::Optional);
120
121 template<> std::optional<TestObj::Optional> parseEnumeration<TestObj::Optional>(JSC::ExecState&, JSC::JSValue);
122 template<> const char* expectedEnumerationValues<TestObj::Optional>();
123
124 String convertEnumerationToString(AlternateEnumName);
125 template<> JSC::JSString* convertEnumerationToJS(JSC::ExecState&, AlternateEnumName);
126
127 template<> std::optional<AlternateEnumName> parseEnumeration<AlternateEnumName>(JSC::ExecState&, JSC::JSValue);
128 template<> const char* expectedEnumerationValues<AlternateEnumName>();
129
130 #if ENABLE(Condition1)
131
132 String convertEnumerationToString(TestObj::EnumA);
133 template<> JSC::JSString* convertEnumerationToJS(JSC::ExecState&, TestObj::EnumA);
134
135 template<> std::optional<TestObj::EnumA> parseEnumeration<TestObj::EnumA>(JSC::ExecState&, JSC::JSValue);
136 template<> const char* expectedEnumerationValues<TestObj::EnumA>();
137
138 #endif
139
140 #if ENABLE(Condition1) && ENABLE(Condition2)
141
142 String convertEnumerationToString(TestObj::EnumB);
143 template<> JSC::JSString* convertEnumerationToJS(JSC::ExecState&, TestObj::EnumB);
144
145 template<> std::optional<TestObj::EnumB> parseEnumeration<TestObj::EnumB>(JSC::ExecState&, JSC::JSValue);
146 template<> const char* expectedEnumerationValues<TestObj::EnumB>();
147
148 #endif
149
150 #if ENABLE(Condition1) || ENABLE(Condition2)
151
152 String convertEnumerationToString(TestObj::EnumC);
153 template<> JSC::JSString* convertEnumerationToJS(JSC::ExecState&, TestObj::EnumC);
154
155 template<> std::optional<TestObj::EnumC> parseEnumeration<TestObj::EnumC>(JSC::ExecState&, JSC::JSValue);
156 template<> const char* expectedEnumerationValues<TestObj::EnumC>();
157
158 #endif
159
160 String convertEnumerationToString(TestObj::Kind);
161 template<> JSC::JSString* convertEnumerationToJS(JSC::ExecState&, TestObj::Kind);
162
163 template<> std::optional<TestObj::Kind> parseEnumeration<TestObj::Kind>(JSC::ExecState&, JSC::JSValue);
164 template<> const char* expectedEnumerationValues<TestObj::Kind>();
165
166 String convertEnumerationToString(TestObj::Size);
167 template<> JSC::JSString* convertEnumerationToJS(JSC::ExecState&, TestObj::Size);
168
169 template<> std::optional<TestObj::Size> parseEnumeration<TestObj::Size>(JSC::ExecState&, JSC::JSValue);
170 template<> const char* expectedEnumerationValues<TestObj::Size>();
171
172 String convertEnumerationToString(TestObj::Confidence);
173 template<> JSC::JSString* convertEnumerationToJS(JSC::ExecState&, TestObj::Confidence);
174
175 template<> std::optional<TestObj::Confidence> parseEnumeration<TestObj::Confidence>(JSC::ExecState&, JSC::JSValue);
176 template<> const char* expectedEnumerationValues<TestObj::Confidence>();
177
178 template<> TestObj::Dictionary convertDictionary<TestObj::Dictionary>(JSC::ExecState&, JSC::JSValue);
179
180 JSC::JSObject* convertDictionaryToJS(JSC::ExecState&, JSDOMGlobalObject&, const TestObj::Dictionary&);
181
182 template<> TestObj::DictionaryThatShouldNotTolerateNull convertDictionary<TestObj::DictionaryThatShouldNotTolerateNull>(JSC::ExecState&, JSC::JSValue);
183
184 template<> TestObj::DictionaryThatShouldTolerateNull convertDictionary<TestObj::DictionaryThatShouldTolerateNull>(JSC::ExecState&, JSC::JSValue);
185
186 template<> AlternateDictionaryName convertDictionary<AlternateDictionaryName>(JSC::ExecState&, JSC::JSValue);
187
188 template<> TestObj::ParentDictionary convertDictionary<TestObj::ParentDictionary>(JSC::ExecState&, JSC::JSValue);
189
190 template<> TestObj::ChildDictionary convertDictionary<TestObj::ChildDictionary>(JSC::ExecState&, JSC::JSValue);
191
192 #if ENABLE(Condition1)
193
194 template<> TestObj::ConditionalDictionaryA convertDictionary<TestObj::ConditionalDictionaryA>(JSC::ExecState&, JSC::JSValue);
195
196 #endif
197
198 #if ENABLE(Condition1) && ENABLE(Condition2)
199
200 template<> TestObj::ConditionalDictionaryB convertDictionary<TestObj::ConditionalDictionaryB>(JSC::ExecState&, JSC::JSValue);
201
202 #endif
203
204 #if ENABLE(Condition1) || ENABLE(Condition2)
205
206 template<> TestObj::ConditionalDictionaryC convertDictionary<TestObj::ConditionalDictionaryC>(JSC::ExecState&, JSC::JSValue);
207
208 #endif
209
210
211 } // namespace WebCore