Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dom/bindings/AccessibleNodeBinding.cpp
Line
Count
Source (jump to first uncovered line)
1
/* THIS FILE IS AUTOGENERATED FROM AccessibleNode.webidl BY Codegen.py - DO NOT EDIT */
2
3
#include "AccessibleNodeBinding.h"
4
#include "WrapperFactory.h"
5
#include "XrayWrapper.h"
6
#include "mozilla/FloatingPoint.h"
7
#include "mozilla/OwningNonNull.h"
8
#include "mozilla/dom/AccessibleNode.h"
9
#include "mozilla/dom/BindingUtils.h"
10
#include "mozilla/dom/DOMJSClass.h"
11
#include "mozilla/dom/NonRefcountedDOMObject.h"
12
#include "mozilla/dom/Nullable.h"
13
#include "mozilla/dom/PrimitiveConversions.h"
14
#include "mozilla/dom/XrayExpandoClass.h"
15
#include "nsINode.h"
16
17
namespace mozilla {
18
namespace dom {
19
20
namespace binding_detail {}; // Just to make sure it's known as a namespace
21
using namespace mozilla::dom::binding_detail;
22
23
24
namespace AccessibleNode_Binding {
25
26
MOZ_CAN_RUN_SCRIPT static bool
27
get_computedRole(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
28
0
{
29
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.computedRole", DOM, cx);
30
0
31
0
  DOMString result;
32
0
  self->GetComputedRole(result);
33
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
34
0
  if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
35
0
    return false;
36
0
  }
37
0
  return true;
38
0
}
39
40
static const JSJitInfo computedRole_getterinfo = {
41
  { (JSJitGetterOp)get_computedRole },
42
  { prototypes::id::AccessibleNode },
43
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
44
  JSJitInfo::Getter,
45
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
46
  JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
47
  false,  /* isInfallible. False in setters. */
48
  false,  /* isMovable.  Not relevant for setters. */
49
  false, /* isEliminatable.  Not relevant for setters. */
50
  false, /* isAlwaysInSlot.  Only relevant for getters. */
51
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
52
  false,  /* isTypedMethod.  Only relevant for methods. */
53
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
54
};
55
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
56
static_assert(0 < 3, "There is no slot for us");
57
58
MOZ_CAN_RUN_SCRIPT static bool
59
get_states(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
60
0
{
61
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.states", DOM, cx);
62
0
63
0
  // Have to either root across the getter call or reget after.
64
0
  bool isXray;
65
0
  JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray));
66
0
  if (!slotStorage) {
67
0
    return false;
68
0
  }
69
0
  const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 0) : (DOM_INSTANCE_RESERVED_SLOTS + 0);
70
0
  MOZ_ASSERT(JSCLASS_RESERVED_SLOTS(js::GetObjectClass(slotStorage)) > slotIndex);
71
0
  {
72
0
    // Scope for cachedVal
73
0
    JS::Value cachedVal = js::GetReservedSlot(slotStorage, slotIndex);
74
0
    if (!cachedVal.isUndefined()) {
75
0
      args.rval().set(cachedVal);
76
0
      // The cached value is in the compartment of slotStorage,
77
0
      // so wrap into the caller compartment as needed.
78
0
      if (MaybeWrapNonDOMObjectValue(cx, args.rval())) {
79
0
        return true;
80
0
      }
81
0
      return false;
82
0
    }
83
0
  }
84
0
85
0
  nsTArray<nsString> result;
86
0
  self->GetStates(result);
87
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
88
0
  {
89
0
    JS::Rooted<JSObject*> conversionScope(cx, isXray ? JS::CurrentGlobalOrNull(cx) : slotStorage);
90
0
    JSAutoRealm ar(cx, conversionScope);
91
0
    do { // block we break out of when done wrapping
92
0
93
0
      uint32_t length = result.Length();
94
0
      JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
95
0
      if (!returnArray) {
96
0
        return false;
97
0
      }
98
0
      // Scope for 'tmp'
99
0
      {
100
0
        JS::Rooted<JS::Value> tmp(cx);
101
0
        for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
102
0
          // Control block to let us common up the JS_DefineElement calls when there
103
0
          // are different ways to succeed at wrapping the object.
104
0
          do {
105
0
            if (!xpc::NonVoidStringToJsval(cx, result[sequenceIdx0], &tmp)) {
106
0
              return false;
107
0
            }
108
0
            break;
109
0
          } while (false);
110
0
          if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
111
0
                                JSPROP_ENUMERATE)) {
112
0
            return false;
113
0
          }
114
0
        }
115
0
      }
116
0
      args.rval().setObject(*returnArray);
117
0
      break;
118
0
    } while (false);
119
0
    JS::Rooted<JSObject*> rvalObj(cx, &args.rval().toObject());
120
0
    if (!JS_FreezeObject(cx, rvalObj)) {
121
0
      return false;
122
0
    }
123
0
  }
124
0
  { // And now store things in the realm of our slotStorage.
125
0
    JSAutoRealm ar(cx, slotStorage);
126
0
    // Make a copy so that we don't do unnecessary wrapping on args.rval().
127
0
    JS::Rooted<JS::Value> storedVal(cx, args.rval());
128
0
    if (!MaybeWrapNonDOMObjectValue(cx, &storedVal)) {
129
0
      return false;
130
0
    }
131
0
    js::SetReservedSlot(slotStorage, slotIndex, storedVal);
132
0
    if (!isXray) {
133
0
      // In the Xray case we don't need to do this, because getting the
134
0
      // expando object already preserved our wrapper.
135
0
      PreserveWrapper(self);
136
0
    }
137
0
  }
138
0
  // And now make sure args.rval() is in the caller realm.
139
0
  if (MaybeWrapNonDOMObjectValue(cx, args.rval())) {
140
0
    return true;
141
0
  }
142
0
  return false;
143
0
}
144
145
static const JSJitInfo states_getterinfo = {
146
  { (JSJitGetterOp)get_states },
147
  { prototypes::id::AccessibleNode },
148
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
149
  JSJitInfo::Getter,
150
  JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
151
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
152
  false,  /* isInfallible. False in setters. */
153
  true,  /* isMovable.  Not relevant for setters. */
154
  true, /* isEliminatable.  Not relevant for setters. */
155
  false, /* isAlwaysInSlot.  Only relevant for getters. */
156
  true, /* isLazilyCachedInSlot.  Only relevant for getters. */
157
  false,  /* isTypedMethod.  Only relevant for methods. */
158
  (DOM_INSTANCE_RESERVED_SLOTS + 0)   /* Reserved slot index, if we're stored in a slot, else 0. */
159
};
160
static_assert((DOM_INSTANCE_RESERVED_SLOTS + 0) <= JSJitInfo::maxSlotIndex, "We won't fit");
161
static_assert((DOM_INSTANCE_RESERVED_SLOTS + 0) < 3, "There is no slot for us");
162
163
MOZ_CAN_RUN_SCRIPT static bool
164
get_attributes(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
165
0
{
166
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.attributes", DOM, cx);
167
0
168
0
  // Have to either root across the getter call or reget after.
169
0
  bool isXray;
170
0
  JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray));
171
0
  if (!slotStorage) {
172
0
    return false;
173
0
  }
174
0
  const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 1) : (DOM_INSTANCE_RESERVED_SLOTS + 1);
175
0
  MOZ_ASSERT(JSCLASS_RESERVED_SLOTS(js::GetObjectClass(slotStorage)) > slotIndex);
176
0
  {
177
0
    // Scope for cachedVal
178
0
    JS::Value cachedVal = js::GetReservedSlot(slotStorage, slotIndex);
179
0
    if (!cachedVal.isUndefined()) {
180
0
      args.rval().set(cachedVal);
181
0
      // The cached value is in the compartment of slotStorage,
182
0
      // so wrap into the caller compartment as needed.
183
0
      if (MaybeWrapNonDOMObjectValue(cx, args.rval())) {
184
0
        return true;
185
0
      }
186
0
      return false;
187
0
    }
188
0
  }
189
0
190
0
  nsTArray<nsString> result;
191
0
  self->GetAttributes(result);
192
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
193
0
  {
194
0
    JS::Rooted<JSObject*> conversionScope(cx, isXray ? JS::CurrentGlobalOrNull(cx) : slotStorage);
195
0
    JSAutoRealm ar(cx, conversionScope);
196
0
    do { // block we break out of when done wrapping
197
0
198
0
      uint32_t length = result.Length();
199
0
      JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
200
0
      if (!returnArray) {
201
0
        return false;
202
0
      }
203
0
      // Scope for 'tmp'
204
0
      {
205
0
        JS::Rooted<JS::Value> tmp(cx);
206
0
        for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
207
0
          // Control block to let us common up the JS_DefineElement calls when there
208
0
          // are different ways to succeed at wrapping the object.
209
0
          do {
210
0
            if (!xpc::NonVoidStringToJsval(cx, result[sequenceIdx0], &tmp)) {
211
0
              return false;
212
0
            }
213
0
            break;
214
0
          } while (false);
215
0
          if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
216
0
                                JSPROP_ENUMERATE)) {
217
0
            return false;
218
0
          }
219
0
        }
220
0
      }
221
0
      args.rval().setObject(*returnArray);
222
0
      break;
223
0
    } while (false);
224
0
    JS::Rooted<JSObject*> rvalObj(cx, &args.rval().toObject());
225
0
    if (!JS_FreezeObject(cx, rvalObj)) {
226
0
      return false;
227
0
    }
228
0
  }
229
0
  { // And now store things in the realm of our slotStorage.
230
0
    JSAutoRealm ar(cx, slotStorage);
231
0
    // Make a copy so that we don't do unnecessary wrapping on args.rval().
232
0
    JS::Rooted<JS::Value> storedVal(cx, args.rval());
233
0
    if (!MaybeWrapNonDOMObjectValue(cx, &storedVal)) {
234
0
      return false;
235
0
    }
236
0
    js::SetReservedSlot(slotStorage, slotIndex, storedVal);
237
0
    if (!isXray) {
238
0
      // In the Xray case we don't need to do this, because getting the
239
0
      // expando object already preserved our wrapper.
240
0
      PreserveWrapper(self);
241
0
    }
242
0
  }
243
0
  // And now make sure args.rval() is in the caller realm.
244
0
  if (MaybeWrapNonDOMObjectValue(cx, args.rval())) {
245
0
    return true;
246
0
  }
247
0
  return false;
248
0
}
249
250
static const JSJitInfo attributes_getterinfo = {
251
  { (JSJitGetterOp)get_attributes },
252
  { prototypes::id::AccessibleNode },
253
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
254
  JSJitInfo::Getter,
255
  JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
256
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
257
  false,  /* isInfallible. False in setters. */
258
  true,  /* isMovable.  Not relevant for setters. */
259
  true, /* isEliminatable.  Not relevant for setters. */
260
  false, /* isAlwaysInSlot.  Only relevant for getters. */
261
  true, /* isLazilyCachedInSlot.  Only relevant for getters. */
262
  false,  /* isTypedMethod.  Only relevant for methods. */
263
  (DOM_INSTANCE_RESERVED_SLOTS + 1)   /* Reserved slot index, if we're stored in a slot, else 0. */
264
};
265
static_assert((DOM_INSTANCE_RESERVED_SLOTS + 1) <= JSJitInfo::maxSlotIndex, "We won't fit");
266
static_assert((DOM_INSTANCE_RESERVED_SLOTS + 1) < 3, "There is no slot for us");
267
268
MOZ_CAN_RUN_SCRIPT static bool
269
get_DOMNode(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
270
0
{
271
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.DOMNode", DOM, cx);
272
0
273
0
  auto result(StrongOrRawPtr<nsINode>(self->GetDOMNode()));
274
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
275
0
  if (!result) {
276
0
    args.rval().setNull();
277
0
    return true;
278
0
  }
279
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
280
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
281
0
    return false;
282
0
  }
283
0
  return true;
284
0
}
285
286
static const JSJitInfo DOMNode_getterinfo = {
287
  { (JSJitGetterOp)get_DOMNode },
288
  { prototypes::id::AccessibleNode },
289
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
290
  JSJitInfo::Getter,
291
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
292
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
293
  false,  /* isInfallible. False in setters. */
294
  false,  /* isMovable.  Not relevant for setters. */
295
  false, /* isEliminatable.  Not relevant for setters. */
296
  false, /* isAlwaysInSlot.  Only relevant for getters. */
297
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
298
  false,  /* isTypedMethod.  Only relevant for methods. */
299
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
300
};
301
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
302
static_assert(0 < 3, "There is no slot for us");
303
304
MOZ_CAN_RUN_SCRIPT static bool
305
is(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, const JSJitMethodCallArgs& args)
306
0
{
307
0
  AUTO_PROFILER_LABEL_FAST("AccessibleNode.is", DOM, cx);
308
0
309
0
  AutoSequence<nsString> arg0;
310
0
  if (args.length() > 0) {
311
0
    if (!arg0.SetCapacity(args.length() - 0, mozilla::fallible)) {
312
0
      JS_ReportOutOfMemory(cx);
313
0
      return false;
314
0
    }
315
0
    for (uint32_t variadicArg = 0; variadicArg < args.length(); ++variadicArg) {
316
0
      nsString& slot = *arg0.AppendElement(mozilla::fallible);
317
0
      if (!ConvertJSValueToString(cx, args[variadicArg], eStringify, eStringify, slot)) {
318
0
        return false;
319
0
      }
320
0
    }
321
0
  }
322
0
  bool result(self->Is(NonNullHelper(Constify(arg0))));
323
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
324
0
  args.rval().setBoolean(result);
325
0
  return true;
326
0
}
327
328
static const JSJitInfo is_methodinfo = {
329
  { (JSJitGetterOp)is },
330
  { prototypes::id::AccessibleNode },
331
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
332
  JSJitInfo::Method,
333
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
334
  JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
335
  false,  /* isInfallible. False in setters. */
336
  false,  /* isMovable.  Not relevant for setters. */
337
  false, /* isEliminatable.  Not relevant for setters. */
338
  false, /* isAlwaysInSlot.  Only relevant for getters. */
339
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
340
  false,  /* isTypedMethod.  Only relevant for methods. */
341
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
342
};
343
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
344
static_assert(0 < 3, "There is no slot for us");
345
346
MOZ_CAN_RUN_SCRIPT static bool
347
has(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, const JSJitMethodCallArgs& args)
348
0
{
349
0
  AUTO_PROFILER_LABEL_FAST("AccessibleNode.has", DOM, cx);
350
0
351
0
  AutoSequence<nsString> arg0;
352
0
  if (args.length() > 0) {
353
0
    if (!arg0.SetCapacity(args.length() - 0, mozilla::fallible)) {
354
0
      JS_ReportOutOfMemory(cx);
355
0
      return false;
356
0
    }
357
0
    for (uint32_t variadicArg = 0; variadicArg < args.length(); ++variadicArg) {
358
0
      nsString& slot = *arg0.AppendElement(mozilla::fallible);
359
0
      if (!ConvertJSValueToString(cx, args[variadicArg], eStringify, eStringify, slot)) {
360
0
        return false;
361
0
      }
362
0
    }
363
0
  }
364
0
  bool result(self->Has(NonNullHelper(Constify(arg0))));
365
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
366
0
  args.rval().setBoolean(result);
367
0
  return true;
368
0
}
369
370
static const JSJitInfo has_methodinfo = {
371
  { (JSJitGetterOp)has },
372
  { prototypes::id::AccessibleNode },
373
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
374
  JSJitInfo::Method,
375
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
376
  JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
377
  false,  /* isInfallible. False in setters. */
378
  false,  /* isMovable.  Not relevant for setters. */
379
  false, /* isEliminatable.  Not relevant for setters. */
380
  false, /* isAlwaysInSlot.  Only relevant for getters. */
381
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
382
  false,  /* isTypedMethod.  Only relevant for methods. */
383
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
384
};
385
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
386
static_assert(0 < 3, "There is no slot for us");
387
388
MOZ_CAN_RUN_SCRIPT static bool
389
get(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, const JSJitMethodCallArgs& args)
390
0
{
391
0
  AUTO_PROFILER_LABEL_FAST("AccessibleNode.get", DOM, cx);
392
0
393
0
  if (MOZ_UNLIKELY(args.length() < 1)) {
394
0
    return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "AccessibleNode.get");
395
0
  }
396
0
  binding_detail::FakeString arg0;
397
0
  if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
398
0
    return false;
399
0
  }
400
0
  FastErrorResult rv;
401
0
  JS::Rooted<JS::Value> result(cx);
402
0
  self->Get(cx, NonNullHelper(Constify(arg0)), &result, rv);
403
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
404
0
    return false;
405
0
  }
406
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
407
0
  JS::ExposeValueToActiveJS(result);
408
0
  args.rval().set(result);
409
0
  if (!MaybeWrapValue(cx, args.rval())) {
410
0
    return false;
411
0
  }
412
0
  return true;
413
0
}
414
415
static const JSJitInfo get_methodinfo = {
416
  { (JSJitGetterOp)get },
417
  { prototypes::id::AccessibleNode },
418
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
419
  JSJitInfo::Method,
420
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
421
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
422
  false,  /* isInfallible. False in setters. */
423
  false,  /* isMovable.  Not relevant for setters. */
424
  false, /* isEliminatable.  Not relevant for setters. */
425
  false, /* isAlwaysInSlot.  Only relevant for getters. */
426
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
427
  false,  /* isTypedMethod.  Only relevant for methods. */
428
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
429
};
430
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
431
static_assert(0 < 3, "There is no slot for us");
432
433
MOZ_CAN_RUN_SCRIPT static bool
434
get_role(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
435
0
{
436
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.role", DOM, cx);
437
0
438
0
  DOMString result;
439
0
  self->GetRole(result);
440
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
441
0
  if (!xpc::StringToJsval(cx, result, args.rval())) {
442
0
    return false;
443
0
  }
444
0
  return true;
445
0
}
446
447
MOZ_CAN_RUN_SCRIPT static bool
448
set_role(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
449
0
{
450
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.role", DOM, cx);
451
0
452
0
  binding_detail::FakeString arg0;
453
0
  if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
454
0
    return false;
455
0
  }
456
0
  self->SetRole(NonNullHelper(Constify(arg0)));
457
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
458
0
459
0
  return true;
460
0
}
461
462
static const JSJitInfo role_getterinfo = {
463
  { (JSJitGetterOp)get_role },
464
  { prototypes::id::AccessibleNode },
465
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
466
  JSJitInfo::Getter,
467
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
468
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
469
  false,  /* isInfallible. False in setters. */
470
  false,  /* isMovable.  Not relevant for setters. */
471
  false, /* isEliminatable.  Not relevant for setters. */
472
  false, /* isAlwaysInSlot.  Only relevant for getters. */
473
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
474
  false,  /* isTypedMethod.  Only relevant for methods. */
475
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
476
};
477
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
478
static_assert(0 < 3, "There is no slot for us");
479
static const JSJitInfo role_setterinfo = {
480
  { (JSJitGetterOp)set_role },
481
  { prototypes::id::AccessibleNode },
482
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
483
  JSJitInfo::Setter,
484
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
485
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
486
  false,  /* isInfallible. False in setters. */
487
  false,  /* isMovable.  Not relevant for setters. */
488
  false, /* isEliminatable.  Not relevant for setters. */
489
  false, /* isAlwaysInSlot.  Only relevant for getters. */
490
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
491
  false,  /* isTypedMethod.  Only relevant for methods. */
492
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
493
};
494
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
495
static_assert(0 < 3, "There is no slot for us");
496
497
MOZ_CAN_RUN_SCRIPT static bool
498
get_roleDescription(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
499
0
{
500
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.roleDescription", DOM, cx);
501
0
502
0
  DOMString result;
503
0
  self->GetRoleDescription(result);
504
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
505
0
  if (!xpc::StringToJsval(cx, result, args.rval())) {
506
0
    return false;
507
0
  }
508
0
  return true;
509
0
}
510
511
MOZ_CAN_RUN_SCRIPT static bool
512
set_roleDescription(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
513
0
{
514
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.roleDescription", DOM, cx);
515
0
516
0
  binding_detail::FakeString arg0;
517
0
  if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
518
0
    return false;
519
0
  }
520
0
  self->SetRoleDescription(NonNullHelper(Constify(arg0)));
521
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
522
0
523
0
  return true;
524
0
}
525
526
static const JSJitInfo roleDescription_getterinfo = {
527
  { (JSJitGetterOp)get_roleDescription },
528
  { prototypes::id::AccessibleNode },
529
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
530
  JSJitInfo::Getter,
531
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
532
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
533
  false,  /* isInfallible. False in setters. */
534
  false,  /* isMovable.  Not relevant for setters. */
535
  false, /* isEliminatable.  Not relevant for setters. */
536
  false, /* isAlwaysInSlot.  Only relevant for getters. */
537
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
538
  false,  /* isTypedMethod.  Only relevant for methods. */
539
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
540
};
541
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
542
static_assert(0 < 3, "There is no slot for us");
543
static const JSJitInfo roleDescription_setterinfo = {
544
  { (JSJitGetterOp)set_roleDescription },
545
  { prototypes::id::AccessibleNode },
546
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
547
  JSJitInfo::Setter,
548
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
549
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
550
  false,  /* isInfallible. False in setters. */
551
  false,  /* isMovable.  Not relevant for setters. */
552
  false, /* isEliminatable.  Not relevant for setters. */
553
  false, /* isAlwaysInSlot.  Only relevant for getters. */
554
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
555
  false,  /* isTypedMethod.  Only relevant for methods. */
556
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
557
};
558
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
559
static_assert(0 < 3, "There is no slot for us");
560
561
MOZ_CAN_RUN_SCRIPT static bool
562
get_label(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
563
0
{
564
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.label", DOM, cx);
565
0
566
0
  DOMString result;
567
0
  self->GetLabel(result);
568
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
569
0
  if (!xpc::StringToJsval(cx, result, args.rval())) {
570
0
    return false;
571
0
  }
572
0
  return true;
573
0
}
574
575
MOZ_CAN_RUN_SCRIPT static bool
576
set_label(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
577
0
{
578
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.label", DOM, cx);
579
0
580
0
  binding_detail::FakeString arg0;
581
0
  if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
582
0
    return false;
583
0
  }
584
0
  self->SetLabel(NonNullHelper(Constify(arg0)));
585
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
586
0
587
0
  return true;
588
0
}
589
590
static const JSJitInfo label_getterinfo = {
591
  { (JSJitGetterOp)get_label },
592
  { prototypes::id::AccessibleNode },
593
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
594
  JSJitInfo::Getter,
595
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
596
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
597
  false,  /* isInfallible. False in setters. */
598
  false,  /* isMovable.  Not relevant for setters. */
599
  false, /* isEliminatable.  Not relevant for setters. */
600
  false, /* isAlwaysInSlot.  Only relevant for getters. */
601
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
602
  false,  /* isTypedMethod.  Only relevant for methods. */
603
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
604
};
605
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
606
static_assert(0 < 3, "There is no slot for us");
607
static const JSJitInfo label_setterinfo = {
608
  { (JSJitGetterOp)set_label },
609
  { prototypes::id::AccessibleNode },
610
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
611
  JSJitInfo::Setter,
612
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
613
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
614
  false,  /* isInfallible. False in setters. */
615
  false,  /* isMovable.  Not relevant for setters. */
616
  false, /* isEliminatable.  Not relevant for setters. */
617
  false, /* isAlwaysInSlot.  Only relevant for getters. */
618
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
619
  false,  /* isTypedMethod.  Only relevant for methods. */
620
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
621
};
622
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
623
static_assert(0 < 3, "There is no slot for us");
624
625
MOZ_CAN_RUN_SCRIPT static bool
626
get_current(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
627
0
{
628
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.current", DOM, cx);
629
0
630
0
  DOMString result;
631
0
  self->GetCurrent(result);
632
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
633
0
  if (!xpc::StringToJsval(cx, result, args.rval())) {
634
0
    return false;
635
0
  }
636
0
  return true;
637
0
}
638
639
MOZ_CAN_RUN_SCRIPT static bool
640
set_current(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
641
0
{
642
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.current", DOM, cx);
643
0
644
0
  binding_detail::FakeString arg0;
645
0
  if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
646
0
    return false;
647
0
  }
648
0
  self->SetCurrent(NonNullHelper(Constify(arg0)));
649
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
650
0
651
0
  return true;
652
0
}
653
654
static const JSJitInfo current_getterinfo = {
655
  { (JSJitGetterOp)get_current },
656
  { prototypes::id::AccessibleNode },
657
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
658
  JSJitInfo::Getter,
659
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
660
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
661
  false,  /* isInfallible. False in setters. */
662
  false,  /* isMovable.  Not relevant for setters. */
663
  false, /* isEliminatable.  Not relevant for setters. */
664
  false, /* isAlwaysInSlot.  Only relevant for getters. */
665
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
666
  false,  /* isTypedMethod.  Only relevant for methods. */
667
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
668
};
669
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
670
static_assert(0 < 3, "There is no slot for us");
671
static const JSJitInfo current_setterinfo = {
672
  { (JSJitGetterOp)set_current },
673
  { prototypes::id::AccessibleNode },
674
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
675
  JSJitInfo::Setter,
676
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
677
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
678
  false,  /* isInfallible. False in setters. */
679
  false,  /* isMovable.  Not relevant for setters. */
680
  false, /* isEliminatable.  Not relevant for setters. */
681
  false, /* isAlwaysInSlot.  Only relevant for getters. */
682
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
683
  false,  /* isTypedMethod.  Only relevant for methods. */
684
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
685
};
686
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
687
static_assert(0 < 3, "There is no slot for us");
688
689
MOZ_CAN_RUN_SCRIPT static bool
690
get_autocomplete(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
691
0
{
692
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.autocomplete", DOM, cx);
693
0
694
0
  DOMString result;
695
0
  self->GetAutocomplete(result);
696
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
697
0
  if (!xpc::StringToJsval(cx, result, args.rval())) {
698
0
    return false;
699
0
  }
700
0
  return true;
701
0
}
702
703
MOZ_CAN_RUN_SCRIPT static bool
704
set_autocomplete(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
705
0
{
706
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.autocomplete", DOM, cx);
707
0
708
0
  binding_detail::FakeString arg0;
709
0
  if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
710
0
    return false;
711
0
  }
712
0
  self->SetAutocomplete(NonNullHelper(Constify(arg0)));
713
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
714
0
715
0
  return true;
716
0
}
717
718
static const JSJitInfo autocomplete_getterinfo = {
719
  { (JSJitGetterOp)get_autocomplete },
720
  { prototypes::id::AccessibleNode },
721
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
722
  JSJitInfo::Getter,
723
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
724
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
725
  false,  /* isInfallible. False in setters. */
726
  false,  /* isMovable.  Not relevant for setters. */
727
  false, /* isEliminatable.  Not relevant for setters. */
728
  false, /* isAlwaysInSlot.  Only relevant for getters. */
729
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
730
  false,  /* isTypedMethod.  Only relevant for methods. */
731
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
732
};
733
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
734
static_assert(0 < 3, "There is no slot for us");
735
static const JSJitInfo autocomplete_setterinfo = {
736
  { (JSJitGetterOp)set_autocomplete },
737
  { prototypes::id::AccessibleNode },
738
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
739
  JSJitInfo::Setter,
740
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
741
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
742
  false,  /* isInfallible. False in setters. */
743
  false,  /* isMovable.  Not relevant for setters. */
744
  false, /* isEliminatable.  Not relevant for setters. */
745
  false, /* isAlwaysInSlot.  Only relevant for getters. */
746
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
747
  false,  /* isTypedMethod.  Only relevant for methods. */
748
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
749
};
750
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
751
static_assert(0 < 3, "There is no slot for us");
752
753
MOZ_CAN_RUN_SCRIPT static bool
754
get_keyShortcuts(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
755
0
{
756
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.keyShortcuts", DOM, cx);
757
0
758
0
  DOMString result;
759
0
  self->GetKeyShortcuts(result);
760
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
761
0
  if (!xpc::StringToJsval(cx, result, args.rval())) {
762
0
    return false;
763
0
  }
764
0
  return true;
765
0
}
766
767
MOZ_CAN_RUN_SCRIPT static bool
768
set_keyShortcuts(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
769
0
{
770
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.keyShortcuts", DOM, cx);
771
0
772
0
  binding_detail::FakeString arg0;
773
0
  if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
774
0
    return false;
775
0
  }
776
0
  self->SetKeyShortcuts(NonNullHelper(Constify(arg0)));
777
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
778
0
779
0
  return true;
780
0
}
781
782
static const JSJitInfo keyShortcuts_getterinfo = {
783
  { (JSJitGetterOp)get_keyShortcuts },
784
  { prototypes::id::AccessibleNode },
785
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
786
  JSJitInfo::Getter,
787
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
788
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
789
  false,  /* isInfallible. False in setters. */
790
  false,  /* isMovable.  Not relevant for setters. */
791
  false, /* isEliminatable.  Not relevant for setters. */
792
  false, /* isAlwaysInSlot.  Only relevant for getters. */
793
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
794
  false,  /* isTypedMethod.  Only relevant for methods. */
795
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
796
};
797
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
798
static_assert(0 < 3, "There is no slot for us");
799
static const JSJitInfo keyShortcuts_setterinfo = {
800
  { (JSJitGetterOp)set_keyShortcuts },
801
  { prototypes::id::AccessibleNode },
802
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
803
  JSJitInfo::Setter,
804
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
805
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
806
  false,  /* isInfallible. False in setters. */
807
  false,  /* isMovable.  Not relevant for setters. */
808
  false, /* isEliminatable.  Not relevant for setters. */
809
  false, /* isAlwaysInSlot.  Only relevant for getters. */
810
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
811
  false,  /* isTypedMethod.  Only relevant for methods. */
812
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
813
};
814
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
815
static_assert(0 < 3, "There is no slot for us");
816
817
MOZ_CAN_RUN_SCRIPT static bool
818
get_modal(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
819
0
{
820
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.modal", DOM, cx);
821
0
822
0
  Nullable<bool> result(self->GetModal());
823
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
824
0
  if (result.IsNull()) {
825
0
    args.rval().setNull();
826
0
    return true;
827
0
  }
828
0
  args.rval().setBoolean(result.Value());
829
0
  return true;
830
0
}
831
832
MOZ_CAN_RUN_SCRIPT static bool
833
set_modal(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
834
0
{
835
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.modal", DOM, cx);
836
0
837
0
  Nullable<bool> arg0;
838
0
  if (args[0].isNullOrUndefined()) {
839
0
    arg0.SetNull();
840
0
  } else if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0.SetValue())) {
841
0
    return false;
842
0
  }
843
0
  self->SetModal(Constify(arg0));
844
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
845
0
846
0
  return true;
847
0
}
848
849
static const JSJitInfo modal_getterinfo = {
850
  { (JSJitGetterOp)get_modal },
851
  { prototypes::id::AccessibleNode },
852
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
853
  JSJitInfo::Getter,
854
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
855
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
856
  true,  /* isInfallible. False in setters. */
857
  false,  /* isMovable.  Not relevant for setters. */
858
  false, /* isEliminatable.  Not relevant for setters. */
859
  false, /* isAlwaysInSlot.  Only relevant for getters. */
860
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
861
  false,  /* isTypedMethod.  Only relevant for methods. */
862
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
863
};
864
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
865
static_assert(0 < 3, "There is no slot for us");
866
static const JSJitInfo modal_setterinfo = {
867
  { (JSJitGetterOp)set_modal },
868
  { prototypes::id::AccessibleNode },
869
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
870
  JSJitInfo::Setter,
871
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
872
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
873
  false,  /* isInfallible. False in setters. */
874
  false,  /* isMovable.  Not relevant for setters. */
875
  false, /* isEliminatable.  Not relevant for setters. */
876
  false, /* isAlwaysInSlot.  Only relevant for getters. */
877
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
878
  false,  /* isTypedMethod.  Only relevant for methods. */
879
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
880
};
881
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
882
static_assert(0 < 3, "There is no slot for us");
883
884
MOZ_CAN_RUN_SCRIPT static bool
885
get_multiline(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
886
0
{
887
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.multiline", DOM, cx);
888
0
889
0
  Nullable<bool> result(self->GetMultiline());
890
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
891
0
  if (result.IsNull()) {
892
0
    args.rval().setNull();
893
0
    return true;
894
0
  }
895
0
  args.rval().setBoolean(result.Value());
896
0
  return true;
897
0
}
898
899
MOZ_CAN_RUN_SCRIPT static bool
900
set_multiline(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
901
0
{
902
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.multiline", DOM, cx);
903
0
904
0
  Nullable<bool> arg0;
905
0
  if (args[0].isNullOrUndefined()) {
906
0
    arg0.SetNull();
907
0
  } else if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0.SetValue())) {
908
0
    return false;
909
0
  }
910
0
  self->SetMultiline(Constify(arg0));
911
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
912
0
913
0
  return true;
914
0
}
915
916
static const JSJitInfo multiline_getterinfo = {
917
  { (JSJitGetterOp)get_multiline },
918
  { prototypes::id::AccessibleNode },
919
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
920
  JSJitInfo::Getter,
921
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
922
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
923
  true,  /* isInfallible. False in setters. */
924
  false,  /* isMovable.  Not relevant for setters. */
925
  false, /* isEliminatable.  Not relevant for setters. */
926
  false, /* isAlwaysInSlot.  Only relevant for getters. */
927
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
928
  false,  /* isTypedMethod.  Only relevant for methods. */
929
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
930
};
931
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
932
static_assert(0 < 3, "There is no slot for us");
933
static const JSJitInfo multiline_setterinfo = {
934
  { (JSJitGetterOp)set_multiline },
935
  { prototypes::id::AccessibleNode },
936
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
937
  JSJitInfo::Setter,
938
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
939
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
940
  false,  /* isInfallible. False in setters. */
941
  false,  /* isMovable.  Not relevant for setters. */
942
  false, /* isEliminatable.  Not relevant for setters. */
943
  false, /* isAlwaysInSlot.  Only relevant for getters. */
944
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
945
  false,  /* isTypedMethod.  Only relevant for methods. */
946
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
947
};
948
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
949
static_assert(0 < 3, "There is no slot for us");
950
951
MOZ_CAN_RUN_SCRIPT static bool
952
get_multiselectable(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
953
0
{
954
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.multiselectable", DOM, cx);
955
0
956
0
  Nullable<bool> result(self->GetMultiselectable());
957
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
958
0
  if (result.IsNull()) {
959
0
    args.rval().setNull();
960
0
    return true;
961
0
  }
962
0
  args.rval().setBoolean(result.Value());
963
0
  return true;
964
0
}
965
966
MOZ_CAN_RUN_SCRIPT static bool
967
set_multiselectable(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
968
0
{
969
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.multiselectable", DOM, cx);
970
0
971
0
  Nullable<bool> arg0;
972
0
  if (args[0].isNullOrUndefined()) {
973
0
    arg0.SetNull();
974
0
  } else if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0.SetValue())) {
975
0
    return false;
976
0
  }
977
0
  self->SetMultiselectable(Constify(arg0));
978
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
979
0
980
0
  return true;
981
0
}
982
983
static const JSJitInfo multiselectable_getterinfo = {
984
  { (JSJitGetterOp)get_multiselectable },
985
  { prototypes::id::AccessibleNode },
986
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
987
  JSJitInfo::Getter,
988
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
989
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
990
  true,  /* isInfallible. False in setters. */
991
  false,  /* isMovable.  Not relevant for setters. */
992
  false, /* isEliminatable.  Not relevant for setters. */
993
  false, /* isAlwaysInSlot.  Only relevant for getters. */
994
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
995
  false,  /* isTypedMethod.  Only relevant for methods. */
996
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
997
};
998
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
999
static_assert(0 < 3, "There is no slot for us");
1000
static const JSJitInfo multiselectable_setterinfo = {
1001
  { (JSJitGetterOp)set_multiselectable },
1002
  { prototypes::id::AccessibleNode },
1003
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1004
  JSJitInfo::Setter,
1005
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1006
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1007
  false,  /* isInfallible. False in setters. */
1008
  false,  /* isMovable.  Not relevant for setters. */
1009
  false, /* isEliminatable.  Not relevant for setters. */
1010
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1011
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1012
  false,  /* isTypedMethod.  Only relevant for methods. */
1013
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1014
};
1015
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1016
static_assert(0 < 3, "There is no slot for us");
1017
1018
MOZ_CAN_RUN_SCRIPT static bool
1019
get_orientation(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
1020
0
{
1021
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.orientation", DOM, cx);
1022
0
1023
0
  DOMString result;
1024
0
  self->GetOrientation(result);
1025
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1026
0
  if (!xpc::StringToJsval(cx, result, args.rval())) {
1027
0
    return false;
1028
0
  }
1029
0
  return true;
1030
0
}
1031
1032
MOZ_CAN_RUN_SCRIPT static bool
1033
set_orientation(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
1034
0
{
1035
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.orientation", DOM, cx);
1036
0
1037
0
  binding_detail::FakeString arg0;
1038
0
  if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
1039
0
    return false;
1040
0
  }
1041
0
  self->SetOrientation(NonNullHelper(Constify(arg0)));
1042
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1043
0
1044
0
  return true;
1045
0
}
1046
1047
static const JSJitInfo orientation_getterinfo = {
1048
  { (JSJitGetterOp)get_orientation },
1049
  { prototypes::id::AccessibleNode },
1050
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1051
  JSJitInfo::Getter,
1052
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1053
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
1054
  false,  /* isInfallible. False in setters. */
1055
  false,  /* isMovable.  Not relevant for setters. */
1056
  false, /* isEliminatable.  Not relevant for setters. */
1057
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1058
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1059
  false,  /* isTypedMethod.  Only relevant for methods. */
1060
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1061
};
1062
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1063
static_assert(0 < 3, "There is no slot for us");
1064
static const JSJitInfo orientation_setterinfo = {
1065
  { (JSJitGetterOp)set_orientation },
1066
  { prototypes::id::AccessibleNode },
1067
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1068
  JSJitInfo::Setter,
1069
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1070
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1071
  false,  /* isInfallible. False in setters. */
1072
  false,  /* isMovable.  Not relevant for setters. */
1073
  false, /* isEliminatable.  Not relevant for setters. */
1074
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1075
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1076
  false,  /* isTypedMethod.  Only relevant for methods. */
1077
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1078
};
1079
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1080
static_assert(0 < 3, "There is no slot for us");
1081
1082
MOZ_CAN_RUN_SCRIPT static bool
1083
get_readOnly(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
1084
0
{
1085
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.readOnly", DOM, cx);
1086
0
1087
0
  Nullable<bool> result(self->GetReadOnly());
1088
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1089
0
  if (result.IsNull()) {
1090
0
    args.rval().setNull();
1091
0
    return true;
1092
0
  }
1093
0
  args.rval().setBoolean(result.Value());
1094
0
  return true;
1095
0
}
1096
1097
MOZ_CAN_RUN_SCRIPT static bool
1098
set_readOnly(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
1099
0
{
1100
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.readOnly", DOM, cx);
1101
0
1102
0
  Nullable<bool> arg0;
1103
0
  if (args[0].isNullOrUndefined()) {
1104
0
    arg0.SetNull();
1105
0
  } else if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0.SetValue())) {
1106
0
    return false;
1107
0
  }
1108
0
  self->SetReadOnly(Constify(arg0));
1109
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1110
0
1111
0
  return true;
1112
0
}
1113
1114
static const JSJitInfo readOnly_getterinfo = {
1115
  { (JSJitGetterOp)get_readOnly },
1116
  { prototypes::id::AccessibleNode },
1117
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1118
  JSJitInfo::Getter,
1119
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1120
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
1121
  true,  /* isInfallible. False in setters. */
1122
  false,  /* isMovable.  Not relevant for setters. */
1123
  false, /* isEliminatable.  Not relevant for setters. */
1124
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1125
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1126
  false,  /* isTypedMethod.  Only relevant for methods. */
1127
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1128
};
1129
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1130
static_assert(0 < 3, "There is no slot for us");
1131
static const JSJitInfo readOnly_setterinfo = {
1132
  { (JSJitGetterOp)set_readOnly },
1133
  { prototypes::id::AccessibleNode },
1134
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1135
  JSJitInfo::Setter,
1136
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1137
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1138
  false,  /* isInfallible. False in setters. */
1139
  false,  /* isMovable.  Not relevant for setters. */
1140
  false, /* isEliminatable.  Not relevant for setters. */
1141
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1142
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1143
  false,  /* isTypedMethod.  Only relevant for methods. */
1144
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1145
};
1146
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1147
static_assert(0 < 3, "There is no slot for us");
1148
1149
MOZ_CAN_RUN_SCRIPT static bool
1150
get_required(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
1151
0
{
1152
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.required", DOM, cx);
1153
0
1154
0
  Nullable<bool> result(self->GetRequired());
1155
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1156
0
  if (result.IsNull()) {
1157
0
    args.rval().setNull();
1158
0
    return true;
1159
0
  }
1160
0
  args.rval().setBoolean(result.Value());
1161
0
  return true;
1162
0
}
1163
1164
MOZ_CAN_RUN_SCRIPT static bool
1165
set_required(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
1166
0
{
1167
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.required", DOM, cx);
1168
0
1169
0
  Nullable<bool> arg0;
1170
0
  if (args[0].isNullOrUndefined()) {
1171
0
    arg0.SetNull();
1172
0
  } else if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0.SetValue())) {
1173
0
    return false;
1174
0
  }
1175
0
  self->SetRequired(Constify(arg0));
1176
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1177
0
1178
0
  return true;
1179
0
}
1180
1181
static const JSJitInfo required_getterinfo = {
1182
  { (JSJitGetterOp)get_required },
1183
  { prototypes::id::AccessibleNode },
1184
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1185
  JSJitInfo::Getter,
1186
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1187
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
1188
  true,  /* isInfallible. False in setters. */
1189
  false,  /* isMovable.  Not relevant for setters. */
1190
  false, /* isEliminatable.  Not relevant for setters. */
1191
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1192
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1193
  false,  /* isTypedMethod.  Only relevant for methods. */
1194
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1195
};
1196
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1197
static_assert(0 < 3, "There is no slot for us");
1198
static const JSJitInfo required_setterinfo = {
1199
  { (JSJitGetterOp)set_required },
1200
  { prototypes::id::AccessibleNode },
1201
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1202
  JSJitInfo::Setter,
1203
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1204
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1205
  false,  /* isInfallible. False in setters. */
1206
  false,  /* isMovable.  Not relevant for setters. */
1207
  false, /* isEliminatable.  Not relevant for setters. */
1208
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1209
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1210
  false,  /* isTypedMethod.  Only relevant for methods. */
1211
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1212
};
1213
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1214
static_assert(0 < 3, "There is no slot for us");
1215
1216
MOZ_CAN_RUN_SCRIPT static bool
1217
get_sort(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
1218
0
{
1219
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.sort", DOM, cx);
1220
0
1221
0
  DOMString result;
1222
0
  self->GetSort(result);
1223
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1224
0
  if (!xpc::StringToJsval(cx, result, args.rval())) {
1225
0
    return false;
1226
0
  }
1227
0
  return true;
1228
0
}
1229
1230
MOZ_CAN_RUN_SCRIPT static bool
1231
set_sort(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
1232
0
{
1233
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.sort", DOM, cx);
1234
0
1235
0
  binding_detail::FakeString arg0;
1236
0
  if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
1237
0
    return false;
1238
0
  }
1239
0
  self->SetSort(NonNullHelper(Constify(arg0)));
1240
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1241
0
1242
0
  return true;
1243
0
}
1244
1245
static const JSJitInfo sort_getterinfo = {
1246
  { (JSJitGetterOp)get_sort },
1247
  { prototypes::id::AccessibleNode },
1248
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1249
  JSJitInfo::Getter,
1250
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1251
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
1252
  false,  /* isInfallible. False in setters. */
1253
  false,  /* isMovable.  Not relevant for setters. */
1254
  false, /* isEliminatable.  Not relevant for setters. */
1255
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1256
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1257
  false,  /* isTypedMethod.  Only relevant for methods. */
1258
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1259
};
1260
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1261
static_assert(0 < 3, "There is no slot for us");
1262
static const JSJitInfo sort_setterinfo = {
1263
  { (JSJitGetterOp)set_sort },
1264
  { prototypes::id::AccessibleNode },
1265
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1266
  JSJitInfo::Setter,
1267
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1268
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1269
  false,  /* isInfallible. False in setters. */
1270
  false,  /* isMovable.  Not relevant for setters. */
1271
  false, /* isEliminatable.  Not relevant for setters. */
1272
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1273
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1274
  false,  /* isTypedMethod.  Only relevant for methods. */
1275
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1276
};
1277
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1278
static_assert(0 < 3, "There is no slot for us");
1279
1280
MOZ_CAN_RUN_SCRIPT static bool
1281
get_placeholder(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
1282
0
{
1283
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.placeholder", DOM, cx);
1284
0
1285
0
  DOMString result;
1286
0
  self->GetPlaceholder(result);
1287
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1288
0
  if (!xpc::StringToJsval(cx, result, args.rval())) {
1289
0
    return false;
1290
0
  }
1291
0
  return true;
1292
0
}
1293
1294
MOZ_CAN_RUN_SCRIPT static bool
1295
set_placeholder(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
1296
0
{
1297
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.placeholder", DOM, cx);
1298
0
1299
0
  binding_detail::FakeString arg0;
1300
0
  if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
1301
0
    return false;
1302
0
  }
1303
0
  self->SetPlaceholder(NonNullHelper(Constify(arg0)));
1304
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1305
0
1306
0
  return true;
1307
0
}
1308
1309
static const JSJitInfo placeholder_getterinfo = {
1310
  { (JSJitGetterOp)get_placeholder },
1311
  { prototypes::id::AccessibleNode },
1312
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1313
  JSJitInfo::Getter,
1314
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1315
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
1316
  false,  /* isInfallible. False in setters. */
1317
  false,  /* isMovable.  Not relevant for setters. */
1318
  false, /* isEliminatable.  Not relevant for setters. */
1319
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1320
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1321
  false,  /* isTypedMethod.  Only relevant for methods. */
1322
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1323
};
1324
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1325
static_assert(0 < 3, "There is no slot for us");
1326
static const JSJitInfo placeholder_setterinfo = {
1327
  { (JSJitGetterOp)set_placeholder },
1328
  { prototypes::id::AccessibleNode },
1329
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1330
  JSJitInfo::Setter,
1331
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1332
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1333
  false,  /* isInfallible. False in setters. */
1334
  false,  /* isMovable.  Not relevant for setters. */
1335
  false, /* isEliminatable.  Not relevant for setters. */
1336
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1337
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1338
  false,  /* isTypedMethod.  Only relevant for methods. */
1339
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1340
};
1341
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1342
static_assert(0 < 3, "There is no slot for us");
1343
1344
MOZ_CAN_RUN_SCRIPT static bool
1345
get_valueMax(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
1346
0
{
1347
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.valueMax", DOM, cx);
1348
0
1349
0
  Nullable<double> result(self->GetValueMax());
1350
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1351
0
  if (result.IsNull()) {
1352
0
    args.rval().setNull();
1353
0
    return true;
1354
0
  }
1355
0
  args.rval().set(JS_NumberValue(double(result.Value())));
1356
0
  return true;
1357
0
}
1358
1359
MOZ_CAN_RUN_SCRIPT static bool
1360
set_valueMax(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
1361
0
{
1362
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.valueMax", DOM, cx);
1363
0
1364
0
  Nullable<double> arg0;
1365
0
  if (args[0].isNullOrUndefined()) {
1366
0
    arg0.SetNull();
1367
0
  } else if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0.SetValue())) {
1368
0
    return false;
1369
0
  } else if (!mozilla::IsFinite(arg0.Value())) {
1370
0
    ThrowErrorMessage(cx, MSG_NOT_FINITE, "Value being assigned to AccessibleNode.valueMax");
1371
0
    return false;
1372
0
  }
1373
0
  self->SetValueMax(Constify(arg0));
1374
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1375
0
1376
0
  return true;
1377
0
}
1378
1379
static const JSJitInfo valueMax_getterinfo = {
1380
  { (JSJitGetterOp)get_valueMax },
1381
  { prototypes::id::AccessibleNode },
1382
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1383
  JSJitInfo::Getter,
1384
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1385
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
1386
  true,  /* isInfallible. False in setters. */
1387
  false,  /* isMovable.  Not relevant for setters. */
1388
  false, /* isEliminatable.  Not relevant for setters. */
1389
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1390
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1391
  false,  /* isTypedMethod.  Only relevant for methods. */
1392
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1393
};
1394
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1395
static_assert(0 < 3, "There is no slot for us");
1396
static const JSJitInfo valueMax_setterinfo = {
1397
  { (JSJitGetterOp)set_valueMax },
1398
  { prototypes::id::AccessibleNode },
1399
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1400
  JSJitInfo::Setter,
1401
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1402
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1403
  false,  /* isInfallible. False in setters. */
1404
  false,  /* isMovable.  Not relevant for setters. */
1405
  false, /* isEliminatable.  Not relevant for setters. */
1406
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1407
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1408
  false,  /* isTypedMethod.  Only relevant for methods. */
1409
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1410
};
1411
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1412
static_assert(0 < 3, "There is no slot for us");
1413
1414
MOZ_CAN_RUN_SCRIPT static bool
1415
get_valueMin(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
1416
0
{
1417
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.valueMin", DOM, cx);
1418
0
1419
0
  Nullable<double> result(self->GetValueMin());
1420
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1421
0
  if (result.IsNull()) {
1422
0
    args.rval().setNull();
1423
0
    return true;
1424
0
  }
1425
0
  args.rval().set(JS_NumberValue(double(result.Value())));
1426
0
  return true;
1427
0
}
1428
1429
MOZ_CAN_RUN_SCRIPT static bool
1430
set_valueMin(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
1431
0
{
1432
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.valueMin", DOM, cx);
1433
0
1434
0
  Nullable<double> arg0;
1435
0
  if (args[0].isNullOrUndefined()) {
1436
0
    arg0.SetNull();
1437
0
  } else if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0.SetValue())) {
1438
0
    return false;
1439
0
  } else if (!mozilla::IsFinite(arg0.Value())) {
1440
0
    ThrowErrorMessage(cx, MSG_NOT_FINITE, "Value being assigned to AccessibleNode.valueMin");
1441
0
    return false;
1442
0
  }
1443
0
  self->SetValueMin(Constify(arg0));
1444
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1445
0
1446
0
  return true;
1447
0
}
1448
1449
static const JSJitInfo valueMin_getterinfo = {
1450
  { (JSJitGetterOp)get_valueMin },
1451
  { prototypes::id::AccessibleNode },
1452
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1453
  JSJitInfo::Getter,
1454
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1455
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
1456
  true,  /* isInfallible. False in setters. */
1457
  false,  /* isMovable.  Not relevant for setters. */
1458
  false, /* isEliminatable.  Not relevant for setters. */
1459
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1460
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1461
  false,  /* isTypedMethod.  Only relevant for methods. */
1462
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1463
};
1464
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1465
static_assert(0 < 3, "There is no slot for us");
1466
static const JSJitInfo valueMin_setterinfo = {
1467
  { (JSJitGetterOp)set_valueMin },
1468
  { prototypes::id::AccessibleNode },
1469
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1470
  JSJitInfo::Setter,
1471
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1472
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1473
  false,  /* isInfallible. False in setters. */
1474
  false,  /* isMovable.  Not relevant for setters. */
1475
  false, /* isEliminatable.  Not relevant for setters. */
1476
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1477
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1478
  false,  /* isTypedMethod.  Only relevant for methods. */
1479
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1480
};
1481
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1482
static_assert(0 < 3, "There is no slot for us");
1483
1484
MOZ_CAN_RUN_SCRIPT static bool
1485
get_valueNow(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
1486
0
{
1487
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.valueNow", DOM, cx);
1488
0
1489
0
  Nullable<double> result(self->GetValueNow());
1490
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1491
0
  if (result.IsNull()) {
1492
0
    args.rval().setNull();
1493
0
    return true;
1494
0
  }
1495
0
  args.rval().set(JS_NumberValue(double(result.Value())));
1496
0
  return true;
1497
0
}
1498
1499
MOZ_CAN_RUN_SCRIPT static bool
1500
set_valueNow(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
1501
0
{
1502
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.valueNow", DOM, cx);
1503
0
1504
0
  Nullable<double> arg0;
1505
0
  if (args[0].isNullOrUndefined()) {
1506
0
    arg0.SetNull();
1507
0
  } else if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0.SetValue())) {
1508
0
    return false;
1509
0
  } else if (!mozilla::IsFinite(arg0.Value())) {
1510
0
    ThrowErrorMessage(cx, MSG_NOT_FINITE, "Value being assigned to AccessibleNode.valueNow");
1511
0
    return false;
1512
0
  }
1513
0
  self->SetValueNow(Constify(arg0));
1514
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1515
0
1516
0
  return true;
1517
0
}
1518
1519
static const JSJitInfo valueNow_getterinfo = {
1520
  { (JSJitGetterOp)get_valueNow },
1521
  { prototypes::id::AccessibleNode },
1522
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1523
  JSJitInfo::Getter,
1524
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1525
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
1526
  true,  /* isInfallible. False in setters. */
1527
  false,  /* isMovable.  Not relevant for setters. */
1528
  false, /* isEliminatable.  Not relevant for setters. */
1529
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1530
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1531
  false,  /* isTypedMethod.  Only relevant for methods. */
1532
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1533
};
1534
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1535
static_assert(0 < 3, "There is no slot for us");
1536
static const JSJitInfo valueNow_setterinfo = {
1537
  { (JSJitGetterOp)set_valueNow },
1538
  { prototypes::id::AccessibleNode },
1539
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1540
  JSJitInfo::Setter,
1541
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1542
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1543
  false,  /* isInfallible. False in setters. */
1544
  false,  /* isMovable.  Not relevant for setters. */
1545
  false, /* isEliminatable.  Not relevant for setters. */
1546
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1547
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1548
  false,  /* isTypedMethod.  Only relevant for methods. */
1549
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1550
};
1551
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1552
static_assert(0 < 3, "There is no slot for us");
1553
1554
MOZ_CAN_RUN_SCRIPT static bool
1555
get_valueText(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
1556
0
{
1557
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.valueText", DOM, cx);
1558
0
1559
0
  DOMString result;
1560
0
  self->GetValueText(result);
1561
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1562
0
  if (!xpc::StringToJsval(cx, result, args.rval())) {
1563
0
    return false;
1564
0
  }
1565
0
  return true;
1566
0
}
1567
1568
MOZ_CAN_RUN_SCRIPT static bool
1569
set_valueText(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
1570
0
{
1571
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.valueText", DOM, cx);
1572
0
1573
0
  binding_detail::FakeString arg0;
1574
0
  if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
1575
0
    return false;
1576
0
  }
1577
0
  self->SetValueText(NonNullHelper(Constify(arg0)));
1578
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1579
0
1580
0
  return true;
1581
0
}
1582
1583
static const JSJitInfo valueText_getterinfo = {
1584
  { (JSJitGetterOp)get_valueText },
1585
  { prototypes::id::AccessibleNode },
1586
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1587
  JSJitInfo::Getter,
1588
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1589
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
1590
  false,  /* isInfallible. False in setters. */
1591
  false,  /* isMovable.  Not relevant for setters. */
1592
  false, /* isEliminatable.  Not relevant for setters. */
1593
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1594
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1595
  false,  /* isTypedMethod.  Only relevant for methods. */
1596
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1597
};
1598
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1599
static_assert(0 < 3, "There is no slot for us");
1600
static const JSJitInfo valueText_setterinfo = {
1601
  { (JSJitGetterOp)set_valueText },
1602
  { prototypes::id::AccessibleNode },
1603
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1604
  JSJitInfo::Setter,
1605
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1606
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1607
  false,  /* isInfallible. False in setters. */
1608
  false,  /* isMovable.  Not relevant for setters. */
1609
  false, /* isEliminatable.  Not relevant for setters. */
1610
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1611
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1612
  false,  /* isTypedMethod.  Only relevant for methods. */
1613
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1614
};
1615
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1616
static_assert(0 < 3, "There is no slot for us");
1617
1618
MOZ_CAN_RUN_SCRIPT static bool
1619
get_checked(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
1620
0
{
1621
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.checked", DOM, cx);
1622
0
1623
0
  DOMString result;
1624
0
  self->GetChecked(result);
1625
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1626
0
  if (!xpc::StringToJsval(cx, result, args.rval())) {
1627
0
    return false;
1628
0
  }
1629
0
  return true;
1630
0
}
1631
1632
MOZ_CAN_RUN_SCRIPT static bool
1633
set_checked(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
1634
0
{
1635
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.checked", DOM, cx);
1636
0
1637
0
  binding_detail::FakeString arg0;
1638
0
  if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
1639
0
    return false;
1640
0
  }
1641
0
  self->SetChecked(NonNullHelper(Constify(arg0)));
1642
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1643
0
1644
0
  return true;
1645
0
}
1646
1647
static const JSJitInfo checked_getterinfo = {
1648
  { (JSJitGetterOp)get_checked },
1649
  { prototypes::id::AccessibleNode },
1650
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1651
  JSJitInfo::Getter,
1652
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1653
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
1654
  false,  /* isInfallible. False in setters. */
1655
  false,  /* isMovable.  Not relevant for setters. */
1656
  false, /* isEliminatable.  Not relevant for setters. */
1657
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1658
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1659
  false,  /* isTypedMethod.  Only relevant for methods. */
1660
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1661
};
1662
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1663
static_assert(0 < 3, "There is no slot for us");
1664
static const JSJitInfo checked_setterinfo = {
1665
  { (JSJitGetterOp)set_checked },
1666
  { prototypes::id::AccessibleNode },
1667
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1668
  JSJitInfo::Setter,
1669
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1670
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1671
  false,  /* isInfallible. False in setters. */
1672
  false,  /* isMovable.  Not relevant for setters. */
1673
  false, /* isEliminatable.  Not relevant for setters. */
1674
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1675
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1676
  false,  /* isTypedMethod.  Only relevant for methods. */
1677
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1678
};
1679
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1680
static_assert(0 < 3, "There is no slot for us");
1681
1682
MOZ_CAN_RUN_SCRIPT static bool
1683
get_disabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
1684
0
{
1685
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.disabled", DOM, cx);
1686
0
1687
0
  Nullable<bool> result(self->GetDisabled());
1688
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1689
0
  if (result.IsNull()) {
1690
0
    args.rval().setNull();
1691
0
    return true;
1692
0
  }
1693
0
  args.rval().setBoolean(result.Value());
1694
0
  return true;
1695
0
}
1696
1697
MOZ_CAN_RUN_SCRIPT static bool
1698
set_disabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
1699
0
{
1700
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.disabled", DOM, cx);
1701
0
1702
0
  Nullable<bool> arg0;
1703
0
  if (args[0].isNullOrUndefined()) {
1704
0
    arg0.SetNull();
1705
0
  } else if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0.SetValue())) {
1706
0
    return false;
1707
0
  }
1708
0
  self->SetDisabled(Constify(arg0));
1709
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1710
0
1711
0
  return true;
1712
0
}
1713
1714
static const JSJitInfo disabled_getterinfo = {
1715
  { (JSJitGetterOp)get_disabled },
1716
  { prototypes::id::AccessibleNode },
1717
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1718
  JSJitInfo::Getter,
1719
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1720
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
1721
  true,  /* isInfallible. False in setters. */
1722
  false,  /* isMovable.  Not relevant for setters. */
1723
  false, /* isEliminatable.  Not relevant for setters. */
1724
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1725
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1726
  false,  /* isTypedMethod.  Only relevant for methods. */
1727
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1728
};
1729
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1730
static_assert(0 < 3, "There is no slot for us");
1731
static const JSJitInfo disabled_setterinfo = {
1732
  { (JSJitGetterOp)set_disabled },
1733
  { prototypes::id::AccessibleNode },
1734
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1735
  JSJitInfo::Setter,
1736
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1737
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1738
  false,  /* isInfallible. False in setters. */
1739
  false,  /* isMovable.  Not relevant for setters. */
1740
  false, /* isEliminatable.  Not relevant for setters. */
1741
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1742
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1743
  false,  /* isTypedMethod.  Only relevant for methods. */
1744
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1745
};
1746
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1747
static_assert(0 < 3, "There is no slot for us");
1748
1749
MOZ_CAN_RUN_SCRIPT static bool
1750
get_expanded(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
1751
0
{
1752
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.expanded", DOM, cx);
1753
0
1754
0
  Nullable<bool> result(self->GetExpanded());
1755
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1756
0
  if (result.IsNull()) {
1757
0
    args.rval().setNull();
1758
0
    return true;
1759
0
  }
1760
0
  args.rval().setBoolean(result.Value());
1761
0
  return true;
1762
0
}
1763
1764
MOZ_CAN_RUN_SCRIPT static bool
1765
set_expanded(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
1766
0
{
1767
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.expanded", DOM, cx);
1768
0
1769
0
  Nullable<bool> arg0;
1770
0
  if (args[0].isNullOrUndefined()) {
1771
0
    arg0.SetNull();
1772
0
  } else if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0.SetValue())) {
1773
0
    return false;
1774
0
  }
1775
0
  self->SetExpanded(Constify(arg0));
1776
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1777
0
1778
0
  return true;
1779
0
}
1780
1781
static const JSJitInfo expanded_getterinfo = {
1782
  { (JSJitGetterOp)get_expanded },
1783
  { prototypes::id::AccessibleNode },
1784
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1785
  JSJitInfo::Getter,
1786
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1787
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
1788
  true,  /* isInfallible. False in setters. */
1789
  false,  /* isMovable.  Not relevant for setters. */
1790
  false, /* isEliminatable.  Not relevant for setters. */
1791
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1792
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1793
  false,  /* isTypedMethod.  Only relevant for methods. */
1794
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1795
};
1796
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1797
static_assert(0 < 3, "There is no slot for us");
1798
static const JSJitInfo expanded_setterinfo = {
1799
  { (JSJitGetterOp)set_expanded },
1800
  { prototypes::id::AccessibleNode },
1801
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1802
  JSJitInfo::Setter,
1803
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1804
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1805
  false,  /* isInfallible. False in setters. */
1806
  false,  /* isMovable.  Not relevant for setters. */
1807
  false, /* isEliminatable.  Not relevant for setters. */
1808
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1809
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1810
  false,  /* isTypedMethod.  Only relevant for methods. */
1811
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1812
};
1813
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1814
static_assert(0 < 3, "There is no slot for us");
1815
1816
MOZ_CAN_RUN_SCRIPT static bool
1817
get_hasPopUp(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
1818
0
{
1819
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.hasPopUp", DOM, cx);
1820
0
1821
0
  DOMString result;
1822
0
  self->GetHasPopUp(result);
1823
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1824
0
  if (!xpc::StringToJsval(cx, result, args.rval())) {
1825
0
    return false;
1826
0
  }
1827
0
  return true;
1828
0
}
1829
1830
MOZ_CAN_RUN_SCRIPT static bool
1831
set_hasPopUp(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
1832
0
{
1833
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.hasPopUp", DOM, cx);
1834
0
1835
0
  binding_detail::FakeString arg0;
1836
0
  if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
1837
0
    return false;
1838
0
  }
1839
0
  self->SetHasPopUp(NonNullHelper(Constify(arg0)));
1840
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1841
0
1842
0
  return true;
1843
0
}
1844
1845
static const JSJitInfo hasPopUp_getterinfo = {
1846
  { (JSJitGetterOp)get_hasPopUp },
1847
  { prototypes::id::AccessibleNode },
1848
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1849
  JSJitInfo::Getter,
1850
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1851
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
1852
  false,  /* isInfallible. False in setters. */
1853
  false,  /* isMovable.  Not relevant for setters. */
1854
  false, /* isEliminatable.  Not relevant for setters. */
1855
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1856
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1857
  false,  /* isTypedMethod.  Only relevant for methods. */
1858
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1859
};
1860
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1861
static_assert(0 < 3, "There is no slot for us");
1862
static const JSJitInfo hasPopUp_setterinfo = {
1863
  { (JSJitGetterOp)set_hasPopUp },
1864
  { prototypes::id::AccessibleNode },
1865
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1866
  JSJitInfo::Setter,
1867
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1868
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1869
  false,  /* isInfallible. False in setters. */
1870
  false,  /* isMovable.  Not relevant for setters. */
1871
  false, /* isEliminatable.  Not relevant for setters. */
1872
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1873
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1874
  false,  /* isTypedMethod.  Only relevant for methods. */
1875
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1876
};
1877
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1878
static_assert(0 < 3, "There is no slot for us");
1879
1880
MOZ_CAN_RUN_SCRIPT static bool
1881
get_hidden(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
1882
0
{
1883
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.hidden", DOM, cx);
1884
0
1885
0
  Nullable<bool> result(self->GetHidden());
1886
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1887
0
  if (result.IsNull()) {
1888
0
    args.rval().setNull();
1889
0
    return true;
1890
0
  }
1891
0
  args.rval().setBoolean(result.Value());
1892
0
  return true;
1893
0
}
1894
1895
MOZ_CAN_RUN_SCRIPT static bool
1896
set_hidden(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
1897
0
{
1898
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.hidden", DOM, cx);
1899
0
1900
0
  Nullable<bool> arg0;
1901
0
  if (args[0].isNullOrUndefined()) {
1902
0
    arg0.SetNull();
1903
0
  } else if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0.SetValue())) {
1904
0
    return false;
1905
0
  }
1906
0
  self->SetHidden(Constify(arg0));
1907
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1908
0
1909
0
  return true;
1910
0
}
1911
1912
static const JSJitInfo hidden_getterinfo = {
1913
  { (JSJitGetterOp)get_hidden },
1914
  { prototypes::id::AccessibleNode },
1915
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1916
  JSJitInfo::Getter,
1917
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1918
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
1919
  true,  /* isInfallible. False in setters. */
1920
  false,  /* isMovable.  Not relevant for setters. */
1921
  false, /* isEliminatable.  Not relevant for setters. */
1922
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1923
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1924
  false,  /* isTypedMethod.  Only relevant for methods. */
1925
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1926
};
1927
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1928
static_assert(0 < 3, "There is no slot for us");
1929
static const JSJitInfo hidden_setterinfo = {
1930
  { (JSJitGetterOp)set_hidden },
1931
  { prototypes::id::AccessibleNode },
1932
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1933
  JSJitInfo::Setter,
1934
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1935
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
1936
  false,  /* isInfallible. False in setters. */
1937
  false,  /* isMovable.  Not relevant for setters. */
1938
  false, /* isEliminatable.  Not relevant for setters. */
1939
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1940
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1941
  false,  /* isTypedMethod.  Only relevant for methods. */
1942
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1943
};
1944
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1945
static_assert(0 < 3, "There is no slot for us");
1946
1947
MOZ_CAN_RUN_SCRIPT static bool
1948
get_invalid(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
1949
0
{
1950
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.invalid", DOM, cx);
1951
0
1952
0
  DOMString result;
1953
0
  self->GetInvalid(result);
1954
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1955
0
  if (!xpc::StringToJsval(cx, result, args.rval())) {
1956
0
    return false;
1957
0
  }
1958
0
  return true;
1959
0
}
1960
1961
MOZ_CAN_RUN_SCRIPT static bool
1962
set_invalid(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
1963
0
{
1964
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.invalid", DOM, cx);
1965
0
1966
0
  binding_detail::FakeString arg0;
1967
0
  if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
1968
0
    return false;
1969
0
  }
1970
0
  self->SetInvalid(NonNullHelper(Constify(arg0)));
1971
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
1972
0
1973
0
  return true;
1974
0
}
1975
1976
static const JSJitInfo invalid_getterinfo = {
1977
  { (JSJitGetterOp)get_invalid },
1978
  { prototypes::id::AccessibleNode },
1979
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1980
  JSJitInfo::Getter,
1981
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1982
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
1983
  false,  /* isInfallible. False in setters. */
1984
  false,  /* isMovable.  Not relevant for setters. */
1985
  false, /* isEliminatable.  Not relevant for setters. */
1986
  false, /* isAlwaysInSlot.  Only relevant for getters. */
1987
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
1988
  false,  /* isTypedMethod.  Only relevant for methods. */
1989
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
1990
};
1991
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1992
static_assert(0 < 3, "There is no slot for us");
1993
static const JSJitInfo invalid_setterinfo = {
1994
  { (JSJitGetterOp)set_invalid },
1995
  { prototypes::id::AccessibleNode },
1996
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
1997
  JSJitInfo::Setter,
1998
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
1999
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2000
  false,  /* isInfallible. False in setters. */
2001
  false,  /* isMovable.  Not relevant for setters. */
2002
  false, /* isEliminatable.  Not relevant for setters. */
2003
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2004
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2005
  false,  /* isTypedMethod.  Only relevant for methods. */
2006
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2007
};
2008
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2009
static_assert(0 < 3, "There is no slot for us");
2010
2011
MOZ_CAN_RUN_SCRIPT static bool
2012
get_pressed(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
2013
0
{
2014
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.pressed", DOM, cx);
2015
0
2016
0
  DOMString result;
2017
0
  self->GetPressed(result);
2018
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2019
0
  if (!xpc::StringToJsval(cx, result, args.rval())) {
2020
0
    return false;
2021
0
  }
2022
0
  return true;
2023
0
}
2024
2025
MOZ_CAN_RUN_SCRIPT static bool
2026
set_pressed(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
2027
0
{
2028
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.pressed", DOM, cx);
2029
0
2030
0
  binding_detail::FakeString arg0;
2031
0
  if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
2032
0
    return false;
2033
0
  }
2034
0
  self->SetPressed(NonNullHelper(Constify(arg0)));
2035
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2036
0
2037
0
  return true;
2038
0
}
2039
2040
static const JSJitInfo pressed_getterinfo = {
2041
  { (JSJitGetterOp)get_pressed },
2042
  { prototypes::id::AccessibleNode },
2043
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2044
  JSJitInfo::Getter,
2045
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2046
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2047
  false,  /* isInfallible. False in setters. */
2048
  false,  /* isMovable.  Not relevant for setters. */
2049
  false, /* isEliminatable.  Not relevant for setters. */
2050
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2051
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2052
  false,  /* isTypedMethod.  Only relevant for methods. */
2053
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2054
};
2055
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2056
static_assert(0 < 3, "There is no slot for us");
2057
static const JSJitInfo pressed_setterinfo = {
2058
  { (JSJitGetterOp)set_pressed },
2059
  { prototypes::id::AccessibleNode },
2060
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2061
  JSJitInfo::Setter,
2062
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2063
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2064
  false,  /* isInfallible. False in setters. */
2065
  false,  /* isMovable.  Not relevant for setters. */
2066
  false, /* isEliminatable.  Not relevant for setters. */
2067
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2068
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2069
  false,  /* isTypedMethod.  Only relevant for methods. */
2070
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2071
};
2072
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2073
static_assert(0 < 3, "There is no slot for us");
2074
2075
MOZ_CAN_RUN_SCRIPT static bool
2076
get_selected(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
2077
0
{
2078
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.selected", DOM, cx);
2079
0
2080
0
  Nullable<bool> result(self->GetSelected());
2081
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2082
0
  if (result.IsNull()) {
2083
0
    args.rval().setNull();
2084
0
    return true;
2085
0
  }
2086
0
  args.rval().setBoolean(result.Value());
2087
0
  return true;
2088
0
}
2089
2090
MOZ_CAN_RUN_SCRIPT static bool
2091
set_selected(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
2092
0
{
2093
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.selected", DOM, cx);
2094
0
2095
0
  Nullable<bool> arg0;
2096
0
  if (args[0].isNullOrUndefined()) {
2097
0
    arg0.SetNull();
2098
0
  } else if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0.SetValue())) {
2099
0
    return false;
2100
0
  }
2101
0
  self->SetSelected(Constify(arg0));
2102
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2103
0
2104
0
  return true;
2105
0
}
2106
2107
static const JSJitInfo selected_getterinfo = {
2108
  { (JSJitGetterOp)get_selected },
2109
  { prototypes::id::AccessibleNode },
2110
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2111
  JSJitInfo::Getter,
2112
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2113
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2114
  true,  /* isInfallible. False in setters. */
2115
  false,  /* isMovable.  Not relevant for setters. */
2116
  false, /* isEliminatable.  Not relevant for setters. */
2117
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2118
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2119
  false,  /* isTypedMethod.  Only relevant for methods. */
2120
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2121
};
2122
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2123
static_assert(0 < 3, "There is no slot for us");
2124
static const JSJitInfo selected_setterinfo = {
2125
  { (JSJitGetterOp)set_selected },
2126
  { prototypes::id::AccessibleNode },
2127
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2128
  JSJitInfo::Setter,
2129
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2130
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2131
  false,  /* isInfallible. False in setters. */
2132
  false,  /* isMovable.  Not relevant for setters. */
2133
  false, /* isEliminatable.  Not relevant for setters. */
2134
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2135
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2136
  false,  /* isTypedMethod.  Only relevant for methods. */
2137
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2138
};
2139
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2140
static_assert(0 < 3, "There is no slot for us");
2141
2142
MOZ_CAN_RUN_SCRIPT static bool
2143
get_atomic(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
2144
0
{
2145
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.atomic", DOM, cx);
2146
0
2147
0
  Nullable<bool> result(self->GetAtomic());
2148
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2149
0
  if (result.IsNull()) {
2150
0
    args.rval().setNull();
2151
0
    return true;
2152
0
  }
2153
0
  args.rval().setBoolean(result.Value());
2154
0
  return true;
2155
0
}
2156
2157
MOZ_CAN_RUN_SCRIPT static bool
2158
set_atomic(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
2159
0
{
2160
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.atomic", DOM, cx);
2161
0
2162
0
  Nullable<bool> arg0;
2163
0
  if (args[0].isNullOrUndefined()) {
2164
0
    arg0.SetNull();
2165
0
  } else if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0.SetValue())) {
2166
0
    return false;
2167
0
  }
2168
0
  self->SetAtomic(Constify(arg0));
2169
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2170
0
2171
0
  return true;
2172
0
}
2173
2174
static const JSJitInfo atomic_getterinfo = {
2175
  { (JSJitGetterOp)get_atomic },
2176
  { prototypes::id::AccessibleNode },
2177
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2178
  JSJitInfo::Getter,
2179
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2180
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2181
  true,  /* isInfallible. False in setters. */
2182
  false,  /* isMovable.  Not relevant for setters. */
2183
  false, /* isEliminatable.  Not relevant for setters. */
2184
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2185
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2186
  false,  /* isTypedMethod.  Only relevant for methods. */
2187
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2188
};
2189
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2190
static_assert(0 < 3, "There is no slot for us");
2191
static const JSJitInfo atomic_setterinfo = {
2192
  { (JSJitGetterOp)set_atomic },
2193
  { prototypes::id::AccessibleNode },
2194
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2195
  JSJitInfo::Setter,
2196
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2197
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2198
  false,  /* isInfallible. False in setters. */
2199
  false,  /* isMovable.  Not relevant for setters. */
2200
  false, /* isEliminatable.  Not relevant for setters. */
2201
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2202
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2203
  false,  /* isTypedMethod.  Only relevant for methods. */
2204
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2205
};
2206
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2207
static_assert(0 < 3, "There is no slot for us");
2208
2209
MOZ_CAN_RUN_SCRIPT static bool
2210
get_busy(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
2211
0
{
2212
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.busy", DOM, cx);
2213
0
2214
0
  Nullable<bool> result(self->GetBusy());
2215
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2216
0
  if (result.IsNull()) {
2217
0
    args.rval().setNull();
2218
0
    return true;
2219
0
  }
2220
0
  args.rval().setBoolean(result.Value());
2221
0
  return true;
2222
0
}
2223
2224
MOZ_CAN_RUN_SCRIPT static bool
2225
set_busy(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
2226
0
{
2227
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.busy", DOM, cx);
2228
0
2229
0
  Nullable<bool> arg0;
2230
0
  if (args[0].isNullOrUndefined()) {
2231
0
    arg0.SetNull();
2232
0
  } else if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0.SetValue())) {
2233
0
    return false;
2234
0
  }
2235
0
  self->SetBusy(Constify(arg0));
2236
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2237
0
2238
0
  return true;
2239
0
}
2240
2241
static const JSJitInfo busy_getterinfo = {
2242
  { (JSJitGetterOp)get_busy },
2243
  { prototypes::id::AccessibleNode },
2244
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2245
  JSJitInfo::Getter,
2246
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2247
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2248
  true,  /* isInfallible. False in setters. */
2249
  false,  /* isMovable.  Not relevant for setters. */
2250
  false, /* isEliminatable.  Not relevant for setters. */
2251
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2252
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2253
  false,  /* isTypedMethod.  Only relevant for methods. */
2254
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2255
};
2256
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2257
static_assert(0 < 3, "There is no slot for us");
2258
static const JSJitInfo busy_setterinfo = {
2259
  { (JSJitGetterOp)set_busy },
2260
  { prototypes::id::AccessibleNode },
2261
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2262
  JSJitInfo::Setter,
2263
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2264
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2265
  false,  /* isInfallible. False in setters. */
2266
  false,  /* isMovable.  Not relevant for setters. */
2267
  false, /* isEliminatable.  Not relevant for setters. */
2268
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2269
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2270
  false,  /* isTypedMethod.  Only relevant for methods. */
2271
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2272
};
2273
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2274
static_assert(0 < 3, "There is no slot for us");
2275
2276
MOZ_CAN_RUN_SCRIPT static bool
2277
get_live(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
2278
0
{
2279
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.live", DOM, cx);
2280
0
2281
0
  DOMString result;
2282
0
  self->GetLive(result);
2283
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2284
0
  if (!xpc::StringToJsval(cx, result, args.rval())) {
2285
0
    return false;
2286
0
  }
2287
0
  return true;
2288
0
}
2289
2290
MOZ_CAN_RUN_SCRIPT static bool
2291
set_live(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
2292
0
{
2293
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.live", DOM, cx);
2294
0
2295
0
  binding_detail::FakeString arg0;
2296
0
  if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
2297
0
    return false;
2298
0
  }
2299
0
  self->SetLive(NonNullHelper(Constify(arg0)));
2300
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2301
0
2302
0
  return true;
2303
0
}
2304
2305
static const JSJitInfo live_getterinfo = {
2306
  { (JSJitGetterOp)get_live },
2307
  { prototypes::id::AccessibleNode },
2308
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2309
  JSJitInfo::Getter,
2310
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2311
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2312
  false,  /* isInfallible. False in setters. */
2313
  false,  /* isMovable.  Not relevant for setters. */
2314
  false, /* isEliminatable.  Not relevant for setters. */
2315
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2316
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2317
  false,  /* isTypedMethod.  Only relevant for methods. */
2318
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2319
};
2320
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2321
static_assert(0 < 3, "There is no slot for us");
2322
static const JSJitInfo live_setterinfo = {
2323
  { (JSJitGetterOp)set_live },
2324
  { prototypes::id::AccessibleNode },
2325
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2326
  JSJitInfo::Setter,
2327
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2328
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2329
  false,  /* isInfallible. False in setters. */
2330
  false,  /* isMovable.  Not relevant for setters. */
2331
  false, /* isEliminatable.  Not relevant for setters. */
2332
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2333
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2334
  false,  /* isTypedMethod.  Only relevant for methods. */
2335
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2336
};
2337
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2338
static_assert(0 < 3, "There is no slot for us");
2339
2340
MOZ_CAN_RUN_SCRIPT static bool
2341
get_relevant(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
2342
0
{
2343
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.relevant", DOM, cx);
2344
0
2345
0
  DOMString result;
2346
0
  self->GetRelevant(result);
2347
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2348
0
  if (!xpc::StringToJsval(cx, result, args.rval())) {
2349
0
    return false;
2350
0
  }
2351
0
  return true;
2352
0
}
2353
2354
MOZ_CAN_RUN_SCRIPT static bool
2355
set_relevant(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
2356
0
{
2357
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.relevant", DOM, cx);
2358
0
2359
0
  binding_detail::FakeString arg0;
2360
0
  if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
2361
0
    return false;
2362
0
  }
2363
0
  self->SetRelevant(NonNullHelper(Constify(arg0)));
2364
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2365
0
2366
0
  return true;
2367
0
}
2368
2369
static const JSJitInfo relevant_getterinfo = {
2370
  { (JSJitGetterOp)get_relevant },
2371
  { prototypes::id::AccessibleNode },
2372
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2373
  JSJitInfo::Getter,
2374
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2375
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2376
  false,  /* isInfallible. False in setters. */
2377
  false,  /* isMovable.  Not relevant for setters. */
2378
  false, /* isEliminatable.  Not relevant for setters. */
2379
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2380
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2381
  false,  /* isTypedMethod.  Only relevant for methods. */
2382
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2383
};
2384
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2385
static_assert(0 < 3, "There is no slot for us");
2386
static const JSJitInfo relevant_setterinfo = {
2387
  { (JSJitGetterOp)set_relevant },
2388
  { prototypes::id::AccessibleNode },
2389
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2390
  JSJitInfo::Setter,
2391
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2392
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2393
  false,  /* isInfallible. False in setters. */
2394
  false,  /* isMovable.  Not relevant for setters. */
2395
  false, /* isEliminatable.  Not relevant for setters. */
2396
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2397
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2398
  false,  /* isTypedMethod.  Only relevant for methods. */
2399
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2400
};
2401
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2402
static_assert(0 < 3, "There is no slot for us");
2403
2404
MOZ_CAN_RUN_SCRIPT static bool
2405
get_activeDescendant(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
2406
0
{
2407
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.activeDescendant", DOM, cx);
2408
0
2409
0
  auto result(StrongOrRawPtr<mozilla::dom::AccessibleNode>(self->GetActiveDescendant()));
2410
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2411
0
  if (!result) {
2412
0
    args.rval().setNull();
2413
0
    return true;
2414
0
  }
2415
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
2416
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
2417
0
    return false;
2418
0
  }
2419
0
  return true;
2420
0
}
2421
2422
MOZ_CAN_RUN_SCRIPT static bool
2423
set_activeDescendant(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
2424
0
{
2425
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.activeDescendant", DOM, cx);
2426
0
2427
0
  mozilla::dom::AccessibleNode* arg0;
2428
0
  if (args[0].isObject()) {
2429
0
    {
2430
0
      nsresult rv = UnwrapObject<prototypes::id::AccessibleNode, mozilla::dom::AccessibleNode>(args[0], arg0);
2431
0
      if (NS_FAILED(rv)) {
2432
0
        ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Value being assigned to AccessibleNode.activeDescendant", "AccessibleNode");
2433
0
        return false;
2434
0
      }
2435
0
    }
2436
0
  } else if (args[0].isNullOrUndefined()) {
2437
0
    arg0 = nullptr;
2438
0
  } else {
2439
0
    ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Value being assigned to AccessibleNode.activeDescendant");
2440
0
    return false;
2441
0
  }
2442
0
  self->SetActiveDescendant(MOZ_KnownLive(Constify(arg0)));
2443
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2444
0
2445
0
  return true;
2446
0
}
2447
2448
static const JSJitInfo activeDescendant_getterinfo = {
2449
  { (JSJitGetterOp)get_activeDescendant },
2450
  { prototypes::id::AccessibleNode },
2451
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2452
  JSJitInfo::Getter,
2453
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2454
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2455
  false,  /* isInfallible. False in setters. */
2456
  false,  /* isMovable.  Not relevant for setters. */
2457
  false, /* isEliminatable.  Not relevant for setters. */
2458
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2459
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2460
  false,  /* isTypedMethod.  Only relevant for methods. */
2461
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2462
};
2463
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2464
static_assert(0 < 3, "There is no slot for us");
2465
static const JSJitInfo activeDescendant_setterinfo = {
2466
  { (JSJitGetterOp)set_activeDescendant },
2467
  { prototypes::id::AccessibleNode },
2468
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2469
  JSJitInfo::Setter,
2470
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2471
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2472
  false,  /* isInfallible. False in setters. */
2473
  false,  /* isMovable.  Not relevant for setters. */
2474
  false, /* isEliminatable.  Not relevant for setters. */
2475
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2476
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2477
  false,  /* isTypedMethod.  Only relevant for methods. */
2478
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2479
};
2480
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2481
static_assert(0 < 3, "There is no slot for us");
2482
2483
MOZ_CAN_RUN_SCRIPT static bool
2484
get_details(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
2485
0
{
2486
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.details", DOM, cx);
2487
0
2488
0
  auto result(StrongOrRawPtr<mozilla::dom::AccessibleNode>(self->GetDetails()));
2489
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2490
0
  if (!result) {
2491
0
    args.rval().setNull();
2492
0
    return true;
2493
0
  }
2494
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
2495
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
2496
0
    return false;
2497
0
  }
2498
0
  return true;
2499
0
}
2500
2501
MOZ_CAN_RUN_SCRIPT static bool
2502
set_details(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
2503
0
{
2504
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.details", DOM, cx);
2505
0
2506
0
  mozilla::dom::AccessibleNode* arg0;
2507
0
  if (args[0].isObject()) {
2508
0
    {
2509
0
      nsresult rv = UnwrapObject<prototypes::id::AccessibleNode, mozilla::dom::AccessibleNode>(args[0], arg0);
2510
0
      if (NS_FAILED(rv)) {
2511
0
        ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Value being assigned to AccessibleNode.details", "AccessibleNode");
2512
0
        return false;
2513
0
      }
2514
0
    }
2515
0
  } else if (args[0].isNullOrUndefined()) {
2516
0
    arg0 = nullptr;
2517
0
  } else {
2518
0
    ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Value being assigned to AccessibleNode.details");
2519
0
    return false;
2520
0
  }
2521
0
  self->SetDetails(MOZ_KnownLive(Constify(arg0)));
2522
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2523
0
2524
0
  return true;
2525
0
}
2526
2527
static const JSJitInfo details_getterinfo = {
2528
  { (JSJitGetterOp)get_details },
2529
  { prototypes::id::AccessibleNode },
2530
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2531
  JSJitInfo::Getter,
2532
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2533
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2534
  false,  /* isInfallible. False in setters. */
2535
  false,  /* isMovable.  Not relevant for setters. */
2536
  false, /* isEliminatable.  Not relevant for setters. */
2537
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2538
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2539
  false,  /* isTypedMethod.  Only relevant for methods. */
2540
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2541
};
2542
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2543
static_assert(0 < 3, "There is no slot for us");
2544
static const JSJitInfo details_setterinfo = {
2545
  { (JSJitGetterOp)set_details },
2546
  { prototypes::id::AccessibleNode },
2547
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2548
  JSJitInfo::Setter,
2549
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2550
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2551
  false,  /* isInfallible. False in setters. */
2552
  false,  /* isMovable.  Not relevant for setters. */
2553
  false, /* isEliminatable.  Not relevant for setters. */
2554
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2555
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2556
  false,  /* isTypedMethod.  Only relevant for methods. */
2557
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2558
};
2559
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2560
static_assert(0 < 3, "There is no slot for us");
2561
2562
MOZ_CAN_RUN_SCRIPT static bool
2563
get_errorMessage(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
2564
0
{
2565
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.errorMessage", DOM, cx);
2566
0
2567
0
  auto result(StrongOrRawPtr<mozilla::dom::AccessibleNode>(self->GetErrorMessage()));
2568
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2569
0
  if (!result) {
2570
0
    args.rval().setNull();
2571
0
    return true;
2572
0
  }
2573
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
2574
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
2575
0
    return false;
2576
0
  }
2577
0
  return true;
2578
0
}
2579
2580
MOZ_CAN_RUN_SCRIPT static bool
2581
set_errorMessage(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
2582
0
{
2583
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.errorMessage", DOM, cx);
2584
0
2585
0
  mozilla::dom::AccessibleNode* arg0;
2586
0
  if (args[0].isObject()) {
2587
0
    {
2588
0
      nsresult rv = UnwrapObject<prototypes::id::AccessibleNode, mozilla::dom::AccessibleNode>(args[0], arg0);
2589
0
      if (NS_FAILED(rv)) {
2590
0
        ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Value being assigned to AccessibleNode.errorMessage", "AccessibleNode");
2591
0
        return false;
2592
0
      }
2593
0
    }
2594
0
  } else if (args[0].isNullOrUndefined()) {
2595
0
    arg0 = nullptr;
2596
0
  } else {
2597
0
    ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Value being assigned to AccessibleNode.errorMessage");
2598
0
    return false;
2599
0
  }
2600
0
  self->SetErrorMessage(MOZ_KnownLive(Constify(arg0)));
2601
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2602
0
2603
0
  return true;
2604
0
}
2605
2606
static const JSJitInfo errorMessage_getterinfo = {
2607
  { (JSJitGetterOp)get_errorMessage },
2608
  { prototypes::id::AccessibleNode },
2609
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2610
  JSJitInfo::Getter,
2611
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2612
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2613
  false,  /* isInfallible. False in setters. */
2614
  false,  /* isMovable.  Not relevant for setters. */
2615
  false, /* isEliminatable.  Not relevant for setters. */
2616
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2617
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2618
  false,  /* isTypedMethod.  Only relevant for methods. */
2619
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2620
};
2621
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2622
static_assert(0 < 3, "There is no slot for us");
2623
static const JSJitInfo errorMessage_setterinfo = {
2624
  { (JSJitGetterOp)set_errorMessage },
2625
  { prototypes::id::AccessibleNode },
2626
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2627
  JSJitInfo::Setter,
2628
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2629
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2630
  false,  /* isInfallible. False in setters. */
2631
  false,  /* isMovable.  Not relevant for setters. */
2632
  false, /* isEliminatable.  Not relevant for setters. */
2633
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2634
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2635
  false,  /* isTypedMethod.  Only relevant for methods. */
2636
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2637
};
2638
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2639
static_assert(0 < 3, "There is no slot for us");
2640
2641
MOZ_CAN_RUN_SCRIPT static bool
2642
get_colCount(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
2643
0
{
2644
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.colCount", DOM, cx);
2645
0
2646
0
  Nullable<int32_t> result(self->GetColCount());
2647
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2648
0
  if (result.IsNull()) {
2649
0
    args.rval().setNull();
2650
0
    return true;
2651
0
  }
2652
0
  args.rval().setInt32(int32_t(result.Value()));
2653
0
  return true;
2654
0
}
2655
2656
MOZ_CAN_RUN_SCRIPT static bool
2657
set_colCount(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
2658
0
{
2659
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.colCount", DOM, cx);
2660
0
2661
0
  Nullable<int32_t> arg0;
2662
0
  if (args[0].isNullOrUndefined()) {
2663
0
    arg0.SetNull();
2664
0
  } else if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0.SetValue())) {
2665
0
    return false;
2666
0
  }
2667
0
  self->SetColCount(Constify(arg0));
2668
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2669
0
2670
0
  return true;
2671
0
}
2672
2673
static const JSJitInfo colCount_getterinfo = {
2674
  { (JSJitGetterOp)get_colCount },
2675
  { prototypes::id::AccessibleNode },
2676
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2677
  JSJitInfo::Getter,
2678
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2679
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2680
  true,  /* isInfallible. False in setters. */
2681
  false,  /* isMovable.  Not relevant for setters. */
2682
  false, /* isEliminatable.  Not relevant for setters. */
2683
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2684
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2685
  false,  /* isTypedMethod.  Only relevant for methods. */
2686
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2687
};
2688
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2689
static_assert(0 < 3, "There is no slot for us");
2690
static const JSJitInfo colCount_setterinfo = {
2691
  { (JSJitGetterOp)set_colCount },
2692
  { prototypes::id::AccessibleNode },
2693
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2694
  JSJitInfo::Setter,
2695
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2696
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2697
  false,  /* isInfallible. False in setters. */
2698
  false,  /* isMovable.  Not relevant for setters. */
2699
  false, /* isEliminatable.  Not relevant for setters. */
2700
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2701
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2702
  false,  /* isTypedMethod.  Only relevant for methods. */
2703
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2704
};
2705
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2706
static_assert(0 < 3, "There is no slot for us");
2707
2708
MOZ_CAN_RUN_SCRIPT static bool
2709
get_colIndex(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
2710
0
{
2711
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.colIndex", DOM, cx);
2712
0
2713
0
  Nullable<uint32_t> result(self->GetColIndex());
2714
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2715
0
  if (result.IsNull()) {
2716
0
    args.rval().setNull();
2717
0
    return true;
2718
0
  }
2719
0
  args.rval().setNumber(result.Value());
2720
0
  return true;
2721
0
}
2722
2723
MOZ_CAN_RUN_SCRIPT static bool
2724
set_colIndex(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
2725
0
{
2726
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.colIndex", DOM, cx);
2727
0
2728
0
  Nullable<uint32_t> arg0;
2729
0
  if (args[0].isNullOrUndefined()) {
2730
0
    arg0.SetNull();
2731
0
  } else if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0.SetValue())) {
2732
0
    return false;
2733
0
  }
2734
0
  self->SetColIndex(Constify(arg0));
2735
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2736
0
2737
0
  return true;
2738
0
}
2739
2740
static const JSJitInfo colIndex_getterinfo = {
2741
  { (JSJitGetterOp)get_colIndex },
2742
  { prototypes::id::AccessibleNode },
2743
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2744
  JSJitInfo::Getter,
2745
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2746
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2747
  true,  /* isInfallible. False in setters. */
2748
  false,  /* isMovable.  Not relevant for setters. */
2749
  false, /* isEliminatable.  Not relevant for setters. */
2750
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2751
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2752
  false,  /* isTypedMethod.  Only relevant for methods. */
2753
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2754
};
2755
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2756
static_assert(0 < 3, "There is no slot for us");
2757
static const JSJitInfo colIndex_setterinfo = {
2758
  { (JSJitGetterOp)set_colIndex },
2759
  { prototypes::id::AccessibleNode },
2760
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2761
  JSJitInfo::Setter,
2762
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2763
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2764
  false,  /* isInfallible. False in setters. */
2765
  false,  /* isMovable.  Not relevant for setters. */
2766
  false, /* isEliminatable.  Not relevant for setters. */
2767
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2768
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2769
  false,  /* isTypedMethod.  Only relevant for methods. */
2770
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2771
};
2772
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2773
static_assert(0 < 3, "There is no slot for us");
2774
2775
MOZ_CAN_RUN_SCRIPT static bool
2776
get_colSpan(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
2777
0
{
2778
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.colSpan", DOM, cx);
2779
0
2780
0
  Nullable<uint32_t> result(self->GetColSpan());
2781
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2782
0
  if (result.IsNull()) {
2783
0
    args.rval().setNull();
2784
0
    return true;
2785
0
  }
2786
0
  args.rval().setNumber(result.Value());
2787
0
  return true;
2788
0
}
2789
2790
MOZ_CAN_RUN_SCRIPT static bool
2791
set_colSpan(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
2792
0
{
2793
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.colSpan", DOM, cx);
2794
0
2795
0
  Nullable<uint32_t> arg0;
2796
0
  if (args[0].isNullOrUndefined()) {
2797
0
    arg0.SetNull();
2798
0
  } else if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0.SetValue())) {
2799
0
    return false;
2800
0
  }
2801
0
  self->SetColSpan(Constify(arg0));
2802
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2803
0
2804
0
  return true;
2805
0
}
2806
2807
static const JSJitInfo colSpan_getterinfo = {
2808
  { (JSJitGetterOp)get_colSpan },
2809
  { prototypes::id::AccessibleNode },
2810
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2811
  JSJitInfo::Getter,
2812
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2813
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2814
  true,  /* isInfallible. False in setters. */
2815
  false,  /* isMovable.  Not relevant for setters. */
2816
  false, /* isEliminatable.  Not relevant for setters. */
2817
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2818
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2819
  false,  /* isTypedMethod.  Only relevant for methods. */
2820
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2821
};
2822
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2823
static_assert(0 < 3, "There is no slot for us");
2824
static const JSJitInfo colSpan_setterinfo = {
2825
  { (JSJitGetterOp)set_colSpan },
2826
  { prototypes::id::AccessibleNode },
2827
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2828
  JSJitInfo::Setter,
2829
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2830
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2831
  false,  /* isInfallible. False in setters. */
2832
  false,  /* isMovable.  Not relevant for setters. */
2833
  false, /* isEliminatable.  Not relevant for setters. */
2834
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2835
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2836
  false,  /* isTypedMethod.  Only relevant for methods. */
2837
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2838
};
2839
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2840
static_assert(0 < 3, "There is no slot for us");
2841
2842
MOZ_CAN_RUN_SCRIPT static bool
2843
get_level(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
2844
0
{
2845
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.level", DOM, cx);
2846
0
2847
0
  Nullable<uint32_t> result(self->GetLevel());
2848
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2849
0
  if (result.IsNull()) {
2850
0
    args.rval().setNull();
2851
0
    return true;
2852
0
  }
2853
0
  args.rval().setNumber(result.Value());
2854
0
  return true;
2855
0
}
2856
2857
MOZ_CAN_RUN_SCRIPT static bool
2858
set_level(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
2859
0
{
2860
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.level", DOM, cx);
2861
0
2862
0
  Nullable<uint32_t> arg0;
2863
0
  if (args[0].isNullOrUndefined()) {
2864
0
    arg0.SetNull();
2865
0
  } else if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0.SetValue())) {
2866
0
    return false;
2867
0
  }
2868
0
  self->SetLevel(Constify(arg0));
2869
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2870
0
2871
0
  return true;
2872
0
}
2873
2874
static const JSJitInfo level_getterinfo = {
2875
  { (JSJitGetterOp)get_level },
2876
  { prototypes::id::AccessibleNode },
2877
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2878
  JSJitInfo::Getter,
2879
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2880
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2881
  true,  /* isInfallible. False in setters. */
2882
  false,  /* isMovable.  Not relevant for setters. */
2883
  false, /* isEliminatable.  Not relevant for setters. */
2884
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2885
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2886
  false,  /* isTypedMethod.  Only relevant for methods. */
2887
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2888
};
2889
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2890
static_assert(0 < 3, "There is no slot for us");
2891
static const JSJitInfo level_setterinfo = {
2892
  { (JSJitGetterOp)set_level },
2893
  { prototypes::id::AccessibleNode },
2894
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2895
  JSJitInfo::Setter,
2896
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2897
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2898
  false,  /* isInfallible. False in setters. */
2899
  false,  /* isMovable.  Not relevant for setters. */
2900
  false, /* isEliminatable.  Not relevant for setters. */
2901
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2902
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2903
  false,  /* isTypedMethod.  Only relevant for methods. */
2904
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2905
};
2906
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2907
static_assert(0 < 3, "There is no slot for us");
2908
2909
MOZ_CAN_RUN_SCRIPT static bool
2910
get_posInSet(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
2911
0
{
2912
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.posInSet", DOM, cx);
2913
0
2914
0
  Nullable<uint32_t> result(self->GetPosInSet());
2915
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2916
0
  if (result.IsNull()) {
2917
0
    args.rval().setNull();
2918
0
    return true;
2919
0
  }
2920
0
  args.rval().setNumber(result.Value());
2921
0
  return true;
2922
0
}
2923
2924
MOZ_CAN_RUN_SCRIPT static bool
2925
set_posInSet(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
2926
0
{
2927
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.posInSet", DOM, cx);
2928
0
2929
0
  Nullable<uint32_t> arg0;
2930
0
  if (args[0].isNullOrUndefined()) {
2931
0
    arg0.SetNull();
2932
0
  } else if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0.SetValue())) {
2933
0
    return false;
2934
0
  }
2935
0
  self->SetPosInSet(Constify(arg0));
2936
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2937
0
2938
0
  return true;
2939
0
}
2940
2941
static const JSJitInfo posInSet_getterinfo = {
2942
  { (JSJitGetterOp)get_posInSet },
2943
  { prototypes::id::AccessibleNode },
2944
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2945
  JSJitInfo::Getter,
2946
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2947
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
2948
  true,  /* isInfallible. False in setters. */
2949
  false,  /* isMovable.  Not relevant for setters. */
2950
  false, /* isEliminatable.  Not relevant for setters. */
2951
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2952
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2953
  false,  /* isTypedMethod.  Only relevant for methods. */
2954
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2955
};
2956
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2957
static_assert(0 < 3, "There is no slot for us");
2958
static const JSJitInfo posInSet_setterinfo = {
2959
  { (JSJitGetterOp)set_posInSet },
2960
  { prototypes::id::AccessibleNode },
2961
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
2962
  JSJitInfo::Setter,
2963
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
2964
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
2965
  false,  /* isInfallible. False in setters. */
2966
  false,  /* isMovable.  Not relevant for setters. */
2967
  false, /* isEliminatable.  Not relevant for setters. */
2968
  false, /* isAlwaysInSlot.  Only relevant for getters. */
2969
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
2970
  false,  /* isTypedMethod.  Only relevant for methods. */
2971
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
2972
};
2973
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
2974
static_assert(0 < 3, "There is no slot for us");
2975
2976
MOZ_CAN_RUN_SCRIPT static bool
2977
get_rowCount(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
2978
0
{
2979
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.rowCount", DOM, cx);
2980
0
2981
0
  Nullable<int32_t> result(self->GetRowCount());
2982
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
2983
0
  if (result.IsNull()) {
2984
0
    args.rval().setNull();
2985
0
    return true;
2986
0
  }
2987
0
  args.rval().setInt32(int32_t(result.Value()));
2988
0
  return true;
2989
0
}
2990
2991
MOZ_CAN_RUN_SCRIPT static bool
2992
set_rowCount(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
2993
0
{
2994
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.rowCount", DOM, cx);
2995
0
2996
0
  Nullable<int32_t> arg0;
2997
0
  if (args[0].isNullOrUndefined()) {
2998
0
    arg0.SetNull();
2999
0
  } else if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0.SetValue())) {
3000
0
    return false;
3001
0
  }
3002
0
  self->SetRowCount(Constify(arg0));
3003
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3004
0
3005
0
  return true;
3006
0
}
3007
3008
static const JSJitInfo rowCount_getterinfo = {
3009
  { (JSJitGetterOp)get_rowCount },
3010
  { prototypes::id::AccessibleNode },
3011
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
3012
  JSJitInfo::Getter,
3013
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3014
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
3015
  true,  /* isInfallible. False in setters. */
3016
  false,  /* isMovable.  Not relevant for setters. */
3017
  false, /* isEliminatable.  Not relevant for setters. */
3018
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3019
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3020
  false,  /* isTypedMethod.  Only relevant for methods. */
3021
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3022
};
3023
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3024
static_assert(0 < 3, "There is no slot for us");
3025
static const JSJitInfo rowCount_setterinfo = {
3026
  { (JSJitGetterOp)set_rowCount },
3027
  { prototypes::id::AccessibleNode },
3028
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
3029
  JSJitInfo::Setter,
3030
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3031
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3032
  false,  /* isInfallible. False in setters. */
3033
  false,  /* isMovable.  Not relevant for setters. */
3034
  false, /* isEliminatable.  Not relevant for setters. */
3035
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3036
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3037
  false,  /* isTypedMethod.  Only relevant for methods. */
3038
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3039
};
3040
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3041
static_assert(0 < 3, "There is no slot for us");
3042
3043
MOZ_CAN_RUN_SCRIPT static bool
3044
get_rowIndex(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
3045
0
{
3046
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.rowIndex", DOM, cx);
3047
0
3048
0
  Nullable<uint32_t> result(self->GetRowIndex());
3049
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3050
0
  if (result.IsNull()) {
3051
0
    args.rval().setNull();
3052
0
    return true;
3053
0
  }
3054
0
  args.rval().setNumber(result.Value());
3055
0
  return true;
3056
0
}
3057
3058
MOZ_CAN_RUN_SCRIPT static bool
3059
set_rowIndex(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
3060
0
{
3061
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.rowIndex", DOM, cx);
3062
0
3063
0
  Nullable<uint32_t> arg0;
3064
0
  if (args[0].isNullOrUndefined()) {
3065
0
    arg0.SetNull();
3066
0
  } else if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0.SetValue())) {
3067
0
    return false;
3068
0
  }
3069
0
  self->SetRowIndex(Constify(arg0));
3070
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3071
0
3072
0
  return true;
3073
0
}
3074
3075
static const JSJitInfo rowIndex_getterinfo = {
3076
  { (JSJitGetterOp)get_rowIndex },
3077
  { prototypes::id::AccessibleNode },
3078
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
3079
  JSJitInfo::Getter,
3080
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3081
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
3082
  true,  /* isInfallible. False in setters. */
3083
  false,  /* isMovable.  Not relevant for setters. */
3084
  false, /* isEliminatable.  Not relevant for setters. */
3085
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3086
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3087
  false,  /* isTypedMethod.  Only relevant for methods. */
3088
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3089
};
3090
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3091
static_assert(0 < 3, "There is no slot for us");
3092
static const JSJitInfo rowIndex_setterinfo = {
3093
  { (JSJitGetterOp)set_rowIndex },
3094
  { prototypes::id::AccessibleNode },
3095
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
3096
  JSJitInfo::Setter,
3097
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3098
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3099
  false,  /* isInfallible. False in setters. */
3100
  false,  /* isMovable.  Not relevant for setters. */
3101
  false, /* isEliminatable.  Not relevant for setters. */
3102
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3103
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3104
  false,  /* isTypedMethod.  Only relevant for methods. */
3105
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3106
};
3107
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3108
static_assert(0 < 3, "There is no slot for us");
3109
3110
MOZ_CAN_RUN_SCRIPT static bool
3111
get_rowSpan(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
3112
0
{
3113
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.rowSpan", DOM, cx);
3114
0
3115
0
  Nullable<uint32_t> result(self->GetRowSpan());
3116
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3117
0
  if (result.IsNull()) {
3118
0
    args.rval().setNull();
3119
0
    return true;
3120
0
  }
3121
0
  args.rval().setNumber(result.Value());
3122
0
  return true;
3123
0
}
3124
3125
MOZ_CAN_RUN_SCRIPT static bool
3126
set_rowSpan(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
3127
0
{
3128
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.rowSpan", DOM, cx);
3129
0
3130
0
  Nullable<uint32_t> arg0;
3131
0
  if (args[0].isNullOrUndefined()) {
3132
0
    arg0.SetNull();
3133
0
  } else if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0.SetValue())) {
3134
0
    return false;
3135
0
  }
3136
0
  self->SetRowSpan(Constify(arg0));
3137
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3138
0
3139
0
  return true;
3140
0
}
3141
3142
static const JSJitInfo rowSpan_getterinfo = {
3143
  { (JSJitGetterOp)get_rowSpan },
3144
  { prototypes::id::AccessibleNode },
3145
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
3146
  JSJitInfo::Getter,
3147
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3148
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
3149
  true,  /* isInfallible. False in setters. */
3150
  false,  /* isMovable.  Not relevant for setters. */
3151
  false, /* isEliminatable.  Not relevant for setters. */
3152
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3153
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3154
  false,  /* isTypedMethod.  Only relevant for methods. */
3155
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3156
};
3157
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3158
static_assert(0 < 3, "There is no slot for us");
3159
static const JSJitInfo rowSpan_setterinfo = {
3160
  { (JSJitGetterOp)set_rowSpan },
3161
  { prototypes::id::AccessibleNode },
3162
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
3163
  JSJitInfo::Setter,
3164
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3165
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3166
  false,  /* isInfallible. False in setters. */
3167
  false,  /* isMovable.  Not relevant for setters. */
3168
  false, /* isEliminatable.  Not relevant for setters. */
3169
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3170
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3171
  false,  /* isTypedMethod.  Only relevant for methods. */
3172
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3173
};
3174
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3175
static_assert(0 < 3, "There is no slot for us");
3176
3177
MOZ_CAN_RUN_SCRIPT static bool
3178
get_setSize(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitGetterCallArgs args)
3179
0
{
3180
0
  AUTO_PROFILER_LABEL_FAST("get AccessibleNode.setSize", DOM, cx);
3181
0
3182
0
  Nullable<int32_t> result(self->GetSetSize());
3183
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3184
0
  if (result.IsNull()) {
3185
0
    args.rval().setNull();
3186
0
    return true;
3187
0
  }
3188
0
  args.rval().setInt32(int32_t(result.Value()));
3189
0
  return true;
3190
0
}
3191
3192
MOZ_CAN_RUN_SCRIPT static bool
3193
set_setSize(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::AccessibleNode* self, JSJitSetterCallArgs args)
3194
0
{
3195
0
  AUTO_PROFILER_LABEL_FAST("set AccessibleNode.setSize", DOM, cx);
3196
0
3197
0
  Nullable<int32_t> arg0;
3198
0
  if (args[0].isNullOrUndefined()) {
3199
0
    arg0.SetNull();
3200
0
  } else if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0.SetValue())) {
3201
0
    return false;
3202
0
  }
3203
0
  self->SetSetSize(Constify(arg0));
3204
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
3205
0
3206
0
  return true;
3207
0
}
3208
3209
static const JSJitInfo setSize_getterinfo = {
3210
  { (JSJitGetterOp)get_setSize },
3211
  { prototypes::id::AccessibleNode },
3212
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
3213
  JSJitInfo::Getter,
3214
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3215
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
3216
  true,  /* isInfallible. False in setters. */
3217
  false,  /* isMovable.  Not relevant for setters. */
3218
  false, /* isEliminatable.  Not relevant for setters. */
3219
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3220
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3221
  false,  /* isTypedMethod.  Only relevant for methods. */
3222
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3223
};
3224
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3225
static_assert(0 < 3, "There is no slot for us");
3226
static const JSJitInfo setSize_setterinfo = {
3227
  { (JSJitGetterOp)set_setSize },
3228
  { prototypes::id::AccessibleNode },
3229
  { PrototypeTraits<prototypes::id::AccessibleNode>::Depth },
3230
  JSJitInfo::Setter,
3231
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
3232
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
3233
  false,  /* isInfallible. False in setters. */
3234
  false,  /* isMovable.  Not relevant for setters. */
3235
  false, /* isEliminatable.  Not relevant for setters. */
3236
  false, /* isAlwaysInSlot.  Only relevant for getters. */
3237
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
3238
  false,  /* isTypedMethod.  Only relevant for methods. */
3239
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
3240
};
3241
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
3242
static_assert(0 < 3, "There is no slot for us");
3243
3244
static bool
3245
_addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
3246
0
{
3247
0
  mozilla::dom::AccessibleNode* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::AccessibleNode>(obj);
3248
0
  // We don't want to preserve if we don't have a wrapper, and we
3249
0
  // obviously can't preserve if we're not initialized.
3250
0
  if (self && self->GetWrapperPreserveColor()) {
3251
0
    PreserveWrapper(self);
3252
0
  }
3253
0
  return true;
3254
0
}
3255
3256
static void
3257
_finalize(js::FreeOp* fop, JSObject* obj)
3258
0
{
3259
0
  mozilla::dom::AccessibleNode* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::AccessibleNode>(obj);
3260
0
  if (self) {
3261
0
    ClearWrapper(self, self, obj);
3262
0
    AddForDeferredFinalization<mozilla::dom::AccessibleNode>(self);
3263
0
  }
3264
0
}
3265
3266
static size_t
3267
_objectMoved(JSObject* obj, JSObject* old)
3268
0
{
3269
0
  mozilla::dom::AccessibleNode* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::AccessibleNode>(obj);
3270
0
  if (self) {
3271
0
    UpdateWrapper(self, self, obj, old);
3272
0
  }
3273
0
3274
0
  return 0;
3275
0
}
3276
3277
// We deliberately use brace-elision to make Visual Studio produce better initalization code.
3278
#if defined(__clang__)
3279
#pragma clang diagnostic push
3280
#pragma clang diagnostic ignored "-Wmissing-braces"
3281
#endif
3282
static const JSFunctionSpec sMethods_specs[] = {
3283
  JS_FNSPEC("is", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&is_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
3284
  JS_FNSPEC("has", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&has_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
3285
  JS_FNSPEC("get", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&get_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
3286
  JS_FS_END
3287
};
3288
#if defined(__clang__)
3289
#pragma clang diagnostic pop
3290
#endif
3291
3292
3293
static const Prefable<const JSFunctionSpec> sMethods[] = {
3294
  { nullptr, &sMethods_specs[0] },
3295
  { nullptr, nullptr }
3296
};
3297
3298
static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
3299
    "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
3300
static_assert(3 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
3301
    "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
3302
3303
// We deliberately use brace-elision to make Visual Studio produce better initalization code.
3304
#if defined(__clang__)
3305
#pragma clang diagnostic push
3306
#pragma clang diagnostic ignored "-Wmissing-braces"
3307
#endif
3308
static const JSPropertySpec sAttributes_specs[] = {
3309
  { "computedRole", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &computedRole_getterinfo, nullptr, nullptr },
3310
  { "states", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &states_getterinfo, nullptr, nullptr },
3311
  { "attributes", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &attributes_getterinfo, nullptr, nullptr },
3312
  { "DOMNode", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &DOMNode_getterinfo, nullptr, nullptr },
3313
  { "role", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &role_getterinfo, GenericSetter<NormalThisPolicy>, &role_setterinfo },
3314
  { "roleDescription", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &roleDescription_getterinfo, GenericSetter<NormalThisPolicy>, &roleDescription_setterinfo },
3315
  { "label", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &label_getterinfo, GenericSetter<NormalThisPolicy>, &label_setterinfo },
3316
  { "current", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &current_getterinfo, GenericSetter<NormalThisPolicy>, &current_setterinfo },
3317
  { "autocomplete", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &autocomplete_getterinfo, GenericSetter<NormalThisPolicy>, &autocomplete_setterinfo },
3318
  { "keyShortcuts", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &keyShortcuts_getterinfo, GenericSetter<NormalThisPolicy>, &keyShortcuts_setterinfo },
3319
  { "modal", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &modal_getterinfo, GenericSetter<NormalThisPolicy>, &modal_setterinfo },
3320
  { "multiline", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &multiline_getterinfo, GenericSetter<NormalThisPolicy>, &multiline_setterinfo },
3321
  { "multiselectable", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &multiselectable_getterinfo, GenericSetter<NormalThisPolicy>, &multiselectable_setterinfo },
3322
  { "orientation", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &orientation_getterinfo, GenericSetter<NormalThisPolicy>, &orientation_setterinfo },
3323
  { "readOnly", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &readOnly_getterinfo, GenericSetter<NormalThisPolicy>, &readOnly_setterinfo },
3324
  { "required", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &required_getterinfo, GenericSetter<NormalThisPolicy>, &required_setterinfo },
3325
  { "sort", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &sort_getterinfo, GenericSetter<NormalThisPolicy>, &sort_setterinfo },
3326
  { "placeholder", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &placeholder_getterinfo, GenericSetter<NormalThisPolicy>, &placeholder_setterinfo },
3327
  { "valueMax", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &valueMax_getterinfo, GenericSetter<NormalThisPolicy>, &valueMax_setterinfo },
3328
  { "valueMin", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &valueMin_getterinfo, GenericSetter<NormalThisPolicy>, &valueMin_setterinfo },
3329
  { "valueNow", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &valueNow_getterinfo, GenericSetter<NormalThisPolicy>, &valueNow_setterinfo },
3330
  { "valueText", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &valueText_getterinfo, GenericSetter<NormalThisPolicy>, &valueText_setterinfo },
3331
  { "checked", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &checked_getterinfo, GenericSetter<NormalThisPolicy>, &checked_setterinfo },
3332
  { "disabled", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &disabled_getterinfo, GenericSetter<NormalThisPolicy>, &disabled_setterinfo },
3333
  { "expanded", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &expanded_getterinfo, GenericSetter<NormalThisPolicy>, &expanded_setterinfo },
3334
  { "hasPopUp", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &hasPopUp_getterinfo, GenericSetter<NormalThisPolicy>, &hasPopUp_setterinfo },
3335
  { "hidden", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &hidden_getterinfo, GenericSetter<NormalThisPolicy>, &hidden_setterinfo },
3336
  { "invalid", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &invalid_getterinfo, GenericSetter<NormalThisPolicy>, &invalid_setterinfo },
3337
  { "pressed", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &pressed_getterinfo, GenericSetter<NormalThisPolicy>, &pressed_setterinfo },
3338
  { "selected", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &selected_getterinfo, GenericSetter<NormalThisPolicy>, &selected_setterinfo },
3339
  { "atomic", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &atomic_getterinfo, GenericSetter<NormalThisPolicy>, &atomic_setterinfo },
3340
  { "busy", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &busy_getterinfo, GenericSetter<NormalThisPolicy>, &busy_setterinfo },
3341
  { "live", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &live_getterinfo, GenericSetter<NormalThisPolicy>, &live_setterinfo },
3342
  { "relevant", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &relevant_getterinfo, GenericSetter<NormalThisPolicy>, &relevant_setterinfo },
3343
  { "activeDescendant", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &activeDescendant_getterinfo, GenericSetter<NormalThisPolicy>, &activeDescendant_setterinfo },
3344
  { "details", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &details_getterinfo, GenericSetter<NormalThisPolicy>, &details_setterinfo },
3345
  { "errorMessage", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &errorMessage_getterinfo, GenericSetter<NormalThisPolicy>, &errorMessage_setterinfo },
3346
  { "colCount", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &colCount_getterinfo, GenericSetter<NormalThisPolicy>, &colCount_setterinfo },
3347
  { "colIndex", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &colIndex_getterinfo, GenericSetter<NormalThisPolicy>, &colIndex_setterinfo },
3348
  { "colSpan", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &colSpan_getterinfo, GenericSetter<NormalThisPolicy>, &colSpan_setterinfo },
3349
  { "level", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &level_getterinfo, GenericSetter<NormalThisPolicy>, &level_setterinfo },
3350
  { "posInSet", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &posInSet_getterinfo, GenericSetter<NormalThisPolicy>, &posInSet_setterinfo },
3351
  { "rowCount", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &rowCount_getterinfo, GenericSetter<NormalThisPolicy>, &rowCount_setterinfo },
3352
  { "rowIndex", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &rowIndex_getterinfo, GenericSetter<NormalThisPolicy>, &rowIndex_setterinfo },
3353
  { "rowSpan", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &rowSpan_getterinfo, GenericSetter<NormalThisPolicy>, &rowSpan_setterinfo },
3354
  { "setSize", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &setSize_getterinfo, GenericSetter<NormalThisPolicy>, &setSize_setterinfo },
3355
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
3356
};
3357
#if defined(__clang__)
3358
#pragma clang diagnostic pop
3359
#endif
3360
3361
3362
static const Prefable<const JSPropertySpec> sAttributes[] = {
3363
  { nullptr, &sAttributes_specs[0] },
3364
  { nullptr, nullptr }
3365
};
3366
3367
static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
3368
    "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
3369
static_assert(46 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
3370
    "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
3371
3372
3373
static uint16_t sNativeProperties_sortedPropertyIndices[49];
3374
static PropertyInfo sNativeProperties_propertyInfos[49];
3375
3376
static const NativePropertiesN<2> sNativeProperties = {
3377
  false, 0,
3378
  false, 0,
3379
  true,  0 /* sMethods */,
3380
  true,  1 /* sAttributes */,
3381
  false, 0,
3382
  false, 0,
3383
  false, 0,
3384
  -1,
3385
  49,
3386
  sNativeProperties_sortedPropertyIndices,
3387
  {
3388
    { sMethods, &sNativeProperties_propertyInfos[0] },
3389
    { sAttributes, &sNativeProperties_propertyInfos[3] }
3390
  }
3391
};
3392
static_assert(49 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
3393
    "We have a property info count that is oversized");
3394
3395
static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
3396
  {
3397
    "Function",
3398
    JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
3399
    &sBoringInterfaceObjectClassClassOps,
3400
    JS_NULL_CLASS_SPEC,
3401
    JS_NULL_CLASS_EXT,
3402
    &sInterfaceObjectClassObjectOps
3403
  },
3404
  eInterface,
3405
  true,
3406
  prototypes::id::AccessibleNode,
3407
  PrototypeTraits<prototypes::id::AccessibleNode>::Depth,
3408
  sNativePropertyHooks,
3409
  "function AccessibleNode() {\n    [native code]\n}",
3410
  JS::GetRealmFunctionPrototype
3411
};
3412
3413
static const DOMIfaceAndProtoJSClass sPrototypeClass = {
3414
  {
3415
    "AccessibleNodePrototype",
3416
    JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
3417
    JS_NULL_CLASS_OPS,
3418
    JS_NULL_CLASS_SPEC,
3419
    JS_NULL_CLASS_EXT,
3420
    JS_NULL_OBJECT_OPS
3421
  },
3422
  eInterfacePrototype,
3423
  false,
3424
  prototypes::id::AccessibleNode,
3425
  PrototypeTraits<prototypes::id::AccessibleNode>::Depth,
3426
  sNativePropertyHooks,
3427
  "[object AccessibleNodePrototype]",
3428
  JS::GetRealmObjectPrototype
3429
};
3430
3431
bool
3432
ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj)
3433
0
{
3434
0
  return mozilla::dom::AccessibleNode::IsAOMEnabled(aCx, aObj);
3435
0
}
3436
3437
static const js::ClassOps sClassOps = {
3438
  _addProperty, /* addProperty */
3439
  nullptr,               /* delProperty */
3440
  nullptr,               /* enumerate */
3441
  nullptr, /* newEnumerate */
3442
  nullptr, /* resolve */
3443
  nullptr, /* mayResolve */
3444
  _finalize, /* finalize */
3445
  nullptr, /* call */
3446
  nullptr,               /* hasInstance */
3447
  nullptr,               /* construct */
3448
  nullptr, /* trace */
3449
};
3450
3451
static const js::ClassExtension sClassExtension = {
3452
  nullptr, /* weakmapKeyDelegateOp */
3453
  _objectMoved /* objectMovedOp */
3454
};
3455
3456
static const DOMJSClass sClass = {
3457
  { "AccessibleNode",
3458
    JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(3),
3459
    &sClassOps,
3460
    JS_NULL_CLASS_SPEC,
3461
    &sClassExtension,
3462
    JS_NULL_OBJECT_OPS
3463
  },
3464
  { prototypes::id::AccessibleNode, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
3465
  IsBaseOf<nsISupports, mozilla::dom::AccessibleNode >::value,
3466
  sNativePropertyHooks,
3467
  FindAssociatedGlobalForNative<mozilla::dom::AccessibleNode>::Get,
3468
  GetProtoObjectHandle,
3469
  GetCCParticipant<mozilla::dom::AccessibleNode>::Get()
3470
};
3471
static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
3472
              "Must have the right minimal number of reserved slots.");
3473
static_assert(3 >= 3,
3474
              "Must have enough reserved slots.");
3475
3476
const JSClass*
3477
GetJSClass()
3478
0
{
3479
0
  return sClass.ToJSClass();
3480
0
}
3481
3482
bool
3483
Wrap(JSContext* aCx, mozilla::dom::AccessibleNode* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
3484
0
{
3485
0
  static_assert(!IsBaseOf<NonRefcountedDOMObject, mozilla::dom::AccessibleNode>::value,
3486
0
                "Shouldn't have wrappercached things that are not refcounted.");
3487
0
  MOZ_ASSERT(static_cast<mozilla::dom::AccessibleNode*>(aObject) ==
3488
0
             reinterpret_cast<mozilla::dom::AccessibleNode*>(aObject),
3489
0
             "Multiple inheritance for mozilla::dom::AccessibleNode is broken.");
3490
0
  MOZ_ASSERT(ToSupportsIsCorrect(aObject));
3491
0
  MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
3492
0
  MOZ_ASSERT(!aCache->GetWrapper(),
3493
0
             "You should probably not be using Wrap() directly; use "
3494
0
             "GetOrCreateDOMReflector instead");
3495
0
3496
0
  MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
3497
0
             "nsISupports must be on our primary inheritance chain");
3498
0
3499
0
  JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
3500
0
  if (!global) {
3501
0
    return false;
3502
0
  }
3503
0
  MOZ_ASSERT(JS_IsGlobalObject(global));
3504
0
  MOZ_ASSERT(JS::ObjectIsNotGray(global));
3505
0
3506
0
  // That might have ended up wrapping us already, due to the wonders
3507
0
  // of XBL.  Check for that, and bail out as needed.
3508
0
  aReflector.set(aCache->GetWrapper());
3509
0
  if (aReflector) {
3510
#ifdef DEBUG
3511
    AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
3512
#endif // DEBUG
3513
    return true;
3514
0
  }
3515
0
3516
0
  JSAutoRealm ar(aCx, global);
3517
0
  JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
3518
0
  if (!canonicalProto) {
3519
0
    return false;
3520
0
  }
3521
0
  JS::Rooted<JSObject*> proto(aCx);
3522
0
  if (aGivenProto) {
3523
0
    proto = aGivenProto;
3524
0
    // Unfortunately, while aGivenProto was in the compartment of aCx
3525
0
    // coming in, we changed compartments to that of "parent" so may need
3526
0
    // to wrap the proto here.
3527
0
    if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
3528
0
      if (!JS_WrapObject(aCx, &proto)) {
3529
0
        return false;
3530
0
      }
3531
0
    }
3532
0
  } else {
3533
0
    proto = canonicalProto;
3534
0
  }
3535
0
3536
0
  BindingJSObjectCreator<mozilla::dom::AccessibleNode> creator(aCx);
3537
0
  creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
3538
0
  if (!aReflector) {
3539
0
    return false;
3540
0
  }
3541
0
3542
0
  aCache->SetWrapper(aReflector);
3543
0
  creator.InitializationSucceeded();
3544
0
3545
0
  MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
3546
0
             aCache->GetWrapperPreserveColor() == aReflector);
3547
0
  // If proto != canonicalProto, we have to preserve our wrapper;
3548
0
  // otherwise we won't be able to properly recreate it later, since
3549
0
  // we won't know what proto to use.  Note that we don't check
3550
0
  // aGivenProto here, since it's entirely possible (and even
3551
0
  // somewhat common) to have a non-null aGivenProto which is the
3552
0
  // same as canonicalProto.
3553
0
  if (proto != canonicalProto) {
3554
0
    PreserveWrapper(aObject);
3555
0
  }
3556
0
3557
0
  return true;
3558
0
}
3559
3560
// This may allocate too many slots, because we only really need
3561
// slots for our non-interface-typed members that we cache.  But
3562
// allocating slots only for those would make the slot index
3563
// computations much more complicated, so let's do this the simple
3564
// way for now.
3565
DEFINE_XRAY_EXPANDO_CLASS(static, sXrayExpandoObjectClass, 2);
3566
3567
const NativePropertyHooks sNativePropertyHooks[] = { {
3568
  nullptr,
3569
  nullptr,
3570
  nullptr,
3571
  { sNativeProperties.Upcast(), nullptr },
3572
  prototypes::id::AccessibleNode,
3573
  constructors::id::AccessibleNode,
3574
  nullptr,
3575
  &sXrayExpandoObjectClass
3576
} };
3577
3578
void
3579
ClearCachedStatesValue(mozilla::dom::AccessibleNode* aObject)
3580
0
{
3581
0
  JSObject* obj;
3582
0
  obj = aObject->GetWrapper();
3583
0
  if (!obj) {
3584
0
    return;
3585
0
  }
3586
0
  js::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 0), JS::UndefinedValue());
3587
0
  xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 0));
3588
0
}
3589
3590
void
3591
ClearCachedAttributesValue(mozilla::dom::AccessibleNode* aObject)
3592
0
{
3593
0
  JSObject* obj;
3594
0
  obj = aObject->GetWrapper();
3595
0
  if (!obj) {
3596
0
    return;
3597
0
  }
3598
0
  js::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 1), JS::UndefinedValue());
3599
0
  xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 1));
3600
0
}
3601
3602
void
3603
CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
3604
0
{
3605
0
  JS::Rooted<JSObject*> parentProto(aCx, JS::GetRealmObjectPrototype(aCx));
3606
0
  if (!parentProto) {
3607
0
    return;
3608
0
  }
3609
0
3610
0
  JS::Rooted<JSObject*> constructorProto(aCx, JS::GetRealmFunctionPrototype(aCx));
3611
0
  if (!constructorProto) {
3612
0
    return;
3613
0
  }
3614
0
3615
0
  static bool sIdsInited = false;
3616
0
  if (!sIdsInited && NS_IsMainThread()) {
3617
0
    if (!InitIds(aCx, sNativeProperties.Upcast())) {
3618
0
      return;
3619
0
    }
3620
0
    sIdsInited = true;
3621
0
  }
3622
0
3623
0
  JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::AccessibleNode);
3624
0
  JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::AccessibleNode);
3625
0
  dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
3626
0
                              &sPrototypeClass.mBase, protoCache,
3627
0
                              nullptr,
3628
0
                              constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
3629
0
                              interfaceCache,
3630
0
                              sNativeProperties.Upcast(),
3631
0
                              nullptr,
3632
0
                              "AccessibleNode", aDefineOnGlobal,
3633
0
                              nullptr,
3634
0
                              false);
3635
0
}
3636
3637
JSObject*
3638
GetConstructorObject(JSContext* aCx)
3639
0
{
3640
0
  return GetConstructorObjectHandle(aCx);
3641
0
}
3642
3643
} // namespace AccessibleNode_Binding
3644
3645
3646
3647
} // namespace dom
3648
} // namespace mozilla