Line data Source code
1 : /* THIS FILE IS AUTOGENERATED FROM HTMLTableCellElement.webidl BY Codegen.py - DO NOT EDIT */
2 :
3 : #include "HTMLElementBinding.h"
4 : #include "HTMLTableCellElementBinding.h"
5 : #include "WrapperFactory.h"
6 : #include "mozilla/OwningNonNull.h"
7 : #include "mozilla/dom/BindingUtils.h"
8 : #include "mozilla/dom/CustomElementRegistry.h"
9 : #include "mozilla/dom/DOMJSClass.h"
10 : #include "mozilla/dom/HTMLTableCellElement.h"
11 : #include "mozilla/dom/NonRefcountedDOMObject.h"
12 : #include "mozilla/dom/PrimitiveConversions.h"
13 : #include "mozilla/dom/XrayExpandoClass.h"
14 :
15 : namespace mozilla {
16 : namespace dom {
17 :
18 : namespace HTMLTableCellElementBinding {
19 :
20 : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<HTMLElementBinding::NativeType>::value,
21 : "Can't inherit from an interface with a different ownership model.");
22 :
23 : static bool
24 0 : get_colSpan(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitGetterCallArgs args)
25 : {
26 0 : uint32_t result(self->ColSpan());
27 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
28 0 : args.rval().setNumber(result);
29 0 : return true;
30 : }
31 :
32 : static bool
33 0 : set_colSpan(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitSetterCallArgs args)
34 : {
35 : uint32_t arg0;
36 0 : if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
37 0 : return false;
38 : }
39 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
40 0 : Maybe<AutoCEReaction> ceReaction;
41 0 : if (reactionsStack) {
42 0 : ceReaction.emplace(reactionsStack);
43 : }
44 0 : binding_detail::FastErrorResult rv;
45 0 : self->SetColSpan(arg0, rv);
46 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
47 0 : return false;
48 : }
49 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
50 :
51 0 : return true;
52 : }
53 :
54 : static const JSJitInfo colSpan_getterinfo = {
55 : { (JSJitGetterOp)get_colSpan },
56 : { prototypes::id::HTMLTableCellElement },
57 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
58 : JSJitInfo::Getter,
59 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
60 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
61 : true, /* isInfallible. False in setters. */
62 : false, /* isMovable. Not relevant for setters. */
63 : false, /* isEliminatable. Not relevant for setters. */
64 : false, /* isAlwaysInSlot. Only relevant for getters. */
65 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
66 : false, /* isTypedMethod. Only relevant for methods. */
67 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
68 : };
69 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
70 : static_assert(0 < 1, "There is no slot for us");
71 : static const JSJitInfo colSpan_setterinfo = {
72 : { (JSJitGetterOp)set_colSpan },
73 : { prototypes::id::HTMLTableCellElement },
74 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
75 : JSJitInfo::Setter,
76 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
77 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
78 : false, /* isInfallible. False in setters. */
79 : false, /* isMovable. Not relevant for setters. */
80 : false, /* isEliminatable. Not relevant for setters. */
81 : false, /* isAlwaysInSlot. Only relevant for getters. */
82 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
83 : false, /* isTypedMethod. Only relevant for methods. */
84 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
85 : };
86 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
87 : static_assert(0 < 1, "There is no slot for us");
88 :
89 : static bool
90 0 : get_rowSpan(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitGetterCallArgs args)
91 : {
92 0 : uint32_t result(self->RowSpan());
93 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
94 0 : args.rval().setNumber(result);
95 0 : return true;
96 : }
97 :
98 : static bool
99 0 : set_rowSpan(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitSetterCallArgs args)
100 : {
101 : uint32_t arg0;
102 0 : if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
103 0 : return false;
104 : }
105 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
106 0 : Maybe<AutoCEReaction> ceReaction;
107 0 : if (reactionsStack) {
108 0 : ceReaction.emplace(reactionsStack);
109 : }
110 0 : binding_detail::FastErrorResult rv;
111 0 : self->SetRowSpan(arg0, rv);
112 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
113 0 : return false;
114 : }
115 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
116 :
117 0 : return true;
118 : }
119 :
120 : static const JSJitInfo rowSpan_getterinfo = {
121 : { (JSJitGetterOp)get_rowSpan },
122 : { prototypes::id::HTMLTableCellElement },
123 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
124 : JSJitInfo::Getter,
125 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
126 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
127 : true, /* isInfallible. False in setters. */
128 : false, /* isMovable. Not relevant for setters. */
129 : false, /* isEliminatable. Not relevant for setters. */
130 : false, /* isAlwaysInSlot. Only relevant for getters. */
131 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
132 : false, /* isTypedMethod. Only relevant for methods. */
133 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
134 : };
135 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
136 : static_assert(0 < 1, "There is no slot for us");
137 : static const JSJitInfo rowSpan_setterinfo = {
138 : { (JSJitGetterOp)set_rowSpan },
139 : { prototypes::id::HTMLTableCellElement },
140 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
141 : JSJitInfo::Setter,
142 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
143 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
144 : false, /* isInfallible. False in setters. */
145 : false, /* isMovable. Not relevant for setters. */
146 : false, /* isEliminatable. Not relevant for setters. */
147 : false, /* isAlwaysInSlot. Only relevant for getters. */
148 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
149 : false, /* isTypedMethod. Only relevant for methods. */
150 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
151 : };
152 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
153 : static_assert(0 < 1, "There is no slot for us");
154 :
155 : static bool
156 0 : get_headers(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitGetterCallArgs args)
157 : {
158 0 : DOMString result;
159 0 : self->GetHeaders(result);
160 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
161 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
162 0 : return false;
163 : }
164 0 : return true;
165 : }
166 :
167 : static bool
168 0 : set_headers(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitSetterCallArgs args)
169 : {
170 0 : binding_detail::FakeString arg0;
171 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
172 0 : return false;
173 : }
174 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
175 0 : Maybe<AutoCEReaction> ceReaction;
176 0 : if (reactionsStack) {
177 0 : ceReaction.emplace(reactionsStack);
178 : }
179 0 : binding_detail::FastErrorResult rv;
180 0 : self->SetHeaders(NonNullHelper(Constify(arg0)), rv);
181 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
182 0 : return false;
183 : }
184 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
185 :
186 0 : return true;
187 : }
188 :
189 : static const JSJitInfo headers_getterinfo = {
190 : { (JSJitGetterOp)get_headers },
191 : { prototypes::id::HTMLTableCellElement },
192 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
193 : JSJitInfo::Getter,
194 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
195 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
196 : false, /* isInfallible. False in setters. */
197 : false, /* isMovable. Not relevant for setters. */
198 : false, /* isEliminatable. Not relevant for setters. */
199 : false, /* isAlwaysInSlot. Only relevant for getters. */
200 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
201 : false, /* isTypedMethod. Only relevant for methods. */
202 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
203 : };
204 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
205 : static_assert(0 < 1, "There is no slot for us");
206 : static const JSJitInfo headers_setterinfo = {
207 : { (JSJitGetterOp)set_headers },
208 : { prototypes::id::HTMLTableCellElement },
209 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
210 : JSJitInfo::Setter,
211 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
212 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
213 : false, /* isInfallible. False in setters. */
214 : false, /* isMovable. Not relevant for setters. */
215 : false, /* isEliminatable. Not relevant for setters. */
216 : false, /* isAlwaysInSlot. Only relevant for getters. */
217 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
218 : false, /* isTypedMethod. Only relevant for methods. */
219 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
220 : };
221 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
222 : static_assert(0 < 1, "There is no slot for us");
223 :
224 : static bool
225 0 : get_cellIndex(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitGetterCallArgs args)
226 : {
227 0 : int32_t result(self->CellIndex());
228 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
229 0 : args.rval().setInt32(int32_t(result));
230 0 : return true;
231 : }
232 :
233 : static const JSJitInfo cellIndex_getterinfo = {
234 : { (JSJitGetterOp)get_cellIndex },
235 : { prototypes::id::HTMLTableCellElement },
236 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
237 : JSJitInfo::Getter,
238 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
239 : JSVAL_TYPE_INT32, /* returnType. Not relevant for setters. */
240 : true, /* isInfallible. False in setters. */
241 : false, /* isMovable. Not relevant for setters. */
242 : false, /* isEliminatable. Not relevant for setters. */
243 : false, /* isAlwaysInSlot. Only relevant for getters. */
244 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
245 : false, /* isTypedMethod. Only relevant for methods. */
246 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
247 : };
248 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
249 : static_assert(0 < 1, "There is no slot for us");
250 :
251 : static bool
252 0 : get_abbr(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitGetterCallArgs args)
253 : {
254 0 : DOMString result;
255 0 : self->GetAbbr(result);
256 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
257 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
258 0 : return false;
259 : }
260 0 : return true;
261 : }
262 :
263 : static bool
264 0 : set_abbr(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitSetterCallArgs args)
265 : {
266 0 : binding_detail::FakeString arg0;
267 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
268 0 : return false;
269 : }
270 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
271 0 : Maybe<AutoCEReaction> ceReaction;
272 0 : if (reactionsStack) {
273 0 : ceReaction.emplace(reactionsStack);
274 : }
275 0 : binding_detail::FastErrorResult rv;
276 0 : self->SetAbbr(NonNullHelper(Constify(arg0)), rv);
277 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
278 0 : return false;
279 : }
280 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
281 :
282 0 : return true;
283 : }
284 :
285 : static const JSJitInfo abbr_getterinfo = {
286 : { (JSJitGetterOp)get_abbr },
287 : { prototypes::id::HTMLTableCellElement },
288 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
289 : JSJitInfo::Getter,
290 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
291 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
292 : false, /* isInfallible. False in setters. */
293 : false, /* isMovable. Not relevant for setters. */
294 : false, /* isEliminatable. Not relevant for setters. */
295 : false, /* isAlwaysInSlot. Only relevant for getters. */
296 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
297 : false, /* isTypedMethod. Only relevant for methods. */
298 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
299 : };
300 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
301 : static_assert(0 < 1, "There is no slot for us");
302 : static const JSJitInfo abbr_setterinfo = {
303 : { (JSJitGetterOp)set_abbr },
304 : { prototypes::id::HTMLTableCellElement },
305 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
306 : JSJitInfo::Setter,
307 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
308 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
309 : false, /* isInfallible. False in setters. */
310 : false, /* isMovable. Not relevant for setters. */
311 : false, /* isEliminatable. Not relevant for setters. */
312 : false, /* isAlwaysInSlot. Only relevant for getters. */
313 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
314 : false, /* isTypedMethod. Only relevant for methods. */
315 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
316 : };
317 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
318 : static_assert(0 < 1, "There is no slot for us");
319 :
320 : static bool
321 0 : get_scope(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitGetterCallArgs args)
322 : {
323 0 : DOMString result;
324 0 : self->GetScope(result);
325 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
326 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
327 0 : return false;
328 : }
329 0 : return true;
330 : }
331 :
332 : static bool
333 0 : set_scope(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitSetterCallArgs args)
334 : {
335 0 : binding_detail::FakeString arg0;
336 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
337 0 : return false;
338 : }
339 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
340 0 : Maybe<AutoCEReaction> ceReaction;
341 0 : if (reactionsStack) {
342 0 : ceReaction.emplace(reactionsStack);
343 : }
344 0 : binding_detail::FastErrorResult rv;
345 0 : self->SetScope(NonNullHelper(Constify(arg0)), rv);
346 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
347 0 : return false;
348 : }
349 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
350 :
351 0 : return true;
352 : }
353 :
354 : static const JSJitInfo scope_getterinfo = {
355 : { (JSJitGetterOp)get_scope },
356 : { prototypes::id::HTMLTableCellElement },
357 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
358 : JSJitInfo::Getter,
359 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
360 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
361 : false, /* isInfallible. False in setters. */
362 : false, /* isMovable. Not relevant for setters. */
363 : false, /* isEliminatable. Not relevant for setters. */
364 : false, /* isAlwaysInSlot. Only relevant for getters. */
365 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
366 : false, /* isTypedMethod. Only relevant for methods. */
367 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
368 : };
369 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
370 : static_assert(0 < 1, "There is no slot for us");
371 : static const JSJitInfo scope_setterinfo = {
372 : { (JSJitGetterOp)set_scope },
373 : { prototypes::id::HTMLTableCellElement },
374 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
375 : JSJitInfo::Setter,
376 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
377 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
378 : false, /* isInfallible. False in setters. */
379 : false, /* isMovable. Not relevant for setters. */
380 : false, /* isEliminatable. Not relevant for setters. */
381 : false, /* isAlwaysInSlot. Only relevant for getters. */
382 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
383 : false, /* isTypedMethod. Only relevant for methods. */
384 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
385 : };
386 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
387 : static_assert(0 < 1, "There is no slot for us");
388 :
389 : static bool
390 0 : get_align(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitGetterCallArgs args)
391 : {
392 0 : DOMString result;
393 0 : self->GetAlign(result);
394 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
395 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
396 0 : return false;
397 : }
398 0 : return true;
399 : }
400 :
401 : static bool
402 0 : set_align(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitSetterCallArgs args)
403 : {
404 0 : binding_detail::FakeString arg0;
405 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
406 0 : return false;
407 : }
408 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
409 0 : Maybe<AutoCEReaction> ceReaction;
410 0 : if (reactionsStack) {
411 0 : ceReaction.emplace(reactionsStack);
412 : }
413 0 : binding_detail::FastErrorResult rv;
414 0 : self->SetAlign(NonNullHelper(Constify(arg0)), rv);
415 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
416 0 : return false;
417 : }
418 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
419 :
420 0 : return true;
421 : }
422 :
423 : static const JSJitInfo align_getterinfo = {
424 : { (JSJitGetterOp)get_align },
425 : { prototypes::id::HTMLTableCellElement },
426 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
427 : JSJitInfo::Getter,
428 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
429 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
430 : false, /* isInfallible. False in setters. */
431 : false, /* isMovable. Not relevant for setters. */
432 : false, /* isEliminatable. Not relevant for setters. */
433 : false, /* isAlwaysInSlot. Only relevant for getters. */
434 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
435 : false, /* isTypedMethod. Only relevant for methods. */
436 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
437 : };
438 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
439 : static_assert(0 < 1, "There is no slot for us");
440 : static const JSJitInfo align_setterinfo = {
441 : { (JSJitGetterOp)set_align },
442 : { prototypes::id::HTMLTableCellElement },
443 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
444 : JSJitInfo::Setter,
445 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
446 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
447 : false, /* isInfallible. False in setters. */
448 : false, /* isMovable. Not relevant for setters. */
449 : false, /* isEliminatable. Not relevant for setters. */
450 : false, /* isAlwaysInSlot. Only relevant for getters. */
451 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
452 : false, /* isTypedMethod. Only relevant for methods. */
453 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
454 : };
455 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
456 : static_assert(0 < 1, "There is no slot for us");
457 :
458 : static bool
459 0 : get_axis(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitGetterCallArgs args)
460 : {
461 0 : DOMString result;
462 0 : self->GetAxis(result);
463 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
464 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
465 0 : return false;
466 : }
467 0 : return true;
468 : }
469 :
470 : static bool
471 0 : set_axis(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitSetterCallArgs args)
472 : {
473 0 : binding_detail::FakeString arg0;
474 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
475 0 : return false;
476 : }
477 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
478 0 : Maybe<AutoCEReaction> ceReaction;
479 0 : if (reactionsStack) {
480 0 : ceReaction.emplace(reactionsStack);
481 : }
482 0 : binding_detail::FastErrorResult rv;
483 0 : self->SetAxis(NonNullHelper(Constify(arg0)), rv);
484 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
485 0 : return false;
486 : }
487 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
488 :
489 0 : return true;
490 : }
491 :
492 : static const JSJitInfo axis_getterinfo = {
493 : { (JSJitGetterOp)get_axis },
494 : { prototypes::id::HTMLTableCellElement },
495 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
496 : JSJitInfo::Getter,
497 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
498 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
499 : false, /* isInfallible. False in setters. */
500 : false, /* isMovable. Not relevant for setters. */
501 : false, /* isEliminatable. Not relevant for setters. */
502 : false, /* isAlwaysInSlot. Only relevant for getters. */
503 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
504 : false, /* isTypedMethod. Only relevant for methods. */
505 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
506 : };
507 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
508 : static_assert(0 < 1, "There is no slot for us");
509 : static const JSJitInfo axis_setterinfo = {
510 : { (JSJitGetterOp)set_axis },
511 : { prototypes::id::HTMLTableCellElement },
512 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
513 : JSJitInfo::Setter,
514 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
515 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
516 : false, /* isInfallible. False in setters. */
517 : false, /* isMovable. Not relevant for setters. */
518 : false, /* isEliminatable. Not relevant for setters. */
519 : false, /* isAlwaysInSlot. Only relevant for getters. */
520 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
521 : false, /* isTypedMethod. Only relevant for methods. */
522 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
523 : };
524 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
525 : static_assert(0 < 1, "There is no slot for us");
526 :
527 : static bool
528 0 : get_height(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitGetterCallArgs args)
529 : {
530 0 : DOMString result;
531 0 : self->GetHeight(result);
532 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
533 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
534 0 : return false;
535 : }
536 0 : return true;
537 : }
538 :
539 : static bool
540 0 : set_height(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitSetterCallArgs args)
541 : {
542 0 : binding_detail::FakeString arg0;
543 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
544 0 : return false;
545 : }
546 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
547 0 : Maybe<AutoCEReaction> ceReaction;
548 0 : if (reactionsStack) {
549 0 : ceReaction.emplace(reactionsStack);
550 : }
551 0 : binding_detail::FastErrorResult rv;
552 0 : self->SetHeight(NonNullHelper(Constify(arg0)), rv);
553 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
554 0 : return false;
555 : }
556 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
557 :
558 0 : return true;
559 : }
560 :
561 : static const JSJitInfo height_getterinfo = {
562 : { (JSJitGetterOp)get_height },
563 : { prototypes::id::HTMLTableCellElement },
564 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
565 : JSJitInfo::Getter,
566 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
567 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
568 : false, /* isInfallible. False in setters. */
569 : false, /* isMovable. Not relevant for setters. */
570 : false, /* isEliminatable. Not relevant for setters. */
571 : false, /* isAlwaysInSlot. Only relevant for getters. */
572 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
573 : false, /* isTypedMethod. Only relevant for methods. */
574 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
575 : };
576 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
577 : static_assert(0 < 1, "There is no slot for us");
578 : static const JSJitInfo height_setterinfo = {
579 : { (JSJitGetterOp)set_height },
580 : { prototypes::id::HTMLTableCellElement },
581 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
582 : JSJitInfo::Setter,
583 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
584 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
585 : false, /* isInfallible. False in setters. */
586 : false, /* isMovable. Not relevant for setters. */
587 : false, /* isEliminatable. Not relevant for setters. */
588 : false, /* isAlwaysInSlot. Only relevant for getters. */
589 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
590 : false, /* isTypedMethod. Only relevant for methods. */
591 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
592 : };
593 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
594 : static_assert(0 < 1, "There is no slot for us");
595 :
596 : static bool
597 0 : get_width(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitGetterCallArgs args)
598 : {
599 0 : DOMString result;
600 0 : self->GetWidth(result);
601 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
602 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
603 0 : return false;
604 : }
605 0 : return true;
606 : }
607 :
608 : static bool
609 0 : set_width(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitSetterCallArgs args)
610 : {
611 0 : binding_detail::FakeString arg0;
612 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
613 0 : return false;
614 : }
615 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
616 0 : Maybe<AutoCEReaction> ceReaction;
617 0 : if (reactionsStack) {
618 0 : ceReaction.emplace(reactionsStack);
619 : }
620 0 : binding_detail::FastErrorResult rv;
621 0 : self->SetWidth(NonNullHelper(Constify(arg0)), rv);
622 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
623 0 : return false;
624 : }
625 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
626 :
627 0 : return true;
628 : }
629 :
630 : static const JSJitInfo width_getterinfo = {
631 : { (JSJitGetterOp)get_width },
632 : { prototypes::id::HTMLTableCellElement },
633 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
634 : JSJitInfo::Getter,
635 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
636 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
637 : false, /* isInfallible. False in setters. */
638 : false, /* isMovable. Not relevant for setters. */
639 : false, /* isEliminatable. Not relevant for setters. */
640 : false, /* isAlwaysInSlot. Only relevant for getters. */
641 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
642 : false, /* isTypedMethod. Only relevant for methods. */
643 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
644 : };
645 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
646 : static_assert(0 < 1, "There is no slot for us");
647 : static const JSJitInfo width_setterinfo = {
648 : { (JSJitGetterOp)set_width },
649 : { prototypes::id::HTMLTableCellElement },
650 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
651 : JSJitInfo::Setter,
652 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
653 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
654 : false, /* isInfallible. False in setters. */
655 : false, /* isMovable. Not relevant for setters. */
656 : false, /* isEliminatable. Not relevant for setters. */
657 : false, /* isAlwaysInSlot. Only relevant for getters. */
658 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
659 : false, /* isTypedMethod. Only relevant for methods. */
660 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
661 : };
662 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
663 : static_assert(0 < 1, "There is no slot for us");
664 :
665 : static bool
666 0 : get_ch(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitGetterCallArgs args)
667 : {
668 0 : DOMString result;
669 0 : self->GetCh(result);
670 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
671 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
672 0 : return false;
673 : }
674 0 : return true;
675 : }
676 :
677 : static bool
678 0 : set_ch(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitSetterCallArgs args)
679 : {
680 0 : binding_detail::FakeString arg0;
681 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
682 0 : return false;
683 : }
684 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
685 0 : Maybe<AutoCEReaction> ceReaction;
686 0 : if (reactionsStack) {
687 0 : ceReaction.emplace(reactionsStack);
688 : }
689 0 : binding_detail::FastErrorResult rv;
690 0 : self->SetCh(NonNullHelper(Constify(arg0)), rv);
691 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
692 0 : return false;
693 : }
694 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
695 :
696 0 : return true;
697 : }
698 :
699 : static const JSJitInfo ch_getterinfo = {
700 : { (JSJitGetterOp)get_ch },
701 : { prototypes::id::HTMLTableCellElement },
702 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
703 : JSJitInfo::Getter,
704 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
705 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
706 : false, /* isInfallible. False in setters. */
707 : false, /* isMovable. Not relevant for setters. */
708 : false, /* isEliminatable. Not relevant for setters. */
709 : false, /* isAlwaysInSlot. Only relevant for getters. */
710 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
711 : false, /* isTypedMethod. Only relevant for methods. */
712 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
713 : };
714 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
715 : static_assert(0 < 1, "There is no slot for us");
716 : static const JSJitInfo ch_setterinfo = {
717 : { (JSJitGetterOp)set_ch },
718 : { prototypes::id::HTMLTableCellElement },
719 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
720 : JSJitInfo::Setter,
721 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
722 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
723 : false, /* isInfallible. False in setters. */
724 : false, /* isMovable. Not relevant for setters. */
725 : false, /* isEliminatable. Not relevant for setters. */
726 : false, /* isAlwaysInSlot. Only relevant for getters. */
727 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
728 : false, /* isTypedMethod. Only relevant for methods. */
729 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
730 : };
731 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
732 : static_assert(0 < 1, "There is no slot for us");
733 :
734 : static bool
735 0 : get_chOff(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitGetterCallArgs args)
736 : {
737 0 : DOMString result;
738 0 : self->GetChOff(result);
739 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
740 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
741 0 : return false;
742 : }
743 0 : return true;
744 : }
745 :
746 : static bool
747 0 : set_chOff(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitSetterCallArgs args)
748 : {
749 0 : binding_detail::FakeString arg0;
750 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
751 0 : return false;
752 : }
753 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
754 0 : Maybe<AutoCEReaction> ceReaction;
755 0 : if (reactionsStack) {
756 0 : ceReaction.emplace(reactionsStack);
757 : }
758 0 : binding_detail::FastErrorResult rv;
759 0 : self->SetChOff(NonNullHelper(Constify(arg0)), rv);
760 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
761 0 : return false;
762 : }
763 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
764 :
765 0 : return true;
766 : }
767 :
768 : static const JSJitInfo chOff_getterinfo = {
769 : { (JSJitGetterOp)get_chOff },
770 : { prototypes::id::HTMLTableCellElement },
771 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
772 : JSJitInfo::Getter,
773 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
774 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
775 : false, /* isInfallible. False in setters. */
776 : false, /* isMovable. Not relevant for setters. */
777 : false, /* isEliminatable. Not relevant for setters. */
778 : false, /* isAlwaysInSlot. Only relevant for getters. */
779 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
780 : false, /* isTypedMethod. Only relevant for methods. */
781 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
782 : };
783 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
784 : static_assert(0 < 1, "There is no slot for us");
785 : static const JSJitInfo chOff_setterinfo = {
786 : { (JSJitGetterOp)set_chOff },
787 : { prototypes::id::HTMLTableCellElement },
788 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
789 : JSJitInfo::Setter,
790 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
791 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
792 : false, /* isInfallible. False in setters. */
793 : false, /* isMovable. Not relevant for setters. */
794 : false, /* isEliminatable. Not relevant for setters. */
795 : false, /* isAlwaysInSlot. Only relevant for getters. */
796 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
797 : false, /* isTypedMethod. Only relevant for methods. */
798 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
799 : };
800 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
801 : static_assert(0 < 1, "There is no slot for us");
802 :
803 : static bool
804 0 : get_noWrap(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitGetterCallArgs args)
805 : {
806 0 : bool result(self->NoWrap());
807 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
808 0 : args.rval().setBoolean(result);
809 0 : return true;
810 : }
811 :
812 : static bool
813 0 : set_noWrap(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitSetterCallArgs args)
814 : {
815 : bool arg0;
816 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
817 0 : return false;
818 : }
819 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
820 0 : Maybe<AutoCEReaction> ceReaction;
821 0 : if (reactionsStack) {
822 0 : ceReaction.emplace(reactionsStack);
823 : }
824 0 : binding_detail::FastErrorResult rv;
825 0 : self->SetNoWrap(arg0, rv);
826 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
827 0 : return false;
828 : }
829 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
830 :
831 0 : return true;
832 : }
833 :
834 : static const JSJitInfo noWrap_getterinfo = {
835 : { (JSJitGetterOp)get_noWrap },
836 : { prototypes::id::HTMLTableCellElement },
837 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
838 : JSJitInfo::Getter,
839 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
840 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
841 : true, /* isInfallible. False in setters. */
842 : false, /* isMovable. Not relevant for setters. */
843 : false, /* isEliminatable. Not relevant for setters. */
844 : false, /* isAlwaysInSlot. Only relevant for getters. */
845 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
846 : false, /* isTypedMethod. Only relevant for methods. */
847 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
848 : };
849 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
850 : static_assert(0 < 1, "There is no slot for us");
851 : static const JSJitInfo noWrap_setterinfo = {
852 : { (JSJitGetterOp)set_noWrap },
853 : { prototypes::id::HTMLTableCellElement },
854 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
855 : JSJitInfo::Setter,
856 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
857 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
858 : false, /* isInfallible. False in setters. */
859 : false, /* isMovable. Not relevant for setters. */
860 : false, /* isEliminatable. Not relevant for setters. */
861 : false, /* isAlwaysInSlot. Only relevant for getters. */
862 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
863 : false, /* isTypedMethod. Only relevant for methods. */
864 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
865 : };
866 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
867 : static_assert(0 < 1, "There is no slot for us");
868 :
869 : static bool
870 0 : get_vAlign(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitGetterCallArgs args)
871 : {
872 0 : DOMString result;
873 0 : self->GetVAlign(result);
874 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
875 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
876 0 : return false;
877 : }
878 0 : return true;
879 : }
880 :
881 : static bool
882 0 : set_vAlign(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitSetterCallArgs args)
883 : {
884 0 : binding_detail::FakeString arg0;
885 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
886 0 : return false;
887 : }
888 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
889 0 : Maybe<AutoCEReaction> ceReaction;
890 0 : if (reactionsStack) {
891 0 : ceReaction.emplace(reactionsStack);
892 : }
893 0 : binding_detail::FastErrorResult rv;
894 0 : self->SetVAlign(NonNullHelper(Constify(arg0)), rv);
895 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
896 0 : return false;
897 : }
898 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
899 :
900 0 : return true;
901 : }
902 :
903 : static const JSJitInfo vAlign_getterinfo = {
904 : { (JSJitGetterOp)get_vAlign },
905 : { prototypes::id::HTMLTableCellElement },
906 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
907 : JSJitInfo::Getter,
908 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
909 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
910 : false, /* isInfallible. False in setters. */
911 : false, /* isMovable. Not relevant for setters. */
912 : false, /* isEliminatable. Not relevant for setters. */
913 : false, /* isAlwaysInSlot. Only relevant for getters. */
914 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
915 : false, /* isTypedMethod. Only relevant for methods. */
916 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
917 : };
918 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
919 : static_assert(0 < 1, "There is no slot for us");
920 : static const JSJitInfo vAlign_setterinfo = {
921 : { (JSJitGetterOp)set_vAlign },
922 : { prototypes::id::HTMLTableCellElement },
923 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
924 : JSJitInfo::Setter,
925 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
926 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
927 : false, /* isInfallible. False in setters. */
928 : false, /* isMovable. Not relevant for setters. */
929 : false, /* isEliminatable. Not relevant for setters. */
930 : false, /* isAlwaysInSlot. Only relevant for getters. */
931 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
932 : false, /* isTypedMethod. Only relevant for methods. */
933 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
934 : };
935 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
936 : static_assert(0 < 1, "There is no slot for us");
937 :
938 : static bool
939 0 : get_bgColor(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitGetterCallArgs args)
940 : {
941 0 : DOMString result;
942 0 : self->GetBgColor(result);
943 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
944 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
945 0 : return false;
946 : }
947 0 : return true;
948 : }
949 :
950 : static bool
951 0 : set_bgColor(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLTableCellElement* self, JSJitSetterCallArgs args)
952 : {
953 0 : binding_detail::FakeString arg0;
954 0 : if (!ConvertJSValueToString(cx, args[0], eEmpty, eStringify, arg0)) {
955 0 : return false;
956 : }
957 0 : CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
958 0 : Maybe<AutoCEReaction> ceReaction;
959 0 : if (reactionsStack) {
960 0 : ceReaction.emplace(reactionsStack);
961 : }
962 0 : binding_detail::FastErrorResult rv;
963 0 : self->SetBgColor(NonNullHelper(Constify(arg0)), rv);
964 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
965 0 : return false;
966 : }
967 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
968 :
969 0 : return true;
970 : }
971 :
972 : static const JSJitInfo bgColor_getterinfo = {
973 : { (JSJitGetterOp)get_bgColor },
974 : { prototypes::id::HTMLTableCellElement },
975 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
976 : JSJitInfo::Getter,
977 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
978 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
979 : false, /* isInfallible. False in setters. */
980 : false, /* isMovable. Not relevant for setters. */
981 : false, /* isEliminatable. Not relevant for setters. */
982 : false, /* isAlwaysInSlot. Only relevant for getters. */
983 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
984 : false, /* isTypedMethod. Only relevant for methods. */
985 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
986 : };
987 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
988 : static_assert(0 < 1, "There is no slot for us");
989 : static const JSJitInfo bgColor_setterinfo = {
990 : { (JSJitGetterOp)set_bgColor },
991 : { prototypes::id::HTMLTableCellElement },
992 : { PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth },
993 : JSJitInfo::Setter,
994 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
995 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
996 : false, /* isInfallible. False in setters. */
997 : false, /* isMovable. Not relevant for setters. */
998 : false, /* isEliminatable. Not relevant for setters. */
999 : false, /* isAlwaysInSlot. Only relevant for getters. */
1000 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
1001 : false, /* isTypedMethod. Only relevant for methods. */
1002 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
1003 : };
1004 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
1005 : static_assert(0 < 1, "There is no slot for us");
1006 :
1007 : static bool
1008 0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
1009 : {
1010 0 : mozilla::dom::HTMLTableCellElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLTableCellElement>(obj);
1011 : // We don't want to preserve if we don't have a wrapper, and we
1012 : // obviously can't preserve if we're not initialized.
1013 0 : if (self && self->GetWrapperPreserveColor()) {
1014 0 : PreserveWrapper(self);
1015 : }
1016 0 : return true;
1017 : }
1018 :
1019 : static void
1020 0 : _finalize(js::FreeOp* fop, JSObject* obj)
1021 : {
1022 0 : mozilla::dom::HTMLTableCellElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLTableCellElement>(obj);
1023 0 : if (self) {
1024 0 : ClearWrapper(self, self, obj);
1025 0 : AddForDeferredFinalization<mozilla::dom::HTMLTableCellElement>(self);
1026 : }
1027 0 : }
1028 :
1029 : static void
1030 0 : _objectMoved(JSObject* obj, const JSObject* old)
1031 : {
1032 0 : mozilla::dom::HTMLTableCellElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLTableCellElement>(obj);
1033 0 : if (self) {
1034 0 : UpdateWrapper(self, self, obj, old);
1035 : }
1036 0 : }
1037 :
1038 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
1039 : #if defined(__clang__)
1040 : #pragma clang diagnostic push
1041 : #pragma clang diagnostic ignored "-Wmissing-braces"
1042 : #endif
1043 : static const JSPropertySpec sAttributes_specs[] = {
1044 : { "colSpan", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &colSpan_getterinfo, GenericBindingSetter, &colSpan_setterinfo },
1045 : { "rowSpan", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &rowSpan_getterinfo, GenericBindingSetter, &rowSpan_setterinfo },
1046 : { "headers", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &headers_getterinfo, GenericBindingSetter, &headers_setterinfo },
1047 : { "cellIndex", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &cellIndex_getterinfo, nullptr, nullptr },
1048 : { "abbr", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &abbr_getterinfo, GenericBindingSetter, &abbr_setterinfo },
1049 : { "scope", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &scope_getterinfo, GenericBindingSetter, &scope_setterinfo },
1050 : { "align", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &align_getterinfo, GenericBindingSetter, &align_setterinfo },
1051 : { "axis", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &axis_getterinfo, GenericBindingSetter, &axis_setterinfo },
1052 : { "height", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &height_getterinfo, GenericBindingSetter, &height_setterinfo },
1053 : { "width", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &width_getterinfo, GenericBindingSetter, &width_setterinfo },
1054 : { "ch", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ch_getterinfo, GenericBindingSetter, &ch_setterinfo },
1055 : { "chOff", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &chOff_getterinfo, GenericBindingSetter, &chOff_setterinfo },
1056 : { "noWrap", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &noWrap_getterinfo, GenericBindingSetter, &noWrap_setterinfo },
1057 : { "vAlign", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &vAlign_getterinfo, GenericBindingSetter, &vAlign_setterinfo },
1058 : { "bgColor", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &bgColor_getterinfo, GenericBindingSetter, &bgColor_setterinfo },
1059 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
1060 : };
1061 : #if defined(__clang__)
1062 : #pragma clang diagnostic pop
1063 : #endif
1064 :
1065 :
1066 : // Can't be const because the pref-enabled boolean needs to be writable
1067 : static Prefable<const JSPropertySpec> sAttributes[] = {
1068 : { nullptr, &sAttributes_specs[0] },
1069 : { nullptr, nullptr }
1070 : };
1071 :
1072 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
1073 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
1074 : static_assert(15 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
1075 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
1076 :
1077 :
1078 : static uint16_t sNativeProperties_sortedPropertyIndices[15];
1079 : static PropertyInfo sNativeProperties_propertyInfos[15];
1080 :
1081 : static const NativePropertiesN<1> sNativeProperties = {
1082 : false, 0,
1083 : false, 0,
1084 : false, 0,
1085 : true, 0 /* sAttributes */,
1086 : false, 0,
1087 : false, 0,
1088 : false, 0,
1089 : -1,
1090 : 15,
1091 : sNativeProperties_sortedPropertyIndices,
1092 : {
1093 : { sAttributes, &sNativeProperties_propertyInfos[0] }
1094 : }
1095 : };
1096 : static_assert(15 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
1097 : "We have a property info count that is oversized");
1098 :
1099 : static bool
1100 0 : _constructor(JSContext* cx, unsigned argc, JS::Value* vp)
1101 : {
1102 0 : JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
1103 0 : JS::Rooted<JSObject*> obj(cx, &args.callee());
1104 0 : if (!args.isConstructing()) {
1105 : // XXXbz wish I could get the name from the callee instead of
1106 : // Adding more relocations
1107 0 : return ThrowConstructorWithoutNew(cx, "HTMLTableCellElement");
1108 : }
1109 :
1110 0 : GlobalObject global(cx, obj);
1111 0 : if (global.Failed()) {
1112 0 : return false;
1113 : }
1114 :
1115 : // The newTarget might be a cross-compartment wrapper. Get the underlying object
1116 : // so we can do the spec's object-identity checks.
1117 0 : JS::Rooted<JSObject*> newTarget(cx, js::CheckedUnwrap(&args.newTarget().toObject()));
1118 0 : if (!newTarget) {
1119 0 : return ThrowErrorMessage(cx, MSG_ILLEGAL_CONSTRUCTOR);
1120 : }
1121 :
1122 : // Step 2 of https://html.spec.whatwg.org/multipage/dom.html#htmlconstructor.
1123 : // Enter the compartment of our underlying newTarget object, so we end
1124 : // up comparing to the constructor object for our interface from that global.
1125 : {
1126 0 : JSAutoCompartment ac(cx, newTarget);
1127 0 : JS::Handle<JSObject*> constructor(GetConstructorObjectHandle(cx));
1128 0 : if (!constructor) {
1129 0 : return false;
1130 : }
1131 0 : if (newTarget == constructor) {
1132 0 : return ThrowErrorMessage(cx, MSG_ILLEGAL_CONSTRUCTOR);
1133 : }
1134 : }
1135 :
1136 0 : JS::Rooted<JSObject*> desiredProto(cx);
1137 0 : if (!GetDesiredProto(cx, args, &desiredProto)) {
1138 0 : return false;
1139 : }
1140 0 : if (!desiredProto) {
1141 : // Step 7 of https://html.spec.whatwg.org/multipage/dom.html#htmlconstructor.
1142 : // This fallback behavior is designed to match analogous behavior for the
1143 : // JavaScript built-ins. So we enter the compartment of our underlying
1144 : // newTarget object and fall back to the prototype object from that global.
1145 : // XXX The spec says to use GetFunctionRealm(), which is not actually
1146 : // the same thing as what we have here (e.g. in the case of scripted callable proxies
1147 : // whose target is not same-compartment with the proxy, or bound functions, etc).
1148 : // https://bugzilla.mozilla.org/show_bug.cgi?id=1317658
1149 : {
1150 0 : JSAutoCompartment ac(cx, newTarget);
1151 0 : desiredProto = GetProtoObjectHandle(cx);
1152 0 : if (!desiredProto) {
1153 0 : return false;
1154 : }
1155 : }
1156 :
1157 : // desiredProto is in the compartment of the underlying newTarget object.
1158 : // Wrap it into the context compartment.
1159 0 : if (!JS_WrapObject(cx, &desiredProto)) {
1160 0 : return false;
1161 : }
1162 : }
1163 :
1164 0 : bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj);
1165 0 : Maybe<JSAutoCompartment> ac;
1166 0 : if (objIsXray) {
1167 0 : obj = js::CheckedUnwrap(obj);
1168 0 : if (!obj) {
1169 0 : return false;
1170 : }
1171 0 : ac.emplace(cx, obj);
1172 0 : if (!JS_WrapObject(cx, &desiredProto)) {
1173 0 : return false;
1174 : }
1175 : }
1176 0 : binding_detail::FastErrorResult rv;
1177 0 : auto result(StrongOrRawPtr<mozilla::dom::HTMLTableCellElement>(CreateHTMLElement(global, args, rv)));
1178 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
1179 0 : return false;
1180 : }
1181 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
1182 : static_assert(!IsPointer<decltype(result)>::value,
1183 : "NewObject implies that we need to keep the object alive with a strong reference.");
1184 0 : if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) {
1185 0 : MOZ_ASSERT(true || JS_IsExceptionPending(cx));
1186 0 : return false;
1187 : }
1188 0 : return true;
1189 : }
1190 :
1191 : static const js::ClassOps sInterfaceObjectClassOps = {
1192 : nullptr, /* addProperty */
1193 : nullptr, /* delProperty */
1194 : nullptr, /* getProperty */
1195 : nullptr, /* setProperty */
1196 : nullptr, /* enumerate */
1197 : nullptr, /* newEnumerate */
1198 : nullptr, /* resolve */
1199 : nullptr, /* mayResolve */
1200 : nullptr, /* finalize */
1201 : _constructor, /* call */
1202 : nullptr, /* hasInstance */
1203 : _constructor, /* construct */
1204 : nullptr, /* trace */
1205 : };
1206 :
1207 : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
1208 : {
1209 : "Function",
1210 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
1211 : &sInterfaceObjectClassOps,
1212 : JS_NULL_CLASS_SPEC,
1213 : JS_NULL_CLASS_EXT,
1214 : &sInterfaceObjectClassObjectOps
1215 : },
1216 : eInterface,
1217 : true,
1218 : prototypes::id::HTMLTableCellElement,
1219 : PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth,
1220 : sNativePropertyHooks,
1221 : "function HTMLTableCellElement() {\n [native code]\n}",
1222 : HTMLElementBinding::GetConstructorObject
1223 : };
1224 :
1225 : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
1226 : {
1227 : "HTMLTableCellElementPrototype",
1228 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
1229 : JS_NULL_CLASS_OPS,
1230 : JS_NULL_CLASS_SPEC,
1231 : JS_NULL_CLASS_EXT,
1232 : JS_NULL_OBJECT_OPS
1233 : },
1234 : eInterfacePrototype,
1235 : false,
1236 : prototypes::id::HTMLTableCellElement,
1237 : PrototypeTraits<prototypes::id::HTMLTableCellElement>::Depth,
1238 : sNativePropertyHooks,
1239 : "[object HTMLTableCellElementPrototype]",
1240 : HTMLElementBinding::GetProtoObject
1241 : };
1242 :
1243 : JSObject*
1244 0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
1245 : {
1246 0 : return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
1247 : }
1248 :
1249 : static const js::ClassOps sClassOps = {
1250 : _addProperty, /* addProperty */
1251 : nullptr, /* delProperty */
1252 : nullptr, /* getProperty */
1253 : nullptr, /* setProperty */
1254 : nullptr, /* enumerate */
1255 : nullptr, /* newEnumerate */
1256 : nullptr, /* resolve */
1257 : nullptr, /* mayResolve */
1258 : _finalize, /* finalize */
1259 : nullptr, /* call */
1260 : nullptr, /* hasInstance */
1261 : nullptr, /* construct */
1262 : nullptr, /* trace */
1263 : };
1264 :
1265 : static const js::ClassExtension sClassExtension = {
1266 : nullptr, /* weakmapKeyDelegateOp */
1267 : _objectMoved /* objectMovedOp */
1268 : };
1269 :
1270 : static const DOMJSClass sClass = {
1271 : { "HTMLTableCellElement",
1272 : JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
1273 : &sClassOps,
1274 : JS_NULL_CLASS_SPEC,
1275 : &sClassExtension,
1276 : JS_NULL_OBJECT_OPS
1277 : },
1278 : { prototypes::id::EventTarget, prototypes::id::Node, prototypes::id::Element, prototypes::id::HTMLElement, prototypes::id::HTMLTableCellElement, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
1279 : IsBaseOf<nsISupports, mozilla::dom::HTMLTableCellElement >::value,
1280 : sNativePropertyHooks,
1281 : FindAssociatedGlobalForNative<mozilla::dom::HTMLTableCellElement>::Get,
1282 : GetProtoObjectHandle,
1283 : GetCCParticipant<mozilla::dom::HTMLTableCellElement>::Get()
1284 : };
1285 : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
1286 : "Must have the right minimal number of reserved slots.");
1287 : static_assert(1 >= 1,
1288 : "Must have enough reserved slots.");
1289 :
1290 : const JSClass*
1291 0 : GetJSClass()
1292 : {
1293 0 : return sClass.ToJSClass();
1294 : }
1295 :
1296 : bool
1297 0 : Wrap(JSContext* aCx, mozilla::dom::HTMLTableCellElement* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
1298 : {
1299 : MOZ_ASSERT(static_cast<mozilla::dom::HTMLTableCellElement*>(aObject) ==
1300 : reinterpret_cast<mozilla::dom::HTMLTableCellElement*>(aObject),
1301 : "Multiple inheritance for mozilla::dom::HTMLTableCellElement is broken.");
1302 : MOZ_ASSERT(static_cast<nsGenericHTMLElement*>(aObject) ==
1303 : reinterpret_cast<nsGenericHTMLElement*>(aObject),
1304 : "Multiple inheritance for nsGenericHTMLElement is broken.");
1305 : MOZ_ASSERT(static_cast<mozilla::dom::Element*>(aObject) ==
1306 : reinterpret_cast<mozilla::dom::Element*>(aObject),
1307 : "Multiple inheritance for mozilla::dom::Element is broken.");
1308 : MOZ_ASSERT(static_cast<nsINode*>(aObject) ==
1309 : reinterpret_cast<nsINode*>(aObject),
1310 : "Multiple inheritance for nsINode is broken.");
1311 : MOZ_ASSERT(static_cast<mozilla::dom::EventTarget*>(aObject) ==
1312 : reinterpret_cast<mozilla::dom::EventTarget*>(aObject),
1313 : "Multiple inheritance for mozilla::dom::EventTarget is broken.");
1314 0 : MOZ_ASSERT(ToSupportsIsCorrect(aObject));
1315 0 : MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
1316 0 : MOZ_ASSERT(!aCache->GetWrapper(),
1317 : "You should probably not be using Wrap() directly; use "
1318 : "GetOrCreateDOMReflector instead");
1319 :
1320 0 : MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
1321 : "nsISupports must be on our primary inheritance chain");
1322 :
1323 0 : JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
1324 0 : if (!global) {
1325 0 : return false;
1326 : }
1327 0 : MOZ_ASSERT(JS_IsGlobalObject(global));
1328 0 : MOZ_ASSERT(JS::ObjectIsNotGray(global));
1329 :
1330 : // That might have ended up wrapping us already, due to the wonders
1331 : // of XBL. Check for that, and bail out as needed.
1332 0 : aReflector.set(aCache->GetWrapper());
1333 0 : if (aReflector) {
1334 : #ifdef DEBUG
1335 0 : binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
1336 : #endif // DEBUG
1337 0 : return true;
1338 : }
1339 :
1340 0 : JSAutoCompartment ac(aCx, global);
1341 0 : JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
1342 0 : if (!canonicalProto) {
1343 0 : return false;
1344 : }
1345 0 : JS::Rooted<JSObject*> proto(aCx);
1346 0 : if (aGivenProto) {
1347 0 : proto = aGivenProto;
1348 : // Unfortunately, while aGivenProto was in the compartment of aCx
1349 : // coming in, we changed compartments to that of "parent" so may need
1350 : // to wrap the proto here.
1351 0 : if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
1352 0 : if (!JS_WrapObject(aCx, &proto)) {
1353 0 : return false;
1354 : }
1355 : }
1356 : } else {
1357 0 : proto = canonicalProto;
1358 : }
1359 :
1360 0 : BindingJSObjectCreator<mozilla::dom::HTMLTableCellElement> creator(aCx);
1361 0 : creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
1362 0 : if (!aReflector) {
1363 0 : return false;
1364 : }
1365 :
1366 0 : aCache->SetWrapper(aReflector);
1367 0 : creator.InitializationSucceeded();
1368 :
1369 0 : MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
1370 : aCache->GetWrapperPreserveColor() == aReflector);
1371 : // If proto != canonicalProto, we have to preserve our wrapper;
1372 : // otherwise we won't be able to properly recreate it later, since
1373 : // we won't know what proto to use. Note that we don't check
1374 : // aGivenProto here, since it's entirely possible (and even
1375 : // somewhat common) to have a non-null aGivenProto which is the
1376 : // same as canonicalProto.
1377 0 : if (proto != canonicalProto) {
1378 0 : PreserveWrapper(aObject);
1379 : }
1380 :
1381 0 : return true;
1382 : }
1383 :
1384 : const NativePropertyHooks sNativePropertyHooks[] = { {
1385 : nullptr,
1386 : nullptr,
1387 : nullptr,
1388 : { sNativeProperties.Upcast(), nullptr },
1389 : prototypes::id::HTMLTableCellElement,
1390 : constructors::id::HTMLTableCellElement,
1391 : HTMLElementBinding::sNativePropertyHooks,
1392 : &DefaultXrayExpandoObjectClass
1393 : } };
1394 :
1395 : void
1396 0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
1397 : {
1398 0 : JS::Handle<JSObject*> parentProto(HTMLElementBinding::GetProtoObjectHandle(aCx));
1399 0 : if (!parentProto) {
1400 0 : return;
1401 : }
1402 :
1403 0 : JS::Handle<JSObject*> constructorProto(HTMLElementBinding::GetConstructorObjectHandle(aCx));
1404 0 : if (!constructorProto) {
1405 0 : return;
1406 : }
1407 :
1408 : static bool sIdsInited = false;
1409 0 : if (!sIdsInited && NS_IsMainThread()) {
1410 0 : if (!InitIds(aCx, sNativeProperties.Upcast())) {
1411 0 : return;
1412 : }
1413 0 : sIdsInited = true;
1414 : }
1415 :
1416 0 : JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::HTMLTableCellElement);
1417 0 : JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::HTMLTableCellElement);
1418 0 : dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
1419 : &sPrototypeClass.mBase, protoCache,
1420 : constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
1421 : interfaceCache,
1422 : sNativeProperties.Upcast(),
1423 : nullptr,
1424 : "HTMLTableCellElement", aDefineOnGlobal,
1425 : nullptr,
1426 0 : false);
1427 : }
1428 :
1429 : JS::Handle<JSObject*>
1430 0 : GetProtoObjectHandle(JSContext* aCx)
1431 : {
1432 : /* Get the interface prototype object for this class. This will create the
1433 : object as needed. */
1434 0 : bool aDefineOnGlobal = true;
1435 :
1436 : /* Make sure our global is sane. Hopefully we can remove this sometime */
1437 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
1438 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
1439 0 : return nullptr;
1440 : }
1441 :
1442 : /* Check to see whether the interface objects are already installed */
1443 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
1444 0 : if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::HTMLTableCellElement)) {
1445 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
1446 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
1447 : }
1448 :
1449 : /*
1450 : * The object might _still_ be null, but that's OK.
1451 : *
1452 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
1453 : * traced by TraceProtoAndIfaceCache() and its contents are never
1454 : * changed after they have been set.
1455 : *
1456 : * Calling address() avoids the read read barrier that does gray
1457 : * unmarking, but it's not possible for the object to be gray here.
1458 : */
1459 :
1460 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::HTMLTableCellElement);
1461 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
1462 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
1463 : }
1464 :
1465 : JS::Handle<JSObject*>
1466 0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
1467 : {
1468 : /* Get the interface object for this class. This will create the object as
1469 : needed. */
1470 :
1471 : /* Make sure our global is sane. Hopefully we can remove this sometime */
1472 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
1473 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
1474 0 : return nullptr;
1475 : }
1476 :
1477 : /* Check to see whether the interface objects are already installed */
1478 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
1479 0 : if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::HTMLTableCellElement)) {
1480 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
1481 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
1482 : }
1483 :
1484 : /*
1485 : * The object might _still_ be null, but that's OK.
1486 : *
1487 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
1488 : * traced by TraceProtoAndIfaceCache() and its contents are never
1489 : * changed after they have been set.
1490 : *
1491 : * Calling address() avoids the read read barrier that does gray
1492 : * unmarking, but it's not possible for the object to be gray here.
1493 : */
1494 :
1495 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::HTMLTableCellElement);
1496 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
1497 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
1498 : }
1499 :
1500 : JSObject*
1501 0 : GetConstructorObject(JSContext* aCx)
1502 : {
1503 0 : return GetConstructorObjectHandle(aCx);
1504 : }
1505 :
1506 : } // namespace HTMLTableCellElementBinding
1507 :
1508 :
1509 :
1510 : } // namespace dom
1511 : } // namespace mozilla
|