1/*
2 This file is part of the WebKit open source project.
3 This file has been generated by generate-bindings.pl. DO NOT MODIFY!
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14
15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
19*/
20
21#include "config.h"
22#include "JSDOMSelection.h"
23
24#include "CustomElementReactionQueue.h"
25#include "JSDOMAttribute.h"
26#include "JSDOMBinding.h"
27#include "JSDOMConstructorNotConstructable.h"
28#include "JSDOMConvertBoolean.h"
29#include "JSDOMConvertInterface.h"
30#include "JSDOMConvertNullable.h"
31#include "JSDOMConvertNumbers.h"
32#include "JSDOMConvertStrings.h"
33#include "JSDOMExceptionHandling.h"
34#include "JSDOMGlobalObject.h"
35#include "JSDOMOperation.h"
36#include "JSDOMWrapperCache.h"
37#include "JSNode.h"
38#include "JSRange.h"
39#include "ScriptExecutionContext.h"
40#include <JavaScriptCore/FunctionPrototype.h>
41#include <JavaScriptCore/HeapSnapshotBuilder.h>
42#include <JavaScriptCore/JSCInlines.h>
43#include <wtf/GetPtr.h>
44#include <wtf/PointerPreparations.h>
45#include <wtf/URL.h>
46
47
48namespace WebCore {
49using namespace JSC;
50
51// Functions
52
53JSC::EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionCollapse(JSC::ExecState*);
54JSC::EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionCollapseToEnd(JSC::ExecState*);
55JSC::EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionCollapseToStart(JSC::ExecState*);
56JSC::EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionDeleteFromDocument(JSC::ExecState*);
57JSC::EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionContainsNode(JSC::ExecState*);
58JSC::EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionSelectAllChildren(JSC::ExecState*);
59JSC::EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionExtend(JSC::ExecState*);
60JSC::EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionGetRangeAt(JSC::ExecState*);
61JSC::EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionRemoveAllRanges(JSC::ExecState*);
62JSC::EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionAddRange(JSC::ExecState*);
63JSC::EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionToString(JSC::ExecState*);
64JSC::EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionSetBaseAndExtent(JSC::ExecState*);
65JSC::EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionSetPosition(JSC::ExecState*);
66JSC::EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionEmpty(JSC::ExecState*);
67JSC::EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionModify(JSC::ExecState*);
68
69// Attributes
70
71JSC::EncodedJSValue jsDOMSelectionConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
72bool setJSDOMSelectionConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
73JSC::EncodedJSValue jsDOMSelectionAnchorNode(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
74JSC::EncodedJSValue jsDOMSelectionAnchorOffset(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
75JSC::EncodedJSValue jsDOMSelectionFocusNode(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
76JSC::EncodedJSValue jsDOMSelectionFocusOffset(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
77JSC::EncodedJSValue jsDOMSelectionIsCollapsed(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
78JSC::EncodedJSValue jsDOMSelectionRangeCount(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
79JSC::EncodedJSValue jsDOMSelectionType(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
80JSC::EncodedJSValue jsDOMSelectionBaseNode(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
81JSC::EncodedJSValue jsDOMSelectionBaseOffset(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
82JSC::EncodedJSValue jsDOMSelectionExtentNode(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
83JSC::EncodedJSValue jsDOMSelectionExtentOffset(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
84
85class JSDOMSelectionPrototype : public JSC::JSNonFinalObject {
86public:
87 using Base = JSC::JSNonFinalObject;
88 static JSDOMSelectionPrototype* create(JSC::VM& vm, JSDOMGlobalObject* globalObject, JSC::Structure* structure)
89 {
90 JSDOMSelectionPrototype* ptr = new (NotNull, JSC::allocateCell<JSDOMSelectionPrototype>(vm.heap)) JSDOMSelectionPrototype(vm, globalObject, structure);
91 ptr->finishCreation(vm);
92 return ptr;
93 }
94
95 DECLARE_INFO;
96 static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
97 {
98 return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
99 }
100
101private:
102 JSDOMSelectionPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
103 : JSC::JSNonFinalObject(vm, structure)
104 {
105 }
106
107 void finishCreation(JSC::VM&);
108};
109
110using JSDOMSelectionConstructor = JSDOMConstructorNotConstructable<JSDOMSelection>;
111
112template<> JSValue JSDOMSelectionConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
113{
114 UNUSED_PARAM(vm);
115 return globalObject.functionPrototype();
116}
117
118template<> void JSDOMSelectionConstructor::initializeProperties(VM& vm, JSDOMGlobalObject& globalObject)
119{
120 putDirect(vm, vm.propertyNames->prototype, JSDOMSelection::prototype(vm, globalObject), JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
121 putDirect(vm, vm.propertyNames->name, jsNontrivialString(&vm, String("Selection"_s)), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
122 putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
123}
124
125template<> const ClassInfo JSDOMSelectionConstructor::s_info = { "Selection", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSDOMSelectionConstructor) };
126
127/* Hash table for prototype */
128
129static const HashTableValue JSDOMSelectionPrototypeTableValues[] =
130{
131 { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMSelectionConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSDOMSelectionConstructor) } },
132 { "anchorNode", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMSelectionAnchorNode), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
133 { "anchorOffset", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMSelectionAnchorOffset), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
134 { "focusNode", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMSelectionFocusNode), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
135 { "focusOffset", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMSelectionFocusOffset), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
136 { "isCollapsed", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMSelectionIsCollapsed), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
137 { "rangeCount", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMSelectionRangeCount), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
138 { "type", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMSelectionType), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
139 { "baseNode", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMSelectionBaseNode), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
140 { "baseOffset", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMSelectionBaseOffset), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
141 { "extentNode", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMSelectionExtentNode), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
142 { "extentOffset", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsDOMSelectionExtentOffset), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
143 { "collapse", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsDOMSelectionPrototypeFunctionCollapse), (intptr_t) (1) } },
144 { "collapseToEnd", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsDOMSelectionPrototypeFunctionCollapseToEnd), (intptr_t) (0) } },
145 { "collapseToStart", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsDOMSelectionPrototypeFunctionCollapseToStart), (intptr_t) (0) } },
146 { "deleteFromDocument", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsDOMSelectionPrototypeFunctionDeleteFromDocument), (intptr_t) (0) } },
147 { "containsNode", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsDOMSelectionPrototypeFunctionContainsNode), (intptr_t) (1) } },
148 { "selectAllChildren", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsDOMSelectionPrototypeFunctionSelectAllChildren), (intptr_t) (1) } },
149 { "extend", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsDOMSelectionPrototypeFunctionExtend), (intptr_t) (1) } },
150 { "getRangeAt", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsDOMSelectionPrototypeFunctionGetRangeAt), (intptr_t) (1) } },
151 { "removeAllRanges", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsDOMSelectionPrototypeFunctionRemoveAllRanges), (intptr_t) (0) } },
152 { "addRange", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsDOMSelectionPrototypeFunctionAddRange), (intptr_t) (1) } },
153 { "toString", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum | JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsDOMSelectionPrototypeFunctionToString), (intptr_t) (0) } },
154 { "setBaseAndExtent", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsDOMSelectionPrototypeFunctionSetBaseAndExtent), (intptr_t) (4) } },
155 { "setPosition", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsDOMSelectionPrototypeFunctionSetPosition), (intptr_t) (1) } },
156 { "empty", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsDOMSelectionPrototypeFunctionEmpty), (intptr_t) (0) } },
157 { "modify", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsDOMSelectionPrototypeFunctionModify), (intptr_t) (0) } },
158};
159
160const ClassInfo JSDOMSelectionPrototype::s_info = { "SelectionPrototype", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSDOMSelectionPrototype) };
161
162void JSDOMSelectionPrototype::finishCreation(VM& vm)
163{
164 Base::finishCreation(vm);
165 reifyStaticProperties(vm, JSDOMSelection::info(), JSDOMSelectionPrototypeTableValues, *this);
166}
167
168const ClassInfo JSDOMSelection::s_info = { "Selection", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSDOMSelection) };
169
170JSDOMSelection::JSDOMSelection(Structure* structure, JSDOMGlobalObject& globalObject, Ref<DOMSelection>&& impl)
171 : JSDOMWrapper<DOMSelection>(structure, globalObject, WTFMove(impl))
172{
173}
174
175void JSDOMSelection::finishCreation(VM& vm)
176{
177 Base::finishCreation(vm);
178 ASSERT(inherits(vm, info()));
179
180}
181
182JSObject* JSDOMSelection::createPrototype(VM& vm, JSDOMGlobalObject& globalObject)
183{
184 return JSDOMSelectionPrototype::create(vm, &globalObject, JSDOMSelectionPrototype::createStructure(vm, &globalObject, globalObject.objectPrototype()));
185}
186
187JSObject* JSDOMSelection::prototype(VM& vm, JSDOMGlobalObject& globalObject)
188{
189 return getDOMPrototype<JSDOMSelection>(vm, globalObject);
190}
191
192JSValue JSDOMSelection::getConstructor(VM& vm, const JSGlobalObject* globalObject)
193{
194 return getDOMConstructor<JSDOMSelectionConstructor>(vm, *jsCast<const JSDOMGlobalObject*>(globalObject));
195}
196
197void JSDOMSelection::destroy(JSC::JSCell* cell)
198{
199 JSDOMSelection* thisObject = static_cast<JSDOMSelection*>(cell);
200 thisObject->JSDOMSelection::~JSDOMSelection();
201}
202
203template<> inline JSDOMSelection* IDLAttribute<JSDOMSelection>::cast(ExecState& state, EncodedJSValue thisValue)
204{
205 return jsDynamicCast<JSDOMSelection*>(state.vm(), JSValue::decode(thisValue));
206}
207
208template<> inline JSDOMSelection* IDLOperation<JSDOMSelection>::cast(ExecState& state)
209{
210 return jsDynamicCast<JSDOMSelection*>(state.vm(), state.thisValue());
211}
212
213EncodedJSValue jsDOMSelectionConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
214{
215 VM& vm = state->vm();
216 auto throwScope = DECLARE_THROW_SCOPE(vm);
217 auto* prototype = jsDynamicCast<JSDOMSelectionPrototype*>(vm, JSValue::decode(thisValue));
218 if (UNLIKELY(!prototype))
219 return throwVMTypeError(state, throwScope);
220 return JSValue::encode(JSDOMSelection::getConstructor(state->vm(), prototype->globalObject()));
221}
222
223bool setJSDOMSelectionConstructor(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
224{
225 VM& vm = state->vm();
226 auto throwScope = DECLARE_THROW_SCOPE(vm);
227 auto* prototype = jsDynamicCast<JSDOMSelectionPrototype*>(vm, JSValue::decode(thisValue));
228 if (UNLIKELY(!prototype)) {
229 throwVMTypeError(state, throwScope);
230 return false;
231 }
232 // Shadowing a built-in constructor
233 return prototype->putDirect(vm, vm.propertyNames->constructor, JSValue::decode(encodedValue));
234}
235
236static inline JSValue jsDOMSelectionAnchorNodeGetter(ExecState& state, JSDOMSelection& thisObject, ThrowScope& throwScope)
237{
238 UNUSED_PARAM(throwScope);
239 UNUSED_PARAM(state);
240 auto& impl = thisObject.wrapped();
241 JSValue result = toJS<IDLNullable<IDLInterface<Node>>>(state, *thisObject.globalObject(), throwScope, impl.anchorNode());
242 return result;
243}
244
245EncodedJSValue jsDOMSelectionAnchorNode(ExecState* state, EncodedJSValue thisValue, PropertyName)
246{
247 return IDLAttribute<JSDOMSelection>::get<jsDOMSelectionAnchorNodeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "anchorNode");
248}
249
250static inline JSValue jsDOMSelectionAnchorOffsetGetter(ExecState& state, JSDOMSelection& thisObject, ThrowScope& throwScope)
251{
252 UNUSED_PARAM(throwScope);
253 UNUSED_PARAM(state);
254 auto& impl = thisObject.wrapped();
255 JSValue result = toJS<IDLUnsignedLong>(state, throwScope, impl.anchorOffset());
256 return result;
257}
258
259EncodedJSValue jsDOMSelectionAnchorOffset(ExecState* state, EncodedJSValue thisValue, PropertyName)
260{
261 return IDLAttribute<JSDOMSelection>::get<jsDOMSelectionAnchorOffsetGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "anchorOffset");
262}
263
264static inline JSValue jsDOMSelectionFocusNodeGetter(ExecState& state, JSDOMSelection& thisObject, ThrowScope& throwScope)
265{
266 UNUSED_PARAM(throwScope);
267 UNUSED_PARAM(state);
268 auto& impl = thisObject.wrapped();
269 JSValue result = toJS<IDLNullable<IDLInterface<Node>>>(state, *thisObject.globalObject(), throwScope, impl.focusNode());
270 return result;
271}
272
273EncodedJSValue jsDOMSelectionFocusNode(ExecState* state, EncodedJSValue thisValue, PropertyName)
274{
275 return IDLAttribute<JSDOMSelection>::get<jsDOMSelectionFocusNodeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "focusNode");
276}
277
278static inline JSValue jsDOMSelectionFocusOffsetGetter(ExecState& state, JSDOMSelection& thisObject, ThrowScope& throwScope)
279{
280 UNUSED_PARAM(throwScope);
281 UNUSED_PARAM(state);
282 auto& impl = thisObject.wrapped();
283 JSValue result = toJS<IDLUnsignedLong>(state, throwScope, impl.focusOffset());
284 return result;
285}
286
287EncodedJSValue jsDOMSelectionFocusOffset(ExecState* state, EncodedJSValue thisValue, PropertyName)
288{
289 return IDLAttribute<JSDOMSelection>::get<jsDOMSelectionFocusOffsetGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "focusOffset");
290}
291
292static inline JSValue jsDOMSelectionIsCollapsedGetter(ExecState& state, JSDOMSelection& 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.isCollapsed());
298 return result;
299}
300
301EncodedJSValue jsDOMSelectionIsCollapsed(ExecState* state, EncodedJSValue thisValue, PropertyName)
302{
303 return IDLAttribute<JSDOMSelection>::get<jsDOMSelectionIsCollapsedGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "isCollapsed");
304}
305
306static inline JSValue jsDOMSelectionRangeCountGetter(ExecState& state, JSDOMSelection& thisObject, ThrowScope& throwScope)
307{
308 UNUSED_PARAM(throwScope);
309 UNUSED_PARAM(state);
310 auto& impl = thisObject.wrapped();
311 JSValue result = toJS<IDLUnsignedLong>(state, throwScope, impl.rangeCount());
312 return result;
313}
314
315EncodedJSValue jsDOMSelectionRangeCount(ExecState* state, EncodedJSValue thisValue, PropertyName)
316{
317 return IDLAttribute<JSDOMSelection>::get<jsDOMSelectionRangeCountGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "rangeCount");
318}
319
320static inline JSValue jsDOMSelectionTypeGetter(ExecState& state, JSDOMSelection& thisObject, ThrowScope& throwScope)
321{
322 UNUSED_PARAM(throwScope);
323 UNUSED_PARAM(state);
324 auto& impl = thisObject.wrapped();
325 JSValue result = toJS<IDLDOMString>(state, throwScope, impl.type());
326 return result;
327}
328
329EncodedJSValue jsDOMSelectionType(ExecState* state, EncodedJSValue thisValue, PropertyName)
330{
331 return IDLAttribute<JSDOMSelection>::get<jsDOMSelectionTypeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "type");
332}
333
334static inline JSValue jsDOMSelectionBaseNodeGetter(ExecState& state, JSDOMSelection& thisObject, ThrowScope& throwScope)
335{
336 UNUSED_PARAM(throwScope);
337 UNUSED_PARAM(state);
338 auto& impl = thisObject.wrapped();
339 JSValue result = toJS<IDLNullable<IDLInterface<Node>>>(state, *thisObject.globalObject(), throwScope, impl.baseNode());
340 return result;
341}
342
343EncodedJSValue jsDOMSelectionBaseNode(ExecState* state, EncodedJSValue thisValue, PropertyName)
344{
345 return IDLAttribute<JSDOMSelection>::get<jsDOMSelectionBaseNodeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "baseNode");
346}
347
348static inline JSValue jsDOMSelectionBaseOffsetGetter(ExecState& state, JSDOMSelection& thisObject, ThrowScope& throwScope)
349{
350 UNUSED_PARAM(throwScope);
351 UNUSED_PARAM(state);
352 auto& impl = thisObject.wrapped();
353 JSValue result = toJS<IDLUnsignedLong>(state, throwScope, impl.baseOffset());
354 return result;
355}
356
357EncodedJSValue jsDOMSelectionBaseOffset(ExecState* state, EncodedJSValue thisValue, PropertyName)
358{
359 return IDLAttribute<JSDOMSelection>::get<jsDOMSelectionBaseOffsetGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "baseOffset");
360}
361
362static inline JSValue jsDOMSelectionExtentNodeGetter(ExecState& state, JSDOMSelection& thisObject, ThrowScope& throwScope)
363{
364 UNUSED_PARAM(throwScope);
365 UNUSED_PARAM(state);
366 auto& impl = thisObject.wrapped();
367 JSValue result = toJS<IDLNullable<IDLInterface<Node>>>(state, *thisObject.globalObject(), throwScope, impl.extentNode());
368 return result;
369}
370
371EncodedJSValue jsDOMSelectionExtentNode(ExecState* state, EncodedJSValue thisValue, PropertyName)
372{
373 return IDLAttribute<JSDOMSelection>::get<jsDOMSelectionExtentNodeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "extentNode");
374}
375
376static inline JSValue jsDOMSelectionExtentOffsetGetter(ExecState& state, JSDOMSelection& thisObject, ThrowScope& throwScope)
377{
378 UNUSED_PARAM(throwScope);
379 UNUSED_PARAM(state);
380 auto& impl = thisObject.wrapped();
381 JSValue result = toJS<IDLUnsignedLong>(state, throwScope, impl.extentOffset());
382 return result;
383}
384
385EncodedJSValue jsDOMSelectionExtentOffset(ExecState* state, EncodedJSValue thisValue, PropertyName)
386{
387 return IDLAttribute<JSDOMSelection>::get<jsDOMSelectionExtentOffsetGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "extentOffset");
388}
389
390static inline JSC::EncodedJSValue jsDOMSelectionPrototypeFunctionCollapseBody(JSC::ExecState* state, typename IDLOperation<JSDOMSelection>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
391{
392 UNUSED_PARAM(state);
393 UNUSED_PARAM(throwScope);
394 auto& impl = castedThis->wrapped();
395 if (UNLIKELY(state->argumentCount() < 1))
396 return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
397 auto node = convert<IDLNullable<IDLInterface<Node>>>(*state, state->uncheckedArgument(0), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentTypeError(state, scope, 0, "node", "Selection", "collapse", "Node"); });
398 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
399 auto offset = convert<IDLUnsignedLong>(*state, state->argument(1));
400 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
401 impl.collapse(WTFMove(node), WTFMove(offset));
402 return JSValue::encode(jsUndefined());
403}
404
405EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionCollapse(ExecState* state)
406{
407 return IDLOperation<JSDOMSelection>::call<jsDOMSelectionPrototypeFunctionCollapseBody>(*state, "collapse");
408}
409
410static inline JSC::EncodedJSValue jsDOMSelectionPrototypeFunctionCollapseToEndBody(JSC::ExecState* state, typename IDLOperation<JSDOMSelection>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
411{
412 UNUSED_PARAM(state);
413 UNUSED_PARAM(throwScope);
414 auto& impl = castedThis->wrapped();
415 propagateException(*state, throwScope, impl.collapseToEnd());
416 return JSValue::encode(jsUndefined());
417}
418
419EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionCollapseToEnd(ExecState* state)
420{
421 return IDLOperation<JSDOMSelection>::call<jsDOMSelectionPrototypeFunctionCollapseToEndBody>(*state, "collapseToEnd");
422}
423
424static inline JSC::EncodedJSValue jsDOMSelectionPrototypeFunctionCollapseToStartBody(JSC::ExecState* state, typename IDLOperation<JSDOMSelection>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
425{
426 UNUSED_PARAM(state);
427 UNUSED_PARAM(throwScope);
428 auto& impl = castedThis->wrapped();
429 propagateException(*state, throwScope, impl.collapseToStart());
430 return JSValue::encode(jsUndefined());
431}
432
433EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionCollapseToStart(ExecState* state)
434{
435 return IDLOperation<JSDOMSelection>::call<jsDOMSelectionPrototypeFunctionCollapseToStartBody>(*state, "collapseToStart");
436}
437
438static inline JSC::EncodedJSValue jsDOMSelectionPrototypeFunctionDeleteFromDocumentBody(JSC::ExecState* state, typename IDLOperation<JSDOMSelection>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
439{
440 UNUSED_PARAM(state);
441 UNUSED_PARAM(throwScope);
442 CustomElementReactionStack customElementReactionStack(*state);
443 auto& impl = castedThis->wrapped();
444 impl.deleteFromDocument();
445 return JSValue::encode(jsUndefined());
446}
447
448EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionDeleteFromDocument(ExecState* state)
449{
450 return IDLOperation<JSDOMSelection>::call<jsDOMSelectionPrototypeFunctionDeleteFromDocumentBody>(*state, "deleteFromDocument");
451}
452
453static inline JSC::EncodedJSValue jsDOMSelectionPrototypeFunctionContainsNodeBody(JSC::ExecState* state, typename IDLOperation<JSDOMSelection>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
454{
455 UNUSED_PARAM(state);
456 UNUSED_PARAM(throwScope);
457 auto& impl = castedThis->wrapped();
458 if (UNLIKELY(state->argumentCount() < 1))
459 return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
460 auto node = convert<IDLInterface<Node>>(*state, state->uncheckedArgument(0), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentTypeError(state, scope, 0, "node", "Selection", "containsNode", "Node"); });
461 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
462 auto allowPartial = convert<IDLBoolean>(*state, state->argument(1));
463 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
464 return JSValue::encode(toJS<IDLBoolean>(impl.containsNode(*node, WTFMove(allowPartial))));
465}
466
467EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionContainsNode(ExecState* state)
468{
469 return IDLOperation<JSDOMSelection>::call<jsDOMSelectionPrototypeFunctionContainsNodeBody>(*state, "containsNode");
470}
471
472static inline JSC::EncodedJSValue jsDOMSelectionPrototypeFunctionSelectAllChildrenBody(JSC::ExecState* state, typename IDLOperation<JSDOMSelection>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
473{
474 UNUSED_PARAM(state);
475 UNUSED_PARAM(throwScope);
476 auto& impl = castedThis->wrapped();
477 if (UNLIKELY(state->argumentCount() < 1))
478 return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
479 auto node = convert<IDLInterface<Node>>(*state, state->uncheckedArgument(0), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentTypeError(state, scope, 0, "node", "Selection", "selectAllChildren", "Node"); });
480 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
481 impl.selectAllChildren(*node);
482 return JSValue::encode(jsUndefined());
483}
484
485EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionSelectAllChildren(ExecState* state)
486{
487 return IDLOperation<JSDOMSelection>::call<jsDOMSelectionPrototypeFunctionSelectAllChildrenBody>(*state, "selectAllChildren");
488}
489
490static inline JSC::EncodedJSValue jsDOMSelectionPrototypeFunctionExtendBody(JSC::ExecState* state, typename IDLOperation<JSDOMSelection>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
491{
492 UNUSED_PARAM(state);
493 UNUSED_PARAM(throwScope);
494 auto& impl = castedThis->wrapped();
495 if (UNLIKELY(state->argumentCount() < 1))
496 return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
497 auto node = convert<IDLInterface<Node>>(*state, state->uncheckedArgument(0), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentTypeError(state, scope, 0, "node", "Selection", "extend", "Node"); });
498 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
499 auto offset = convert<IDLUnsignedLong>(*state, state->argument(1));
500 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
501 propagateException(*state, throwScope, impl.extend(*node, WTFMove(offset)));
502 return JSValue::encode(jsUndefined());
503}
504
505EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionExtend(ExecState* state)
506{
507 return IDLOperation<JSDOMSelection>::call<jsDOMSelectionPrototypeFunctionExtendBody>(*state, "extend");
508}
509
510static inline JSC::EncodedJSValue jsDOMSelectionPrototypeFunctionGetRangeAtBody(JSC::ExecState* state, typename IDLOperation<JSDOMSelection>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
511{
512 UNUSED_PARAM(state);
513 UNUSED_PARAM(throwScope);
514 auto& impl = castedThis->wrapped();
515 if (UNLIKELY(state->argumentCount() < 1))
516 return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
517 auto index = convert<IDLUnsignedLong>(*state, state->uncheckedArgument(0));
518 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
519 return JSValue::encode(toJS<IDLInterface<Range>>(*state, *castedThis->globalObject(), throwScope, impl.getRangeAt(WTFMove(index))));
520}
521
522EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionGetRangeAt(ExecState* state)
523{
524 return IDLOperation<JSDOMSelection>::call<jsDOMSelectionPrototypeFunctionGetRangeAtBody>(*state, "getRangeAt");
525}
526
527static inline JSC::EncodedJSValue jsDOMSelectionPrototypeFunctionRemoveAllRangesBody(JSC::ExecState* state, typename IDLOperation<JSDOMSelection>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
528{
529 UNUSED_PARAM(state);
530 UNUSED_PARAM(throwScope);
531 auto& impl = castedThis->wrapped();
532 impl.removeAllRanges();
533 return JSValue::encode(jsUndefined());
534}
535
536EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionRemoveAllRanges(ExecState* state)
537{
538 return IDLOperation<JSDOMSelection>::call<jsDOMSelectionPrototypeFunctionRemoveAllRangesBody>(*state, "removeAllRanges");
539}
540
541static inline JSC::EncodedJSValue jsDOMSelectionPrototypeFunctionAddRangeBody(JSC::ExecState* state, typename IDLOperation<JSDOMSelection>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
542{
543 UNUSED_PARAM(state);
544 UNUSED_PARAM(throwScope);
545 auto& impl = castedThis->wrapped();
546 if (UNLIKELY(state->argumentCount() < 1))
547 return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
548 auto range = convert<IDLInterface<Range>>(*state, state->uncheckedArgument(0), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentTypeError(state, scope, 0, "range", "Selection", "addRange", "Range"); });
549 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
550 impl.addRange(*range);
551 return JSValue::encode(jsUndefined());
552}
553
554EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionAddRange(ExecState* state)
555{
556 return IDLOperation<JSDOMSelection>::call<jsDOMSelectionPrototypeFunctionAddRangeBody>(*state, "addRange");
557}
558
559static inline JSC::EncodedJSValue jsDOMSelectionPrototypeFunctionToStringBody(JSC::ExecState* state, typename IDLOperation<JSDOMSelection>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
560{
561 UNUSED_PARAM(state);
562 UNUSED_PARAM(throwScope);
563 auto& impl = castedThis->wrapped();
564 return JSValue::encode(toJS<IDLDOMString>(*state, impl.toString()));
565}
566
567EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionToString(ExecState* state)
568{
569 return IDLOperation<JSDOMSelection>::call<jsDOMSelectionPrototypeFunctionToStringBody>(*state, "toString");
570}
571
572static inline JSC::EncodedJSValue jsDOMSelectionPrototypeFunctionSetBaseAndExtentBody(JSC::ExecState* state, typename IDLOperation<JSDOMSelection>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
573{
574 UNUSED_PARAM(state);
575 UNUSED_PARAM(throwScope);
576 auto& impl = castedThis->wrapped();
577 if (UNLIKELY(state->argumentCount() < 4))
578 return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
579 auto baseNode = convert<IDLNullable<IDLInterface<Node>>>(*state, state->uncheckedArgument(0), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentTypeError(state, scope, 0, "baseNode", "Selection", "setBaseAndExtent", "Node"); });
580 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
581 auto baseOffset = convert<IDLUnsignedLong>(*state, state->uncheckedArgument(1));
582 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
583 auto extentNode = convert<IDLNullable<IDLInterface<Node>>>(*state, state->uncheckedArgument(2), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentTypeError(state, scope, 2, "extentNode", "Selection", "setBaseAndExtent", "Node"); });
584 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
585 auto extentOffset = convert<IDLUnsignedLong>(*state, state->uncheckedArgument(3));
586 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
587 impl.setBaseAndExtent(WTFMove(baseNode), WTFMove(baseOffset), WTFMove(extentNode), WTFMove(extentOffset));
588 return JSValue::encode(jsUndefined());
589}
590
591EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionSetBaseAndExtent(ExecState* state)
592{
593 return IDLOperation<JSDOMSelection>::call<jsDOMSelectionPrototypeFunctionSetBaseAndExtentBody>(*state, "setBaseAndExtent");
594}
595
596static inline JSC::EncodedJSValue jsDOMSelectionPrototypeFunctionSetPositionBody(JSC::ExecState* state, typename IDLOperation<JSDOMSelection>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
597{
598 UNUSED_PARAM(state);
599 UNUSED_PARAM(throwScope);
600 auto& impl = castedThis->wrapped();
601 if (UNLIKELY(state->argumentCount() < 1))
602 return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
603 auto node = convert<IDLNullable<IDLInterface<Node>>>(*state, state->uncheckedArgument(0), [](JSC::ExecState& state, JSC::ThrowScope& scope) { throwArgumentTypeError(state, scope, 0, "node", "Selection", "setPosition", "Node"); });
604 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
605 auto offset = convert<IDLUnsignedLong>(*state, state->argument(1));
606 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
607 impl.setPosition(WTFMove(node), WTFMove(offset));
608 return JSValue::encode(jsUndefined());
609}
610
611EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionSetPosition(ExecState* state)
612{
613 return IDLOperation<JSDOMSelection>::call<jsDOMSelectionPrototypeFunctionSetPositionBody>(*state, "setPosition");
614}
615
616static inline JSC::EncodedJSValue jsDOMSelectionPrototypeFunctionEmptyBody(JSC::ExecState* state, typename IDLOperation<JSDOMSelection>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
617{
618 UNUSED_PARAM(state);
619 UNUSED_PARAM(throwScope);
620 auto& impl = castedThis->wrapped();
621 impl.empty();
622 return JSValue::encode(jsUndefined());
623}
624
625EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionEmpty(ExecState* state)
626{
627 return IDLOperation<JSDOMSelection>::call<jsDOMSelectionPrototypeFunctionEmptyBody>(*state, "empty");
628}
629
630static inline JSC::EncodedJSValue jsDOMSelectionPrototypeFunctionModifyBody(JSC::ExecState* state, typename IDLOperation<JSDOMSelection>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
631{
632 UNUSED_PARAM(state);
633 UNUSED_PARAM(throwScope);
634 auto& impl = castedThis->wrapped();
635 auto alter = convert<IDLDOMString>(*state, state->argument(0));
636 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
637 auto direction = convert<IDLDOMString>(*state, state->argument(1));
638 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
639 auto granularity = convert<IDLDOMString>(*state, state->argument(2));
640 RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
641 impl.modify(WTFMove(alter), WTFMove(direction), WTFMove(granularity));
642 return JSValue::encode(jsUndefined());
643}
644
645EncodedJSValue JSC_HOST_CALL jsDOMSelectionPrototypeFunctionModify(ExecState* state)
646{
647 return IDLOperation<JSDOMSelection>::call<jsDOMSelectionPrototypeFunctionModifyBody>(*state, "modify");
648}
649
650void JSDOMSelection::heapSnapshot(JSCell* cell, HeapSnapshotBuilder& builder)
651{
652 auto* thisObject = jsCast<JSDOMSelection*>(cell);
653 builder.setWrappedObjectForCell(cell, &thisObject->wrapped());
654 if (thisObject->scriptExecutionContext())
655 builder.setLabelForCell(cell, "url " + thisObject->scriptExecutionContext()->url().string());
656 Base::heapSnapshot(cell, builder);
657}
658
659bool JSDOMSelectionOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor, const char** reason)
660{
661 auto* jsDOMSelection = jsCast<JSDOMSelection*>(handle.slot()->asCell());
662 Frame* root = WTF::getPtr(jsDOMSelection->wrapped().frame());
663 if (!root)
664 return false;
665 if (UNLIKELY(reason))
666 *reason = "Reachable from Frame";
667 return visitor.containsOpaqueRoot(root);
668}
669
670void JSDOMSelectionOwner::finalize(JSC::Handle<JSC::Unknown> handle, void* context)
671{
672 auto* jsDOMSelection = static_cast<JSDOMSelection*>(handle.slot()->asCell());
673 auto& world = *static_cast<DOMWrapperWorld*>(context);
674 uncacheWrapper(world, &jsDOMSelection->wrapped(), jsDOMSelection);
675}
676
677JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject* globalObject, Ref<DOMSelection>&& impl)
678{
679 // If you hit this failure the interface definition has the ImplementationLacksVTable
680 // attribute. You should remove that attribute. If the class has subclasses
681 // that may be passed through this toJS() function you should use the SkipVTableValidation
682 // attribute to DOMSelection.
683 static_assert(!std::is_polymorphic<DOMSelection>::value, "DOMSelection is polymorphic but the IDL claims it is not");
684 return createWrapper<DOMSelection>(globalObject, WTFMove(impl));
685}
686
687JSC::JSValue toJS(JSC::ExecState* state, JSDOMGlobalObject* globalObject, DOMSelection& impl)
688{
689 return wrap(state, globalObject, impl);
690}
691
692DOMSelection* JSDOMSelection::toWrapped(JSC::VM& vm, JSC::JSValue value)
693{
694 if (auto* wrapper = jsDynamicCast<JSDOMSelection*>(vm, value))
695 return &wrapper->wrapped();
696 return nullptr;
697}
698
699}
700