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
23#if ENABLE(INDEXED_DATABASE)
24
25#include "JSIDBIndex.h"
26
27#include "JSDOMAttribute.h"
28#include "JSDOMBinding.h"
29#include "JSDOMConstructorNotConstructable.h"
30#include "JSDOMConvertAny.h"
31#include "JSDOMConvertBoolean.h"
32#include "JSDOMConvertEnumeration.h"
33#include "JSDOMConvertInterface.h"
34#include "JSDOMConvertNullable.h"
35#include "JSDOMConvertNumbers.h"
36#include "JSDOMConvertSequences.h"
37#include "JSDOMConvertStrings.h"
38#include "JSDOMConvertUnion.h"
39#include "JSDOMExceptionHandling.h"
40#include "JSDOMGlobalObject.h"
41#include "JSDOMOperation.h"
42#include "JSDOMWrapperCache.h"
43#include "JSIDBCursorDirection.h"
44#include "JSIDBKeyRange.h"
45#include "JSIDBObjectStore.h"
46#include "JSIDBRequest.h"
47#include "ScriptExecutionContext.h"
48#include <JavaScriptCore/FunctionPrototype.h>
49#include <JavaScriptCore/HeapSnapshotBuilder.h>
50#include <JavaScriptCore/JSArray.h>
51#include <JavaScriptCore/JSCInlines.h>
52#include <wtf/GetPtr.h>
53#include <wtf/PointerPreparations.h>
54#include <wtf/URL.h>
55#include <wtf/Variant.h>
56
57
58namespace WebCore {
59using namespace JSC;
60
61// Functions
62
63JSC::EncodedJSValue JSC_HOST_CALL jsIDBIndexPrototypeFunctionOpenCursor(JSC::ExecState*);
64JSC::EncodedJSValue JSC_HOST_CALL jsIDBIndexPrototypeFunctionOpenKeyCursor(JSC::ExecState*);
65JSC::EncodedJSValue JSC_HOST_CALL jsIDBIndexPrototypeFunctionGet(JSC::ExecState*);
66JSC::EncodedJSValue JSC_HOST_CALL jsIDBIndexPrototypeFunctionGetKey(JSC::ExecState*);
67JSC::EncodedJSValue JSC_HOST_CALL jsIDBIndexPrototypeFunctionGetAll(JSC::ExecState*);
68JSC::EncodedJSValue JSC_HOST_CALL jsIDBIndexPrototypeFunctionGetAllKeys(JSC::ExecState*);
69JSC::EncodedJSValue JSC_HOST_CALL jsIDBIndexPrototypeFunctionCount(JSC::ExecState*);
70
71// Attributes
72
73JSC::EncodedJSValue jsIDBIndexConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
74bool setJSIDBIndexConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
75JSC::EncodedJSValue jsIDBIndexName(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
76bool setJSIDBIndexName(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
77JSC::EncodedJSValue jsIDBIndexObjectStore(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
78JSC::EncodedJSValue jsIDBIndexKeyPath(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
79JSC::EncodedJSValue jsIDBIndexMultiEntry(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
80JSC::EncodedJSValue jsIDBIndexUnique(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
81
82class JSIDBIndexPrototype : public JSC::JSNonFinalObject {
83public:
84 using Base = JSC::JSNonFinalObject;
85 static JSIDBIndexPrototype* create(JSC::VM& vm, JSDOMGlobalObject* globalObject, JSC::Structure* structure)
86 {
87 JSIDBIndexPrototype* ptr = new (NotNull, JSC::allocateCell<JSIDBIndexPrototype>(vm.heap)) JSIDBIndexPrototype(vm, globalObject, structure);
88 ptr->finishCreation(vm);
89 return ptr;
90 }
91
92 DECLARE_INFO;
93 static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
94 {
95 return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
96 }
97
98private:
99 JSIDBIndexPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
100 : JSC::JSNonFinalObject(vm, structure)
101 {
102 }
103
104 void finishCreation(JSC::VM&);
105};
106
107using JSIDBIndexConstructor = JSDOMConstructorNotConstructable<JSIDBIndex>;
108
109template<> JSValue JSIDBIndexConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
110{
111 UNUSED_PARAM(vm);
112 return globalObject.functionPrototype();
113}
114
115template<> void JSIDBIndexConstructor::initializeProperties(VM& vm, JSDOMGlobalObject& globalObject)
116{
117 putDirect(vm, vm.propertyNames->prototype, JSIDBIndex::prototype(vm, globalObject), JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
118 putDirect(vm, vm.propertyNames->name, jsNontrivialString(&vm, String("IDBIndex"_s)), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
119 putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
120}
121
122template<> const ClassInfo JSIDBIndexConstructor::s_info = { "IDBIndex", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSIDBIndexConstructor) };
123
124/* Hash table for prototype */
125
126static const HashTableValue JSIDBIndexPrototypeTableValues[] =
127{
128 { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsIDBIndexConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSIDBIndexConstructor) } },
129 { "name", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsIDBIndexName), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSIDBIndexName) } },
130 { "objectStore", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsIDBIndexObjectStore), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
131 { "keyPath", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsIDBIndexKeyPath), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
132 { "multiEntry", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsIDBIndexMultiEntry), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
133 { "unique", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsIDBIndexUnique), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
134 { "openCursor", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsIDBIndexPrototypeFunctionOpenCursor), (intptr_t) (0) } },
135 { "openKeyCursor", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsIDBIndexPrototypeFunctionOpenKeyCursor), (intptr_t) (0) } },
136 { "get", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsIDBIndexPrototypeFunctionGet), (intptr_t) (1) } },
137 { "getKey", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsIDBIndexPrototypeFunctionGetKey), (intptr_t) (1) } },
138 { "getAll", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsIDBIndexPrototypeFunctionGetAll), (intptr_t) (0) } },
139 { "getAllKeys", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsIDBIndexPrototypeFunctionGetAllKeys), (intptr_t) (0) } },
140 { "count", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsIDBIndexPrototypeFunctionCount), (intptr_t) (0) } },
141};
142
143const ClassInfo JSIDBIndexPrototype::s_info = { "IDBIndexPrototype", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSIDBIndexPrototype) };
144
145void JSIDBIndexPrototype::finishCreation(VM& vm)
146{
147 Base::finishCreation(vm);
148 reifyStaticProperties(vm, JSIDBIndex::info(), JSIDBIndexPrototypeTableValues, *this);
149}
150
151const ClassInfo JSIDBIndex::s_info = { "IDBIndex", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSIDBIndex) };
152
153JSIDBIndex::JSIDBIndex(Structure* structure, JSDOMGlobalObject& globalObject, Ref<IDBIndex>&& impl)
154 : JSDOMWrapper<IDBIndex>(structure, globalObject, WTFMove(impl))
155{
156}
157
158void JSIDBIndex::finishCreation(VM& vm)
159{
160 Base::finishCreation(vm);
161 ASSERT(inherits(vm, info()));
162
163}
164
165JSObject* JSIDBIndex::createPrototype(VM& vm, JSDOMGlobalObject& globalObject)
166{
167 return JSIDBIndexPrototype::create(vm, &globalObject, JSIDBIndexPrototype::createStructure(vm, &globalObject, globalObject.objectPrototype()));
168}
169
170JSObject* JSIDBIndex::prototype(VM& vm, JSDOMGlobalObject& globalObject)
171{
172 return getDOMPrototype<JSIDBIndex>(vm, globalObject);
173}
174
175JSValue JSIDBIndex::getConstructor(VM& vm, const JSGlobalObject* globalObject)
176{
177 return getDOMConstructor<JSIDBIndexConstructor>(vm, *jsCast<const JSDOMGlobalObject*>(globalObject));
178}
179
180void JSIDBIndex::destroy(JSC::JSCell* cell)
181{
182 JSIDBIndex* thisObject = static_cast<JSIDBIndex*>(cell);
183 thisObject->JSIDBIndex::~JSIDBIndex();
184}
185
186template<> inline JSIDBIndex* IDLAttribute<JSIDBIndex>::cast(ExecState& state, EncodedJSValue thisValue)
187{
188 return jsDynamicCast<JSIDBIndex*>(state.vm(), JSValue::decode(thisValue));
189}
190
191template<> inline JSIDBIndex* IDLOperation<JSIDBIndex>::cast(ExecState& state)
192{
193 return jsDynamicCast<JSIDBIndex*>(state.vm(), state.thisValue());
194}
195
196EncodedJSValue jsIDBIndexConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
197{
198 VM& vm = state->vm();
199 auto throwScope = DECLARE_THROW_SCOPE(vm);
200 auto* prototype = jsDynamicCast<JSIDBIndexPrototype*>(vm, JSValue::decode(thisValue));
201 if (UNLIKELY(!prototype))
202 return throwVMTypeError(state, throwScope);
203 return JSValue::encode(JSIDBIndex::getConstructor(state->vm(), prototype->globalObject()));
204}
205
206bool setJSIDBIndexConstructor(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
207{
208 VM& vm = state->vm();
209 auto throwScope = DECLARE_THROW_SCOPE(vm);
210 auto* prototype = jsDynamicCast<JSIDBIndexPrototype*>(vm, JSValue::decode(thisValue));
211 if (UNLIKELY(!prototype)) {
212 throwVMTypeError(state, throwScope);
213 return false;
214 }
215 // Shadowing a built-in constructor
216 return prototype->putDirect(vm, vm.propertyNames->constructor, JSValue::decode(encodedValue));
217}
218
219static inline JSValue jsIDBIndexNameGetter(ExecState& state, JSIDBIndex& thisObject, ThrowScope& throwScope)
220{
221 UNUSED_PARAM(throwScope);
222 UNUSED_PARAM(state);
223 auto& impl = thisObject.wrapped();
224 JSValue result = toJS<IDLDOMString>(state, throwScope, impl.name());
225 return result;
226}
227
228EncodedJSValue jsIDBIndexName(ExecState* state, EncodedJSValue thisValue, PropertyName)
229{
230 return IDLAttribute<JSIDBIndex>::get<jsIDBIndexNameGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "name");
231}
232
233static inline bool setJSIDBIndexNameSetter(ExecState& state, JSIDBIndex& thisObject, JSValue value, ThrowScope& throwScope)
234{
235 UNUSED_PARAM(throwScope);
236 auto& impl = thisObject.wrapped();
237 auto nativeValue = convert<IDLDOMString>(state, value);
238 RETURN_IF_EXCEPTION(throwScope, false);
239 AttributeSetter::call(state, throwScope, [&] {
240 return impl.setName(WTFMove(nativeValue));
241 });
242 return true;
243}
244
245bool setJSIDBIndexName(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
246{
247 return IDLAttribute<JSIDBIndex>::set<setJSIDBIndexNameSetter>(*state, thisValue, encodedValue, "name");
248}
249
250static inline JSValue jsIDBIndexObjectStoreGetter(ExecState& state, JSIDBIndex& thisObject, ThrowScope& throwScope)
251{
252 UNUSED_PARAM(throwScope);
253 UNUSED_PARAM(state);
254 auto& impl = thisObject.wrapped();
255 JSValue result = toJS<IDLInterface<IDBObjectStore>>(state, *thisObject.globalObject(), throwScope, impl.objectStore());
256 return result;
257}
258
259EncodedJSValue jsIDBIndexObjectStore(ExecState* state, EncodedJSValue thisValue, PropertyName)
260{
261 return IDLAttribute<JSIDBIndex>::get<jsIDBIndexObjectStoreGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "objectStore");
262}
263
264static inline JSValue jsIDBIndexKeyPathGetter(ExecState& state, JSIDBIndex& thisObject, ThrowScope& throwScope)
265{
266 UNUSED_PARAM(throwScope);
267 UNUSED_PARAM(state);
268 auto& impl = thisObject.wrapped();
269 JSValue result = toJS<IDLNullable<IDLUnion<IDLDOMString, IDLSequence<IDLDOMString>>>>(state, *thisObject.globalObject(), throwScope, impl.keyPath());
270 return result;
271}
272
273EncodedJSValue jsIDBIndexKeyPath(ExecState* state, EncodedJSValue thisValue, PropertyName)
274{
275 return IDLAttribute<JSIDBIndex>::get<jsIDBIndexKeyPathGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "keyPath");
276}
277
278static inline JSValue jsIDBIndexMultiEntryGetter(ExecState& state, JSIDBIndex& thisObject, ThrowScope& throwScope)
279{
280 UNUSED_PARAM(throwScope);
281 UNUSED_PARAM(state);
282 auto& impl = thisObject.wrapped();
283 JSValue result = toJS<IDLBoolean>(state, throwScope, impl.multiEntry());
284 return result;
285}
286
287EncodedJSValue jsIDBIndexMultiEntry(ExecState* state, EncodedJSValue thisValue, PropertyName)
288{
289 return IDLAttribute<JSIDBIndex>::get<jsIDBIndexMultiEntryGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "multiEntry");
290}
291
292static inline JSValue jsIDBIndexUniqueGetter(ExecState& state, JSIDBIndex& thisObject, ThrowScope& throwScope)
293{
294 UNUSED_PARAM(throwScope);
295 UNUSED_PARAM(state);
296 auto& impl = thisObject.wrapped();
297 JSValue result = toJS<IDLBoolean>(state, throwScope, impl.unique());
298 return result;
299}
300
301EncodedJSValue jsIDBIndexUnique(ExecState* state, EncodedJSValue thisValue, PropertyName)
302{
303 return IDLAttribute<JSIDBIndex>::get<jsIDBIndexUniqueGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "unique");
304}
305
306static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionOpenCursor1Body(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
307{
308 UNUSED_PARAM(state);
309 UNUSED_PARAM(throwScope);
310 auto& impl = castedThis->wrapped();
311 auto range = convert<IDLNullable<IDLInterface<IDBKeyRange>>>(*state, state->argument(0), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentTypeError(state, scope, 0, "range", "IDBIndex", "openCursor", "IDBKeyRange"); });
312 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
313 auto direction = state->argument(1).isUndefined() ? IDBCursorDirection::Next : convert<IDLEnumeration<IDBCursorDirection>>(*state, state->uncheckedArgument(1), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentMustBeEnumError(state, scope, 1, "direction", "IDBIndex", "openCursor", expectedEnumerationValues<IDBCursorDirection>()); });
314 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
315 return JSValue::encode(toJS<IDLInterface<IDBRequest>>(*state, *castedThis->globalObject(), throwScope, impl.openCursor(*state, WTFMove(range), WTFMove(direction))));
316}
317
318static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionOpenCursor2Body(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
319{
320 UNUSED_PARAM(state);
321 UNUSED_PARAM(throwScope);
322 auto& impl = castedThis->wrapped();
323 auto key = convert<IDLAny>(*state, state->uncheckedArgument(0));
324 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
325 auto direction = state->argument(1).isUndefined() ? IDBCursorDirection::Next : convert<IDLEnumeration<IDBCursorDirection>>(*state, state->uncheckedArgument(1), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentMustBeEnumError(state, scope, 1, "direction", "IDBIndex", "openCursor", expectedEnumerationValues<IDBCursorDirection>()); });
326 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
327 return JSValue::encode(toJS<IDLInterface<IDBRequest>>(*state, *castedThis->globalObject(), throwScope, impl.openCursor(*state, WTFMove(key), WTFMove(direction))));
328}
329
330static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionOpenCursorOverloadDispatcher(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
331{
332 UNUSED_PARAM(state);
333 UNUSED_PARAM(throwScope);
334 VM& vm = state->vm();
335 UNUSED_PARAM(vm);
336 size_t argsCount = std::min<size_t>(2, state->argumentCount());
337 if (argsCount == 0) {
338 return jsIDBIndexPrototypeFunctionOpenCursor1Body(state, castedThis, throwScope);
339 }
340 if (argsCount == 1) {
341 JSValue distinguishingArg = state->uncheckedArgument(0);
342 if (distinguishingArg.isUndefined())
343 return jsIDBIndexPrototypeFunctionOpenCursor1Body(state, castedThis, throwScope);
344 if (distinguishingArg.isUndefinedOrNull())
345 return jsIDBIndexPrototypeFunctionOpenCursor1Body(state, castedThis, throwScope);
346 if (distinguishingArg.isObject() && asObject(distinguishingArg)->inherits<JSIDBKeyRange>(vm))
347 return jsIDBIndexPrototypeFunctionOpenCursor1Body(state, castedThis, throwScope);
348 return jsIDBIndexPrototypeFunctionOpenCursor2Body(state, castedThis, throwScope);
349 }
350 if (argsCount == 2) {
351 JSValue distinguishingArg = state->uncheckedArgument(0);
352 if (distinguishingArg.isUndefined())
353 return jsIDBIndexPrototypeFunctionOpenCursor1Body(state, castedThis, throwScope);
354 if (distinguishingArg.isUndefinedOrNull())
355 return jsIDBIndexPrototypeFunctionOpenCursor1Body(state, castedThis, throwScope);
356 if (distinguishingArg.isObject() && asObject(distinguishingArg)->inherits<JSIDBKeyRange>(vm))
357 return jsIDBIndexPrototypeFunctionOpenCursor1Body(state, castedThis, throwScope);
358 return jsIDBIndexPrototypeFunctionOpenCursor2Body(state, castedThis, throwScope);
359 }
360 return throwVMTypeError(state, throwScope);
361}
362
363EncodedJSValue JSC_HOST_CALL jsIDBIndexPrototypeFunctionOpenCursor(ExecState* state)
364{
365 return IDLOperation<JSIDBIndex>::call<jsIDBIndexPrototypeFunctionOpenCursorOverloadDispatcher>(*state, "openCursor");
366}
367
368static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionOpenKeyCursor1Body(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
369{
370 UNUSED_PARAM(state);
371 UNUSED_PARAM(throwScope);
372 auto& impl = castedThis->wrapped();
373 auto range = convert<IDLNullable<IDLInterface<IDBKeyRange>>>(*state, state->argument(0), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentTypeError(state, scope, 0, "range", "IDBIndex", "openKeyCursor", "IDBKeyRange"); });
374 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
375 auto direction = state->argument(1).isUndefined() ? IDBCursorDirection::Next : convert<IDLEnumeration<IDBCursorDirection>>(*state, state->uncheckedArgument(1), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentMustBeEnumError(state, scope, 1, "direction", "IDBIndex", "openKeyCursor", expectedEnumerationValues<IDBCursorDirection>()); });
376 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
377 return JSValue::encode(toJS<IDLInterface<IDBRequest>>(*state, *castedThis->globalObject(), throwScope, impl.openKeyCursor(*state, WTFMove(range), WTFMove(direction))));
378}
379
380static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionOpenKeyCursor2Body(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
381{
382 UNUSED_PARAM(state);
383 UNUSED_PARAM(throwScope);
384 auto& impl = castedThis->wrapped();
385 auto key = convert<IDLAny>(*state, state->uncheckedArgument(0));
386 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
387 auto direction = state->argument(1).isUndefined() ? IDBCursorDirection::Next : convert<IDLEnumeration<IDBCursorDirection>>(*state, state->uncheckedArgument(1), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentMustBeEnumError(state, scope, 1, "direction", "IDBIndex", "openKeyCursor", expectedEnumerationValues<IDBCursorDirection>()); });
388 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
389 return JSValue::encode(toJS<IDLInterface<IDBRequest>>(*state, *castedThis->globalObject(), throwScope, impl.openKeyCursor(*state, WTFMove(key), WTFMove(direction))));
390}
391
392static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionOpenKeyCursorOverloadDispatcher(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
393{
394 UNUSED_PARAM(state);
395 UNUSED_PARAM(throwScope);
396 VM& vm = state->vm();
397 UNUSED_PARAM(vm);
398 size_t argsCount = std::min<size_t>(2, state->argumentCount());
399 if (argsCount == 0) {
400 return jsIDBIndexPrototypeFunctionOpenKeyCursor1Body(state, castedThis, throwScope);
401 }
402 if (argsCount == 1) {
403 JSValue distinguishingArg = state->uncheckedArgument(0);
404 if (distinguishingArg.isUndefined())
405 return jsIDBIndexPrototypeFunctionOpenKeyCursor1Body(state, castedThis, throwScope);
406 if (distinguishingArg.isUndefinedOrNull())
407 return jsIDBIndexPrototypeFunctionOpenKeyCursor1Body(state, castedThis, throwScope);
408 if (distinguishingArg.isObject() && asObject(distinguishingArg)->inherits<JSIDBKeyRange>(vm))
409 return jsIDBIndexPrototypeFunctionOpenKeyCursor1Body(state, castedThis, throwScope);
410 return jsIDBIndexPrototypeFunctionOpenKeyCursor2Body(state, castedThis, throwScope);
411 }
412 if (argsCount == 2) {
413 JSValue distinguishingArg = state->uncheckedArgument(0);
414 if (distinguishingArg.isUndefined())
415 return jsIDBIndexPrototypeFunctionOpenKeyCursor1Body(state, castedThis, throwScope);
416 if (distinguishingArg.isUndefinedOrNull())
417 return jsIDBIndexPrototypeFunctionOpenKeyCursor1Body(state, castedThis, throwScope);
418 if (distinguishingArg.isObject() && asObject(distinguishingArg)->inherits<JSIDBKeyRange>(vm))
419 return jsIDBIndexPrototypeFunctionOpenKeyCursor1Body(state, castedThis, throwScope);
420 return jsIDBIndexPrototypeFunctionOpenKeyCursor2Body(state, castedThis, throwScope);
421 }
422 return throwVMTypeError(state, throwScope);
423}
424
425EncodedJSValue JSC_HOST_CALL jsIDBIndexPrototypeFunctionOpenKeyCursor(ExecState* state)
426{
427 return IDLOperation<JSIDBIndex>::call<jsIDBIndexPrototypeFunctionOpenKeyCursorOverloadDispatcher>(*state, "openKeyCursor");
428}
429
430static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionGet1Body(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
431{
432 UNUSED_PARAM(state);
433 UNUSED_PARAM(throwScope);
434 auto& impl = castedThis->wrapped();
435 auto key = convert<IDLNullable<IDLInterface<IDBKeyRange>>>(*state, state->uncheckedArgument(0), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentTypeError(state, scope, 0, "key", "IDBIndex", "get", "IDBKeyRange"); });
436 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
437 return JSValue::encode(toJS<IDLInterface<IDBRequest>>(*state, *castedThis->globalObject(), throwScope, impl.get(*state, WTFMove(key))));
438}
439
440static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionGet2Body(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
441{
442 UNUSED_PARAM(state);
443 UNUSED_PARAM(throwScope);
444 auto& impl = castedThis->wrapped();
445 auto key = convert<IDLAny>(*state, state->uncheckedArgument(0));
446 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
447 return JSValue::encode(toJS<IDLInterface<IDBRequest>>(*state, *castedThis->globalObject(), throwScope, impl.get(*state, WTFMove(key))));
448}
449
450static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionGetOverloadDispatcher(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
451{
452 UNUSED_PARAM(state);
453 UNUSED_PARAM(throwScope);
454 VM& vm = state->vm();
455 UNUSED_PARAM(vm);
456 size_t argsCount = std::min<size_t>(1, state->argumentCount());
457 if (argsCount == 1) {
458 JSValue distinguishingArg = state->uncheckedArgument(0);
459 if (distinguishingArg.isUndefinedOrNull())
460 return jsIDBIndexPrototypeFunctionGet1Body(state, castedThis, throwScope);
461 if (distinguishingArg.isObject() && asObject(distinguishingArg)->inherits<JSIDBKeyRange>(vm))
462 return jsIDBIndexPrototypeFunctionGet1Body(state, castedThis, throwScope);
463 return jsIDBIndexPrototypeFunctionGet2Body(state, castedThis, throwScope);
464 }
465 return argsCount < 1 ? throwVMError(state, throwScope, createNotEnoughArgumentsError(state)) : throwVMTypeError(state, throwScope);
466}
467
468EncodedJSValue JSC_HOST_CALL jsIDBIndexPrototypeFunctionGet(ExecState* state)
469{
470 return IDLOperation<JSIDBIndex>::call<jsIDBIndexPrototypeFunctionGetOverloadDispatcher>(*state, "get");
471}
472
473static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionGetKey1Body(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
474{
475 UNUSED_PARAM(state);
476 UNUSED_PARAM(throwScope);
477 auto& impl = castedThis->wrapped();
478 auto key = convert<IDLNullable<IDLInterface<IDBKeyRange>>>(*state, state->uncheckedArgument(0), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentTypeError(state, scope, 0, "key", "IDBIndex", "getKey", "IDBKeyRange"); });
479 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
480 return JSValue::encode(toJS<IDLInterface<IDBRequest>>(*state, *castedThis->globalObject(), throwScope, impl.getKey(*state, WTFMove(key))));
481}
482
483static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionGetKey2Body(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
484{
485 UNUSED_PARAM(state);
486 UNUSED_PARAM(throwScope);
487 auto& impl = castedThis->wrapped();
488 auto key = convert<IDLAny>(*state, state->uncheckedArgument(0));
489 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
490 return JSValue::encode(toJS<IDLInterface<IDBRequest>>(*state, *castedThis->globalObject(), throwScope, impl.getKey(*state, WTFMove(key))));
491}
492
493static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionGetKeyOverloadDispatcher(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
494{
495 UNUSED_PARAM(state);
496 UNUSED_PARAM(throwScope);
497 VM& vm = state->vm();
498 UNUSED_PARAM(vm);
499 size_t argsCount = std::min<size_t>(1, state->argumentCount());
500 if (argsCount == 1) {
501 JSValue distinguishingArg = state->uncheckedArgument(0);
502 if (distinguishingArg.isUndefinedOrNull())
503 return jsIDBIndexPrototypeFunctionGetKey1Body(state, castedThis, throwScope);
504 if (distinguishingArg.isObject() && asObject(distinguishingArg)->inherits<JSIDBKeyRange>(vm))
505 return jsIDBIndexPrototypeFunctionGetKey1Body(state, castedThis, throwScope);
506 return jsIDBIndexPrototypeFunctionGetKey2Body(state, castedThis, throwScope);
507 }
508 return argsCount < 1 ? throwVMError(state, throwScope, createNotEnoughArgumentsError(state)) : throwVMTypeError(state, throwScope);
509}
510
511EncodedJSValue JSC_HOST_CALL jsIDBIndexPrototypeFunctionGetKey(ExecState* state)
512{
513 return IDLOperation<JSIDBIndex>::call<jsIDBIndexPrototypeFunctionGetKeyOverloadDispatcher>(*state, "getKey");
514}
515
516static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionGetAll1Body(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
517{
518 UNUSED_PARAM(state);
519 UNUSED_PARAM(throwScope);
520 auto& impl = castedThis->wrapped();
521 auto range = convert<IDLNullable<IDLInterface<IDBKeyRange>>>(*state, state->argument(0), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentTypeError(state, scope, 0, "range", "IDBIndex", "getAll", "IDBKeyRange"); });
522 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
523 auto count = state->argument(1).isUndefined() ? Optional<Converter<IDLEnforceRangeAdaptor<IDLUnsignedLong>>::ReturnType>() : Optional<Converter<IDLEnforceRangeAdaptor<IDLUnsignedLong>>::ReturnType>(convert<IDLEnforceRangeAdaptor<IDLUnsignedLong>>(*state, state->uncheckedArgument(1)));
524 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
525 return JSValue::encode(toJS<IDLInterface<IDBRequest>>(*state, *castedThis->globalObject(), throwScope, impl.getAll(*state, WTFMove(range), WTFMove(count))));
526}
527
528static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionGetAll2Body(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
529{
530 UNUSED_PARAM(state);
531 UNUSED_PARAM(throwScope);
532 auto& impl = castedThis->wrapped();
533 auto key = convert<IDLAny>(*state, state->uncheckedArgument(0));
534 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
535 auto count = state->argument(1).isUndefined() ? Optional<Converter<IDLEnforceRangeAdaptor<IDLUnsignedLong>>::ReturnType>() : Optional<Converter<IDLEnforceRangeAdaptor<IDLUnsignedLong>>::ReturnType>(convert<IDLEnforceRangeAdaptor<IDLUnsignedLong>>(*state, state->uncheckedArgument(1)));
536 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
537 return JSValue::encode(toJS<IDLInterface<IDBRequest>>(*state, *castedThis->globalObject(), throwScope, impl.getAll(*state, WTFMove(key), WTFMove(count))));
538}
539
540static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionGetAllOverloadDispatcher(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
541{
542 UNUSED_PARAM(state);
543 UNUSED_PARAM(throwScope);
544 VM& vm = state->vm();
545 UNUSED_PARAM(vm);
546 size_t argsCount = std::min<size_t>(2, state->argumentCount());
547 if (argsCount == 0) {
548 return jsIDBIndexPrototypeFunctionGetAll1Body(state, castedThis, throwScope);
549 }
550 if (argsCount == 1) {
551 JSValue distinguishingArg = state->uncheckedArgument(0);
552 if (distinguishingArg.isUndefined())
553 return jsIDBIndexPrototypeFunctionGetAll1Body(state, castedThis, throwScope);
554 if (distinguishingArg.isUndefinedOrNull())
555 return jsIDBIndexPrototypeFunctionGetAll1Body(state, castedThis, throwScope);
556 if (distinguishingArg.isObject() && asObject(distinguishingArg)->inherits<JSIDBKeyRange>(vm))
557 return jsIDBIndexPrototypeFunctionGetAll1Body(state, castedThis, throwScope);
558 return jsIDBIndexPrototypeFunctionGetAll2Body(state, castedThis, throwScope);
559 }
560 if (argsCount == 2) {
561 JSValue distinguishingArg = state->uncheckedArgument(0);
562 if (distinguishingArg.isUndefined())
563 return jsIDBIndexPrototypeFunctionGetAll1Body(state, castedThis, throwScope);
564 if (distinguishingArg.isUndefinedOrNull())
565 return jsIDBIndexPrototypeFunctionGetAll1Body(state, castedThis, throwScope);
566 if (distinguishingArg.isObject() && asObject(distinguishingArg)->inherits<JSIDBKeyRange>(vm))
567 return jsIDBIndexPrototypeFunctionGetAll1Body(state, castedThis, throwScope);
568 return jsIDBIndexPrototypeFunctionGetAll2Body(state, castedThis, throwScope);
569 }
570 return throwVMTypeError(state, throwScope);
571}
572
573EncodedJSValue JSC_HOST_CALL jsIDBIndexPrototypeFunctionGetAll(ExecState* state)
574{
575 return IDLOperation<JSIDBIndex>::call<jsIDBIndexPrototypeFunctionGetAllOverloadDispatcher>(*state, "getAll");
576}
577
578static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionGetAllKeys1Body(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
579{
580 UNUSED_PARAM(state);
581 UNUSED_PARAM(throwScope);
582 auto& impl = castedThis->wrapped();
583 auto range = convert<IDLNullable<IDLInterface<IDBKeyRange>>>(*state, state->argument(0), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentTypeError(state, scope, 0, "range", "IDBIndex", "getAllKeys", "IDBKeyRange"); });
584 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
585 auto count = state->argument(1).isUndefined() ? Optional<Converter<IDLEnforceRangeAdaptor<IDLUnsignedLong>>::ReturnType>() : Optional<Converter<IDLEnforceRangeAdaptor<IDLUnsignedLong>>::ReturnType>(convert<IDLEnforceRangeAdaptor<IDLUnsignedLong>>(*state, state->uncheckedArgument(1)));
586 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
587 return JSValue::encode(toJS<IDLInterface<IDBRequest>>(*state, *castedThis->globalObject(), throwScope, impl.getAllKeys(*state, WTFMove(range), WTFMove(count))));
588}
589
590static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionGetAllKeys2Body(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
591{
592 UNUSED_PARAM(state);
593 UNUSED_PARAM(throwScope);
594 auto& impl = castedThis->wrapped();
595 auto key = convert<IDLAny>(*state, state->uncheckedArgument(0));
596 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
597 auto count = state->argument(1).isUndefined() ? Optional<Converter<IDLEnforceRangeAdaptor<IDLUnsignedLong>>::ReturnType>() : Optional<Converter<IDLEnforceRangeAdaptor<IDLUnsignedLong>>::ReturnType>(convert<IDLEnforceRangeAdaptor<IDLUnsignedLong>>(*state, state->uncheckedArgument(1)));
598 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
599 return JSValue::encode(toJS<IDLInterface<IDBRequest>>(*state, *castedThis->globalObject(), throwScope, impl.getAllKeys(*state, WTFMove(key), WTFMove(count))));
600}
601
602static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionGetAllKeysOverloadDispatcher(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
603{
604 UNUSED_PARAM(state);
605 UNUSED_PARAM(throwScope);
606 VM& vm = state->vm();
607 UNUSED_PARAM(vm);
608 size_t argsCount = std::min<size_t>(2, state->argumentCount());
609 if (argsCount == 0) {
610 return jsIDBIndexPrototypeFunctionGetAllKeys1Body(state, castedThis, throwScope);
611 }
612 if (argsCount == 1) {
613 JSValue distinguishingArg = state->uncheckedArgument(0);
614 if (distinguishingArg.isUndefined())
615 return jsIDBIndexPrototypeFunctionGetAllKeys1Body(state, castedThis, throwScope);
616 if (distinguishingArg.isUndefinedOrNull())
617 return jsIDBIndexPrototypeFunctionGetAllKeys1Body(state, castedThis, throwScope);
618 if (distinguishingArg.isObject() && asObject(distinguishingArg)->inherits<JSIDBKeyRange>(vm))
619 return jsIDBIndexPrototypeFunctionGetAllKeys1Body(state, castedThis, throwScope);
620 return jsIDBIndexPrototypeFunctionGetAllKeys2Body(state, castedThis, throwScope);
621 }
622 if (argsCount == 2) {
623 JSValue distinguishingArg = state->uncheckedArgument(0);
624 if (distinguishingArg.isUndefined())
625 return jsIDBIndexPrototypeFunctionGetAllKeys1Body(state, castedThis, throwScope);
626 if (distinguishingArg.isUndefinedOrNull())
627 return jsIDBIndexPrototypeFunctionGetAllKeys1Body(state, castedThis, throwScope);
628 if (distinguishingArg.isObject() && asObject(distinguishingArg)->inherits<JSIDBKeyRange>(vm))
629 return jsIDBIndexPrototypeFunctionGetAllKeys1Body(state, castedThis, throwScope);
630 return jsIDBIndexPrototypeFunctionGetAllKeys2Body(state, castedThis, throwScope);
631 }
632 return throwVMTypeError(state, throwScope);
633}
634
635EncodedJSValue JSC_HOST_CALL jsIDBIndexPrototypeFunctionGetAllKeys(ExecState* state)
636{
637 return IDLOperation<JSIDBIndex>::call<jsIDBIndexPrototypeFunctionGetAllKeysOverloadDispatcher>(*state, "getAllKeys");
638}
639
640static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionCount1Body(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
641{
642 UNUSED_PARAM(state);
643 UNUSED_PARAM(throwScope);
644 auto& impl = castedThis->wrapped();
645 auto range = convert<IDLNullable<IDLInterface<IDBKeyRange>>>(*state, state->argument(0), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentTypeError(state, scope, 0, "range", "IDBIndex", "count", "IDBKeyRange"); });
646 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
647 return JSValue::encode(toJS<IDLInterface<IDBRequest>>(*state, *castedThis->globalObject(), throwScope, impl.count(*state, WTFMove(range))));
648}
649
650static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionCount2Body(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
651{
652 UNUSED_PARAM(state);
653 UNUSED_PARAM(throwScope);
654 auto& impl = castedThis->wrapped();
655 auto key = convert<IDLAny>(*state, state->uncheckedArgument(0));
656 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
657 return JSValue::encode(toJS<IDLInterface<IDBRequest>>(*state, *castedThis->globalObject(), throwScope, impl.count(*state, WTFMove(key))));
658}
659
660static inline JSC::EncodedJSValue jsIDBIndexPrototypeFunctionCountOverloadDispatcher(JSC::ExecState* state, typename IDLOperation<JSIDBIndex>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
661{
662 UNUSED_PARAM(state);
663 UNUSED_PARAM(throwScope);
664 VM& vm = state->vm();
665 UNUSED_PARAM(vm);
666 size_t argsCount = std::min<size_t>(1, state->argumentCount());
667 if (argsCount == 0) {
668 return jsIDBIndexPrototypeFunctionCount1Body(state, castedThis, throwScope);
669 }
670 if (argsCount == 1) {
671 JSValue distinguishingArg = state->uncheckedArgument(0);
672 if (distinguishingArg.isUndefined())
673 return jsIDBIndexPrototypeFunctionCount1Body(state, castedThis, throwScope);
674 if (distinguishingArg.isUndefinedOrNull())
675 return jsIDBIndexPrototypeFunctionCount1Body(state, castedThis, throwScope);
676 if (distinguishingArg.isObject() && asObject(distinguishingArg)->inherits<JSIDBKeyRange>(vm))
677 return jsIDBIndexPrototypeFunctionCount1Body(state, castedThis, throwScope);
678 return jsIDBIndexPrototypeFunctionCount2Body(state, castedThis, throwScope);
679 }
680 return throwVMTypeError(state, throwScope);
681}
682
683EncodedJSValue JSC_HOST_CALL jsIDBIndexPrototypeFunctionCount(ExecState* state)
684{
685 return IDLOperation<JSIDBIndex>::call<jsIDBIndexPrototypeFunctionCountOverloadDispatcher>(*state, "count");
686}
687
688void JSIDBIndex::visitChildren(JSCell* cell, SlotVisitor& visitor)
689{
690 auto* thisObject = jsCast<JSIDBIndex*>(cell);
691 ASSERT_GC_OBJECT_INHERITS(thisObject, info());
692 Base::visitChildren(thisObject, visitor);
693 thisObject->visitAdditionalChildren(visitor);
694}
695
696void JSIDBIndex::visitOutputConstraints(JSCell* cell, SlotVisitor& visitor)
697{
698 auto* thisObject = jsCast<JSIDBIndex*>(cell);
699 ASSERT_GC_OBJECT_INHERITS(thisObject, info());
700 Base::visitOutputConstraints(thisObject, visitor);
701 thisObject->visitAdditionalChildren(visitor);
702}
703
704void JSIDBIndex::heapSnapshot(JSCell* cell, HeapSnapshotBuilder& builder)
705{
706 auto* thisObject = jsCast<JSIDBIndex*>(cell);
707 builder.setWrappedObjectForCell(cell, &thisObject->wrapped());
708 if (thisObject->scriptExecutionContext())
709 builder.setLabelForCell(cell, "url " + thisObject->scriptExecutionContext()->url().string());
710 Base::heapSnapshot(cell, builder);
711}
712
713bool JSIDBIndexOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor, const char** reason)
714{
715 auto* jsIDBIndex = jsCast<JSIDBIndex*>(handle.slot()->asCell());
716 IDBIndex* root = &jsIDBIndex->wrapped();
717 if (UNLIKELY(reason))
718 *reason = "Reachable from IDBIndex";
719 return visitor.containsOpaqueRoot(root);
720}
721
722void JSIDBIndexOwner::finalize(JSC::Handle<JSC::Unknown> handle, void* context)
723{
724 auto* jsIDBIndex = static_cast<JSIDBIndex*>(handle.slot()->asCell());
725 auto& world = *static_cast<DOMWrapperWorld*>(context);
726 uncacheWrapper(world, &jsIDBIndex->wrapped(), jsIDBIndex);
727}
728
729JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject* globalObject, Ref<IDBIndex>&& impl)
730{
731 return createWrapper<IDBIndex>(globalObject, WTFMove(impl));
732}
733
734JSC::JSValue toJS(JSC::ExecState* state, JSDOMGlobalObject* globalObject, IDBIndex& impl)
735{
736 return wrap(state, globalObject, impl);
737}
738
739IDBIndex* JSIDBIndex::toWrapped(JSC::VM& vm, JSC::JSValue value)
740{
741 if (auto* wrapper = jsDynamicCast<JSIDBIndex*>(vm, value))
742 return &wrapper->wrapped();
743 return nullptr;
744}
745
746}
747
748#endif // ENABLE(INDEXED_DATABASE)
749