Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dom/bindings/TreeColumnBinding.cpp
Line
Count
Source (jump to first uncovered line)
1
/* THIS FILE IS AUTOGENERATED FROM TreeColumn.webidl BY Codegen.py - DO NOT EDIT */
2
3
#include "TreeColumnBinding.h"
4
#include "WrapperFactory.h"
5
#include "mozilla/OwningNonNull.h"
6
#include "mozilla/dom/BindingUtils.h"
7
#include "mozilla/dom/DOMJSClass.h"
8
#include "mozilla/dom/Element.h"
9
#include "mozilla/dom/NonRefcountedDOMObject.h"
10
#include "mozilla/dom/Nullable.h"
11
#include "mozilla/dom/PrimitiveConversions.h"
12
#include "mozilla/dom/XrayExpandoClass.h"
13
#include "nsTreeColumns.h"
14
15
namespace mozilla {
16
namespace dom {
17
18
namespace binding_detail {}; // Just to make sure it's known as a namespace
19
using namespace mozilla::dom::binding_detail;
20
21
22
namespace TreeColumn_Binding {
23
24
MOZ_CAN_RUN_SCRIPT static bool
25
get_element(JSContext* cx, JS::Handle<JSObject*> obj, nsTreeColumn* self, JSJitGetterCallArgs args)
26
0
{
27
0
  AUTO_PROFILER_LABEL_FAST("get TreeColumn.element", DOM, cx);
28
0
29
0
  auto result(StrongOrRawPtr<mozilla::dom::Element>(self->Element()));
30
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
31
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
32
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
33
0
    return false;
34
0
  }
35
0
  return true;
36
0
}
37
38
static const JSJitInfo element_getterinfo = {
39
  { (JSJitGetterOp)get_element },
40
  { prototypes::id::TreeColumn },
41
  { PrototypeTraits<prototypes::id::TreeColumn>::Depth },
42
  JSJitInfo::Getter,
43
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
44
  JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
45
  false,  /* isInfallible. False in setters. */
46
  false,  /* isMovable.  Not relevant for setters. */
47
  false, /* isEliminatable.  Not relevant for setters. */
48
  false, /* isAlwaysInSlot.  Only relevant for getters. */
49
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
50
  false,  /* isTypedMethod.  Only relevant for methods. */
51
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
52
};
53
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
54
static_assert(0 < 1, "There is no slot for us");
55
56
MOZ_CAN_RUN_SCRIPT static bool
57
get_columns(JSContext* cx, JS::Handle<JSObject*> obj, nsTreeColumn* self, JSJitGetterCallArgs args)
58
0
{
59
0
  AUTO_PROFILER_LABEL_FAST("get TreeColumn.columns", DOM, cx);
60
0
61
0
  auto result(StrongOrRawPtr<nsTreeColumns>(self->GetColumns()));
62
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
63
0
  if (!result) {
64
0
    args.rval().setNull();
65
0
    return true;
66
0
  }
67
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
68
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
69
0
    return false;
70
0
  }
71
0
  return true;
72
0
}
73
74
static const JSJitInfo columns_getterinfo = {
75
  { (JSJitGetterOp)get_columns },
76
  { prototypes::id::TreeColumn },
77
  { PrototypeTraits<prototypes::id::TreeColumn>::Depth },
78
  JSJitInfo::Getter,
79
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
80
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
81
  false,  /* isInfallible. False in setters. */
82
  false,  /* isMovable.  Not relevant for setters. */
83
  false, /* isEliminatable.  Not relevant for setters. */
84
  false, /* isAlwaysInSlot.  Only relevant for getters. */
85
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
86
  false,  /* isTypedMethod.  Only relevant for methods. */
87
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
88
};
89
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
90
static_assert(0 < 1, "There is no slot for us");
91
92
MOZ_CAN_RUN_SCRIPT static bool
93
get_x(JSContext* cx, JS::Handle<JSObject*> obj, nsTreeColumn* self, JSJitGetterCallArgs args)
94
0
{
95
0
  AUTO_PROFILER_LABEL_FAST("get TreeColumn.x", DOM, cx);
96
0
97
0
  FastErrorResult rv;
98
0
  int32_t result(self->GetX(rv));
99
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
100
0
    return false;
101
0
  }
102
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
103
0
  args.rval().setInt32(int32_t(result));
104
0
  return true;
105
0
}
106
107
static const JSJitInfo x_getterinfo = {
108
  { (JSJitGetterOp)get_x },
109
  { prototypes::id::TreeColumn },
110
  { PrototypeTraits<prototypes::id::TreeColumn>::Depth },
111
  JSJitInfo::Getter,
112
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
113
  JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
114
  false,  /* isInfallible. False in setters. */
115
  false,  /* isMovable.  Not relevant for setters. */
116
  false, /* isEliminatable.  Not relevant for setters. */
117
  false, /* isAlwaysInSlot.  Only relevant for getters. */
118
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
119
  false,  /* isTypedMethod.  Only relevant for methods. */
120
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
121
};
122
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
123
static_assert(0 < 1, "There is no slot for us");
124
125
MOZ_CAN_RUN_SCRIPT static bool
126
get_width(JSContext* cx, JS::Handle<JSObject*> obj, nsTreeColumn* self, JSJitGetterCallArgs args)
127
0
{
128
0
  AUTO_PROFILER_LABEL_FAST("get TreeColumn.width", DOM, cx);
129
0
130
0
  FastErrorResult rv;
131
0
  int32_t result(self->GetWidth(rv));
132
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
133
0
    return false;
134
0
  }
135
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
136
0
  args.rval().setInt32(int32_t(result));
137
0
  return true;
138
0
}
139
140
static const JSJitInfo width_getterinfo = {
141
  { (JSJitGetterOp)get_width },
142
  { prototypes::id::TreeColumn },
143
  { PrototypeTraits<prototypes::id::TreeColumn>::Depth },
144
  JSJitInfo::Getter,
145
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
146
  JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
147
  false,  /* isInfallible. False in setters. */
148
  false,  /* isMovable.  Not relevant for setters. */
149
  false, /* isEliminatable.  Not relevant for setters. */
150
  false, /* isAlwaysInSlot.  Only relevant for getters. */
151
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
152
  false,  /* isTypedMethod.  Only relevant for methods. */
153
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
154
};
155
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
156
static_assert(0 < 1, "There is no slot for us");
157
158
MOZ_CAN_RUN_SCRIPT static bool
159
get_id(JSContext* cx, JS::Handle<JSObject*> obj, nsTreeColumn* self, JSJitGetterCallArgs args)
160
0
{
161
0
  AUTO_PROFILER_LABEL_FAST("get TreeColumn.id", DOM, cx);
162
0
163
0
  DOMString result;
164
0
  self->GetId(result);
165
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
166
0
  if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
167
0
    return false;
168
0
  }
169
0
  return true;
170
0
}
171
172
static const JSJitInfo id_getterinfo = {
173
  { (JSJitGetterOp)get_id },
174
  { prototypes::id::TreeColumn },
175
  { PrototypeTraits<prototypes::id::TreeColumn>::Depth },
176
  JSJitInfo::Getter,
177
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
178
  JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
179
  false,  /* isInfallible. False in setters. */
180
  false,  /* isMovable.  Not relevant for setters. */
181
  false, /* isEliminatable.  Not relevant for setters. */
182
  false, /* isAlwaysInSlot.  Only relevant for getters. */
183
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
184
  false,  /* isTypedMethod.  Only relevant for methods. */
185
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
186
};
187
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
188
static_assert(0 < 1, "There is no slot for us");
189
190
MOZ_CAN_RUN_SCRIPT static bool
191
get_index(JSContext* cx, JS::Handle<JSObject*> obj, nsTreeColumn* self, JSJitGetterCallArgs args)
192
0
{
193
0
  AUTO_PROFILER_LABEL_FAST("get TreeColumn.index", DOM, cx);
194
0
195
0
  int32_t result(self->Index());
196
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
197
0
  args.rval().setInt32(int32_t(result));
198
0
  return true;
199
0
}
200
201
static const JSJitInfo index_getterinfo = {
202
  { (JSJitGetterOp)get_index },
203
  { prototypes::id::TreeColumn },
204
  { PrototypeTraits<prototypes::id::TreeColumn>::Depth },
205
  JSJitInfo::Getter,
206
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
207
  JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
208
  true,  /* isInfallible. False in setters. */
209
  false,  /* isMovable.  Not relevant for setters. */
210
  false, /* isEliminatable.  Not relevant for setters. */
211
  false, /* isAlwaysInSlot.  Only relevant for getters. */
212
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
213
  false,  /* isTypedMethod.  Only relevant for methods. */
214
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
215
};
216
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
217
static_assert(0 < 1, "There is no slot for us");
218
219
MOZ_CAN_RUN_SCRIPT static bool
220
get_primary(JSContext* cx, JS::Handle<JSObject*> obj, nsTreeColumn* self, JSJitGetterCallArgs args)
221
0
{
222
0
  AUTO_PROFILER_LABEL_FAST("get TreeColumn.primary", DOM, cx);
223
0
224
0
  bool result(self->Primary());
225
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
226
0
  args.rval().setBoolean(result);
227
0
  return true;
228
0
}
229
230
static const JSJitInfo primary_getterinfo = {
231
  { (JSJitGetterOp)get_primary },
232
  { prototypes::id::TreeColumn },
233
  { PrototypeTraits<prototypes::id::TreeColumn>::Depth },
234
  JSJitInfo::Getter,
235
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
236
  JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
237
  true,  /* isInfallible. False in setters. */
238
  false,  /* isMovable.  Not relevant for setters. */
239
  false, /* isEliminatable.  Not relevant for setters. */
240
  false, /* isAlwaysInSlot.  Only relevant for getters. */
241
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
242
  false,  /* isTypedMethod.  Only relevant for methods. */
243
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
244
};
245
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
246
static_assert(0 < 1, "There is no slot for us");
247
248
MOZ_CAN_RUN_SCRIPT static bool
249
get_cycler(JSContext* cx, JS::Handle<JSObject*> obj, nsTreeColumn* self, JSJitGetterCallArgs args)
250
0
{
251
0
  AUTO_PROFILER_LABEL_FAST("get TreeColumn.cycler", DOM, cx);
252
0
253
0
  bool result(self->Cycler());
254
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
255
0
  args.rval().setBoolean(result);
256
0
  return true;
257
0
}
258
259
static const JSJitInfo cycler_getterinfo = {
260
  { (JSJitGetterOp)get_cycler },
261
  { prototypes::id::TreeColumn },
262
  { PrototypeTraits<prototypes::id::TreeColumn>::Depth },
263
  JSJitInfo::Getter,
264
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
265
  JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
266
  true,  /* isInfallible. False in setters. */
267
  false,  /* isMovable.  Not relevant for setters. */
268
  false, /* isEliminatable.  Not relevant for setters. */
269
  false, /* isAlwaysInSlot.  Only relevant for getters. */
270
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
271
  false,  /* isTypedMethod.  Only relevant for methods. */
272
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
273
};
274
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
275
static_assert(0 < 1, "There is no slot for us");
276
277
MOZ_CAN_RUN_SCRIPT static bool
278
get_editable(JSContext* cx, JS::Handle<JSObject*> obj, nsTreeColumn* self, JSJitGetterCallArgs args)
279
0
{
280
0
  AUTO_PROFILER_LABEL_FAST("get TreeColumn.editable", DOM, cx);
281
0
282
0
  bool result(self->Editable());
283
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
284
0
  args.rval().setBoolean(result);
285
0
  return true;
286
0
}
287
288
static const JSJitInfo editable_getterinfo = {
289
  { (JSJitGetterOp)get_editable },
290
  { prototypes::id::TreeColumn },
291
  { PrototypeTraits<prototypes::id::TreeColumn>::Depth },
292
  JSJitInfo::Getter,
293
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
294
  JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
295
  true,  /* isInfallible. False in setters. */
296
  false,  /* isMovable.  Not relevant for setters. */
297
  false, /* isEliminatable.  Not relevant for setters. */
298
  false, /* isAlwaysInSlot.  Only relevant for getters. */
299
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
300
  false,  /* isTypedMethod.  Only relevant for methods. */
301
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
302
};
303
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
304
static_assert(0 < 1, "There is no slot for us");
305
306
MOZ_CAN_RUN_SCRIPT static bool
307
get_selectable(JSContext* cx, JS::Handle<JSObject*> obj, nsTreeColumn* self, JSJitGetterCallArgs args)
308
0
{
309
0
  AUTO_PROFILER_LABEL_FAST("get TreeColumn.selectable", DOM, cx);
310
0
311
0
  bool result(self->Selectable());
312
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
313
0
  args.rval().setBoolean(result);
314
0
  return true;
315
0
}
316
317
static const JSJitInfo selectable_getterinfo = {
318
  { (JSJitGetterOp)get_selectable },
319
  { prototypes::id::TreeColumn },
320
  { PrototypeTraits<prototypes::id::TreeColumn>::Depth },
321
  JSJitInfo::Getter,
322
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
323
  JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
324
  true,  /* isInfallible. False in setters. */
325
  false,  /* isMovable.  Not relevant for setters. */
326
  false, /* isEliminatable.  Not relevant for setters. */
327
  false, /* isAlwaysInSlot.  Only relevant for getters. */
328
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
329
  false,  /* isTypedMethod.  Only relevant for methods. */
330
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
331
};
332
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
333
static_assert(0 < 1, "There is no slot for us");
334
335
MOZ_CAN_RUN_SCRIPT static bool
336
get_type(JSContext* cx, JS::Handle<JSObject*> obj, nsTreeColumn* self, JSJitGetterCallArgs args)
337
0
{
338
0
  AUTO_PROFILER_LABEL_FAST("get TreeColumn.type", DOM, cx);
339
0
340
0
  int16_t result(self->Type());
341
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
342
0
  args.rval().setInt32(int32_t(result));
343
0
  return true;
344
0
}
345
346
static const JSJitInfo type_getterinfo = {
347
  { (JSJitGetterOp)get_type },
348
  { prototypes::id::TreeColumn },
349
  { PrototypeTraits<prototypes::id::TreeColumn>::Depth },
350
  JSJitInfo::Getter,
351
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
352
  JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
353
  true,  /* isInfallible. False in setters. */
354
  false,  /* isMovable.  Not relevant for setters. */
355
  false, /* isEliminatable.  Not relevant for setters. */
356
  false, /* isAlwaysInSlot.  Only relevant for getters. */
357
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
358
  false,  /* isTypedMethod.  Only relevant for methods. */
359
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
360
};
361
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
362
static_assert(0 < 1, "There is no slot for us");
363
364
MOZ_CAN_RUN_SCRIPT static bool
365
getNext(JSContext* cx, JS::Handle<JSObject*> obj, nsTreeColumn* self, const JSJitMethodCallArgs& args)
366
0
{
367
0
  AUTO_PROFILER_LABEL_FAST("TreeColumn.getNext", DOM, cx);
368
0
369
0
  auto result(StrongOrRawPtr<nsTreeColumn>(self->GetNext()));
370
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
371
0
  if (!result) {
372
0
    args.rval().setNull();
373
0
    return true;
374
0
  }
375
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
376
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
377
0
    return false;
378
0
  }
379
0
  return true;
380
0
}
381
382
static const JSJitInfo getNext_methodinfo = {
383
  { (JSJitGetterOp)getNext },
384
  { prototypes::id::TreeColumn },
385
  { PrototypeTraits<prototypes::id::TreeColumn>::Depth },
386
  JSJitInfo::Method,
387
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
388
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
389
  false,  /* isInfallible. False in setters. */
390
  false,  /* isMovable.  Not relevant for setters. */
391
  false, /* isEliminatable.  Not relevant for setters. */
392
  false, /* isAlwaysInSlot.  Only relevant for getters. */
393
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
394
  false,  /* isTypedMethod.  Only relevant for methods. */
395
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
396
};
397
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
398
static_assert(0 < 1, "There is no slot for us");
399
400
MOZ_CAN_RUN_SCRIPT static bool
401
getPrevious(JSContext* cx, JS::Handle<JSObject*> obj, nsTreeColumn* self, const JSJitMethodCallArgs& args)
402
0
{
403
0
  AUTO_PROFILER_LABEL_FAST("TreeColumn.getPrevious", DOM, cx);
404
0
405
0
  auto result(StrongOrRawPtr<nsTreeColumn>(self->GetPrevious()));
406
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
407
0
  if (!result) {
408
0
    args.rval().setNull();
409
0
    return true;
410
0
  }
411
0
  if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
412
0
    MOZ_ASSERT(JS_IsExceptionPending(cx));
413
0
    return false;
414
0
  }
415
0
  return true;
416
0
}
417
418
static const JSJitInfo getPrevious_methodinfo = {
419
  { (JSJitGetterOp)getPrevious },
420
  { prototypes::id::TreeColumn },
421
  { PrototypeTraits<prototypes::id::TreeColumn>::Depth },
422
  JSJitInfo::Method,
423
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
424
  JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
425
  false,  /* isInfallible. False in setters. */
426
  false,  /* isMovable.  Not relevant for setters. */
427
  false, /* isEliminatable.  Not relevant for setters. */
428
  false, /* isAlwaysInSlot.  Only relevant for getters. */
429
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
430
  false,  /* isTypedMethod.  Only relevant for methods. */
431
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
432
};
433
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
434
static_assert(0 < 1, "There is no slot for us");
435
436
MOZ_CAN_RUN_SCRIPT static bool
437
invalidate(JSContext* cx, JS::Handle<JSObject*> obj, nsTreeColumn* self, const JSJitMethodCallArgs& args)
438
0
{
439
0
  AUTO_PROFILER_LABEL_FAST("TreeColumn.invalidate", DOM, cx);
440
0
441
0
  FastErrorResult rv;
442
0
  self->Invalidate(rv);
443
0
  if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
444
0
    return false;
445
0
  }
446
0
  MOZ_ASSERT(!JS_IsExceptionPending(cx));
447
0
  args.rval().setUndefined();
448
0
  return true;
449
0
}
450
451
static const JSJitInfo invalidate_methodinfo = {
452
  { (JSJitGetterOp)invalidate },
453
  { prototypes::id::TreeColumn },
454
  { PrototypeTraits<prototypes::id::TreeColumn>::Depth },
455
  JSJitInfo::Method,
456
  JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
457
  JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
458
  false,  /* isInfallible. False in setters. */
459
  false,  /* isMovable.  Not relevant for setters. */
460
  false, /* isEliminatable.  Not relevant for setters. */
461
  false, /* isAlwaysInSlot.  Only relevant for getters. */
462
  false, /* isLazilyCachedInSlot.  Only relevant for getters. */
463
  false,  /* isTypedMethod.  Only relevant for methods. */
464
  0   /* Reserved slot index, if we're stored in a slot, else 0. */
465
};
466
static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
467
static_assert(0 < 1, "There is no slot for us");
468
469
static bool
470
_addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
471
0
{
472
0
  nsTreeColumn* self = UnwrapPossiblyNotInitializedDOMObject<nsTreeColumn>(obj);
473
0
  // We don't want to preserve if we don't have a wrapper, and we
474
0
  // obviously can't preserve if we're not initialized.
475
0
  if (self && self->GetWrapperPreserveColor()) {
476
0
    PreserveWrapper(self);
477
0
  }
478
0
  return true;
479
0
}
480
481
static void
482
_finalize(js::FreeOp* fop, JSObject* obj)
483
0
{
484
0
  nsTreeColumn* self = UnwrapPossiblyNotInitializedDOMObject<nsTreeColumn>(obj);
485
0
  if (self) {
486
0
    ClearWrapper(self, self, obj);
487
0
    AddForDeferredFinalization<nsTreeColumn>(self);
488
0
  }
489
0
}
490
491
static size_t
492
_objectMoved(JSObject* obj, JSObject* old)
493
0
{
494
0
  nsTreeColumn* self = UnwrapPossiblyNotInitializedDOMObject<nsTreeColumn>(obj);
495
0
  if (self) {
496
0
    UpdateWrapper(self, self, obj, old);
497
0
  }
498
0
499
0
  return 0;
500
0
}
501
502
// We deliberately use brace-elision to make Visual Studio produce better initalization code.
503
#if defined(__clang__)
504
#pragma clang diagnostic push
505
#pragma clang diagnostic ignored "-Wmissing-braces"
506
#endif
507
static const JSFunctionSpec sMethods_specs[] = {
508
  JS_FNSPEC("getNext", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&getNext_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
509
  JS_FNSPEC("getPrevious", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&getPrevious_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
510
  JS_FNSPEC("invalidate", (GenericMethod<NormalThisPolicy, ThrowExceptions>), reinterpret_cast<const JSJitInfo*>(&invalidate_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
511
  JS_FS_END
512
};
513
#if defined(__clang__)
514
#pragma clang diagnostic pop
515
#endif
516
517
518
static const Prefable<const JSFunctionSpec> sMethods[] = {
519
  { nullptr, &sMethods_specs[0] },
520
  { nullptr, nullptr }
521
};
522
523
static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
524
    "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
525
static_assert(3 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
526
    "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
527
528
// We deliberately use brace-elision to make Visual Studio produce better initalization code.
529
#if defined(__clang__)
530
#pragma clang diagnostic push
531
#pragma clang diagnostic ignored "-Wmissing-braces"
532
#endif
533
static const JSPropertySpec sAttributes_specs[] = {
534
  { "element", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &element_getterinfo, nullptr, nullptr },
535
  { "columns", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &columns_getterinfo, nullptr, nullptr },
536
  { "x", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &x_getterinfo, nullptr, nullptr },
537
  { "width", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &width_getterinfo, nullptr, nullptr },
538
  { "id", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &id_getterinfo, nullptr, nullptr },
539
  { "index", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &index_getterinfo, nullptr, nullptr },
540
  { "primary", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &primary_getterinfo, nullptr, nullptr },
541
  { "cycler", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &cycler_getterinfo, nullptr, nullptr },
542
  { "editable", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &editable_getterinfo, nullptr, nullptr },
543
  { "selectable", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &selectable_getterinfo, nullptr, nullptr },
544
  { "type", JSPROP_ENUMERATE, GenericGetter<NormalThisPolicy, ThrowExceptions>, &type_getterinfo, nullptr, nullptr },
545
  { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
546
};
547
#if defined(__clang__)
548
#pragma clang diagnostic pop
549
#endif
550
551
552
static const Prefable<const JSPropertySpec> sAttributes[] = {
553
  { nullptr, &sAttributes_specs[0] },
554
  { nullptr, nullptr }
555
};
556
557
static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
558
    "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
559
static_assert(11 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
560
    "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
561
562
// We deliberately use brace-elision to make Visual Studio produce better initalization code.
563
#if defined(__clang__)
564
#pragma clang diagnostic push
565
#pragma clang diagnostic ignored "-Wmissing-braces"
566
#endif
567
static const ConstantSpec sConstants_specs[] = {
568
  { "TYPE_TEXT", JS::Int32Value(1) },
569
  { "TYPE_CHECKBOX", JS::Int32Value(2) },
570
  { "TYPE_PROGRESSMETER", JS::Int32Value(3) },
571
  { "TYPE_PASSWORD", JS::Int32Value(4) },
572
  { 0, JS::UndefinedValue() }
573
};
574
#if defined(__clang__)
575
#pragma clang diagnostic pop
576
#endif
577
578
579
static const Prefable<const ConstantSpec> sConstants[] = {
580
  { nullptr, &sConstants_specs[0] },
581
  { nullptr, nullptr }
582
};
583
584
static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
585
    "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
586
static_assert(4 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
587
    "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
588
589
590
static uint16_t sNativeProperties_sortedPropertyIndices[18];
591
static PropertyInfo sNativeProperties_propertyInfos[18];
592
593
static const NativePropertiesN<3> sNativeProperties = {
594
  false, 0,
595
  false, 0,
596
  true,  0 /* sMethods */,
597
  true,  1 /* sAttributes */,
598
  false, 0,
599
  false, 0,
600
  true,  2 /* sConstants */,
601
  -1,
602
  18,
603
  sNativeProperties_sortedPropertyIndices,
604
  {
605
    { sMethods, &sNativeProperties_propertyInfos[0] },
606
    { sAttributes, &sNativeProperties_propertyInfos[3] },
607
    { sConstants, &sNativeProperties_propertyInfos[14] }
608
  }
609
};
610
static_assert(18 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
611
    "We have a property info count that is oversized");
612
613
static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
614
  {
615
    "Function",
616
    JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
617
    &sBoringInterfaceObjectClassClassOps,
618
    JS_NULL_CLASS_SPEC,
619
    JS_NULL_CLASS_EXT,
620
    &sInterfaceObjectClassObjectOps
621
  },
622
  eInterface,
623
  true,
624
  prototypes::id::TreeColumn,
625
  PrototypeTraits<prototypes::id::TreeColumn>::Depth,
626
  sNativePropertyHooks,
627
  "function TreeColumn() {\n    [native code]\n}",
628
  JS::GetRealmFunctionPrototype
629
};
630
631
static const DOMIfaceAndProtoJSClass sPrototypeClass = {
632
  {
633
    "TreeColumnPrototype",
634
    JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
635
    JS_NULL_CLASS_OPS,
636
    JS_NULL_CLASS_SPEC,
637
    JS_NULL_CLASS_EXT,
638
    JS_NULL_OBJECT_OPS
639
  },
640
  eInterfacePrototype,
641
  false,
642
  prototypes::id::TreeColumn,
643
  PrototypeTraits<prototypes::id::TreeColumn>::Depth,
644
  sNativePropertyHooks,
645
  "[object TreeColumnPrototype]",
646
  JS::GetRealmObjectPrototype
647
};
648
649
bool
650
ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj)
651
0
{
652
0
  return IsChromeOrXBL(aCx, aObj);
653
0
}
654
655
static const js::ClassOps sClassOps = {
656
  _addProperty, /* addProperty */
657
  nullptr,               /* delProperty */
658
  nullptr,               /* enumerate */
659
  nullptr, /* newEnumerate */
660
  nullptr, /* resolve */
661
  nullptr, /* mayResolve */
662
  _finalize, /* finalize */
663
  nullptr, /* call */
664
  nullptr,               /* hasInstance */
665
  nullptr,               /* construct */
666
  nullptr, /* trace */
667
};
668
669
static const js::ClassExtension sClassExtension = {
670
  nullptr, /* weakmapKeyDelegateOp */
671
  _objectMoved /* objectMovedOp */
672
};
673
674
static const DOMJSClass sClass = {
675
  { "TreeColumn",
676
    JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
677
    &sClassOps,
678
    JS_NULL_CLASS_SPEC,
679
    &sClassExtension,
680
    JS_NULL_OBJECT_OPS
681
  },
682
  { prototypes::id::TreeColumn, 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 },
683
  IsBaseOf<nsISupports, nsTreeColumn >::value,
684
  sNativePropertyHooks,
685
  FindAssociatedGlobalForNative<nsTreeColumn>::Get,
686
  GetProtoObjectHandle,
687
  GetCCParticipant<nsTreeColumn>::Get()
688
};
689
static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
690
              "Must have the right minimal number of reserved slots.");
691
static_assert(1 >= 1,
692
              "Must have enough reserved slots.");
693
694
const JSClass*
695
GetJSClass()
696
0
{
697
0
  return sClass.ToJSClass();
698
0
}
699
700
bool
701
Wrap(JSContext* aCx, nsTreeColumn* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
702
0
{
703
0
  static_assert(!IsBaseOf<NonRefcountedDOMObject, nsTreeColumn>::value,
704
0
                "Shouldn't have wrappercached things that are not refcounted.");
705
0
  MOZ_ASSERT(static_cast<nsTreeColumn*>(aObject) ==
706
0
             reinterpret_cast<nsTreeColumn*>(aObject),
707
0
             "Multiple inheritance for nsTreeColumn is broken.");
708
0
  MOZ_ASSERT(ToSupportsIsCorrect(aObject));
709
0
  MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
710
0
  MOZ_ASSERT(!aCache->GetWrapper(),
711
0
             "You should probably not be using Wrap() directly; use "
712
0
             "GetOrCreateDOMReflector instead");
713
0
714
0
  MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
715
0
             "nsISupports must be on our primary inheritance chain");
716
0
717
0
  JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
718
0
  if (!global) {
719
0
    return false;
720
0
  }
721
0
  MOZ_ASSERT(JS_IsGlobalObject(global));
722
0
  MOZ_ASSERT(JS::ObjectIsNotGray(global));
723
0
724
0
  // That might have ended up wrapping us already, due to the wonders
725
0
  // of XBL.  Check for that, and bail out as needed.
726
0
  aReflector.set(aCache->GetWrapper());
727
0
  if (aReflector) {
728
#ifdef DEBUG
729
    AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
730
#endif // DEBUG
731
    return true;
732
0
  }
733
0
734
0
  JSAutoRealm ar(aCx, global);
735
0
  JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
736
0
  if (!canonicalProto) {
737
0
    return false;
738
0
  }
739
0
  JS::Rooted<JSObject*> proto(aCx);
740
0
  if (aGivenProto) {
741
0
    proto = aGivenProto;
742
0
    // Unfortunately, while aGivenProto was in the compartment of aCx
743
0
    // coming in, we changed compartments to that of "parent" so may need
744
0
    // to wrap the proto here.
745
0
    if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
746
0
      if (!JS_WrapObject(aCx, &proto)) {
747
0
        return false;
748
0
      }
749
0
    }
750
0
  } else {
751
0
    proto = canonicalProto;
752
0
  }
753
0
754
0
  BindingJSObjectCreator<nsTreeColumn> creator(aCx);
755
0
  creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
756
0
  if (!aReflector) {
757
0
    return false;
758
0
  }
759
0
760
0
  aCache->SetWrapper(aReflector);
761
0
  creator.InitializationSucceeded();
762
0
763
0
  MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
764
0
             aCache->GetWrapperPreserveColor() == aReflector);
765
0
  // If proto != canonicalProto, we have to preserve our wrapper;
766
0
  // otherwise we won't be able to properly recreate it later, since
767
0
  // we won't know what proto to use.  Note that we don't check
768
0
  // aGivenProto here, since it's entirely possible (and even
769
0
  // somewhat common) to have a non-null aGivenProto which is the
770
0
  // same as canonicalProto.
771
0
  if (proto != canonicalProto) {
772
0
    PreserveWrapper(aObject);
773
0
  }
774
0
775
0
  return true;
776
0
}
777
778
const NativePropertyHooks sNativePropertyHooks[] = { {
779
  nullptr,
780
  nullptr,
781
  nullptr,
782
  { sNativeProperties.Upcast(), nullptr },
783
  prototypes::id::TreeColumn,
784
  constructors::id::TreeColumn,
785
  nullptr,
786
  &DefaultXrayExpandoObjectClass
787
} };
788
789
void
790
CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
791
0
{
792
0
  JS::Rooted<JSObject*> parentProto(aCx, JS::GetRealmObjectPrototype(aCx));
793
0
  if (!parentProto) {
794
0
    return;
795
0
  }
796
0
797
0
  JS::Rooted<JSObject*> constructorProto(aCx, JS::GetRealmFunctionPrototype(aCx));
798
0
  if (!constructorProto) {
799
0
    return;
800
0
  }
801
0
802
0
  static bool sIdsInited = false;
803
0
  if (!sIdsInited && NS_IsMainThread()) {
804
0
    if (!InitIds(aCx, sNativeProperties.Upcast())) {
805
0
      return;
806
0
    }
807
0
    sIdsInited = true;
808
0
  }
809
0
810
0
  JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::TreeColumn);
811
0
  JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::TreeColumn);
812
0
  dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
813
0
                              &sPrototypeClass.mBase, protoCache,
814
0
                              nullptr,
815
0
                              constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
816
0
                              interfaceCache,
817
0
                              sNativeProperties.Upcast(),
818
0
                              nullptr,
819
0
                              "TreeColumn", aDefineOnGlobal,
820
0
                              nullptr,
821
0
                              false);
822
0
}
823
824
JSObject*
825
GetConstructorObject(JSContext* aCx)
826
0
{
827
0
  return GetConstructorObjectHandle(aCx);
828
0
}
829
830
} // namespace TreeColumn_Binding
831
832
833
834
} // namespace dom
835
} // namespace mozilla