Line data Source code
1 : /* THIS FILE IS AUTOGENERATED FROM CSSCounterStyleRule.webidl BY Codegen.py - DO NOT EDIT */
2 :
3 : #include "CSSCounterStyleRuleBinding.h"
4 : #include "CSSRuleBinding.h"
5 : #include "WrapperFactory.h"
6 : #include "mozilla/OwningNonNull.h"
7 : #include "mozilla/dom/BindingUtils.h"
8 : #include "mozilla/dom/DOMJSClass.h"
9 : #include "mozilla/dom/NonRefcountedDOMObject.h"
10 : #include "mozilla/dom/XrayExpandoClass.h"
11 : #include "nsCSSCounterStyleRule.h"
12 :
13 : namespace mozilla {
14 : namespace dom {
15 :
16 : namespace CSSCounterStyleRuleBinding {
17 :
18 : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<CSSRuleBinding::NativeType>::value,
19 : "Can't inherit from an interface with a different ownership model.");
20 :
21 : static bool
22 0 : get_name(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitGetterCallArgs args)
23 : {
24 0 : DOMString result;
25 0 : self->GetName(result);
26 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
27 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
28 0 : return false;
29 : }
30 0 : return true;
31 : }
32 :
33 : static bool
34 0 : set_name(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitSetterCallArgs args)
35 : {
36 0 : binding_detail::FakeString arg0;
37 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
38 0 : return false;
39 : }
40 0 : self->SetName(NonNullHelper(Constify(arg0)));
41 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
42 :
43 0 : return true;
44 : }
45 :
46 : static const JSJitInfo name_getterinfo = {
47 : { (JSJitGetterOp)get_name },
48 : { prototypes::id::CSSCounterStyleRule },
49 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
50 : JSJitInfo::Getter,
51 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
52 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
53 : false, /* isInfallible. False in setters. */
54 : false, /* isMovable. Not relevant for setters. */
55 : false, /* isEliminatable. Not relevant for setters. */
56 : false, /* isAlwaysInSlot. Only relevant for getters. */
57 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
58 : false, /* isTypedMethod. Only relevant for methods. */
59 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
60 : };
61 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
62 : static_assert(0 < 1, "There is no slot for us");
63 : static const JSJitInfo name_setterinfo = {
64 : { (JSJitGetterOp)set_name },
65 : { prototypes::id::CSSCounterStyleRule },
66 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
67 : JSJitInfo::Setter,
68 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
69 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
70 : false, /* isInfallible. False in setters. */
71 : false, /* isMovable. Not relevant for setters. */
72 : false, /* isEliminatable. Not relevant for setters. */
73 : false, /* isAlwaysInSlot. Only relevant for getters. */
74 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
75 : false, /* isTypedMethod. Only relevant for methods. */
76 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
77 : };
78 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
79 : static_assert(0 < 1, "There is no slot for us");
80 :
81 : static bool
82 0 : get_system(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitGetterCallArgs args)
83 : {
84 0 : DOMString result;
85 0 : self->GetSystem(result);
86 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
87 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
88 0 : return false;
89 : }
90 0 : return true;
91 : }
92 :
93 : static bool
94 0 : set_system(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitSetterCallArgs args)
95 : {
96 0 : binding_detail::FakeString arg0;
97 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
98 0 : return false;
99 : }
100 0 : self->SetSystem(NonNullHelper(Constify(arg0)));
101 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
102 :
103 0 : return true;
104 : }
105 :
106 : static const JSJitInfo system_getterinfo = {
107 : { (JSJitGetterOp)get_system },
108 : { prototypes::id::CSSCounterStyleRule },
109 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
110 : JSJitInfo::Getter,
111 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
112 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
113 : false, /* isInfallible. False in setters. */
114 : false, /* isMovable. Not relevant for setters. */
115 : false, /* isEliminatable. Not relevant for setters. */
116 : false, /* isAlwaysInSlot. Only relevant for getters. */
117 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
118 : false, /* isTypedMethod. Only relevant for methods. */
119 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
120 : };
121 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
122 : static_assert(0 < 1, "There is no slot for us");
123 : static const JSJitInfo system_setterinfo = {
124 : { (JSJitGetterOp)set_system },
125 : { prototypes::id::CSSCounterStyleRule },
126 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
127 : JSJitInfo::Setter,
128 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
129 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
130 : false, /* isInfallible. False in setters. */
131 : false, /* isMovable. Not relevant for setters. */
132 : false, /* isEliminatable. Not relevant for setters. */
133 : false, /* isAlwaysInSlot. Only relevant for getters. */
134 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
135 : false, /* isTypedMethod. Only relevant for methods. */
136 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
137 : };
138 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
139 : static_assert(0 < 1, "There is no slot for us");
140 :
141 : static bool
142 0 : get_symbols(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitGetterCallArgs args)
143 : {
144 0 : DOMString result;
145 0 : self->GetSymbols(result);
146 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
147 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
148 0 : return false;
149 : }
150 0 : return true;
151 : }
152 :
153 : static bool
154 0 : set_symbols(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitSetterCallArgs args)
155 : {
156 0 : binding_detail::FakeString arg0;
157 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
158 0 : return false;
159 : }
160 0 : self->SetSymbols(NonNullHelper(Constify(arg0)));
161 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
162 :
163 0 : return true;
164 : }
165 :
166 : static const JSJitInfo symbols_getterinfo = {
167 : { (JSJitGetterOp)get_symbols },
168 : { prototypes::id::CSSCounterStyleRule },
169 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
170 : JSJitInfo::Getter,
171 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
172 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
173 : false, /* isInfallible. False in setters. */
174 : false, /* isMovable. Not relevant for setters. */
175 : false, /* isEliminatable. Not relevant for setters. */
176 : false, /* isAlwaysInSlot. Only relevant for getters. */
177 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
178 : false, /* isTypedMethod. Only relevant for methods. */
179 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
180 : };
181 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
182 : static_assert(0 < 1, "There is no slot for us");
183 : static const JSJitInfo symbols_setterinfo = {
184 : { (JSJitGetterOp)set_symbols },
185 : { prototypes::id::CSSCounterStyleRule },
186 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
187 : JSJitInfo::Setter,
188 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
189 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
190 : false, /* isInfallible. False in setters. */
191 : false, /* isMovable. Not relevant for setters. */
192 : false, /* isEliminatable. Not relevant for setters. */
193 : false, /* isAlwaysInSlot. Only relevant for getters. */
194 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
195 : false, /* isTypedMethod. Only relevant for methods. */
196 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
197 : };
198 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
199 : static_assert(0 < 1, "There is no slot for us");
200 :
201 : static bool
202 0 : get_additiveSymbols(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitGetterCallArgs args)
203 : {
204 0 : DOMString result;
205 0 : self->GetAdditiveSymbols(result);
206 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
207 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
208 0 : return false;
209 : }
210 0 : return true;
211 : }
212 :
213 : static bool
214 0 : set_additiveSymbols(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitSetterCallArgs args)
215 : {
216 0 : binding_detail::FakeString arg0;
217 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
218 0 : return false;
219 : }
220 0 : self->SetAdditiveSymbols(NonNullHelper(Constify(arg0)));
221 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
222 :
223 0 : return true;
224 : }
225 :
226 : static const JSJitInfo additiveSymbols_getterinfo = {
227 : { (JSJitGetterOp)get_additiveSymbols },
228 : { prototypes::id::CSSCounterStyleRule },
229 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
230 : JSJitInfo::Getter,
231 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
232 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
233 : false, /* isInfallible. False in setters. */
234 : false, /* isMovable. Not relevant for setters. */
235 : false, /* isEliminatable. Not relevant for setters. */
236 : false, /* isAlwaysInSlot. Only relevant for getters. */
237 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
238 : false, /* isTypedMethod. Only relevant for methods. */
239 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
240 : };
241 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
242 : static_assert(0 < 1, "There is no slot for us");
243 : static const JSJitInfo additiveSymbols_setterinfo = {
244 : { (JSJitGetterOp)set_additiveSymbols },
245 : { prototypes::id::CSSCounterStyleRule },
246 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
247 : JSJitInfo::Setter,
248 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
249 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
250 : false, /* isInfallible. False in setters. */
251 : false, /* isMovable. Not relevant for setters. */
252 : false, /* isEliminatable. Not relevant for setters. */
253 : false, /* isAlwaysInSlot. Only relevant for getters. */
254 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
255 : false, /* isTypedMethod. Only relevant for methods. */
256 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
257 : };
258 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
259 : static_assert(0 < 1, "There is no slot for us");
260 :
261 : static bool
262 0 : get_negative(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitGetterCallArgs args)
263 : {
264 0 : DOMString result;
265 0 : self->GetNegative(result);
266 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
267 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
268 0 : return false;
269 : }
270 0 : return true;
271 : }
272 :
273 : static bool
274 0 : set_negative(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitSetterCallArgs args)
275 : {
276 0 : binding_detail::FakeString arg0;
277 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
278 0 : return false;
279 : }
280 0 : self->SetNegative(NonNullHelper(Constify(arg0)));
281 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
282 :
283 0 : return true;
284 : }
285 :
286 : static const JSJitInfo negative_getterinfo = {
287 : { (JSJitGetterOp)get_negative },
288 : { prototypes::id::CSSCounterStyleRule },
289 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
290 : JSJitInfo::Getter,
291 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
292 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
293 : false, /* isInfallible. False in setters. */
294 : false, /* isMovable. Not relevant for setters. */
295 : false, /* isEliminatable. Not relevant for setters. */
296 : false, /* isAlwaysInSlot. Only relevant for getters. */
297 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
298 : false, /* isTypedMethod. Only relevant for methods. */
299 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
300 : };
301 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
302 : static_assert(0 < 1, "There is no slot for us");
303 : static const JSJitInfo negative_setterinfo = {
304 : { (JSJitGetterOp)set_negative },
305 : { prototypes::id::CSSCounterStyleRule },
306 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
307 : JSJitInfo::Setter,
308 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
309 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
310 : false, /* isInfallible. False in setters. */
311 : false, /* isMovable. Not relevant for setters. */
312 : false, /* isEliminatable. Not relevant for setters. */
313 : false, /* isAlwaysInSlot. Only relevant for getters. */
314 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
315 : false, /* isTypedMethod. Only relevant for methods. */
316 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
317 : };
318 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
319 : static_assert(0 < 1, "There is no slot for us");
320 :
321 : static bool
322 0 : get_prefix(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitGetterCallArgs args)
323 : {
324 0 : DOMString result;
325 0 : self->GetPrefix(result);
326 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
327 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
328 0 : return false;
329 : }
330 0 : return true;
331 : }
332 :
333 : static bool
334 0 : set_prefix(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitSetterCallArgs args)
335 : {
336 0 : binding_detail::FakeString arg0;
337 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
338 0 : return false;
339 : }
340 0 : self->SetPrefix(NonNullHelper(Constify(arg0)));
341 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
342 :
343 0 : return true;
344 : }
345 :
346 : static const JSJitInfo prefix_getterinfo = {
347 : { (JSJitGetterOp)get_prefix },
348 : { prototypes::id::CSSCounterStyleRule },
349 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
350 : JSJitInfo::Getter,
351 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
352 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
353 : false, /* 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 : static const JSJitInfo prefix_setterinfo = {
364 : { (JSJitGetterOp)set_prefix },
365 : { prototypes::id::CSSCounterStyleRule },
366 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
367 : JSJitInfo::Setter,
368 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
369 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
370 : false, /* isInfallible. False in setters. */
371 : false, /* isMovable. Not relevant for setters. */
372 : false, /* isEliminatable. Not relevant for setters. */
373 : false, /* isAlwaysInSlot. Only relevant for getters. */
374 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
375 : false, /* isTypedMethod. Only relevant for methods. */
376 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
377 : };
378 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
379 : static_assert(0 < 1, "There is no slot for us");
380 :
381 : static bool
382 0 : get_suffix(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitGetterCallArgs args)
383 : {
384 0 : DOMString result;
385 0 : self->GetSuffix(result);
386 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
387 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
388 0 : return false;
389 : }
390 0 : return true;
391 : }
392 :
393 : static bool
394 0 : set_suffix(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitSetterCallArgs args)
395 : {
396 0 : binding_detail::FakeString arg0;
397 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
398 0 : return false;
399 : }
400 0 : self->SetSuffix(NonNullHelper(Constify(arg0)));
401 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
402 :
403 0 : return true;
404 : }
405 :
406 : static const JSJitInfo suffix_getterinfo = {
407 : { (JSJitGetterOp)get_suffix },
408 : { prototypes::id::CSSCounterStyleRule },
409 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
410 : JSJitInfo::Getter,
411 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
412 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
413 : false, /* isInfallible. False in setters. */
414 : false, /* isMovable. Not relevant for setters. */
415 : false, /* isEliminatable. Not relevant for setters. */
416 : false, /* isAlwaysInSlot. Only relevant for getters. */
417 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
418 : false, /* isTypedMethod. Only relevant for methods. */
419 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
420 : };
421 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
422 : static_assert(0 < 1, "There is no slot for us");
423 : static const JSJitInfo suffix_setterinfo = {
424 : { (JSJitGetterOp)set_suffix },
425 : { prototypes::id::CSSCounterStyleRule },
426 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
427 : JSJitInfo::Setter,
428 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
429 : JSVAL_TYPE_UNDEFINED, /* 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 :
441 : static bool
442 0 : get_range(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitGetterCallArgs args)
443 : {
444 0 : DOMString result;
445 0 : self->GetRange(result);
446 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
447 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
448 0 : return false;
449 : }
450 0 : return true;
451 : }
452 :
453 : static bool
454 0 : set_range(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitSetterCallArgs args)
455 : {
456 0 : binding_detail::FakeString arg0;
457 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
458 0 : return false;
459 : }
460 0 : self->SetRange(NonNullHelper(Constify(arg0)));
461 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
462 :
463 0 : return true;
464 : }
465 :
466 : static const JSJitInfo range_getterinfo = {
467 : { (JSJitGetterOp)get_range },
468 : { prototypes::id::CSSCounterStyleRule },
469 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
470 : JSJitInfo::Getter,
471 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
472 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
473 : false, /* isInfallible. False in setters. */
474 : false, /* isMovable. Not relevant for setters. */
475 : false, /* isEliminatable. Not relevant for setters. */
476 : false, /* isAlwaysInSlot. Only relevant for getters. */
477 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
478 : false, /* isTypedMethod. Only relevant for methods. */
479 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
480 : };
481 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
482 : static_assert(0 < 1, "There is no slot for us");
483 : static const JSJitInfo range_setterinfo = {
484 : { (JSJitGetterOp)set_range },
485 : { prototypes::id::CSSCounterStyleRule },
486 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
487 : JSJitInfo::Setter,
488 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
489 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
490 : false, /* isInfallible. False in setters. */
491 : false, /* isMovable. Not relevant for setters. */
492 : false, /* isEliminatable. Not relevant for setters. */
493 : false, /* isAlwaysInSlot. Only relevant for getters. */
494 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
495 : false, /* isTypedMethod. Only relevant for methods. */
496 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
497 : };
498 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
499 : static_assert(0 < 1, "There is no slot for us");
500 :
501 : static bool
502 0 : get_pad(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitGetterCallArgs args)
503 : {
504 0 : DOMString result;
505 0 : self->GetPad(result);
506 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
507 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
508 0 : return false;
509 : }
510 0 : return true;
511 : }
512 :
513 : static bool
514 0 : set_pad(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitSetterCallArgs args)
515 : {
516 0 : binding_detail::FakeString arg0;
517 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
518 0 : return false;
519 : }
520 0 : self->SetPad(NonNullHelper(Constify(arg0)));
521 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
522 :
523 0 : return true;
524 : }
525 :
526 : static const JSJitInfo pad_getterinfo = {
527 : { (JSJitGetterOp)get_pad },
528 : { prototypes::id::CSSCounterStyleRule },
529 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
530 : JSJitInfo::Getter,
531 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
532 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
533 : false, /* isInfallible. False in setters. */
534 : false, /* isMovable. Not relevant for setters. */
535 : false, /* isEliminatable. Not relevant for setters. */
536 : false, /* isAlwaysInSlot. Only relevant for getters. */
537 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
538 : false, /* isTypedMethod. Only relevant for methods. */
539 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
540 : };
541 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
542 : static_assert(0 < 1, "There is no slot for us");
543 : static const JSJitInfo pad_setterinfo = {
544 : { (JSJitGetterOp)set_pad },
545 : { prototypes::id::CSSCounterStyleRule },
546 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
547 : JSJitInfo::Setter,
548 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
549 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
550 : false, /* isInfallible. False in setters. */
551 : false, /* isMovable. Not relevant for setters. */
552 : false, /* isEliminatable. Not relevant for setters. */
553 : false, /* isAlwaysInSlot. Only relevant for getters. */
554 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
555 : false, /* isTypedMethod. Only relevant for methods. */
556 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
557 : };
558 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
559 : static_assert(0 < 1, "There is no slot for us");
560 :
561 : static bool
562 0 : get_speakAs(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitGetterCallArgs args)
563 : {
564 0 : DOMString result;
565 0 : self->GetSpeakAs(result);
566 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
567 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
568 0 : return false;
569 : }
570 0 : return true;
571 : }
572 :
573 : static bool
574 0 : set_speakAs(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitSetterCallArgs args)
575 : {
576 0 : binding_detail::FakeString arg0;
577 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
578 0 : return false;
579 : }
580 0 : self->SetSpeakAs(NonNullHelper(Constify(arg0)));
581 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
582 :
583 0 : return true;
584 : }
585 :
586 : static const JSJitInfo speakAs_getterinfo = {
587 : { (JSJitGetterOp)get_speakAs },
588 : { prototypes::id::CSSCounterStyleRule },
589 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
590 : JSJitInfo::Getter,
591 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
592 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
593 : false, /* isInfallible. False in setters. */
594 : false, /* isMovable. Not relevant for setters. */
595 : false, /* isEliminatable. Not relevant for setters. */
596 : false, /* isAlwaysInSlot. Only relevant for getters. */
597 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
598 : false, /* isTypedMethod. Only relevant for methods. */
599 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
600 : };
601 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
602 : static_assert(0 < 1, "There is no slot for us");
603 : static const JSJitInfo speakAs_setterinfo = {
604 : { (JSJitGetterOp)set_speakAs },
605 : { prototypes::id::CSSCounterStyleRule },
606 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
607 : JSJitInfo::Setter,
608 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
609 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
610 : false, /* isInfallible. False in setters. */
611 : false, /* isMovable. Not relevant for setters. */
612 : false, /* isEliminatable. Not relevant for setters. */
613 : false, /* isAlwaysInSlot. Only relevant for getters. */
614 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
615 : false, /* isTypedMethod. Only relevant for methods. */
616 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
617 : };
618 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
619 : static_assert(0 < 1, "There is no slot for us");
620 :
621 : static bool
622 0 : get_fallback(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitGetterCallArgs args)
623 : {
624 0 : DOMString result;
625 0 : self->GetFallback(result);
626 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
627 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
628 0 : return false;
629 : }
630 0 : return true;
631 : }
632 :
633 : static bool
634 0 : set_fallback(JSContext* cx, JS::Handle<JSObject*> obj, nsCSSCounterStyleRule* self, JSJitSetterCallArgs args)
635 : {
636 0 : binding_detail::FakeString arg0;
637 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
638 0 : return false;
639 : }
640 0 : self->SetFallback(NonNullHelper(Constify(arg0)));
641 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
642 :
643 0 : return true;
644 : }
645 :
646 : static const JSJitInfo fallback_getterinfo = {
647 : { (JSJitGetterOp)get_fallback },
648 : { prototypes::id::CSSCounterStyleRule },
649 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
650 : JSJitInfo::Getter,
651 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
652 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
653 : false, /* isInfallible. False in setters. */
654 : false, /* isMovable. Not relevant for setters. */
655 : false, /* isEliminatable. Not relevant for setters. */
656 : false, /* isAlwaysInSlot. Only relevant for getters. */
657 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
658 : false, /* isTypedMethod. Only relevant for methods. */
659 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
660 : };
661 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
662 : static_assert(0 < 1, "There is no slot for us");
663 : static const JSJitInfo fallback_setterinfo = {
664 : { (JSJitGetterOp)set_fallback },
665 : { prototypes::id::CSSCounterStyleRule },
666 : { PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth },
667 : JSJitInfo::Setter,
668 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
669 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
670 : false, /* isInfallible. False in setters. */
671 : false, /* isMovable. Not relevant for setters. */
672 : false, /* isEliminatable. Not relevant for setters. */
673 : false, /* isAlwaysInSlot. Only relevant for getters. */
674 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
675 : false, /* isTypedMethod. Only relevant for methods. */
676 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
677 : };
678 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
679 : static_assert(0 < 1, "There is no slot for us");
680 :
681 : static bool
682 0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
683 : {
684 0 : nsCSSCounterStyleRule* self = UnwrapPossiblyNotInitializedDOMObject<nsCSSCounterStyleRule>(obj);
685 : // We don't want to preserve if we don't have a wrapper, and we
686 : // obviously can't preserve if we're not initialized.
687 0 : if (self && self->GetWrapperPreserveColor()) {
688 0 : PreserveWrapper(self);
689 : }
690 0 : return true;
691 : }
692 :
693 : static void
694 0 : _finalize(js::FreeOp* fop, JSObject* obj)
695 : {
696 0 : nsCSSCounterStyleRule* self = UnwrapPossiblyNotInitializedDOMObject<nsCSSCounterStyleRule>(obj);
697 0 : if (self) {
698 0 : ClearWrapper(self, self, obj);
699 0 : AddForDeferredFinalization<nsCSSCounterStyleRule>(self);
700 : }
701 0 : }
702 :
703 : static void
704 0 : _objectMoved(JSObject* obj, const JSObject* old)
705 : {
706 0 : nsCSSCounterStyleRule* self = UnwrapPossiblyNotInitializedDOMObject<nsCSSCounterStyleRule>(obj);
707 0 : if (self) {
708 0 : UpdateWrapper(self, self, obj, old);
709 : }
710 0 : }
711 :
712 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
713 : #if defined(__clang__)
714 : #pragma clang diagnostic push
715 : #pragma clang diagnostic ignored "-Wmissing-braces"
716 : #endif
717 : static const JSPropertySpec sAttributes_specs[] = {
718 : { "name", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &name_getterinfo, GenericBindingSetter, &name_setterinfo },
719 : { "system", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &system_getterinfo, GenericBindingSetter, &system_setterinfo },
720 : { "symbols", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &symbols_getterinfo, GenericBindingSetter, &symbols_setterinfo },
721 : { "additiveSymbols", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &additiveSymbols_getterinfo, GenericBindingSetter, &additiveSymbols_setterinfo },
722 : { "negative", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &negative_getterinfo, GenericBindingSetter, &negative_setterinfo },
723 : { "prefix", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &prefix_getterinfo, GenericBindingSetter, &prefix_setterinfo },
724 : { "suffix", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &suffix_getterinfo, GenericBindingSetter, &suffix_setterinfo },
725 : { "range", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &range_getterinfo, GenericBindingSetter, &range_setterinfo },
726 : { "pad", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &pad_getterinfo, GenericBindingSetter, &pad_setterinfo },
727 : { "speakAs", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &speakAs_getterinfo, GenericBindingSetter, &speakAs_setterinfo },
728 : { "fallback", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &fallback_getterinfo, GenericBindingSetter, &fallback_setterinfo },
729 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
730 : };
731 : #if defined(__clang__)
732 : #pragma clang diagnostic pop
733 : #endif
734 :
735 :
736 : // Can't be const because the pref-enabled boolean needs to be writable
737 : static Prefable<const JSPropertySpec> sAttributes[] = {
738 : { nullptr, &sAttributes_specs[0] },
739 : { nullptr, nullptr }
740 : };
741 :
742 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
743 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
744 : static_assert(11 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
745 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
746 :
747 :
748 : static uint16_t sNativeProperties_sortedPropertyIndices[11];
749 : static PropertyInfo sNativeProperties_propertyInfos[11];
750 :
751 : static const NativePropertiesN<1> sNativeProperties = {
752 : false, 0,
753 : false, 0,
754 : false, 0,
755 : true, 0 /* sAttributes */,
756 : false, 0,
757 : false, 0,
758 : false, 0,
759 : -1,
760 : 11,
761 : sNativeProperties_sortedPropertyIndices,
762 : {
763 : { sAttributes, &sNativeProperties_propertyInfos[0] }
764 : }
765 : };
766 : static_assert(11 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
767 : "We have a property info count that is oversized");
768 :
769 : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
770 : {
771 : "Function",
772 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
773 : &sBoringInterfaceObjectClassClassOps,
774 : JS_NULL_CLASS_SPEC,
775 : JS_NULL_CLASS_EXT,
776 : &sInterfaceObjectClassObjectOps
777 : },
778 : eInterface,
779 : true,
780 : prototypes::id::CSSCounterStyleRule,
781 : PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth,
782 : sNativePropertyHooks,
783 : "function CSSCounterStyleRule() {\n [native code]\n}",
784 : CSSRuleBinding::GetConstructorObject
785 : };
786 :
787 : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
788 : {
789 : "CSSCounterStyleRulePrototype",
790 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
791 : JS_NULL_CLASS_OPS,
792 : JS_NULL_CLASS_SPEC,
793 : JS_NULL_CLASS_EXT,
794 : JS_NULL_OBJECT_OPS
795 : },
796 : eInterfacePrototype,
797 : false,
798 : prototypes::id::CSSCounterStyleRule,
799 : PrototypeTraits<prototypes::id::CSSCounterStyleRule>::Depth,
800 : sNativePropertyHooks,
801 : "[object CSSCounterStyleRulePrototype]",
802 : CSSRuleBinding::GetProtoObject
803 : };
804 :
805 : JSObject*
806 0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
807 : {
808 0 : return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
809 : }
810 :
811 : static const js::ClassOps sClassOps = {
812 : _addProperty, /* addProperty */
813 : nullptr, /* delProperty */
814 : nullptr, /* getProperty */
815 : nullptr, /* setProperty */
816 : nullptr, /* enumerate */
817 : nullptr, /* newEnumerate */
818 : nullptr, /* resolve */
819 : nullptr, /* mayResolve */
820 : _finalize, /* finalize */
821 : nullptr, /* call */
822 : nullptr, /* hasInstance */
823 : nullptr, /* construct */
824 : nullptr, /* trace */
825 : };
826 :
827 : static const js::ClassExtension sClassExtension = {
828 : nullptr, /* weakmapKeyDelegateOp */
829 : _objectMoved /* objectMovedOp */
830 : };
831 :
832 : static const DOMJSClass sClass = {
833 : { "CSSCounterStyleRule",
834 : JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
835 : &sClassOps,
836 : JS_NULL_CLASS_SPEC,
837 : &sClassExtension,
838 : JS_NULL_OBJECT_OPS
839 : },
840 : { prototypes::id::CSSRule, prototypes::id::CSSCounterStyleRule, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
841 : IsBaseOf<nsISupports, nsCSSCounterStyleRule >::value,
842 : sNativePropertyHooks,
843 : FindAssociatedGlobalForNative<nsCSSCounterStyleRule>::Get,
844 : GetProtoObjectHandle,
845 : GetCCParticipant<nsCSSCounterStyleRule>::Get()
846 : };
847 : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
848 : "Must have the right minimal number of reserved slots.");
849 : static_assert(1 >= 1,
850 : "Must have enough reserved slots.");
851 :
852 : const JSClass*
853 0 : GetJSClass()
854 : {
855 0 : return sClass.ToJSClass();
856 : }
857 :
858 : bool
859 0 : Wrap(JSContext* aCx, nsCSSCounterStyleRule* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
860 : {
861 : MOZ_ASSERT(static_cast<nsCSSCounterStyleRule*>(aObject) ==
862 : reinterpret_cast<nsCSSCounterStyleRule*>(aObject),
863 : "Multiple inheritance for nsCSSCounterStyleRule is broken.");
864 : MOZ_ASSERT(static_cast<mozilla::css::Rule*>(aObject) ==
865 : reinterpret_cast<mozilla::css::Rule*>(aObject),
866 : "Multiple inheritance for mozilla::css::Rule is broken.");
867 0 : MOZ_ASSERT(ToSupportsIsCorrect(aObject));
868 0 : MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
869 0 : MOZ_ASSERT(!aCache->GetWrapper(),
870 : "You should probably not be using Wrap() directly; use "
871 : "GetOrCreateDOMReflector instead");
872 :
873 0 : MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
874 : "nsISupports must be on our primary inheritance chain");
875 :
876 0 : JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
877 0 : if (!global) {
878 0 : return false;
879 : }
880 0 : MOZ_ASSERT(JS_IsGlobalObject(global));
881 0 : MOZ_ASSERT(JS::ObjectIsNotGray(global));
882 :
883 : // That might have ended up wrapping us already, due to the wonders
884 : // of XBL. Check for that, and bail out as needed.
885 0 : aReflector.set(aCache->GetWrapper());
886 0 : if (aReflector) {
887 : #ifdef DEBUG
888 0 : binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
889 : #endif // DEBUG
890 0 : return true;
891 : }
892 :
893 0 : JSAutoCompartment ac(aCx, global);
894 0 : JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
895 0 : if (!canonicalProto) {
896 0 : return false;
897 : }
898 0 : JS::Rooted<JSObject*> proto(aCx);
899 0 : if (aGivenProto) {
900 0 : proto = aGivenProto;
901 : // Unfortunately, while aGivenProto was in the compartment of aCx
902 : // coming in, we changed compartments to that of "parent" so may need
903 : // to wrap the proto here.
904 0 : if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
905 0 : if (!JS_WrapObject(aCx, &proto)) {
906 0 : return false;
907 : }
908 : }
909 : } else {
910 0 : proto = canonicalProto;
911 : }
912 :
913 0 : BindingJSObjectCreator<nsCSSCounterStyleRule> creator(aCx);
914 0 : creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
915 0 : if (!aReflector) {
916 0 : return false;
917 : }
918 :
919 0 : aCache->SetWrapper(aReflector);
920 0 : creator.InitializationSucceeded();
921 :
922 0 : MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
923 : aCache->GetWrapperPreserveColor() == aReflector);
924 : // If proto != canonicalProto, we have to preserve our wrapper;
925 : // otherwise we won't be able to properly recreate it later, since
926 : // we won't know what proto to use. Note that we don't check
927 : // aGivenProto here, since it's entirely possible (and even
928 : // somewhat common) to have a non-null aGivenProto which is the
929 : // same as canonicalProto.
930 0 : if (proto != canonicalProto) {
931 0 : PreserveWrapper(aObject);
932 : }
933 :
934 0 : return true;
935 : }
936 :
937 : const NativePropertyHooks sNativePropertyHooks[] = { {
938 : nullptr,
939 : nullptr,
940 : nullptr,
941 : { sNativeProperties.Upcast(), nullptr },
942 : prototypes::id::CSSCounterStyleRule,
943 : constructors::id::CSSCounterStyleRule,
944 : CSSRuleBinding::sNativePropertyHooks,
945 : &DefaultXrayExpandoObjectClass
946 : } };
947 :
948 : void
949 0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
950 : {
951 0 : JS::Handle<JSObject*> parentProto(CSSRuleBinding::GetProtoObjectHandle(aCx));
952 0 : if (!parentProto) {
953 0 : return;
954 : }
955 :
956 0 : JS::Handle<JSObject*> constructorProto(CSSRuleBinding::GetConstructorObjectHandle(aCx));
957 0 : if (!constructorProto) {
958 0 : return;
959 : }
960 :
961 : static bool sIdsInited = false;
962 0 : if (!sIdsInited && NS_IsMainThread()) {
963 0 : if (!InitIds(aCx, sNativeProperties.Upcast())) {
964 0 : return;
965 : }
966 0 : sIdsInited = true;
967 : }
968 :
969 0 : JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::CSSCounterStyleRule);
970 0 : JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::CSSCounterStyleRule);
971 0 : dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
972 : &sPrototypeClass.mBase, protoCache,
973 : constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
974 : interfaceCache,
975 : sNativeProperties.Upcast(),
976 : nullptr,
977 : "CSSCounterStyleRule", aDefineOnGlobal,
978 : nullptr,
979 0 : false);
980 : }
981 :
982 : JS::Handle<JSObject*>
983 0 : GetProtoObjectHandle(JSContext* aCx)
984 : {
985 : /* Get the interface prototype object for this class. This will create the
986 : object as needed. */
987 0 : bool aDefineOnGlobal = true;
988 :
989 : /* Make sure our global is sane. Hopefully we can remove this sometime */
990 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
991 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
992 0 : return nullptr;
993 : }
994 :
995 : /* Check to see whether the interface objects are already installed */
996 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
997 0 : if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::CSSCounterStyleRule)) {
998 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
999 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
1000 : }
1001 :
1002 : /*
1003 : * The object might _still_ be null, but that's OK.
1004 : *
1005 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
1006 : * traced by TraceProtoAndIfaceCache() and its contents are never
1007 : * changed after they have been set.
1008 : *
1009 : * Calling address() avoids the read read barrier that does gray
1010 : * unmarking, but it's not possible for the object to be gray here.
1011 : */
1012 :
1013 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::CSSCounterStyleRule);
1014 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
1015 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
1016 : }
1017 :
1018 : JS::Handle<JSObject*>
1019 0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
1020 : {
1021 : /* Get the interface object for this class. This will create the object as
1022 : needed. */
1023 :
1024 : /* Make sure our global is sane. Hopefully we can remove this sometime */
1025 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
1026 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
1027 0 : return nullptr;
1028 : }
1029 :
1030 : /* Check to see whether the interface objects are already installed */
1031 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
1032 0 : if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::CSSCounterStyleRule)) {
1033 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
1034 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
1035 : }
1036 :
1037 : /*
1038 : * The object might _still_ be null, but that's OK.
1039 : *
1040 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
1041 : * traced by TraceProtoAndIfaceCache() and its contents are never
1042 : * changed after they have been set.
1043 : *
1044 : * Calling address() avoids the read read barrier that does gray
1045 : * unmarking, but it's not possible for the object to be gray here.
1046 : */
1047 :
1048 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::CSSCounterStyleRule);
1049 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
1050 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
1051 : }
1052 :
1053 : JSObject*
1054 0 : GetConstructorObject(JSContext* aCx)
1055 : {
1056 0 : return GetConstructorObjectHandle(aCx);
1057 : }
1058 :
1059 : } // namespace CSSCounterStyleRuleBinding
1060 :
1061 :
1062 :
1063 : } // namespace dom
1064 : } // namespace mozilla
|