LCOV - code coverage report
Current view: top level - obj-x86_64-pc-linux-gnu/dom/bindings - SVGElementBinding.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 0 1993 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 209 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* THIS FILE IS AUTOGENERATED FROM SVGElement.webidl BY Codegen.py - DO NOT EDIT */
       2             : 
       3             : #include "ElementBinding.h"
       4             : #include "EventHandlerBinding.h"
       5             : #include "SVGElementBinding.h"
       6             : #include "WrapperFactory.h"
       7             : #include "mozilla/OwningNonNull.h"
       8             : #include "mozilla/Preferences.h"
       9             : #include "mozilla/dom/BindingUtils.h"
      10             : #include "mozilla/dom/DOMJSClass.h"
      11             : #include "mozilla/dom/NonRefcountedDOMObject.h"
      12             : #include "mozilla/dom/Nullable.h"
      13             : #include "mozilla/dom/PrimitiveConversions.h"
      14             : #include "mozilla/dom/SVGAnimatedString.h"
      15             : #include "mozilla/dom/SVGSVGElement.h"
      16             : #include "mozilla/dom/XrayExpandoClass.h"
      17             : #include "nsDOMStringMap.h"
      18             : #include "nsGenericHTMLElement.h"
      19             : #include "nsICSSDeclaration.h"
      20             : #include "nsSVGElement.h"
      21             : 
      22             : namespace mozilla {
      23             : namespace dom {
      24             : 
      25             : namespace SVGElementBinding {
      26             : 
      27             : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<ElementBinding::NativeType>::value,
      28             :               "Can't inherit from an interface with a different ownership model.");
      29             : 
      30             : static bool
      31           0 : get_id(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
      32             : {
      33           0 :   DOMString result;
      34           0 :   self->GetId(result);
      35           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
      36           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
      37           0 :     return false;
      38             :   }
      39           0 :   return true;
      40             : }
      41             : 
      42             : static bool
      43           0 : set_id(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
      44             : {
      45           0 :   binding_detail::FakeString arg0;
      46           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
      47           0 :     return false;
      48             :   }
      49           0 :   self->SetId(NonNullHelper(Constify(arg0)));
      50           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
      51             : 
      52           0 :   return true;
      53             : }
      54             : 
      55             : static const JSJitInfo id_getterinfo = {
      56             :   { (JSJitGetterOp)get_id },
      57             :   { prototypes::id::SVGElement },
      58             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
      59             :   JSJitInfo::Getter,
      60             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
      61             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
      62             :   false,  /* isInfallible. False in setters. */
      63             :   false,  /* isMovable.  Not relevant for setters. */
      64             :   false, /* isEliminatable.  Not relevant for setters. */
      65             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
      66             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
      67             :   false,  /* isTypedMethod.  Only relevant for methods. */
      68             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
      69             : };
      70             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
      71             : static_assert(0 < 1, "There is no slot for us");
      72             : static const JSJitInfo id_setterinfo = {
      73             :   { (JSJitGetterOp)set_id },
      74             :   { prototypes::id::SVGElement },
      75             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
      76             :   JSJitInfo::Setter,
      77             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
      78             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
      79             :   false,  /* isInfallible. False in setters. */
      80             :   false,  /* isMovable.  Not relevant for setters. */
      81             :   false, /* isEliminatable.  Not relevant for setters. */
      82             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
      83             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
      84             :   false,  /* isTypedMethod.  Only relevant for methods. */
      85             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
      86             : };
      87             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
      88             : static_assert(0 < 1, "There is no slot for us");
      89             : 
      90             : static bool
      91           0 : get_className(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
      92             : {
      93           0 :   auto result(StrongOrRawPtr<mozilla::dom::SVGAnimatedString>(self->ClassName()));
      94           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
      95           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
      96           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
      97           0 :     return false;
      98             :   }
      99           0 :   return true;
     100             : }
     101             : 
     102             : static const JSJitInfo className_getterinfo = {
     103             :   { (JSJitGetterOp)get_className },
     104             :   { prototypes::id::SVGElement },
     105             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     106             :   JSJitInfo::Getter,
     107             :   JSJitInfo::AliasNone, /* aliasSet.  Not relevant for setters. */
     108             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
     109             :   false,  /* isInfallible. False in setters. */
     110             :   true,  /* isMovable.  Not relevant for setters. */
     111             :   true, /* isEliminatable.  Not relevant for setters. */
     112             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     113             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     114             :   false,  /* isTypedMethod.  Only relevant for methods. */
     115             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     116             : };
     117             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     118             : static_assert(0 < 1, "There is no slot for us");
     119             : 
     120             : static bool
     121           0 : get_dataset(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
     122             : {
     123           0 :   auto result(StrongOrRawPtr<nsDOMStringMap>(self->Dataset()));
     124           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     125           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
     126           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
     127           0 :     return false;
     128             :   }
     129           0 :   return true;
     130             : }
     131             : 
     132             : static const JSJitInfo dataset_getterinfo = {
     133             :   { (JSJitGetterOp)get_dataset },
     134             :   { prototypes::id::SVGElement },
     135             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     136             :   JSJitInfo::Getter,
     137             :   JSJitInfo::AliasNone, /* aliasSet.  Not relevant for setters. */
     138             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
     139             :   false,  /* isInfallible. False in setters. */
     140             :   true,  /* isMovable.  Not relevant for setters. */
     141             :   true, /* isEliminatable.  Not relevant for setters. */
     142             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     143             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     144             :   false,  /* isTypedMethod.  Only relevant for methods. */
     145             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     146             : };
     147             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     148             : static_assert(0 < 1, "There is no slot for us");
     149             : 
     150             : static bool
     151           0 : get_style(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
     152             : {
     153           0 :   auto result(StrongOrRawPtr<nsICSSDeclaration>(self->Style()));
     154           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     155           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
     156           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
     157           0 :     return false;
     158             :   }
     159           0 :   return true;
     160             : }
     161             : 
     162             : static bool
     163           0 : set_style(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
     164             : {
     165           0 :   JS::Rooted<JS::Value> v(cx);
     166           0 :   if (!JS_GetProperty(cx, obj, "style", &v)) {
     167           0 :     return false;
     168             :   }
     169             : 
     170           0 :   if (!v.isObject()) {
     171           0 :     return ThrowErrorMessage(cx, MSG_NOT_OBJECT, "SVGElement.style");
     172             :   }
     173             : 
     174           0 :   JS::Rooted<JSObject*> targetObj(cx, &v.toObject());
     175           0 :   return JS_SetProperty(cx, targetObj, "cssText", args[0]);
     176             : }
     177             : 
     178             : static const JSJitInfo style_getterinfo = {
     179             :   { (JSJitGetterOp)get_style },
     180             :   { prototypes::id::SVGElement },
     181             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     182             :   JSJitInfo::Getter,
     183             :   JSJitInfo::AliasNone, /* aliasSet.  Not relevant for setters. */
     184             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
     185             :   false,  /* isInfallible. False in setters. */
     186             :   true,  /* isMovable.  Not relevant for setters. */
     187             :   true, /* isEliminatable.  Not relevant for setters. */
     188             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     189             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     190             :   false,  /* isTypedMethod.  Only relevant for methods. */
     191             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     192             : };
     193             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     194             : static_assert(0 < 1, "There is no slot for us");
     195             : static const JSJitInfo style_setterinfo = {
     196             :   { (JSJitGetterOp)set_style },
     197             :   { prototypes::id::SVGElement },
     198             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     199             :   JSJitInfo::Setter,
     200             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     201             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     202             :   false,  /* isInfallible. False in setters. */
     203             :   false,  /* isMovable.  Not relevant for setters. */
     204             :   false, /* isEliminatable.  Not relevant for setters. */
     205             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     206             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     207             :   false,  /* isTypedMethod.  Only relevant for methods. */
     208             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     209             : };
     210             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     211             : static_assert(0 < 1, "There is no slot for us");
     212             : 
     213             : static bool
     214           0 : get_ownerSVGElement(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
     215             : {
     216           0 :   auto result(StrongOrRawPtr<mozilla::dom::SVGSVGElement>(self->GetOwnerSVGElement()));
     217           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     218           0 :   if (!result) {
     219           0 :     args.rval().setNull();
     220           0 :     return true;
     221             :   }
     222           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
     223           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
     224           0 :     return false;
     225             :   }
     226           0 :   return true;
     227             : }
     228             : 
     229             : static const JSJitInfo ownerSVGElement_getterinfo = {
     230             :   { (JSJitGetterOp)get_ownerSVGElement },
     231             :   { prototypes::id::SVGElement },
     232             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     233             :   JSJitInfo::Getter,
     234             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     235             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
     236             :   false,  /* isInfallible. False in setters. */
     237             :   false,  /* isMovable.  Not relevant for setters. */
     238             :   false, /* isEliminatable.  Not relevant for setters. */
     239             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     240             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     241             :   false,  /* isTypedMethod.  Only relevant for methods. */
     242             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     243             : };
     244             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     245             : static_assert(0 < 1, "There is no slot for us");
     246             : 
     247             : static bool
     248           0 : get_viewportElement(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
     249             : {
     250           0 :   auto result(StrongOrRawPtr<nsSVGElement>(self->GetViewportElement()));
     251           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     252           0 :   if (!result) {
     253           0 :     args.rval().setNull();
     254           0 :     return true;
     255             :   }
     256           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
     257           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
     258           0 :     return false;
     259             :   }
     260           0 :   return true;
     261             : }
     262             : 
     263             : static const JSJitInfo viewportElement_getterinfo = {
     264             :   { (JSJitGetterOp)get_viewportElement },
     265             :   { prototypes::id::SVGElement },
     266             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     267             :   JSJitInfo::Getter,
     268             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     269             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
     270             :   false,  /* isInfallible. False in setters. */
     271             :   false,  /* isMovable.  Not relevant for setters. */
     272             :   false, /* isEliminatable.  Not relevant for setters. */
     273             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     274             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     275             :   false,  /* isTypedMethod.  Only relevant for methods. */
     276             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     277             : };
     278             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     279             : static_assert(0 < 1, "There is no slot for us");
     280             : 
     281             : static bool
     282           0 : get_tabIndex(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
     283             : {
     284           0 :   int32_t result(self->TabIndex());
     285           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     286           0 :   args.rval().setInt32(int32_t(result));
     287           0 :   return true;
     288             : }
     289             : 
     290             : static bool
     291           0 : set_tabIndex(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
     292             : {
     293             :   int32_t arg0;
     294           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
     295           0 :     return false;
     296             :   }
     297           0 :   binding_detail::FastErrorResult rv;
     298           0 :   self->SetTabIndex(arg0, rv);
     299           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     300           0 :     return false;
     301             :   }
     302           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     303             : 
     304           0 :   return true;
     305             : }
     306             : 
     307             : static const JSJitInfo tabIndex_getterinfo = {
     308             :   { (JSJitGetterOp)get_tabIndex },
     309             :   { prototypes::id::SVGElement },
     310             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     311             :   JSJitInfo::Getter,
     312             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     313             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
     314             :   true,  /* isInfallible. False in setters. */
     315             :   true,  /* isMovable.  Not relevant for setters. */
     316             :   true, /* isEliminatable.  Not relevant for setters. */
     317             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     318             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     319             :   false,  /* isTypedMethod.  Only relevant for methods. */
     320             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     321             : };
     322             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     323             : static_assert(0 < 1, "There is no slot for us");
     324             : static const JSJitInfo tabIndex_setterinfo = {
     325             :   { (JSJitGetterOp)set_tabIndex },
     326             :   { prototypes::id::SVGElement },
     327             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     328             :   JSJitInfo::Setter,
     329             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     330             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     331             :   false,  /* isInfallible. False in setters. */
     332             :   false,  /* isMovable.  Not relevant for setters. */
     333             :   false, /* isEliminatable.  Not relevant for setters. */
     334             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     335             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     336             :   false,  /* isTypedMethod.  Only relevant for methods. */
     337             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     338             : };
     339             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     340             : static_assert(0 < 1, "There is no slot for us");
     341             : 
     342             : static bool
     343           0 : focus(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, const JSJitMethodCallArgs& args)
     344             : {
     345           0 :   binding_detail::FastErrorResult rv;
     346           0 :   self->Focus(rv);
     347           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     348           0 :     return false;
     349             :   }
     350           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     351           0 :   args.rval().setUndefined();
     352           0 :   return true;
     353             : }
     354             : 
     355             : static const JSJitInfo focus_methodinfo = {
     356             :   { (JSJitGetterOp)focus },
     357             :   { prototypes::id::SVGElement },
     358             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     359             :   JSJitInfo::Method,
     360             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     361             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     362             :   false,  /* isInfallible. False in setters. */
     363             :   false,  /* isMovable.  Not relevant for setters. */
     364             :   false, /* isEliminatable.  Not relevant for setters. */
     365             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     366             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     367             :   false,  /* isTypedMethod.  Only relevant for methods. */
     368             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     369             : };
     370             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     371             : static_assert(0 < 1, "There is no slot for us");
     372             : 
     373             : static bool
     374           0 : blur(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, const JSJitMethodCallArgs& args)
     375             : {
     376           0 :   binding_detail::FastErrorResult rv;
     377           0 :   self->Blur(rv);
     378           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     379           0 :     return false;
     380             :   }
     381           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     382           0 :   args.rval().setUndefined();
     383           0 :   return true;
     384             : }
     385             : 
     386             : static const JSJitInfo blur_methodinfo = {
     387             :   { (JSJitGetterOp)blur },
     388             :   { prototypes::id::SVGElement },
     389             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     390             :   JSJitInfo::Method,
     391             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     392             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     393             :   false,  /* isInfallible. False in setters. */
     394             :   false,  /* isMovable.  Not relevant for setters. */
     395             :   false, /* isEliminatable.  Not relevant for setters. */
     396             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     397             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     398             :   false,  /* isTypedMethod.  Only relevant for methods. */
     399             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     400             : };
     401             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     402             : static_assert(0 < 1, "There is no slot for us");
     403             : 
     404             : static bool
     405           0 : get_oncopy(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
     406             : {
     407           0 :   RefPtr<EventHandlerNonNull> result(self->GetOncopy());
     408           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     409           0 :   if (result) {
     410           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
     411           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
     412           0 :       return false;
     413             :     }
     414           0 :     return true;
     415             :   } else {
     416           0 :     args.rval().setNull();
     417           0 :     return true;
     418             :   }
     419             : }
     420             : 
     421             : static bool
     422           0 : set_oncopy(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
     423             : {
     424           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
     425           0 :   if (args[0].isObject()) {
     426             :     { // scope for tempRoot
     427           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
     428           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
     429             :     }
     430             :   } else {
     431           0 :     arg0 = nullptr;
     432             :   }
     433           0 :   self->SetOncopy(Constify(arg0));
     434           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     435             : 
     436           0 :   return true;
     437             : }
     438             : 
     439             : static const JSJitInfo oncopy_getterinfo = {
     440             :   { (JSJitGetterOp)get_oncopy },
     441             :   { prototypes::id::SVGElement },
     442             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     443             :   JSJitInfo::Getter,
     444             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     445             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
     446             :   false,  /* isInfallible. False in setters. */
     447             :   false,  /* isMovable.  Not relevant for setters. */
     448             :   false, /* isEliminatable.  Not relevant for setters. */
     449             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     450             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     451             :   false,  /* isTypedMethod.  Only relevant for methods. */
     452             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     453             : };
     454             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     455             : static_assert(0 < 1, "There is no slot for us");
     456             : static const JSJitInfo oncopy_setterinfo = {
     457             :   { (JSJitGetterOp)set_oncopy },
     458             :   { prototypes::id::SVGElement },
     459             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     460             :   JSJitInfo::Setter,
     461             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     462             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     463             :   false,  /* isInfallible. False in setters. */
     464             :   false,  /* isMovable.  Not relevant for setters. */
     465             :   false, /* isEliminatable.  Not relevant for setters. */
     466             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     467             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     468             :   false,  /* isTypedMethod.  Only relevant for methods. */
     469             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     470             : };
     471             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     472             : static_assert(0 < 1, "There is no slot for us");
     473             : 
     474             : static bool
     475           0 : get_oncut(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
     476             : {
     477           0 :   RefPtr<EventHandlerNonNull> result(self->GetOncut());
     478           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     479           0 :   if (result) {
     480           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
     481           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
     482           0 :       return false;
     483             :     }
     484           0 :     return true;
     485             :   } else {
     486           0 :     args.rval().setNull();
     487           0 :     return true;
     488             :   }
     489             : }
     490             : 
     491             : static bool
     492           0 : set_oncut(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
     493             : {
     494           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
     495           0 :   if (args[0].isObject()) {
     496             :     { // scope for tempRoot
     497           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
     498           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
     499             :     }
     500             :   } else {
     501           0 :     arg0 = nullptr;
     502             :   }
     503           0 :   self->SetOncut(Constify(arg0));
     504           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     505             : 
     506           0 :   return true;
     507             : }
     508             : 
     509             : static const JSJitInfo oncut_getterinfo = {
     510             :   { (JSJitGetterOp)get_oncut },
     511             :   { prototypes::id::SVGElement },
     512             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     513             :   JSJitInfo::Getter,
     514             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     515             :   JSVAL_TYPE_UNKNOWN,  /* 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             : static const JSJitInfo oncut_setterinfo = {
     527             :   { (JSJitGetterOp)set_oncut },
     528             :   { prototypes::id::SVGElement },
     529             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     530             :   JSJitInfo::Setter,
     531             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     532             :   JSVAL_TYPE_UNDEFINED,  /* 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             : 
     544             : static bool
     545           0 : get_onpaste(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
     546             : {
     547           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpaste());
     548           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     549           0 :   if (result) {
     550           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
     551           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
     552           0 :       return false;
     553             :     }
     554           0 :     return true;
     555             :   } else {
     556           0 :     args.rval().setNull();
     557           0 :     return true;
     558             :   }
     559             : }
     560             : 
     561             : static bool
     562           0 : set_onpaste(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
     563             : {
     564           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
     565           0 :   if (args[0].isObject()) {
     566             :     { // scope for tempRoot
     567           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
     568           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
     569             :     }
     570             :   } else {
     571           0 :     arg0 = nullptr;
     572             :   }
     573           0 :   self->SetOnpaste(Constify(arg0));
     574           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     575             : 
     576           0 :   return true;
     577             : }
     578             : 
     579             : static const JSJitInfo onpaste_getterinfo = {
     580             :   { (JSJitGetterOp)get_onpaste },
     581             :   { prototypes::id::SVGElement },
     582             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     583             :   JSJitInfo::Getter,
     584             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     585             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
     586             :   false,  /* isInfallible. False in setters. */
     587             :   false,  /* isMovable.  Not relevant for setters. */
     588             :   false, /* isEliminatable.  Not relevant for setters. */
     589             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     590             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     591             :   false,  /* isTypedMethod.  Only relevant for methods. */
     592             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     593             : };
     594             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     595             : static_assert(0 < 1, "There is no slot for us");
     596             : static const JSJitInfo onpaste_setterinfo = {
     597             :   { (JSJitGetterOp)set_onpaste },
     598             :   { prototypes::id::SVGElement },
     599             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     600             :   JSJitInfo::Setter,
     601             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     602             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     603             :   false,  /* isInfallible. False in setters. */
     604             :   false,  /* isMovable.  Not relevant for setters. */
     605             :   false, /* isEliminatable.  Not relevant for setters. */
     606             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     607             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     608             :   false,  /* isTypedMethod.  Only relevant for methods. */
     609             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     610             : };
     611             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     612             : static_assert(0 < 1, "There is no slot for us");
     613             : 
     614             : static bool
     615           0 : get_onabort(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
     616             : {
     617           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnabort());
     618           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     619           0 :   if (result) {
     620           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
     621           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
     622           0 :       return false;
     623             :     }
     624           0 :     return true;
     625             :   } else {
     626           0 :     args.rval().setNull();
     627           0 :     return true;
     628             :   }
     629             : }
     630             : 
     631             : static bool
     632           0 : set_onabort(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
     633             : {
     634           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
     635           0 :   if (args[0].isObject()) {
     636             :     { // scope for tempRoot
     637           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
     638           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
     639             :     }
     640             :   } else {
     641           0 :     arg0 = nullptr;
     642             :   }
     643           0 :   self->SetOnabort(Constify(arg0));
     644           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     645             : 
     646           0 :   return true;
     647             : }
     648             : 
     649             : static const JSJitInfo onabort_getterinfo = {
     650             :   { (JSJitGetterOp)get_onabort },
     651             :   { prototypes::id::SVGElement },
     652             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     653             :   JSJitInfo::Getter,
     654             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     655             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
     656             :   false,  /* isInfallible. False in setters. */
     657             :   false,  /* isMovable.  Not relevant for setters. */
     658             :   false, /* isEliminatable.  Not relevant for setters. */
     659             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     660             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     661             :   false,  /* isTypedMethod.  Only relevant for methods. */
     662             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     663             : };
     664             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     665             : static_assert(0 < 1, "There is no slot for us");
     666             : static const JSJitInfo onabort_setterinfo = {
     667             :   { (JSJitGetterOp)set_onabort },
     668             :   { prototypes::id::SVGElement },
     669             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     670             :   JSJitInfo::Setter,
     671             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     672             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     673             :   false,  /* isInfallible. False in setters. */
     674             :   false,  /* isMovable.  Not relevant for setters. */
     675             :   false, /* isEliminatable.  Not relevant for setters. */
     676             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     677             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     678             :   false,  /* isTypedMethod.  Only relevant for methods. */
     679             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     680             : };
     681             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     682             : static_assert(0 < 1, "There is no slot for us");
     683             : 
     684             : static bool
     685           0 : get_onblur(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
     686             : {
     687           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnblur());
     688           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     689           0 :   if (result) {
     690           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
     691           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
     692           0 :       return false;
     693             :     }
     694           0 :     return true;
     695             :   } else {
     696           0 :     args.rval().setNull();
     697           0 :     return true;
     698             :   }
     699             : }
     700             : 
     701             : static bool
     702           0 : set_onblur(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
     703             : {
     704           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
     705           0 :   if (args[0].isObject()) {
     706             :     { // scope for tempRoot
     707           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
     708           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
     709             :     }
     710             :   } else {
     711           0 :     arg0 = nullptr;
     712             :   }
     713           0 :   self->SetOnblur(Constify(arg0));
     714           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     715             : 
     716           0 :   return true;
     717             : }
     718             : 
     719             : static const JSJitInfo onblur_getterinfo = {
     720             :   { (JSJitGetterOp)get_onblur },
     721             :   { prototypes::id::SVGElement },
     722             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     723             :   JSJitInfo::Getter,
     724             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     725             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
     726             :   false,  /* isInfallible. False in setters. */
     727             :   false,  /* isMovable.  Not relevant for setters. */
     728             :   false, /* isEliminatable.  Not relevant for setters. */
     729             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     730             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     731             :   false,  /* isTypedMethod.  Only relevant for methods. */
     732             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     733             : };
     734             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     735             : static_assert(0 < 1, "There is no slot for us");
     736             : static const JSJitInfo onblur_setterinfo = {
     737             :   { (JSJitGetterOp)set_onblur },
     738             :   { prototypes::id::SVGElement },
     739             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     740             :   JSJitInfo::Setter,
     741             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     742             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     743             :   false,  /* isInfallible. False in setters. */
     744             :   false,  /* isMovable.  Not relevant for setters. */
     745             :   false, /* isEliminatable.  Not relevant for setters. */
     746             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     747             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     748             :   false,  /* isTypedMethod.  Only relevant for methods. */
     749             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     750             : };
     751             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     752             : static_assert(0 < 1, "There is no slot for us");
     753             : 
     754             : static bool
     755           0 : get_onfocus(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
     756             : {
     757           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnfocus());
     758           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     759           0 :   if (result) {
     760           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
     761           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
     762           0 :       return false;
     763             :     }
     764           0 :     return true;
     765             :   } else {
     766           0 :     args.rval().setNull();
     767           0 :     return true;
     768             :   }
     769             : }
     770             : 
     771             : static bool
     772           0 : set_onfocus(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
     773             : {
     774           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
     775           0 :   if (args[0].isObject()) {
     776             :     { // scope for tempRoot
     777           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
     778           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
     779             :     }
     780             :   } else {
     781           0 :     arg0 = nullptr;
     782             :   }
     783           0 :   self->SetOnfocus(Constify(arg0));
     784           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     785             : 
     786           0 :   return true;
     787             : }
     788             : 
     789             : static const JSJitInfo onfocus_getterinfo = {
     790             :   { (JSJitGetterOp)get_onfocus },
     791             :   { prototypes::id::SVGElement },
     792             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     793             :   JSJitInfo::Getter,
     794             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     795             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
     796             :   false,  /* isInfallible. False in setters. */
     797             :   false,  /* isMovable.  Not relevant for setters. */
     798             :   false, /* isEliminatable.  Not relevant for setters. */
     799             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     800             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     801             :   false,  /* isTypedMethod.  Only relevant for methods. */
     802             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     803             : };
     804             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     805             : static_assert(0 < 1, "There is no slot for us");
     806             : static const JSJitInfo onfocus_setterinfo = {
     807             :   { (JSJitGetterOp)set_onfocus },
     808             :   { prototypes::id::SVGElement },
     809             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     810             :   JSJitInfo::Setter,
     811             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     812             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     813             :   false,  /* isInfallible. False in setters. */
     814             :   false,  /* isMovable.  Not relevant for setters. */
     815             :   false, /* isEliminatable.  Not relevant for setters. */
     816             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     817             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     818             :   false,  /* isTypedMethod.  Only relevant for methods. */
     819             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     820             : };
     821             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     822             : static_assert(0 < 1, "There is no slot for us");
     823             : 
     824             : static bool
     825           0 : get_onauxclick(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
     826             : {
     827           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnauxclick());
     828           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     829           0 :   if (result) {
     830           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
     831           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
     832           0 :       return false;
     833             :     }
     834           0 :     return true;
     835             :   } else {
     836           0 :     args.rval().setNull();
     837           0 :     return true;
     838             :   }
     839             : }
     840             : 
     841             : static bool
     842           0 : set_onauxclick(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
     843             : {
     844           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
     845           0 :   if (args[0].isObject()) {
     846             :     { // scope for tempRoot
     847           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
     848           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
     849             :     }
     850             :   } else {
     851           0 :     arg0 = nullptr;
     852             :   }
     853           0 :   self->SetOnauxclick(Constify(arg0));
     854           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     855             : 
     856           0 :   return true;
     857             : }
     858             : 
     859             : static const JSJitInfo onauxclick_getterinfo = {
     860             :   { (JSJitGetterOp)get_onauxclick },
     861             :   { prototypes::id::SVGElement },
     862             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     863             :   JSJitInfo::Getter,
     864             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     865             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
     866             :   false,  /* isInfallible. False in setters. */
     867             :   false,  /* isMovable.  Not relevant for setters. */
     868             :   false, /* isEliminatable.  Not relevant for setters. */
     869             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     870             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     871             :   false,  /* isTypedMethod.  Only relevant for methods. */
     872             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     873             : };
     874             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     875             : static_assert(0 < 1, "There is no slot for us");
     876             : static const JSJitInfo onauxclick_setterinfo = {
     877             :   { (JSJitGetterOp)set_onauxclick },
     878             :   { prototypes::id::SVGElement },
     879             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     880             :   JSJitInfo::Setter,
     881             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     882             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     883             :   false,  /* isInfallible. False in setters. */
     884             :   false,  /* isMovable.  Not relevant for setters. */
     885             :   false, /* isEliminatable.  Not relevant for setters. */
     886             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     887             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     888             :   false,  /* isTypedMethod.  Only relevant for methods. */
     889             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     890             : };
     891             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     892             : static_assert(0 < 1, "There is no slot for us");
     893             : 
     894             : static bool
     895           0 : get_oncanplay(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
     896             : {
     897           0 :   RefPtr<EventHandlerNonNull> result(self->GetOncanplay());
     898           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     899           0 :   if (result) {
     900           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
     901           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
     902           0 :       return false;
     903             :     }
     904           0 :     return true;
     905             :   } else {
     906           0 :     args.rval().setNull();
     907           0 :     return true;
     908             :   }
     909             : }
     910             : 
     911             : static bool
     912           0 : set_oncanplay(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
     913             : {
     914           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
     915           0 :   if (args[0].isObject()) {
     916             :     { // scope for tempRoot
     917           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
     918           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
     919             :     }
     920             :   } else {
     921           0 :     arg0 = nullptr;
     922             :   }
     923           0 :   self->SetOncanplay(Constify(arg0));
     924           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     925             : 
     926           0 :   return true;
     927             : }
     928             : 
     929             : static const JSJitInfo oncanplay_getterinfo = {
     930             :   { (JSJitGetterOp)get_oncanplay },
     931             :   { prototypes::id::SVGElement },
     932             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     933             :   JSJitInfo::Getter,
     934             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     935             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
     936             :   false,  /* isInfallible. False in setters. */
     937             :   false,  /* isMovable.  Not relevant for setters. */
     938             :   false, /* isEliminatable.  Not relevant for setters. */
     939             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     940             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     941             :   false,  /* isTypedMethod.  Only relevant for methods. */
     942             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     943             : };
     944             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     945             : static_assert(0 < 1, "There is no slot for us");
     946             : static const JSJitInfo oncanplay_setterinfo = {
     947             :   { (JSJitGetterOp)set_oncanplay },
     948             :   { prototypes::id::SVGElement },
     949             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
     950             :   JSJitInfo::Setter,
     951             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     952             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     953             :   false,  /* isInfallible. False in setters. */
     954             :   false,  /* isMovable.  Not relevant for setters. */
     955             :   false, /* isEliminatable.  Not relevant for setters. */
     956             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     957             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     958             :   false,  /* isTypedMethod.  Only relevant for methods. */
     959             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     960             : };
     961             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     962             : static_assert(0 < 1, "There is no slot for us");
     963             : 
     964             : static bool
     965           0 : get_oncanplaythrough(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
     966             : {
     967           0 :   RefPtr<EventHandlerNonNull> result(self->GetOncanplaythrough());
     968           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     969           0 :   if (result) {
     970           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
     971           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
     972           0 :       return false;
     973             :     }
     974           0 :     return true;
     975             :   } else {
     976           0 :     args.rval().setNull();
     977           0 :     return true;
     978             :   }
     979             : }
     980             : 
     981             : static bool
     982           0 : set_oncanplaythrough(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
     983             : {
     984           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
     985           0 :   if (args[0].isObject()) {
     986             :     { // scope for tempRoot
     987           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
     988           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
     989             :     }
     990             :   } else {
     991           0 :     arg0 = nullptr;
     992             :   }
     993           0 :   self->SetOncanplaythrough(Constify(arg0));
     994           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     995             : 
     996           0 :   return true;
     997             : }
     998             : 
     999             : static const JSJitInfo oncanplaythrough_getterinfo = {
    1000             :   { (JSJitGetterOp)get_oncanplaythrough },
    1001             :   { prototypes::id::SVGElement },
    1002             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1003             :   JSJitInfo::Getter,
    1004             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1005             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1006             :   false,  /* isInfallible. False in setters. */
    1007             :   false,  /* isMovable.  Not relevant for setters. */
    1008             :   false, /* isEliminatable.  Not relevant for setters. */
    1009             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1010             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1011             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1012             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1013             : };
    1014             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1015             : static_assert(0 < 1, "There is no slot for us");
    1016             : static const JSJitInfo oncanplaythrough_setterinfo = {
    1017             :   { (JSJitGetterOp)set_oncanplaythrough },
    1018             :   { prototypes::id::SVGElement },
    1019             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1020             :   JSJitInfo::Setter,
    1021             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1022             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1023             :   false,  /* isInfallible. False in setters. */
    1024             :   false,  /* isMovable.  Not relevant for setters. */
    1025             :   false, /* isEliminatable.  Not relevant for setters. */
    1026             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1027             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1028             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1029             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1030             : };
    1031             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1032             : static_assert(0 < 1, "There is no slot for us");
    1033             : 
    1034             : static bool
    1035           0 : get_onchange(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    1036             : {
    1037           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnchange());
    1038           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1039           0 :   if (result) {
    1040           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    1041           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    1042           0 :       return false;
    1043             :     }
    1044           0 :     return true;
    1045             :   } else {
    1046           0 :     args.rval().setNull();
    1047           0 :     return true;
    1048             :   }
    1049             : }
    1050             : 
    1051             : static bool
    1052           0 : set_onchange(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    1053             : {
    1054           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    1055           0 :   if (args[0].isObject()) {
    1056             :     { // scope for tempRoot
    1057           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    1058           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    1059             :     }
    1060             :   } else {
    1061           0 :     arg0 = nullptr;
    1062             :   }
    1063           0 :   self->SetOnchange(Constify(arg0));
    1064           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1065             : 
    1066           0 :   return true;
    1067             : }
    1068             : 
    1069             : static const JSJitInfo onchange_getterinfo = {
    1070             :   { (JSJitGetterOp)get_onchange },
    1071             :   { prototypes::id::SVGElement },
    1072             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1073             :   JSJitInfo::Getter,
    1074             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1075             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1076             :   false,  /* isInfallible. False in setters. */
    1077             :   false,  /* isMovable.  Not relevant for setters. */
    1078             :   false, /* isEliminatable.  Not relevant for setters. */
    1079             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1080             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1081             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1082             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1083             : };
    1084             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1085             : static_assert(0 < 1, "There is no slot for us");
    1086             : static const JSJitInfo onchange_setterinfo = {
    1087             :   { (JSJitGetterOp)set_onchange },
    1088             :   { prototypes::id::SVGElement },
    1089             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1090             :   JSJitInfo::Setter,
    1091             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1092             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1093             :   false,  /* isInfallible. False in setters. */
    1094             :   false,  /* isMovable.  Not relevant for setters. */
    1095             :   false, /* isEliminatable.  Not relevant for setters. */
    1096             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1097             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1098             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1099             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1100             : };
    1101             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1102             : static_assert(0 < 1, "There is no slot for us");
    1103             : 
    1104             : static bool
    1105           0 : get_onclick(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    1106             : {
    1107           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnclick());
    1108           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1109           0 :   if (result) {
    1110           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    1111           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    1112           0 :       return false;
    1113             :     }
    1114           0 :     return true;
    1115             :   } else {
    1116           0 :     args.rval().setNull();
    1117           0 :     return true;
    1118             :   }
    1119             : }
    1120             : 
    1121             : static bool
    1122           0 : set_onclick(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    1123             : {
    1124           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    1125           0 :   if (args[0].isObject()) {
    1126             :     { // scope for tempRoot
    1127           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    1128           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    1129             :     }
    1130             :   } else {
    1131           0 :     arg0 = nullptr;
    1132             :   }
    1133           0 :   self->SetOnclick(Constify(arg0));
    1134           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1135             : 
    1136           0 :   return true;
    1137             : }
    1138             : 
    1139             : static const JSJitInfo onclick_getterinfo = {
    1140             :   { (JSJitGetterOp)get_onclick },
    1141             :   { prototypes::id::SVGElement },
    1142             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1143             :   JSJitInfo::Getter,
    1144             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1145             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1146             :   false,  /* isInfallible. False in setters. */
    1147             :   false,  /* isMovable.  Not relevant for setters. */
    1148             :   false, /* isEliminatable.  Not relevant for setters. */
    1149             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1150             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1151             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1152             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1153             : };
    1154             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1155             : static_assert(0 < 1, "There is no slot for us");
    1156             : static const JSJitInfo onclick_setterinfo = {
    1157             :   { (JSJitGetterOp)set_onclick },
    1158             :   { prototypes::id::SVGElement },
    1159             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1160             :   JSJitInfo::Setter,
    1161             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1162             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1163             :   false,  /* isInfallible. False in setters. */
    1164             :   false,  /* isMovable.  Not relevant for setters. */
    1165             :   false, /* isEliminatable.  Not relevant for setters. */
    1166             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1167             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1168             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1169             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1170             : };
    1171             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1172             : static_assert(0 < 1, "There is no slot for us");
    1173             : 
    1174             : static bool
    1175           0 : get_onclose(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    1176             : {
    1177           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnclose());
    1178           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1179           0 :   if (result) {
    1180           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    1181           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    1182           0 :       return false;
    1183             :     }
    1184           0 :     return true;
    1185             :   } else {
    1186           0 :     args.rval().setNull();
    1187           0 :     return true;
    1188             :   }
    1189             : }
    1190             : 
    1191             : static bool
    1192           0 : set_onclose(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    1193             : {
    1194           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    1195           0 :   if (args[0].isObject()) {
    1196             :     { // scope for tempRoot
    1197           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    1198           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    1199             :     }
    1200             :   } else {
    1201           0 :     arg0 = nullptr;
    1202             :   }
    1203           0 :   self->SetOnclose(Constify(arg0));
    1204           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1205             : 
    1206           0 :   return true;
    1207             : }
    1208             : 
    1209             : static const JSJitInfo onclose_getterinfo = {
    1210             :   { (JSJitGetterOp)get_onclose },
    1211             :   { prototypes::id::SVGElement },
    1212             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1213             :   JSJitInfo::Getter,
    1214             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1215             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1216             :   false,  /* isInfallible. False in setters. */
    1217             :   false,  /* isMovable.  Not relevant for setters. */
    1218             :   false, /* isEliminatable.  Not relevant for setters. */
    1219             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1220             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1221             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1222             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1223             : };
    1224             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1225             : static_assert(0 < 1, "There is no slot for us");
    1226             : static const JSJitInfo onclose_setterinfo = {
    1227             :   { (JSJitGetterOp)set_onclose },
    1228             :   { prototypes::id::SVGElement },
    1229             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1230             :   JSJitInfo::Setter,
    1231             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1232             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1233             :   false,  /* isInfallible. False in setters. */
    1234             :   false,  /* isMovable.  Not relevant for setters. */
    1235             :   false, /* isEliminatable.  Not relevant for setters. */
    1236             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1237             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1238             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1239             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1240             : };
    1241             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1242             : static_assert(0 < 1, "There is no slot for us");
    1243             : 
    1244             : static bool
    1245           0 : get_oncontextmenu(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    1246             : {
    1247           0 :   RefPtr<EventHandlerNonNull> result(self->GetOncontextmenu());
    1248           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1249           0 :   if (result) {
    1250           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    1251           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    1252           0 :       return false;
    1253             :     }
    1254           0 :     return true;
    1255             :   } else {
    1256           0 :     args.rval().setNull();
    1257           0 :     return true;
    1258             :   }
    1259             : }
    1260             : 
    1261             : static bool
    1262           0 : set_oncontextmenu(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    1263             : {
    1264           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    1265           0 :   if (args[0].isObject()) {
    1266             :     { // scope for tempRoot
    1267           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    1268           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    1269             :     }
    1270             :   } else {
    1271           0 :     arg0 = nullptr;
    1272             :   }
    1273           0 :   self->SetOncontextmenu(Constify(arg0));
    1274           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1275             : 
    1276           0 :   return true;
    1277             : }
    1278             : 
    1279             : static const JSJitInfo oncontextmenu_getterinfo = {
    1280             :   { (JSJitGetterOp)get_oncontextmenu },
    1281             :   { prototypes::id::SVGElement },
    1282             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1283             :   JSJitInfo::Getter,
    1284             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1285             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1286             :   false,  /* isInfallible. False in setters. */
    1287             :   false,  /* isMovable.  Not relevant for setters. */
    1288             :   false, /* isEliminatable.  Not relevant for setters. */
    1289             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1290             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1291             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1292             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1293             : };
    1294             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1295             : static_assert(0 < 1, "There is no slot for us");
    1296             : static const JSJitInfo oncontextmenu_setterinfo = {
    1297             :   { (JSJitGetterOp)set_oncontextmenu },
    1298             :   { prototypes::id::SVGElement },
    1299             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1300             :   JSJitInfo::Setter,
    1301             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1302             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1303             :   false,  /* isInfallible. False in setters. */
    1304             :   false,  /* isMovable.  Not relevant for setters. */
    1305             :   false, /* isEliminatable.  Not relevant for setters. */
    1306             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1307             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1308             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1309             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1310             : };
    1311             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1312             : static_assert(0 < 1, "There is no slot for us");
    1313             : 
    1314             : static bool
    1315           0 : get_ondblclick(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    1316             : {
    1317           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndblclick());
    1318           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1319           0 :   if (result) {
    1320           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    1321           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    1322           0 :       return false;
    1323             :     }
    1324           0 :     return true;
    1325             :   } else {
    1326           0 :     args.rval().setNull();
    1327           0 :     return true;
    1328             :   }
    1329             : }
    1330             : 
    1331             : static bool
    1332           0 : set_ondblclick(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    1333             : {
    1334           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    1335           0 :   if (args[0].isObject()) {
    1336             :     { // scope for tempRoot
    1337           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    1338           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    1339             :     }
    1340             :   } else {
    1341           0 :     arg0 = nullptr;
    1342             :   }
    1343           0 :   self->SetOndblclick(Constify(arg0));
    1344           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1345             : 
    1346           0 :   return true;
    1347             : }
    1348             : 
    1349             : static const JSJitInfo ondblclick_getterinfo = {
    1350             :   { (JSJitGetterOp)get_ondblclick },
    1351             :   { prototypes::id::SVGElement },
    1352             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1353             :   JSJitInfo::Getter,
    1354             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1355             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1356             :   false,  /* isInfallible. False in setters. */
    1357             :   false,  /* isMovable.  Not relevant for setters. */
    1358             :   false, /* isEliminatable.  Not relevant for setters. */
    1359             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1360             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1361             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1362             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1363             : };
    1364             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1365             : static_assert(0 < 1, "There is no slot for us");
    1366             : static const JSJitInfo ondblclick_setterinfo = {
    1367             :   { (JSJitGetterOp)set_ondblclick },
    1368             :   { prototypes::id::SVGElement },
    1369             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1370             :   JSJitInfo::Setter,
    1371             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1372             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1373             :   false,  /* isInfallible. False in setters. */
    1374             :   false,  /* isMovable.  Not relevant for setters. */
    1375             :   false, /* isEliminatable.  Not relevant for setters. */
    1376             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1377             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1378             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1379             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1380             : };
    1381             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1382             : static_assert(0 < 1, "There is no slot for us");
    1383             : 
    1384             : static bool
    1385           0 : get_ondrag(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    1386             : {
    1387           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndrag());
    1388           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1389           0 :   if (result) {
    1390           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    1391           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    1392           0 :       return false;
    1393             :     }
    1394           0 :     return true;
    1395             :   } else {
    1396           0 :     args.rval().setNull();
    1397           0 :     return true;
    1398             :   }
    1399             : }
    1400             : 
    1401             : static bool
    1402           0 : set_ondrag(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    1403             : {
    1404           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    1405           0 :   if (args[0].isObject()) {
    1406             :     { // scope for tempRoot
    1407           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    1408           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    1409             :     }
    1410             :   } else {
    1411           0 :     arg0 = nullptr;
    1412             :   }
    1413           0 :   self->SetOndrag(Constify(arg0));
    1414           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1415             : 
    1416           0 :   return true;
    1417             : }
    1418             : 
    1419             : static const JSJitInfo ondrag_getterinfo = {
    1420             :   { (JSJitGetterOp)get_ondrag },
    1421             :   { prototypes::id::SVGElement },
    1422             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1423             :   JSJitInfo::Getter,
    1424             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1425             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1426             :   false,  /* isInfallible. False in setters. */
    1427             :   false,  /* isMovable.  Not relevant for setters. */
    1428             :   false, /* isEliminatable.  Not relevant for setters. */
    1429             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1430             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1431             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1432             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1433             : };
    1434             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1435             : static_assert(0 < 1, "There is no slot for us");
    1436             : static const JSJitInfo ondrag_setterinfo = {
    1437             :   { (JSJitGetterOp)set_ondrag },
    1438             :   { prototypes::id::SVGElement },
    1439             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1440             :   JSJitInfo::Setter,
    1441             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1442             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1443             :   false,  /* isInfallible. False in setters. */
    1444             :   false,  /* isMovable.  Not relevant for setters. */
    1445             :   false, /* isEliminatable.  Not relevant for setters. */
    1446             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1447             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1448             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1449             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1450             : };
    1451             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1452             : static_assert(0 < 1, "There is no slot for us");
    1453             : 
    1454             : static bool
    1455           0 : get_ondragend(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    1456             : {
    1457           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragend());
    1458           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1459           0 :   if (result) {
    1460           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    1461           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    1462           0 :       return false;
    1463             :     }
    1464           0 :     return true;
    1465             :   } else {
    1466           0 :     args.rval().setNull();
    1467           0 :     return true;
    1468             :   }
    1469             : }
    1470             : 
    1471             : static bool
    1472           0 : set_ondragend(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    1473             : {
    1474           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    1475           0 :   if (args[0].isObject()) {
    1476             :     { // scope for tempRoot
    1477           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    1478           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    1479             :     }
    1480             :   } else {
    1481           0 :     arg0 = nullptr;
    1482             :   }
    1483           0 :   self->SetOndragend(Constify(arg0));
    1484           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1485             : 
    1486           0 :   return true;
    1487             : }
    1488             : 
    1489             : static const JSJitInfo ondragend_getterinfo = {
    1490             :   { (JSJitGetterOp)get_ondragend },
    1491             :   { prototypes::id::SVGElement },
    1492             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1493             :   JSJitInfo::Getter,
    1494             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1495             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1496             :   false,  /* isInfallible. False in setters. */
    1497             :   false,  /* isMovable.  Not relevant for setters. */
    1498             :   false, /* isEliminatable.  Not relevant for setters. */
    1499             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1500             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1501             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1502             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1503             : };
    1504             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1505             : static_assert(0 < 1, "There is no slot for us");
    1506             : static const JSJitInfo ondragend_setterinfo = {
    1507             :   { (JSJitGetterOp)set_ondragend },
    1508             :   { prototypes::id::SVGElement },
    1509             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1510             :   JSJitInfo::Setter,
    1511             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1512             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1513             :   false,  /* isInfallible. False in setters. */
    1514             :   false,  /* isMovable.  Not relevant for setters. */
    1515             :   false, /* isEliminatable.  Not relevant for setters. */
    1516             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1517             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1518             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1519             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1520             : };
    1521             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1522             : static_assert(0 < 1, "There is no slot for us");
    1523             : 
    1524             : static bool
    1525           0 : get_ondragenter(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    1526             : {
    1527           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragenter());
    1528           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1529           0 :   if (result) {
    1530           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    1531           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    1532           0 :       return false;
    1533             :     }
    1534           0 :     return true;
    1535             :   } else {
    1536           0 :     args.rval().setNull();
    1537           0 :     return true;
    1538             :   }
    1539             : }
    1540             : 
    1541             : static bool
    1542           0 : set_ondragenter(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    1543             : {
    1544           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    1545           0 :   if (args[0].isObject()) {
    1546             :     { // scope for tempRoot
    1547           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    1548           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    1549             :     }
    1550             :   } else {
    1551           0 :     arg0 = nullptr;
    1552             :   }
    1553           0 :   self->SetOndragenter(Constify(arg0));
    1554           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1555             : 
    1556           0 :   return true;
    1557             : }
    1558             : 
    1559             : static const JSJitInfo ondragenter_getterinfo = {
    1560             :   { (JSJitGetterOp)get_ondragenter },
    1561             :   { prototypes::id::SVGElement },
    1562             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1563             :   JSJitInfo::Getter,
    1564             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1565             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1566             :   false,  /* isInfallible. False in setters. */
    1567             :   false,  /* isMovable.  Not relevant for setters. */
    1568             :   false, /* isEliminatable.  Not relevant for setters. */
    1569             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1570             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1571             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1572             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1573             : };
    1574             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1575             : static_assert(0 < 1, "There is no slot for us");
    1576             : static const JSJitInfo ondragenter_setterinfo = {
    1577             :   { (JSJitGetterOp)set_ondragenter },
    1578             :   { prototypes::id::SVGElement },
    1579             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1580             :   JSJitInfo::Setter,
    1581             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1582             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1583             :   false,  /* isInfallible. False in setters. */
    1584             :   false,  /* isMovable.  Not relevant for setters. */
    1585             :   false, /* isEliminatable.  Not relevant for setters. */
    1586             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1587             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1588             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1589             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1590             : };
    1591             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1592             : static_assert(0 < 1, "There is no slot for us");
    1593             : 
    1594             : static bool
    1595           0 : get_ondragexit(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    1596             : {
    1597           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragexit());
    1598           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1599           0 :   if (result) {
    1600           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    1601           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    1602           0 :       return false;
    1603             :     }
    1604           0 :     return true;
    1605             :   } else {
    1606           0 :     args.rval().setNull();
    1607           0 :     return true;
    1608             :   }
    1609             : }
    1610             : 
    1611             : static bool
    1612           0 : set_ondragexit(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    1613             : {
    1614           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    1615           0 :   if (args[0].isObject()) {
    1616             :     { // scope for tempRoot
    1617           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    1618           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    1619             :     }
    1620             :   } else {
    1621           0 :     arg0 = nullptr;
    1622             :   }
    1623           0 :   self->SetOndragexit(Constify(arg0));
    1624           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1625             : 
    1626           0 :   return true;
    1627             : }
    1628             : 
    1629             : static const JSJitInfo ondragexit_getterinfo = {
    1630             :   { (JSJitGetterOp)get_ondragexit },
    1631             :   { prototypes::id::SVGElement },
    1632             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1633             :   JSJitInfo::Getter,
    1634             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1635             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1636             :   false,  /* isInfallible. False in setters. */
    1637             :   false,  /* isMovable.  Not relevant for setters. */
    1638             :   false, /* isEliminatable.  Not relevant for setters. */
    1639             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1640             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1641             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1642             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1643             : };
    1644             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1645             : static_assert(0 < 1, "There is no slot for us");
    1646             : static const JSJitInfo ondragexit_setterinfo = {
    1647             :   { (JSJitGetterOp)set_ondragexit },
    1648             :   { prototypes::id::SVGElement },
    1649             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1650             :   JSJitInfo::Setter,
    1651             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1652             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1653             :   false,  /* isInfallible. False in setters. */
    1654             :   false,  /* isMovable.  Not relevant for setters. */
    1655             :   false, /* isEliminatable.  Not relevant for setters. */
    1656             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1657             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1658             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1659             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1660             : };
    1661             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1662             : static_assert(0 < 1, "There is no slot for us");
    1663             : 
    1664             : static bool
    1665           0 : get_ondragleave(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    1666             : {
    1667           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragleave());
    1668           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1669           0 :   if (result) {
    1670           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    1671           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    1672           0 :       return false;
    1673             :     }
    1674           0 :     return true;
    1675             :   } else {
    1676           0 :     args.rval().setNull();
    1677           0 :     return true;
    1678             :   }
    1679             : }
    1680             : 
    1681             : static bool
    1682           0 : set_ondragleave(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    1683             : {
    1684           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    1685           0 :   if (args[0].isObject()) {
    1686             :     { // scope for tempRoot
    1687           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    1688           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    1689             :     }
    1690             :   } else {
    1691           0 :     arg0 = nullptr;
    1692             :   }
    1693           0 :   self->SetOndragleave(Constify(arg0));
    1694           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1695             : 
    1696           0 :   return true;
    1697             : }
    1698             : 
    1699             : static const JSJitInfo ondragleave_getterinfo = {
    1700             :   { (JSJitGetterOp)get_ondragleave },
    1701             :   { prototypes::id::SVGElement },
    1702             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1703             :   JSJitInfo::Getter,
    1704             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1705             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1706             :   false,  /* isInfallible. False in setters. */
    1707             :   false,  /* isMovable.  Not relevant for setters. */
    1708             :   false, /* isEliminatable.  Not relevant for setters. */
    1709             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1710             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1711             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1712             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1713             : };
    1714             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1715             : static_assert(0 < 1, "There is no slot for us");
    1716             : static const JSJitInfo ondragleave_setterinfo = {
    1717             :   { (JSJitGetterOp)set_ondragleave },
    1718             :   { prototypes::id::SVGElement },
    1719             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1720             :   JSJitInfo::Setter,
    1721             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1722             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1723             :   false,  /* isInfallible. False in setters. */
    1724             :   false,  /* isMovable.  Not relevant for setters. */
    1725             :   false, /* isEliminatable.  Not relevant for setters. */
    1726             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1727             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1728             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1729             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1730             : };
    1731             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1732             : static_assert(0 < 1, "There is no slot for us");
    1733             : 
    1734             : static bool
    1735           0 : get_ondragover(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    1736             : {
    1737           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragover());
    1738           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1739           0 :   if (result) {
    1740           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    1741           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    1742           0 :       return false;
    1743             :     }
    1744           0 :     return true;
    1745             :   } else {
    1746           0 :     args.rval().setNull();
    1747           0 :     return true;
    1748             :   }
    1749             : }
    1750             : 
    1751             : static bool
    1752           0 : set_ondragover(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    1753             : {
    1754           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    1755           0 :   if (args[0].isObject()) {
    1756             :     { // scope for tempRoot
    1757           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    1758           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    1759             :     }
    1760             :   } else {
    1761           0 :     arg0 = nullptr;
    1762             :   }
    1763           0 :   self->SetOndragover(Constify(arg0));
    1764           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1765             : 
    1766           0 :   return true;
    1767             : }
    1768             : 
    1769             : static const JSJitInfo ondragover_getterinfo = {
    1770             :   { (JSJitGetterOp)get_ondragover },
    1771             :   { prototypes::id::SVGElement },
    1772             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1773             :   JSJitInfo::Getter,
    1774             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1775             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1776             :   false,  /* isInfallible. False in setters. */
    1777             :   false,  /* isMovable.  Not relevant for setters. */
    1778             :   false, /* isEliminatable.  Not relevant for setters. */
    1779             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1780             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1781             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1782             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1783             : };
    1784             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1785             : static_assert(0 < 1, "There is no slot for us");
    1786             : static const JSJitInfo ondragover_setterinfo = {
    1787             :   { (JSJitGetterOp)set_ondragover },
    1788             :   { prototypes::id::SVGElement },
    1789             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1790             :   JSJitInfo::Setter,
    1791             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1792             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1793             :   false,  /* isInfallible. False in setters. */
    1794             :   false,  /* isMovable.  Not relevant for setters. */
    1795             :   false, /* isEliminatable.  Not relevant for setters. */
    1796             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1797             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1798             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1799             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1800             : };
    1801             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1802             : static_assert(0 < 1, "There is no slot for us");
    1803             : 
    1804             : static bool
    1805           0 : get_ondragstart(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    1806             : {
    1807           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragstart());
    1808           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1809           0 :   if (result) {
    1810           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    1811           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    1812           0 :       return false;
    1813             :     }
    1814           0 :     return true;
    1815             :   } else {
    1816           0 :     args.rval().setNull();
    1817           0 :     return true;
    1818             :   }
    1819             : }
    1820             : 
    1821             : static bool
    1822           0 : set_ondragstart(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    1823             : {
    1824           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    1825           0 :   if (args[0].isObject()) {
    1826             :     { // scope for tempRoot
    1827           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    1828           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    1829             :     }
    1830             :   } else {
    1831           0 :     arg0 = nullptr;
    1832             :   }
    1833           0 :   self->SetOndragstart(Constify(arg0));
    1834           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1835             : 
    1836           0 :   return true;
    1837             : }
    1838             : 
    1839             : static const JSJitInfo ondragstart_getterinfo = {
    1840             :   { (JSJitGetterOp)get_ondragstart },
    1841             :   { prototypes::id::SVGElement },
    1842             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1843             :   JSJitInfo::Getter,
    1844             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1845             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1846             :   false,  /* isInfallible. False in setters. */
    1847             :   false,  /* isMovable.  Not relevant for setters. */
    1848             :   false, /* isEliminatable.  Not relevant for setters. */
    1849             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1850             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1851             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1852             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1853             : };
    1854             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1855             : static_assert(0 < 1, "There is no slot for us");
    1856             : static const JSJitInfo ondragstart_setterinfo = {
    1857             :   { (JSJitGetterOp)set_ondragstart },
    1858             :   { prototypes::id::SVGElement },
    1859             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1860             :   JSJitInfo::Setter,
    1861             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1862             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1863             :   false,  /* isInfallible. False in setters. */
    1864             :   false,  /* isMovable.  Not relevant for setters. */
    1865             :   false, /* isEliminatable.  Not relevant for setters. */
    1866             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1867             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1868             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1869             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1870             : };
    1871             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1872             : static_assert(0 < 1, "There is no slot for us");
    1873             : 
    1874             : static bool
    1875           0 : get_ondrop(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    1876             : {
    1877           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndrop());
    1878           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1879           0 :   if (result) {
    1880           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    1881           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    1882           0 :       return false;
    1883             :     }
    1884           0 :     return true;
    1885             :   } else {
    1886           0 :     args.rval().setNull();
    1887           0 :     return true;
    1888             :   }
    1889             : }
    1890             : 
    1891             : static bool
    1892           0 : set_ondrop(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    1893             : {
    1894           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    1895           0 :   if (args[0].isObject()) {
    1896             :     { // scope for tempRoot
    1897           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    1898           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    1899             :     }
    1900             :   } else {
    1901           0 :     arg0 = nullptr;
    1902             :   }
    1903           0 :   self->SetOndrop(Constify(arg0));
    1904           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1905             : 
    1906           0 :   return true;
    1907             : }
    1908             : 
    1909             : static const JSJitInfo ondrop_getterinfo = {
    1910             :   { (JSJitGetterOp)get_ondrop },
    1911             :   { prototypes::id::SVGElement },
    1912             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1913             :   JSJitInfo::Getter,
    1914             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1915             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1916             :   false,  /* isInfallible. False in setters. */
    1917             :   false,  /* isMovable.  Not relevant for setters. */
    1918             :   false, /* isEliminatable.  Not relevant for setters. */
    1919             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1920             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1921             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1922             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1923             : };
    1924             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1925             : static_assert(0 < 1, "There is no slot for us");
    1926             : static const JSJitInfo ondrop_setterinfo = {
    1927             :   { (JSJitGetterOp)set_ondrop },
    1928             :   { prototypes::id::SVGElement },
    1929             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1930             :   JSJitInfo::Setter,
    1931             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1932             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1933             :   false,  /* isInfallible. False in setters. */
    1934             :   false,  /* isMovable.  Not relevant for setters. */
    1935             :   false, /* isEliminatable.  Not relevant for setters. */
    1936             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1937             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1938             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1939             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1940             : };
    1941             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1942             : static_assert(0 < 1, "There is no slot for us");
    1943             : 
    1944             : static bool
    1945           0 : get_ondurationchange(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    1946             : {
    1947           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndurationchange());
    1948           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1949           0 :   if (result) {
    1950           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    1951           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    1952           0 :       return false;
    1953             :     }
    1954           0 :     return true;
    1955             :   } else {
    1956           0 :     args.rval().setNull();
    1957           0 :     return true;
    1958             :   }
    1959             : }
    1960             : 
    1961             : static bool
    1962           0 : set_ondurationchange(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    1963             : {
    1964           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    1965           0 :   if (args[0].isObject()) {
    1966             :     { // scope for tempRoot
    1967           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    1968           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    1969             :     }
    1970             :   } else {
    1971           0 :     arg0 = nullptr;
    1972             :   }
    1973           0 :   self->SetOndurationchange(Constify(arg0));
    1974           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1975             : 
    1976           0 :   return true;
    1977             : }
    1978             : 
    1979             : static const JSJitInfo ondurationchange_getterinfo = {
    1980             :   { (JSJitGetterOp)get_ondurationchange },
    1981             :   { prototypes::id::SVGElement },
    1982             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    1983             :   JSJitInfo::Getter,
    1984             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1985             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1986             :   false,  /* isInfallible. False in setters. */
    1987             :   false,  /* isMovable.  Not relevant for setters. */
    1988             :   false, /* isEliminatable.  Not relevant for setters. */
    1989             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1990             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1991             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1992             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1993             : };
    1994             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1995             : static_assert(0 < 1, "There is no slot for us");
    1996             : static const JSJitInfo ondurationchange_setterinfo = {
    1997             :   { (JSJitGetterOp)set_ondurationchange },
    1998             :   { prototypes::id::SVGElement },
    1999             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2000             :   JSJitInfo::Setter,
    2001             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2002             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2003             :   false,  /* isInfallible. False in setters. */
    2004             :   false,  /* isMovable.  Not relevant for setters. */
    2005             :   false, /* isEliminatable.  Not relevant for setters. */
    2006             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2007             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2008             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2009             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2010             : };
    2011             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2012             : static_assert(0 < 1, "There is no slot for us");
    2013             : 
    2014             : static bool
    2015           0 : get_onemptied(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    2016             : {
    2017           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnemptied());
    2018           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2019           0 :   if (result) {
    2020           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2021           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2022           0 :       return false;
    2023             :     }
    2024           0 :     return true;
    2025             :   } else {
    2026           0 :     args.rval().setNull();
    2027           0 :     return true;
    2028             :   }
    2029             : }
    2030             : 
    2031             : static bool
    2032           0 : set_onemptied(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    2033             : {
    2034           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2035           0 :   if (args[0].isObject()) {
    2036             :     { // scope for tempRoot
    2037           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2038           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2039             :     }
    2040             :   } else {
    2041           0 :     arg0 = nullptr;
    2042             :   }
    2043           0 :   self->SetOnemptied(Constify(arg0));
    2044           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2045             : 
    2046           0 :   return true;
    2047             : }
    2048             : 
    2049             : static const JSJitInfo onemptied_getterinfo = {
    2050             :   { (JSJitGetterOp)get_onemptied },
    2051             :   { prototypes::id::SVGElement },
    2052             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2053             :   JSJitInfo::Getter,
    2054             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2055             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2056             :   false,  /* isInfallible. False in setters. */
    2057             :   false,  /* isMovable.  Not relevant for setters. */
    2058             :   false, /* isEliminatable.  Not relevant for setters. */
    2059             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2060             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2061             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2062             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2063             : };
    2064             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2065             : static_assert(0 < 1, "There is no slot for us");
    2066             : static const JSJitInfo onemptied_setterinfo = {
    2067             :   { (JSJitGetterOp)set_onemptied },
    2068             :   { prototypes::id::SVGElement },
    2069             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2070             :   JSJitInfo::Setter,
    2071             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2072             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2073             :   false,  /* isInfallible. False in setters. */
    2074             :   false,  /* isMovable.  Not relevant for setters. */
    2075             :   false, /* isEliminatable.  Not relevant for setters. */
    2076             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2077             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2078             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2079             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2080             : };
    2081             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2082             : static_assert(0 < 1, "There is no slot for us");
    2083             : 
    2084             : static bool
    2085           0 : get_onended(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    2086             : {
    2087           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnended());
    2088           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2089           0 :   if (result) {
    2090           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2091           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2092           0 :       return false;
    2093             :     }
    2094           0 :     return true;
    2095             :   } else {
    2096           0 :     args.rval().setNull();
    2097           0 :     return true;
    2098             :   }
    2099             : }
    2100             : 
    2101             : static bool
    2102           0 : set_onended(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    2103             : {
    2104           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2105           0 :   if (args[0].isObject()) {
    2106             :     { // scope for tempRoot
    2107           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2108           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2109             :     }
    2110             :   } else {
    2111           0 :     arg0 = nullptr;
    2112             :   }
    2113           0 :   self->SetOnended(Constify(arg0));
    2114           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2115             : 
    2116           0 :   return true;
    2117             : }
    2118             : 
    2119             : static const JSJitInfo onended_getterinfo = {
    2120             :   { (JSJitGetterOp)get_onended },
    2121             :   { prototypes::id::SVGElement },
    2122             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2123             :   JSJitInfo::Getter,
    2124             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2125             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2126             :   false,  /* isInfallible. False in setters. */
    2127             :   false,  /* isMovable.  Not relevant for setters. */
    2128             :   false, /* isEliminatable.  Not relevant for setters. */
    2129             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2130             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2131             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2132             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2133             : };
    2134             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2135             : static_assert(0 < 1, "There is no slot for us");
    2136             : static const JSJitInfo onended_setterinfo = {
    2137             :   { (JSJitGetterOp)set_onended },
    2138             :   { prototypes::id::SVGElement },
    2139             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2140             :   JSJitInfo::Setter,
    2141             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2142             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2143             :   false,  /* isInfallible. False in setters. */
    2144             :   false,  /* isMovable.  Not relevant for setters. */
    2145             :   false, /* isEliminatable.  Not relevant for setters. */
    2146             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2147             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2148             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2149             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2150             : };
    2151             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2152             : static_assert(0 < 1, "There is no slot for us");
    2153             : 
    2154             : static bool
    2155           0 : get_oninput(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    2156             : {
    2157           0 :   RefPtr<EventHandlerNonNull> result(self->GetOninput());
    2158           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2159           0 :   if (result) {
    2160           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2161           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2162           0 :       return false;
    2163             :     }
    2164           0 :     return true;
    2165             :   } else {
    2166           0 :     args.rval().setNull();
    2167           0 :     return true;
    2168             :   }
    2169             : }
    2170             : 
    2171             : static bool
    2172           0 : set_oninput(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    2173             : {
    2174           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2175           0 :   if (args[0].isObject()) {
    2176             :     { // scope for tempRoot
    2177           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2178           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2179             :     }
    2180             :   } else {
    2181           0 :     arg0 = nullptr;
    2182             :   }
    2183           0 :   self->SetOninput(Constify(arg0));
    2184           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2185             : 
    2186           0 :   return true;
    2187             : }
    2188             : 
    2189             : static const JSJitInfo oninput_getterinfo = {
    2190             :   { (JSJitGetterOp)get_oninput },
    2191             :   { prototypes::id::SVGElement },
    2192             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2193             :   JSJitInfo::Getter,
    2194             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2195             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2196             :   false,  /* isInfallible. False in setters. */
    2197             :   false,  /* isMovable.  Not relevant for setters. */
    2198             :   false, /* isEliminatable.  Not relevant for setters. */
    2199             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2200             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2201             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2202             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2203             : };
    2204             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2205             : static_assert(0 < 1, "There is no slot for us");
    2206             : static const JSJitInfo oninput_setterinfo = {
    2207             :   { (JSJitGetterOp)set_oninput },
    2208             :   { prototypes::id::SVGElement },
    2209             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2210             :   JSJitInfo::Setter,
    2211             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2212             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2213             :   false,  /* isInfallible. False in setters. */
    2214             :   false,  /* isMovable.  Not relevant for setters. */
    2215             :   false, /* isEliminatable.  Not relevant for setters. */
    2216             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2217             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2218             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2219             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2220             : };
    2221             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2222             : static_assert(0 < 1, "There is no slot for us");
    2223             : 
    2224             : static bool
    2225           0 : get_oninvalid(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    2226             : {
    2227           0 :   RefPtr<EventHandlerNonNull> result(self->GetOninvalid());
    2228           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2229           0 :   if (result) {
    2230           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2231           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2232           0 :       return false;
    2233             :     }
    2234           0 :     return true;
    2235             :   } else {
    2236           0 :     args.rval().setNull();
    2237           0 :     return true;
    2238             :   }
    2239             : }
    2240             : 
    2241             : static bool
    2242           0 : set_oninvalid(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    2243             : {
    2244           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2245           0 :   if (args[0].isObject()) {
    2246             :     { // scope for tempRoot
    2247           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2248           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2249             :     }
    2250             :   } else {
    2251           0 :     arg0 = nullptr;
    2252             :   }
    2253           0 :   self->SetOninvalid(Constify(arg0));
    2254           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2255             : 
    2256           0 :   return true;
    2257             : }
    2258             : 
    2259             : static const JSJitInfo oninvalid_getterinfo = {
    2260             :   { (JSJitGetterOp)get_oninvalid },
    2261             :   { prototypes::id::SVGElement },
    2262             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2263             :   JSJitInfo::Getter,
    2264             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2265             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2266             :   false,  /* isInfallible. False in setters. */
    2267             :   false,  /* isMovable.  Not relevant for setters. */
    2268             :   false, /* isEliminatable.  Not relevant for setters. */
    2269             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2270             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2271             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2272             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2273             : };
    2274             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2275             : static_assert(0 < 1, "There is no slot for us");
    2276             : static const JSJitInfo oninvalid_setterinfo = {
    2277             :   { (JSJitGetterOp)set_oninvalid },
    2278             :   { prototypes::id::SVGElement },
    2279             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2280             :   JSJitInfo::Setter,
    2281             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2282             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2283             :   false,  /* isInfallible. False in setters. */
    2284             :   false,  /* isMovable.  Not relevant for setters. */
    2285             :   false, /* isEliminatable.  Not relevant for setters. */
    2286             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2287             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2288             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2289             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2290             : };
    2291             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2292             : static_assert(0 < 1, "There is no slot for us");
    2293             : 
    2294             : static bool
    2295           0 : get_onkeydown(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    2296             : {
    2297           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnkeydown());
    2298           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2299           0 :   if (result) {
    2300           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2301           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2302           0 :       return false;
    2303             :     }
    2304           0 :     return true;
    2305             :   } else {
    2306           0 :     args.rval().setNull();
    2307           0 :     return true;
    2308             :   }
    2309             : }
    2310             : 
    2311             : static bool
    2312           0 : set_onkeydown(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    2313             : {
    2314           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2315           0 :   if (args[0].isObject()) {
    2316             :     { // scope for tempRoot
    2317           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2318           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2319             :     }
    2320             :   } else {
    2321           0 :     arg0 = nullptr;
    2322             :   }
    2323           0 :   self->SetOnkeydown(Constify(arg0));
    2324           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2325             : 
    2326           0 :   return true;
    2327             : }
    2328             : 
    2329             : static const JSJitInfo onkeydown_getterinfo = {
    2330             :   { (JSJitGetterOp)get_onkeydown },
    2331             :   { prototypes::id::SVGElement },
    2332             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2333             :   JSJitInfo::Getter,
    2334             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2335             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2336             :   false,  /* isInfallible. False in setters. */
    2337             :   false,  /* isMovable.  Not relevant for setters. */
    2338             :   false, /* isEliminatable.  Not relevant for setters. */
    2339             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2340             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2341             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2342             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2343             : };
    2344             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2345             : static_assert(0 < 1, "There is no slot for us");
    2346             : static const JSJitInfo onkeydown_setterinfo = {
    2347             :   { (JSJitGetterOp)set_onkeydown },
    2348             :   { prototypes::id::SVGElement },
    2349             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2350             :   JSJitInfo::Setter,
    2351             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2352             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2353             :   false,  /* isInfallible. False in setters. */
    2354             :   false,  /* isMovable.  Not relevant for setters. */
    2355             :   false, /* isEliminatable.  Not relevant for setters. */
    2356             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2357             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2358             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2359             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2360             : };
    2361             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2362             : static_assert(0 < 1, "There is no slot for us");
    2363             : 
    2364             : static bool
    2365           0 : get_onkeypress(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    2366             : {
    2367           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnkeypress());
    2368           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2369           0 :   if (result) {
    2370           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2371           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2372           0 :       return false;
    2373             :     }
    2374           0 :     return true;
    2375             :   } else {
    2376           0 :     args.rval().setNull();
    2377           0 :     return true;
    2378             :   }
    2379             : }
    2380             : 
    2381             : static bool
    2382           0 : set_onkeypress(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    2383             : {
    2384           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2385           0 :   if (args[0].isObject()) {
    2386             :     { // scope for tempRoot
    2387           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2388           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2389             :     }
    2390             :   } else {
    2391           0 :     arg0 = nullptr;
    2392             :   }
    2393           0 :   self->SetOnkeypress(Constify(arg0));
    2394           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2395             : 
    2396           0 :   return true;
    2397             : }
    2398             : 
    2399             : static const JSJitInfo onkeypress_getterinfo = {
    2400             :   { (JSJitGetterOp)get_onkeypress },
    2401             :   { prototypes::id::SVGElement },
    2402             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2403             :   JSJitInfo::Getter,
    2404             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2405             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2406             :   false,  /* isInfallible. False in setters. */
    2407             :   false,  /* isMovable.  Not relevant for setters. */
    2408             :   false, /* isEliminatable.  Not relevant for setters. */
    2409             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2410             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2411             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2412             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2413             : };
    2414             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2415             : static_assert(0 < 1, "There is no slot for us");
    2416             : static const JSJitInfo onkeypress_setterinfo = {
    2417             :   { (JSJitGetterOp)set_onkeypress },
    2418             :   { prototypes::id::SVGElement },
    2419             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2420             :   JSJitInfo::Setter,
    2421             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2422             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2423             :   false,  /* isInfallible. False in setters. */
    2424             :   false,  /* isMovable.  Not relevant for setters. */
    2425             :   false, /* isEliminatable.  Not relevant for setters. */
    2426             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2427             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2428             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2429             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2430             : };
    2431             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2432             : static_assert(0 < 1, "There is no slot for us");
    2433             : 
    2434             : static bool
    2435           0 : get_onkeyup(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    2436             : {
    2437           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnkeyup());
    2438           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2439           0 :   if (result) {
    2440           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2441           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2442           0 :       return false;
    2443             :     }
    2444           0 :     return true;
    2445             :   } else {
    2446           0 :     args.rval().setNull();
    2447           0 :     return true;
    2448             :   }
    2449             : }
    2450             : 
    2451             : static bool
    2452           0 : set_onkeyup(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    2453             : {
    2454           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2455           0 :   if (args[0].isObject()) {
    2456             :     { // scope for tempRoot
    2457           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2458           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2459             :     }
    2460             :   } else {
    2461           0 :     arg0 = nullptr;
    2462             :   }
    2463           0 :   self->SetOnkeyup(Constify(arg0));
    2464           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2465             : 
    2466           0 :   return true;
    2467             : }
    2468             : 
    2469             : static const JSJitInfo onkeyup_getterinfo = {
    2470             :   { (JSJitGetterOp)get_onkeyup },
    2471             :   { prototypes::id::SVGElement },
    2472             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2473             :   JSJitInfo::Getter,
    2474             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2475             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2476             :   false,  /* isInfallible. False in setters. */
    2477             :   false,  /* isMovable.  Not relevant for setters. */
    2478             :   false, /* isEliminatable.  Not relevant for setters. */
    2479             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2480             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2481             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2482             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2483             : };
    2484             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2485             : static_assert(0 < 1, "There is no slot for us");
    2486             : static const JSJitInfo onkeyup_setterinfo = {
    2487             :   { (JSJitGetterOp)set_onkeyup },
    2488             :   { prototypes::id::SVGElement },
    2489             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2490             :   JSJitInfo::Setter,
    2491             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2492             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2493             :   false,  /* isInfallible. False in setters. */
    2494             :   false,  /* isMovable.  Not relevant for setters. */
    2495             :   false, /* isEliminatable.  Not relevant for setters. */
    2496             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2497             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2498             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2499             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2500             : };
    2501             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2502             : static_assert(0 < 1, "There is no slot for us");
    2503             : 
    2504             : static bool
    2505           0 : get_onload(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    2506             : {
    2507           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnload());
    2508           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2509           0 :   if (result) {
    2510           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2511           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2512           0 :       return false;
    2513             :     }
    2514           0 :     return true;
    2515             :   } else {
    2516           0 :     args.rval().setNull();
    2517           0 :     return true;
    2518             :   }
    2519             : }
    2520             : 
    2521             : static bool
    2522           0 : set_onload(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    2523             : {
    2524           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2525           0 :   if (args[0].isObject()) {
    2526             :     { // scope for tempRoot
    2527           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2528           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2529             :     }
    2530             :   } else {
    2531           0 :     arg0 = nullptr;
    2532             :   }
    2533           0 :   self->SetOnload(Constify(arg0));
    2534           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2535             : 
    2536           0 :   return true;
    2537             : }
    2538             : 
    2539             : static const JSJitInfo onload_getterinfo = {
    2540             :   { (JSJitGetterOp)get_onload },
    2541             :   { prototypes::id::SVGElement },
    2542             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2543             :   JSJitInfo::Getter,
    2544             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2545             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2546             :   false,  /* isInfallible. False in setters. */
    2547             :   false,  /* isMovable.  Not relevant for setters. */
    2548             :   false, /* isEliminatable.  Not relevant for setters. */
    2549             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2550             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2551             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2552             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2553             : };
    2554             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2555             : static_assert(0 < 1, "There is no slot for us");
    2556             : static const JSJitInfo onload_setterinfo = {
    2557             :   { (JSJitGetterOp)set_onload },
    2558             :   { prototypes::id::SVGElement },
    2559             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2560             :   JSJitInfo::Setter,
    2561             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2562             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2563             :   false,  /* isInfallible. False in setters. */
    2564             :   false,  /* isMovable.  Not relevant for setters. */
    2565             :   false, /* isEliminatable.  Not relevant for setters. */
    2566             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2567             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2568             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2569             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2570             : };
    2571             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2572             : static_assert(0 < 1, "There is no slot for us");
    2573             : 
    2574             : static bool
    2575           0 : get_onloadeddata(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    2576             : {
    2577           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnloadeddata());
    2578           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2579           0 :   if (result) {
    2580           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2581           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2582           0 :       return false;
    2583             :     }
    2584           0 :     return true;
    2585             :   } else {
    2586           0 :     args.rval().setNull();
    2587           0 :     return true;
    2588             :   }
    2589             : }
    2590             : 
    2591             : static bool
    2592           0 : set_onloadeddata(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    2593             : {
    2594           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2595           0 :   if (args[0].isObject()) {
    2596             :     { // scope for tempRoot
    2597           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2598           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2599             :     }
    2600             :   } else {
    2601           0 :     arg0 = nullptr;
    2602             :   }
    2603           0 :   self->SetOnloadeddata(Constify(arg0));
    2604           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2605             : 
    2606           0 :   return true;
    2607             : }
    2608             : 
    2609             : static const JSJitInfo onloadeddata_getterinfo = {
    2610             :   { (JSJitGetterOp)get_onloadeddata },
    2611             :   { prototypes::id::SVGElement },
    2612             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2613             :   JSJitInfo::Getter,
    2614             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2615             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2616             :   false,  /* isInfallible. False in setters. */
    2617             :   false,  /* isMovable.  Not relevant for setters. */
    2618             :   false, /* isEliminatable.  Not relevant for setters. */
    2619             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2620             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2621             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2622             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2623             : };
    2624             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2625             : static_assert(0 < 1, "There is no slot for us");
    2626             : static const JSJitInfo onloadeddata_setterinfo = {
    2627             :   { (JSJitGetterOp)set_onloadeddata },
    2628             :   { prototypes::id::SVGElement },
    2629             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2630             :   JSJitInfo::Setter,
    2631             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2632             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2633             :   false,  /* isInfallible. False in setters. */
    2634             :   false,  /* isMovable.  Not relevant for setters. */
    2635             :   false, /* isEliminatable.  Not relevant for setters. */
    2636             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2637             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2638             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2639             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2640             : };
    2641             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2642             : static_assert(0 < 1, "There is no slot for us");
    2643             : 
    2644             : static bool
    2645           0 : get_onloadedmetadata(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    2646             : {
    2647           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnloadedmetadata());
    2648           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2649           0 :   if (result) {
    2650           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2651           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2652           0 :       return false;
    2653             :     }
    2654           0 :     return true;
    2655             :   } else {
    2656           0 :     args.rval().setNull();
    2657           0 :     return true;
    2658             :   }
    2659             : }
    2660             : 
    2661             : static bool
    2662           0 : set_onloadedmetadata(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    2663             : {
    2664           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2665           0 :   if (args[0].isObject()) {
    2666             :     { // scope for tempRoot
    2667           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2668           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2669             :     }
    2670             :   } else {
    2671           0 :     arg0 = nullptr;
    2672             :   }
    2673           0 :   self->SetOnloadedmetadata(Constify(arg0));
    2674           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2675             : 
    2676           0 :   return true;
    2677             : }
    2678             : 
    2679             : static const JSJitInfo onloadedmetadata_getterinfo = {
    2680             :   { (JSJitGetterOp)get_onloadedmetadata },
    2681             :   { prototypes::id::SVGElement },
    2682             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2683             :   JSJitInfo::Getter,
    2684             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2685             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2686             :   false,  /* isInfallible. False in setters. */
    2687             :   false,  /* isMovable.  Not relevant for setters. */
    2688             :   false, /* isEliminatable.  Not relevant for setters. */
    2689             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2690             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2691             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2692             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2693             : };
    2694             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2695             : static_assert(0 < 1, "There is no slot for us");
    2696             : static const JSJitInfo onloadedmetadata_setterinfo = {
    2697             :   { (JSJitGetterOp)set_onloadedmetadata },
    2698             :   { prototypes::id::SVGElement },
    2699             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2700             :   JSJitInfo::Setter,
    2701             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2702             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2703             :   false,  /* isInfallible. False in setters. */
    2704             :   false,  /* isMovable.  Not relevant for setters. */
    2705             :   false, /* isEliminatable.  Not relevant for setters. */
    2706             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2707             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2708             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2709             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2710             : };
    2711             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2712             : static_assert(0 < 1, "There is no slot for us");
    2713             : 
    2714             : static bool
    2715           0 : get_onloadend(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    2716             : {
    2717           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnloadend());
    2718           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2719           0 :   if (result) {
    2720           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2721           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2722           0 :       return false;
    2723             :     }
    2724           0 :     return true;
    2725             :   } else {
    2726           0 :     args.rval().setNull();
    2727           0 :     return true;
    2728             :   }
    2729             : }
    2730             : 
    2731             : static bool
    2732           0 : set_onloadend(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    2733             : {
    2734           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2735           0 :   if (args[0].isObject()) {
    2736             :     { // scope for tempRoot
    2737           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2738           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2739             :     }
    2740             :   } else {
    2741           0 :     arg0 = nullptr;
    2742             :   }
    2743           0 :   self->SetOnloadend(Constify(arg0));
    2744           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2745             : 
    2746           0 :   return true;
    2747             : }
    2748             : 
    2749             : static const JSJitInfo onloadend_getterinfo = {
    2750             :   { (JSJitGetterOp)get_onloadend },
    2751             :   { prototypes::id::SVGElement },
    2752             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2753             :   JSJitInfo::Getter,
    2754             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2755             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2756             :   false,  /* isInfallible. False in setters. */
    2757             :   false,  /* isMovable.  Not relevant for setters. */
    2758             :   false, /* isEliminatable.  Not relevant for setters. */
    2759             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2760             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2761             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2762             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2763             : };
    2764             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2765             : static_assert(0 < 1, "There is no slot for us");
    2766             : static const JSJitInfo onloadend_setterinfo = {
    2767             :   { (JSJitGetterOp)set_onloadend },
    2768             :   { prototypes::id::SVGElement },
    2769             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2770             :   JSJitInfo::Setter,
    2771             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2772             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2773             :   false,  /* isInfallible. False in setters. */
    2774             :   false,  /* isMovable.  Not relevant for setters. */
    2775             :   false, /* isEliminatable.  Not relevant for setters. */
    2776             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2777             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2778             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2779             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2780             : };
    2781             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2782             : static_assert(0 < 1, "There is no slot for us");
    2783             : 
    2784             : static bool
    2785           0 : get_onloadstart(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    2786             : {
    2787           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnloadstart());
    2788           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2789           0 :   if (result) {
    2790           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2791           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2792           0 :       return false;
    2793             :     }
    2794           0 :     return true;
    2795             :   } else {
    2796           0 :     args.rval().setNull();
    2797           0 :     return true;
    2798             :   }
    2799             : }
    2800             : 
    2801             : static bool
    2802           0 : set_onloadstart(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    2803             : {
    2804           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2805           0 :   if (args[0].isObject()) {
    2806             :     { // scope for tempRoot
    2807           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2808           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2809             :     }
    2810             :   } else {
    2811           0 :     arg0 = nullptr;
    2812             :   }
    2813           0 :   self->SetOnloadstart(Constify(arg0));
    2814           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2815             : 
    2816           0 :   return true;
    2817             : }
    2818             : 
    2819             : static const JSJitInfo onloadstart_getterinfo = {
    2820             :   { (JSJitGetterOp)get_onloadstart },
    2821             :   { prototypes::id::SVGElement },
    2822             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2823             :   JSJitInfo::Getter,
    2824             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2825             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2826             :   false,  /* isInfallible. False in setters. */
    2827             :   false,  /* isMovable.  Not relevant for setters. */
    2828             :   false, /* isEliminatable.  Not relevant for setters. */
    2829             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2830             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2831             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2832             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2833             : };
    2834             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2835             : static_assert(0 < 1, "There is no slot for us");
    2836             : static const JSJitInfo onloadstart_setterinfo = {
    2837             :   { (JSJitGetterOp)set_onloadstart },
    2838             :   { prototypes::id::SVGElement },
    2839             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2840             :   JSJitInfo::Setter,
    2841             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2842             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2843             :   false,  /* isInfallible. False in setters. */
    2844             :   false,  /* isMovable.  Not relevant for setters. */
    2845             :   false, /* isEliminatable.  Not relevant for setters. */
    2846             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2847             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2848             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2849             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2850             : };
    2851             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2852             : static_assert(0 < 1, "There is no slot for us");
    2853             : 
    2854             : static bool
    2855           0 : get_onmousedown(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    2856             : {
    2857           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmousedown());
    2858           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2859           0 :   if (result) {
    2860           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2861           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2862           0 :       return false;
    2863             :     }
    2864           0 :     return true;
    2865             :   } else {
    2866           0 :     args.rval().setNull();
    2867           0 :     return true;
    2868             :   }
    2869             : }
    2870             : 
    2871             : static bool
    2872           0 : set_onmousedown(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    2873             : {
    2874           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2875           0 :   if (args[0].isObject()) {
    2876             :     { // scope for tempRoot
    2877           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2878           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2879             :     }
    2880             :   } else {
    2881           0 :     arg0 = nullptr;
    2882             :   }
    2883           0 :   self->SetOnmousedown(Constify(arg0));
    2884           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2885             : 
    2886           0 :   return true;
    2887             : }
    2888             : 
    2889             : static const JSJitInfo onmousedown_getterinfo = {
    2890             :   { (JSJitGetterOp)get_onmousedown },
    2891             :   { prototypes::id::SVGElement },
    2892             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2893             :   JSJitInfo::Getter,
    2894             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2895             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2896             :   false,  /* isInfallible. False in setters. */
    2897             :   false,  /* isMovable.  Not relevant for setters. */
    2898             :   false, /* isEliminatable.  Not relevant for setters. */
    2899             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2900             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2901             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2902             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2903             : };
    2904             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2905             : static_assert(0 < 1, "There is no slot for us");
    2906             : static const JSJitInfo onmousedown_setterinfo = {
    2907             :   { (JSJitGetterOp)set_onmousedown },
    2908             :   { prototypes::id::SVGElement },
    2909             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2910             :   JSJitInfo::Setter,
    2911             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2912             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2913             :   false,  /* isInfallible. False in setters. */
    2914             :   false,  /* isMovable.  Not relevant for setters. */
    2915             :   false, /* isEliminatable.  Not relevant for setters. */
    2916             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2917             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2918             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2919             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2920             : };
    2921             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2922             : static_assert(0 < 1, "There is no slot for us");
    2923             : 
    2924             : static bool
    2925           0 : get_onmouseenter(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    2926             : {
    2927           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseenter());
    2928           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2929           0 :   if (result) {
    2930           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2931           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2932           0 :       return false;
    2933             :     }
    2934           0 :     return true;
    2935             :   } else {
    2936           0 :     args.rval().setNull();
    2937           0 :     return true;
    2938             :   }
    2939             : }
    2940             : 
    2941             : static bool
    2942           0 : set_onmouseenter(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    2943             : {
    2944           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2945           0 :   if (args[0].isObject()) {
    2946             :     { // scope for tempRoot
    2947           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2948           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2949             :     }
    2950             :   } else {
    2951           0 :     arg0 = nullptr;
    2952             :   }
    2953           0 :   self->SetOnmouseenter(Constify(arg0));
    2954           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2955             : 
    2956           0 :   return true;
    2957             : }
    2958             : 
    2959             : static const JSJitInfo onmouseenter_getterinfo = {
    2960             :   { (JSJitGetterOp)get_onmouseenter },
    2961             :   { prototypes::id::SVGElement },
    2962             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2963             :   JSJitInfo::Getter,
    2964             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2965             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2966             :   false,  /* isInfallible. False in setters. */
    2967             :   false,  /* isMovable.  Not relevant for setters. */
    2968             :   false, /* isEliminatable.  Not relevant for setters. */
    2969             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2970             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2971             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2972             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2973             : };
    2974             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2975             : static_assert(0 < 1, "There is no slot for us");
    2976             : static const JSJitInfo onmouseenter_setterinfo = {
    2977             :   { (JSJitGetterOp)set_onmouseenter },
    2978             :   { prototypes::id::SVGElement },
    2979             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    2980             :   JSJitInfo::Setter,
    2981             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2982             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2983             :   false,  /* isInfallible. False in setters. */
    2984             :   false,  /* isMovable.  Not relevant for setters. */
    2985             :   false, /* isEliminatable.  Not relevant for setters. */
    2986             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2987             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2988             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2989             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2990             : };
    2991             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2992             : static_assert(0 < 1, "There is no slot for us");
    2993             : 
    2994             : static bool
    2995           0 : get_onmouseleave(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    2996             : {
    2997           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseleave());
    2998           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2999           0 :   if (result) {
    3000           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3001           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3002           0 :       return false;
    3003             :     }
    3004           0 :     return true;
    3005             :   } else {
    3006           0 :     args.rval().setNull();
    3007           0 :     return true;
    3008             :   }
    3009             : }
    3010             : 
    3011             : static bool
    3012           0 : set_onmouseleave(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    3013             : {
    3014           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3015           0 :   if (args[0].isObject()) {
    3016             :     { // scope for tempRoot
    3017           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3018           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3019             :     }
    3020             :   } else {
    3021           0 :     arg0 = nullptr;
    3022             :   }
    3023           0 :   self->SetOnmouseleave(Constify(arg0));
    3024           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3025             : 
    3026           0 :   return true;
    3027             : }
    3028             : 
    3029             : static const JSJitInfo onmouseleave_getterinfo = {
    3030             :   { (JSJitGetterOp)get_onmouseleave },
    3031             :   { prototypes::id::SVGElement },
    3032             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3033             :   JSJitInfo::Getter,
    3034             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3035             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3036             :   false,  /* isInfallible. False in setters. */
    3037             :   false,  /* isMovable.  Not relevant for setters. */
    3038             :   false, /* isEliminatable.  Not relevant for setters. */
    3039             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3040             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3041             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3042             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3043             : };
    3044             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3045             : static_assert(0 < 1, "There is no slot for us");
    3046             : static const JSJitInfo onmouseleave_setterinfo = {
    3047             :   { (JSJitGetterOp)set_onmouseleave },
    3048             :   { prototypes::id::SVGElement },
    3049             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3050             :   JSJitInfo::Setter,
    3051             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3052             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3053             :   false,  /* isInfallible. False in setters. */
    3054             :   false,  /* isMovable.  Not relevant for setters. */
    3055             :   false, /* isEliminatable.  Not relevant for setters. */
    3056             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3057             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3058             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3059             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3060             : };
    3061             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3062             : static_assert(0 < 1, "There is no slot for us");
    3063             : 
    3064             : static bool
    3065           0 : get_onmousemove(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    3066             : {
    3067           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmousemove());
    3068           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3069           0 :   if (result) {
    3070           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3071           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3072           0 :       return false;
    3073             :     }
    3074           0 :     return true;
    3075             :   } else {
    3076           0 :     args.rval().setNull();
    3077           0 :     return true;
    3078             :   }
    3079             : }
    3080             : 
    3081             : static bool
    3082           0 : set_onmousemove(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    3083             : {
    3084           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3085           0 :   if (args[0].isObject()) {
    3086             :     { // scope for tempRoot
    3087           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3088           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3089             :     }
    3090             :   } else {
    3091           0 :     arg0 = nullptr;
    3092             :   }
    3093           0 :   self->SetOnmousemove(Constify(arg0));
    3094           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3095             : 
    3096           0 :   return true;
    3097             : }
    3098             : 
    3099             : static const JSJitInfo onmousemove_getterinfo = {
    3100             :   { (JSJitGetterOp)get_onmousemove },
    3101             :   { prototypes::id::SVGElement },
    3102             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3103             :   JSJitInfo::Getter,
    3104             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3105             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3106             :   false,  /* isInfallible. False in setters. */
    3107             :   false,  /* isMovable.  Not relevant for setters. */
    3108             :   false, /* isEliminatable.  Not relevant for setters. */
    3109             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3110             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3111             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3112             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3113             : };
    3114             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3115             : static_assert(0 < 1, "There is no slot for us");
    3116             : static const JSJitInfo onmousemove_setterinfo = {
    3117             :   { (JSJitGetterOp)set_onmousemove },
    3118             :   { prototypes::id::SVGElement },
    3119             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3120             :   JSJitInfo::Setter,
    3121             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3122             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3123             :   false,  /* isInfallible. False in setters. */
    3124             :   false,  /* isMovable.  Not relevant for setters. */
    3125             :   false, /* isEliminatable.  Not relevant for setters. */
    3126             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3127             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3128             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3129             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3130             : };
    3131             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3132             : static_assert(0 < 1, "There is no slot for us");
    3133             : 
    3134             : static bool
    3135           0 : get_onmouseout(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    3136             : {
    3137           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseout());
    3138           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3139           0 :   if (result) {
    3140           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3141           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3142           0 :       return false;
    3143             :     }
    3144           0 :     return true;
    3145             :   } else {
    3146           0 :     args.rval().setNull();
    3147           0 :     return true;
    3148             :   }
    3149             : }
    3150             : 
    3151             : static bool
    3152           0 : set_onmouseout(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    3153             : {
    3154           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3155           0 :   if (args[0].isObject()) {
    3156             :     { // scope for tempRoot
    3157           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3158           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3159             :     }
    3160             :   } else {
    3161           0 :     arg0 = nullptr;
    3162             :   }
    3163           0 :   self->SetOnmouseout(Constify(arg0));
    3164           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3165             : 
    3166           0 :   return true;
    3167             : }
    3168             : 
    3169             : static const JSJitInfo onmouseout_getterinfo = {
    3170             :   { (JSJitGetterOp)get_onmouseout },
    3171             :   { prototypes::id::SVGElement },
    3172             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3173             :   JSJitInfo::Getter,
    3174             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3175             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3176             :   false,  /* isInfallible. False in setters. */
    3177             :   false,  /* isMovable.  Not relevant for setters. */
    3178             :   false, /* isEliminatable.  Not relevant for setters. */
    3179             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3180             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3181             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3182             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3183             : };
    3184             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3185             : static_assert(0 < 1, "There is no slot for us");
    3186             : static const JSJitInfo onmouseout_setterinfo = {
    3187             :   { (JSJitGetterOp)set_onmouseout },
    3188             :   { prototypes::id::SVGElement },
    3189             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3190             :   JSJitInfo::Setter,
    3191             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3192             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3193             :   false,  /* isInfallible. False in setters. */
    3194             :   false,  /* isMovable.  Not relevant for setters. */
    3195             :   false, /* isEliminatable.  Not relevant for setters. */
    3196             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3197             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3198             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3199             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3200             : };
    3201             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3202             : static_assert(0 < 1, "There is no slot for us");
    3203             : 
    3204             : static bool
    3205           0 : get_onmouseover(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    3206             : {
    3207           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseover());
    3208           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3209           0 :   if (result) {
    3210           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3211           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3212           0 :       return false;
    3213             :     }
    3214           0 :     return true;
    3215             :   } else {
    3216           0 :     args.rval().setNull();
    3217           0 :     return true;
    3218             :   }
    3219             : }
    3220             : 
    3221             : static bool
    3222           0 : set_onmouseover(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    3223             : {
    3224           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3225           0 :   if (args[0].isObject()) {
    3226             :     { // scope for tempRoot
    3227           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3228           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3229             :     }
    3230             :   } else {
    3231           0 :     arg0 = nullptr;
    3232             :   }
    3233           0 :   self->SetOnmouseover(Constify(arg0));
    3234           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3235             : 
    3236           0 :   return true;
    3237             : }
    3238             : 
    3239             : static const JSJitInfo onmouseover_getterinfo = {
    3240             :   { (JSJitGetterOp)get_onmouseover },
    3241             :   { prototypes::id::SVGElement },
    3242             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3243             :   JSJitInfo::Getter,
    3244             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3245             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3246             :   false,  /* isInfallible. False in setters. */
    3247             :   false,  /* isMovable.  Not relevant for setters. */
    3248             :   false, /* isEliminatable.  Not relevant for setters. */
    3249             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3250             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3251             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3252             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3253             : };
    3254             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3255             : static_assert(0 < 1, "There is no slot for us");
    3256             : static const JSJitInfo onmouseover_setterinfo = {
    3257             :   { (JSJitGetterOp)set_onmouseover },
    3258             :   { prototypes::id::SVGElement },
    3259             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3260             :   JSJitInfo::Setter,
    3261             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3262             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3263             :   false,  /* isInfallible. False in setters. */
    3264             :   false,  /* isMovable.  Not relevant for setters. */
    3265             :   false, /* isEliminatable.  Not relevant for setters. */
    3266             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3267             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3268             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3269             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3270             : };
    3271             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3272             : static_assert(0 < 1, "There is no slot for us");
    3273             : 
    3274             : static bool
    3275           0 : get_onmouseup(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    3276             : {
    3277           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseup());
    3278           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3279           0 :   if (result) {
    3280           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3281           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3282           0 :       return false;
    3283             :     }
    3284           0 :     return true;
    3285             :   } else {
    3286           0 :     args.rval().setNull();
    3287           0 :     return true;
    3288             :   }
    3289             : }
    3290             : 
    3291             : static bool
    3292           0 : set_onmouseup(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    3293             : {
    3294           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3295           0 :   if (args[0].isObject()) {
    3296             :     { // scope for tempRoot
    3297           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3298           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3299             :     }
    3300             :   } else {
    3301           0 :     arg0 = nullptr;
    3302             :   }
    3303           0 :   self->SetOnmouseup(Constify(arg0));
    3304           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3305             : 
    3306           0 :   return true;
    3307             : }
    3308             : 
    3309             : static const JSJitInfo onmouseup_getterinfo = {
    3310             :   { (JSJitGetterOp)get_onmouseup },
    3311             :   { prototypes::id::SVGElement },
    3312             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3313             :   JSJitInfo::Getter,
    3314             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3315             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3316             :   false,  /* isInfallible. False in setters. */
    3317             :   false,  /* isMovable.  Not relevant for setters. */
    3318             :   false, /* isEliminatable.  Not relevant for setters. */
    3319             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3320             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3321             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3322             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3323             : };
    3324             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3325             : static_assert(0 < 1, "There is no slot for us");
    3326             : static const JSJitInfo onmouseup_setterinfo = {
    3327             :   { (JSJitGetterOp)set_onmouseup },
    3328             :   { prototypes::id::SVGElement },
    3329             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3330             :   JSJitInfo::Setter,
    3331             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3332             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3333             :   false,  /* isInfallible. False in setters. */
    3334             :   false,  /* isMovable.  Not relevant for setters. */
    3335             :   false, /* isEliminatable.  Not relevant for setters. */
    3336             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3337             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3338             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3339             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3340             : };
    3341             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3342             : static_assert(0 < 1, "There is no slot for us");
    3343             : 
    3344             : static bool
    3345           0 : get_onwheel(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    3346             : {
    3347           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwheel());
    3348           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3349           0 :   if (result) {
    3350           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3351           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3352           0 :       return false;
    3353             :     }
    3354           0 :     return true;
    3355             :   } else {
    3356           0 :     args.rval().setNull();
    3357           0 :     return true;
    3358             :   }
    3359             : }
    3360             : 
    3361             : static bool
    3362           0 : set_onwheel(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    3363             : {
    3364           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3365           0 :   if (args[0].isObject()) {
    3366             :     { // scope for tempRoot
    3367           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3368           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3369             :     }
    3370             :   } else {
    3371           0 :     arg0 = nullptr;
    3372             :   }
    3373           0 :   self->SetOnwheel(Constify(arg0));
    3374           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3375             : 
    3376           0 :   return true;
    3377             : }
    3378             : 
    3379             : static const JSJitInfo onwheel_getterinfo = {
    3380             :   { (JSJitGetterOp)get_onwheel },
    3381             :   { prototypes::id::SVGElement },
    3382             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3383             :   JSJitInfo::Getter,
    3384             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3385             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3386             :   false,  /* isInfallible. False in setters. */
    3387             :   false,  /* isMovable.  Not relevant for setters. */
    3388             :   false, /* isEliminatable.  Not relevant for setters. */
    3389             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3390             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3391             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3392             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3393             : };
    3394             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3395             : static_assert(0 < 1, "There is no slot for us");
    3396             : static const JSJitInfo onwheel_setterinfo = {
    3397             :   { (JSJitGetterOp)set_onwheel },
    3398             :   { prototypes::id::SVGElement },
    3399             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3400             :   JSJitInfo::Setter,
    3401             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3402             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3403             :   false,  /* isInfallible. False in setters. */
    3404             :   false,  /* isMovable.  Not relevant for setters. */
    3405             :   false, /* isEliminatable.  Not relevant for setters. */
    3406             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3407             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3408             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3409             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3410             : };
    3411             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3412             : static_assert(0 < 1, "There is no slot for us");
    3413             : 
    3414             : static bool
    3415           0 : get_onpause(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    3416             : {
    3417           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpause());
    3418           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3419           0 :   if (result) {
    3420           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3421           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3422           0 :       return false;
    3423             :     }
    3424           0 :     return true;
    3425             :   } else {
    3426           0 :     args.rval().setNull();
    3427           0 :     return true;
    3428             :   }
    3429             : }
    3430             : 
    3431             : static bool
    3432           0 : set_onpause(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    3433             : {
    3434           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3435           0 :   if (args[0].isObject()) {
    3436             :     { // scope for tempRoot
    3437           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3438           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3439             :     }
    3440             :   } else {
    3441           0 :     arg0 = nullptr;
    3442             :   }
    3443           0 :   self->SetOnpause(Constify(arg0));
    3444           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3445             : 
    3446           0 :   return true;
    3447             : }
    3448             : 
    3449             : static const JSJitInfo onpause_getterinfo = {
    3450             :   { (JSJitGetterOp)get_onpause },
    3451             :   { prototypes::id::SVGElement },
    3452             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3453             :   JSJitInfo::Getter,
    3454             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3455             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3456             :   false,  /* isInfallible. False in setters. */
    3457             :   false,  /* isMovable.  Not relevant for setters. */
    3458             :   false, /* isEliminatable.  Not relevant for setters. */
    3459             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3460             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3461             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3462             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3463             : };
    3464             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3465             : static_assert(0 < 1, "There is no slot for us");
    3466             : static const JSJitInfo onpause_setterinfo = {
    3467             :   { (JSJitGetterOp)set_onpause },
    3468             :   { prototypes::id::SVGElement },
    3469             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3470             :   JSJitInfo::Setter,
    3471             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3472             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3473             :   false,  /* isInfallible. False in setters. */
    3474             :   false,  /* isMovable.  Not relevant for setters. */
    3475             :   false, /* isEliminatable.  Not relevant for setters. */
    3476             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3477             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3478             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3479             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3480             : };
    3481             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3482             : static_assert(0 < 1, "There is no slot for us");
    3483             : 
    3484             : static bool
    3485           0 : get_onplay(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    3486             : {
    3487           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnplay());
    3488           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3489           0 :   if (result) {
    3490           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3491           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3492           0 :       return false;
    3493             :     }
    3494           0 :     return true;
    3495             :   } else {
    3496           0 :     args.rval().setNull();
    3497           0 :     return true;
    3498             :   }
    3499             : }
    3500             : 
    3501             : static bool
    3502           0 : set_onplay(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    3503             : {
    3504           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3505           0 :   if (args[0].isObject()) {
    3506             :     { // scope for tempRoot
    3507           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3508           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3509             :     }
    3510             :   } else {
    3511           0 :     arg0 = nullptr;
    3512             :   }
    3513           0 :   self->SetOnplay(Constify(arg0));
    3514           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3515             : 
    3516           0 :   return true;
    3517             : }
    3518             : 
    3519             : static const JSJitInfo onplay_getterinfo = {
    3520             :   { (JSJitGetterOp)get_onplay },
    3521             :   { prototypes::id::SVGElement },
    3522             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3523             :   JSJitInfo::Getter,
    3524             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3525             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3526             :   false,  /* isInfallible. False in setters. */
    3527             :   false,  /* isMovable.  Not relevant for setters. */
    3528             :   false, /* isEliminatable.  Not relevant for setters. */
    3529             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3530             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3531             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3532             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3533             : };
    3534             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3535             : static_assert(0 < 1, "There is no slot for us");
    3536             : static const JSJitInfo onplay_setterinfo = {
    3537             :   { (JSJitGetterOp)set_onplay },
    3538             :   { prototypes::id::SVGElement },
    3539             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3540             :   JSJitInfo::Setter,
    3541             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3542             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3543             :   false,  /* isInfallible. False in setters. */
    3544             :   false,  /* isMovable.  Not relevant for setters. */
    3545             :   false, /* isEliminatable.  Not relevant for setters. */
    3546             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3547             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3548             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3549             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3550             : };
    3551             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3552             : static_assert(0 < 1, "There is no slot for us");
    3553             : 
    3554             : static bool
    3555           0 : get_onplaying(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    3556             : {
    3557           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnplaying());
    3558           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3559           0 :   if (result) {
    3560           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3561           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3562           0 :       return false;
    3563             :     }
    3564           0 :     return true;
    3565             :   } else {
    3566           0 :     args.rval().setNull();
    3567           0 :     return true;
    3568             :   }
    3569             : }
    3570             : 
    3571             : static bool
    3572           0 : set_onplaying(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    3573             : {
    3574           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3575           0 :   if (args[0].isObject()) {
    3576             :     { // scope for tempRoot
    3577           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3578           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3579             :     }
    3580             :   } else {
    3581           0 :     arg0 = nullptr;
    3582             :   }
    3583           0 :   self->SetOnplaying(Constify(arg0));
    3584           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3585             : 
    3586           0 :   return true;
    3587             : }
    3588             : 
    3589             : static const JSJitInfo onplaying_getterinfo = {
    3590             :   { (JSJitGetterOp)get_onplaying },
    3591             :   { prototypes::id::SVGElement },
    3592             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3593             :   JSJitInfo::Getter,
    3594             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3595             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3596             :   false,  /* isInfallible. False in setters. */
    3597             :   false,  /* isMovable.  Not relevant for setters. */
    3598             :   false, /* isEliminatable.  Not relevant for setters. */
    3599             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3600             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3601             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3602             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3603             : };
    3604             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3605             : static_assert(0 < 1, "There is no slot for us");
    3606             : static const JSJitInfo onplaying_setterinfo = {
    3607             :   { (JSJitGetterOp)set_onplaying },
    3608             :   { prototypes::id::SVGElement },
    3609             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3610             :   JSJitInfo::Setter,
    3611             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3612             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3613             :   false,  /* isInfallible. False in setters. */
    3614             :   false,  /* isMovable.  Not relevant for setters. */
    3615             :   false, /* isEliminatable.  Not relevant for setters. */
    3616             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3617             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3618             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3619             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3620             : };
    3621             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3622             : static_assert(0 < 1, "There is no slot for us");
    3623             : 
    3624             : static bool
    3625           0 : get_onprogress(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    3626             : {
    3627           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnprogress());
    3628           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3629           0 :   if (result) {
    3630           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3631           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3632           0 :       return false;
    3633             :     }
    3634           0 :     return true;
    3635             :   } else {
    3636           0 :     args.rval().setNull();
    3637           0 :     return true;
    3638             :   }
    3639             : }
    3640             : 
    3641             : static bool
    3642           0 : set_onprogress(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    3643             : {
    3644           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3645           0 :   if (args[0].isObject()) {
    3646             :     { // scope for tempRoot
    3647           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3648           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3649             :     }
    3650             :   } else {
    3651           0 :     arg0 = nullptr;
    3652             :   }
    3653           0 :   self->SetOnprogress(Constify(arg0));
    3654           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3655             : 
    3656           0 :   return true;
    3657             : }
    3658             : 
    3659             : static const JSJitInfo onprogress_getterinfo = {
    3660             :   { (JSJitGetterOp)get_onprogress },
    3661             :   { prototypes::id::SVGElement },
    3662             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3663             :   JSJitInfo::Getter,
    3664             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3665             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3666             :   false,  /* isInfallible. False in setters. */
    3667             :   false,  /* isMovable.  Not relevant for setters. */
    3668             :   false, /* isEliminatable.  Not relevant for setters. */
    3669             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3670             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3671             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3672             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3673             : };
    3674             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3675             : static_assert(0 < 1, "There is no slot for us");
    3676             : static const JSJitInfo onprogress_setterinfo = {
    3677             :   { (JSJitGetterOp)set_onprogress },
    3678             :   { prototypes::id::SVGElement },
    3679             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3680             :   JSJitInfo::Setter,
    3681             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3682             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3683             :   false,  /* isInfallible. False in setters. */
    3684             :   false,  /* isMovable.  Not relevant for setters. */
    3685             :   false, /* isEliminatable.  Not relevant for setters. */
    3686             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3687             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3688             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3689             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3690             : };
    3691             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3692             : static_assert(0 < 1, "There is no slot for us");
    3693             : 
    3694             : static bool
    3695           0 : get_onratechange(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    3696             : {
    3697           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnratechange());
    3698           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3699           0 :   if (result) {
    3700           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3701           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3702           0 :       return false;
    3703             :     }
    3704           0 :     return true;
    3705             :   } else {
    3706           0 :     args.rval().setNull();
    3707           0 :     return true;
    3708             :   }
    3709             : }
    3710             : 
    3711             : static bool
    3712           0 : set_onratechange(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    3713             : {
    3714           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3715           0 :   if (args[0].isObject()) {
    3716             :     { // scope for tempRoot
    3717           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3718           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3719             :     }
    3720             :   } else {
    3721           0 :     arg0 = nullptr;
    3722             :   }
    3723           0 :   self->SetOnratechange(Constify(arg0));
    3724           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3725             : 
    3726           0 :   return true;
    3727             : }
    3728             : 
    3729             : static const JSJitInfo onratechange_getterinfo = {
    3730             :   { (JSJitGetterOp)get_onratechange },
    3731             :   { prototypes::id::SVGElement },
    3732             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3733             :   JSJitInfo::Getter,
    3734             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3735             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3736             :   false,  /* isInfallible. False in setters. */
    3737             :   false,  /* isMovable.  Not relevant for setters. */
    3738             :   false, /* isEliminatable.  Not relevant for setters. */
    3739             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3740             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3741             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3742             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3743             : };
    3744             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3745             : static_assert(0 < 1, "There is no slot for us");
    3746             : static const JSJitInfo onratechange_setterinfo = {
    3747             :   { (JSJitGetterOp)set_onratechange },
    3748             :   { prototypes::id::SVGElement },
    3749             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3750             :   JSJitInfo::Setter,
    3751             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3752             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3753             :   false,  /* isInfallible. False in setters. */
    3754             :   false,  /* isMovable.  Not relevant for setters. */
    3755             :   false, /* isEliminatable.  Not relevant for setters. */
    3756             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3757             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3758             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3759             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3760             : };
    3761             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3762             : static_assert(0 < 1, "There is no slot for us");
    3763             : 
    3764             : static bool
    3765           0 : get_onreset(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    3766             : {
    3767           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnreset());
    3768           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3769           0 :   if (result) {
    3770           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3771           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3772           0 :       return false;
    3773             :     }
    3774           0 :     return true;
    3775             :   } else {
    3776           0 :     args.rval().setNull();
    3777           0 :     return true;
    3778             :   }
    3779             : }
    3780             : 
    3781             : static bool
    3782           0 : set_onreset(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    3783             : {
    3784           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3785           0 :   if (args[0].isObject()) {
    3786             :     { // scope for tempRoot
    3787           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3788           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3789             :     }
    3790             :   } else {
    3791           0 :     arg0 = nullptr;
    3792             :   }
    3793           0 :   self->SetOnreset(Constify(arg0));
    3794           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3795             : 
    3796           0 :   return true;
    3797             : }
    3798             : 
    3799             : static const JSJitInfo onreset_getterinfo = {
    3800             :   { (JSJitGetterOp)get_onreset },
    3801             :   { prototypes::id::SVGElement },
    3802             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3803             :   JSJitInfo::Getter,
    3804             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3805             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3806             :   false,  /* isInfallible. False in setters. */
    3807             :   false,  /* isMovable.  Not relevant for setters. */
    3808             :   false, /* isEliminatable.  Not relevant for setters. */
    3809             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3810             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3811             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3812             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3813             : };
    3814             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3815             : static_assert(0 < 1, "There is no slot for us");
    3816             : static const JSJitInfo onreset_setterinfo = {
    3817             :   { (JSJitGetterOp)set_onreset },
    3818             :   { prototypes::id::SVGElement },
    3819             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3820             :   JSJitInfo::Setter,
    3821             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3822             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3823             :   false,  /* isInfallible. False in setters. */
    3824             :   false,  /* isMovable.  Not relevant for setters. */
    3825             :   false, /* isEliminatable.  Not relevant for setters. */
    3826             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3827             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3828             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3829             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3830             : };
    3831             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3832             : static_assert(0 < 1, "There is no slot for us");
    3833             : 
    3834             : static bool
    3835           0 : get_onresize(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    3836             : {
    3837           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnresize());
    3838           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3839           0 :   if (result) {
    3840           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3841           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3842           0 :       return false;
    3843             :     }
    3844           0 :     return true;
    3845             :   } else {
    3846           0 :     args.rval().setNull();
    3847           0 :     return true;
    3848             :   }
    3849             : }
    3850             : 
    3851             : static bool
    3852           0 : set_onresize(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    3853             : {
    3854           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3855           0 :   if (args[0].isObject()) {
    3856             :     { // scope for tempRoot
    3857           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3858           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3859             :     }
    3860             :   } else {
    3861           0 :     arg0 = nullptr;
    3862             :   }
    3863           0 :   self->SetOnresize(Constify(arg0));
    3864           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3865             : 
    3866           0 :   return true;
    3867             : }
    3868             : 
    3869             : static const JSJitInfo onresize_getterinfo = {
    3870             :   { (JSJitGetterOp)get_onresize },
    3871             :   { prototypes::id::SVGElement },
    3872             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3873             :   JSJitInfo::Getter,
    3874             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3875             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3876             :   false,  /* isInfallible. False in setters. */
    3877             :   false,  /* isMovable.  Not relevant for setters. */
    3878             :   false, /* isEliminatable.  Not relevant for setters. */
    3879             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3880             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3881             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3882             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3883             : };
    3884             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3885             : static_assert(0 < 1, "There is no slot for us");
    3886             : static const JSJitInfo onresize_setterinfo = {
    3887             :   { (JSJitGetterOp)set_onresize },
    3888             :   { prototypes::id::SVGElement },
    3889             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3890             :   JSJitInfo::Setter,
    3891             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3892             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3893             :   false,  /* isInfallible. False in setters. */
    3894             :   false,  /* isMovable.  Not relevant for setters. */
    3895             :   false, /* isEliminatable.  Not relevant for setters. */
    3896             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3897             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3898             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3899             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3900             : };
    3901             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3902             : static_assert(0 < 1, "There is no slot for us");
    3903             : 
    3904             : static bool
    3905           0 : get_onscroll(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    3906             : {
    3907           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnscroll());
    3908           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3909           0 :   if (result) {
    3910           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3911           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3912           0 :       return false;
    3913             :     }
    3914           0 :     return true;
    3915             :   } else {
    3916           0 :     args.rval().setNull();
    3917           0 :     return true;
    3918             :   }
    3919             : }
    3920             : 
    3921             : static bool
    3922           0 : set_onscroll(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    3923             : {
    3924           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3925           0 :   if (args[0].isObject()) {
    3926             :     { // scope for tempRoot
    3927           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3928           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3929             :     }
    3930             :   } else {
    3931           0 :     arg0 = nullptr;
    3932             :   }
    3933           0 :   self->SetOnscroll(Constify(arg0));
    3934           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3935             : 
    3936           0 :   return true;
    3937             : }
    3938             : 
    3939             : static const JSJitInfo onscroll_getterinfo = {
    3940             :   { (JSJitGetterOp)get_onscroll },
    3941             :   { prototypes::id::SVGElement },
    3942             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3943             :   JSJitInfo::Getter,
    3944             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3945             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3946             :   false,  /* isInfallible. False in setters. */
    3947             :   false,  /* isMovable.  Not relevant for setters. */
    3948             :   false, /* isEliminatable.  Not relevant for setters. */
    3949             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3950             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3951             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3952             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3953             : };
    3954             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3955             : static_assert(0 < 1, "There is no slot for us");
    3956             : static const JSJitInfo onscroll_setterinfo = {
    3957             :   { (JSJitGetterOp)set_onscroll },
    3958             :   { prototypes::id::SVGElement },
    3959             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    3960             :   JSJitInfo::Setter,
    3961             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3962             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3963             :   false,  /* isInfallible. False in setters. */
    3964             :   false,  /* isMovable.  Not relevant for setters. */
    3965             :   false, /* isEliminatable.  Not relevant for setters. */
    3966             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3967             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3968             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3969             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3970             : };
    3971             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3972             : static_assert(0 < 1, "There is no slot for us");
    3973             : 
    3974             : static bool
    3975           0 : get_onseeked(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    3976             : {
    3977           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnseeked());
    3978           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3979           0 :   if (result) {
    3980           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3981           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3982           0 :       return false;
    3983             :     }
    3984           0 :     return true;
    3985             :   } else {
    3986           0 :     args.rval().setNull();
    3987           0 :     return true;
    3988             :   }
    3989             : }
    3990             : 
    3991             : static bool
    3992           0 : set_onseeked(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    3993             : {
    3994           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3995           0 :   if (args[0].isObject()) {
    3996             :     { // scope for tempRoot
    3997           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3998           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3999             :     }
    4000             :   } else {
    4001           0 :     arg0 = nullptr;
    4002             :   }
    4003           0 :   self->SetOnseeked(Constify(arg0));
    4004           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4005             : 
    4006           0 :   return true;
    4007             : }
    4008             : 
    4009             : static const JSJitInfo onseeked_getterinfo = {
    4010             :   { (JSJitGetterOp)get_onseeked },
    4011             :   { prototypes::id::SVGElement },
    4012             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4013             :   JSJitInfo::Getter,
    4014             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4015             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4016             :   false,  /* isInfallible. False in setters. */
    4017             :   false,  /* isMovable.  Not relevant for setters. */
    4018             :   false, /* isEliminatable.  Not relevant for setters. */
    4019             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4020             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4021             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4022             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4023             : };
    4024             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4025             : static_assert(0 < 1, "There is no slot for us");
    4026             : static const JSJitInfo onseeked_setterinfo = {
    4027             :   { (JSJitGetterOp)set_onseeked },
    4028             :   { prototypes::id::SVGElement },
    4029             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4030             :   JSJitInfo::Setter,
    4031             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4032             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4033             :   false,  /* isInfallible. False in setters. */
    4034             :   false,  /* isMovable.  Not relevant for setters. */
    4035             :   false, /* isEliminatable.  Not relevant for setters. */
    4036             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4037             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4038             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4039             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4040             : };
    4041             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4042             : static_assert(0 < 1, "There is no slot for us");
    4043             : 
    4044             : static bool
    4045           0 : get_onseeking(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    4046             : {
    4047           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnseeking());
    4048           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4049           0 :   if (result) {
    4050           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4051           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4052           0 :       return false;
    4053             :     }
    4054           0 :     return true;
    4055             :   } else {
    4056           0 :     args.rval().setNull();
    4057           0 :     return true;
    4058             :   }
    4059             : }
    4060             : 
    4061             : static bool
    4062           0 : set_onseeking(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    4063             : {
    4064           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4065           0 :   if (args[0].isObject()) {
    4066             :     { // scope for tempRoot
    4067           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4068           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4069             :     }
    4070             :   } else {
    4071           0 :     arg0 = nullptr;
    4072             :   }
    4073           0 :   self->SetOnseeking(Constify(arg0));
    4074           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4075             : 
    4076           0 :   return true;
    4077             : }
    4078             : 
    4079             : static const JSJitInfo onseeking_getterinfo = {
    4080             :   { (JSJitGetterOp)get_onseeking },
    4081             :   { prototypes::id::SVGElement },
    4082             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4083             :   JSJitInfo::Getter,
    4084             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4085             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4086             :   false,  /* isInfallible. False in setters. */
    4087             :   false,  /* isMovable.  Not relevant for setters. */
    4088             :   false, /* isEliminatable.  Not relevant for setters. */
    4089             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4090             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4091             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4092             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4093             : };
    4094             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4095             : static_assert(0 < 1, "There is no slot for us");
    4096             : static const JSJitInfo onseeking_setterinfo = {
    4097             :   { (JSJitGetterOp)set_onseeking },
    4098             :   { prototypes::id::SVGElement },
    4099             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4100             :   JSJitInfo::Setter,
    4101             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4102             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4103             :   false,  /* isInfallible. False in setters. */
    4104             :   false,  /* isMovable.  Not relevant for setters. */
    4105             :   false, /* isEliminatable.  Not relevant for setters. */
    4106             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4107             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4108             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4109             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4110             : };
    4111             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4112             : static_assert(0 < 1, "There is no slot for us");
    4113             : 
    4114             : static bool
    4115           0 : get_onselect(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    4116             : {
    4117           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnselect());
    4118           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4119           0 :   if (result) {
    4120           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4121           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4122           0 :       return false;
    4123             :     }
    4124           0 :     return true;
    4125             :   } else {
    4126           0 :     args.rval().setNull();
    4127           0 :     return true;
    4128             :   }
    4129             : }
    4130             : 
    4131             : static bool
    4132           0 : set_onselect(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    4133             : {
    4134           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4135           0 :   if (args[0].isObject()) {
    4136             :     { // scope for tempRoot
    4137           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4138           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4139             :     }
    4140             :   } else {
    4141           0 :     arg0 = nullptr;
    4142             :   }
    4143           0 :   self->SetOnselect(Constify(arg0));
    4144           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4145             : 
    4146           0 :   return true;
    4147             : }
    4148             : 
    4149             : static const JSJitInfo onselect_getterinfo = {
    4150             :   { (JSJitGetterOp)get_onselect },
    4151             :   { prototypes::id::SVGElement },
    4152             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4153             :   JSJitInfo::Getter,
    4154             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4155             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4156             :   false,  /* isInfallible. False in setters. */
    4157             :   false,  /* isMovable.  Not relevant for setters. */
    4158             :   false, /* isEliminatable.  Not relevant for setters. */
    4159             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4160             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4161             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4162             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4163             : };
    4164             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4165             : static_assert(0 < 1, "There is no slot for us");
    4166             : static const JSJitInfo onselect_setterinfo = {
    4167             :   { (JSJitGetterOp)set_onselect },
    4168             :   { prototypes::id::SVGElement },
    4169             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4170             :   JSJitInfo::Setter,
    4171             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4172             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4173             :   false,  /* isInfallible. False in setters. */
    4174             :   false,  /* isMovable.  Not relevant for setters. */
    4175             :   false, /* isEliminatable.  Not relevant for setters. */
    4176             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4177             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4178             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4179             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4180             : };
    4181             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4182             : static_assert(0 < 1, "There is no slot for us");
    4183             : 
    4184             : static bool
    4185           0 : get_onshow(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    4186             : {
    4187           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnshow());
    4188           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4189           0 :   if (result) {
    4190           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4191           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4192           0 :       return false;
    4193             :     }
    4194           0 :     return true;
    4195             :   } else {
    4196           0 :     args.rval().setNull();
    4197           0 :     return true;
    4198             :   }
    4199             : }
    4200             : 
    4201             : static bool
    4202           0 : set_onshow(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    4203             : {
    4204           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4205           0 :   if (args[0].isObject()) {
    4206             :     { // scope for tempRoot
    4207           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4208           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4209             :     }
    4210             :   } else {
    4211           0 :     arg0 = nullptr;
    4212             :   }
    4213           0 :   self->SetOnshow(Constify(arg0));
    4214           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4215             : 
    4216           0 :   return true;
    4217             : }
    4218             : 
    4219             : static const JSJitInfo onshow_getterinfo = {
    4220             :   { (JSJitGetterOp)get_onshow },
    4221             :   { prototypes::id::SVGElement },
    4222             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4223             :   JSJitInfo::Getter,
    4224             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4225             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4226             :   false,  /* isInfallible. False in setters. */
    4227             :   false,  /* isMovable.  Not relevant for setters. */
    4228             :   false, /* isEliminatable.  Not relevant for setters. */
    4229             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4230             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4231             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4232             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4233             : };
    4234             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4235             : static_assert(0 < 1, "There is no slot for us");
    4236             : static const JSJitInfo onshow_setterinfo = {
    4237             :   { (JSJitGetterOp)set_onshow },
    4238             :   { prototypes::id::SVGElement },
    4239             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4240             :   JSJitInfo::Setter,
    4241             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4242             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4243             :   false,  /* isInfallible. False in setters. */
    4244             :   false,  /* isMovable.  Not relevant for setters. */
    4245             :   false, /* isEliminatable.  Not relevant for setters. */
    4246             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4247             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4248             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4249             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4250             : };
    4251             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4252             : static_assert(0 < 1, "There is no slot for us");
    4253             : 
    4254             : static bool
    4255           0 : get_onstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    4256             : {
    4257           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnstalled());
    4258           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4259           0 :   if (result) {
    4260           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4261           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4262           0 :       return false;
    4263             :     }
    4264           0 :     return true;
    4265             :   } else {
    4266           0 :     args.rval().setNull();
    4267           0 :     return true;
    4268             :   }
    4269             : }
    4270             : 
    4271             : static bool
    4272           0 : set_onstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    4273             : {
    4274           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4275           0 :   if (args[0].isObject()) {
    4276             :     { // scope for tempRoot
    4277           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4278           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4279             :     }
    4280             :   } else {
    4281           0 :     arg0 = nullptr;
    4282             :   }
    4283           0 :   self->SetOnstalled(Constify(arg0));
    4284           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4285             : 
    4286           0 :   return true;
    4287             : }
    4288             : 
    4289             : static const JSJitInfo onstalled_getterinfo = {
    4290             :   { (JSJitGetterOp)get_onstalled },
    4291             :   { prototypes::id::SVGElement },
    4292             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4293             :   JSJitInfo::Getter,
    4294             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4295             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4296             :   false,  /* isInfallible. False in setters. */
    4297             :   false,  /* isMovable.  Not relevant for setters. */
    4298             :   false, /* isEliminatable.  Not relevant for setters. */
    4299             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4300             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4301             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4302             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4303             : };
    4304             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4305             : static_assert(0 < 1, "There is no slot for us");
    4306             : static const JSJitInfo onstalled_setterinfo = {
    4307             :   { (JSJitGetterOp)set_onstalled },
    4308             :   { prototypes::id::SVGElement },
    4309             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4310             :   JSJitInfo::Setter,
    4311             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4312             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4313             :   false,  /* isInfallible. False in setters. */
    4314             :   false,  /* isMovable.  Not relevant for setters. */
    4315             :   false, /* isEliminatable.  Not relevant for setters. */
    4316             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4317             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4318             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4319             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4320             : };
    4321             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4322             : static_assert(0 < 1, "There is no slot for us");
    4323             : 
    4324             : static bool
    4325           0 : get_onsubmit(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    4326             : {
    4327           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnsubmit());
    4328           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4329           0 :   if (result) {
    4330           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4331           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4332           0 :       return false;
    4333             :     }
    4334           0 :     return true;
    4335             :   } else {
    4336           0 :     args.rval().setNull();
    4337           0 :     return true;
    4338             :   }
    4339             : }
    4340             : 
    4341             : static bool
    4342           0 : set_onsubmit(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    4343             : {
    4344           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4345           0 :   if (args[0].isObject()) {
    4346             :     { // scope for tempRoot
    4347           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4348           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4349             :     }
    4350             :   } else {
    4351           0 :     arg0 = nullptr;
    4352             :   }
    4353           0 :   self->SetOnsubmit(Constify(arg0));
    4354           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4355             : 
    4356           0 :   return true;
    4357             : }
    4358             : 
    4359             : static const JSJitInfo onsubmit_getterinfo = {
    4360             :   { (JSJitGetterOp)get_onsubmit },
    4361             :   { prototypes::id::SVGElement },
    4362             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4363             :   JSJitInfo::Getter,
    4364             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4365             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4366             :   false,  /* isInfallible. False in setters. */
    4367             :   false,  /* isMovable.  Not relevant for setters. */
    4368             :   false, /* isEliminatable.  Not relevant for setters. */
    4369             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4370             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4371             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4372             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4373             : };
    4374             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4375             : static_assert(0 < 1, "There is no slot for us");
    4376             : static const JSJitInfo onsubmit_setterinfo = {
    4377             :   { (JSJitGetterOp)set_onsubmit },
    4378             :   { prototypes::id::SVGElement },
    4379             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4380             :   JSJitInfo::Setter,
    4381             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4382             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4383             :   false,  /* isInfallible. False in setters. */
    4384             :   false,  /* isMovable.  Not relevant for setters. */
    4385             :   false, /* isEliminatable.  Not relevant for setters. */
    4386             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4387             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4388             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4389             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4390             : };
    4391             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4392             : static_assert(0 < 1, "There is no slot for us");
    4393             : 
    4394             : static bool
    4395           0 : get_onsuspend(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    4396             : {
    4397           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnsuspend());
    4398           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4399           0 :   if (result) {
    4400           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4401           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4402           0 :       return false;
    4403             :     }
    4404           0 :     return true;
    4405             :   } else {
    4406           0 :     args.rval().setNull();
    4407           0 :     return true;
    4408             :   }
    4409             : }
    4410             : 
    4411             : static bool
    4412           0 : set_onsuspend(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    4413             : {
    4414           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4415           0 :   if (args[0].isObject()) {
    4416             :     { // scope for tempRoot
    4417           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4418           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4419             :     }
    4420             :   } else {
    4421           0 :     arg0 = nullptr;
    4422             :   }
    4423           0 :   self->SetOnsuspend(Constify(arg0));
    4424           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4425             : 
    4426           0 :   return true;
    4427             : }
    4428             : 
    4429             : static const JSJitInfo onsuspend_getterinfo = {
    4430             :   { (JSJitGetterOp)get_onsuspend },
    4431             :   { prototypes::id::SVGElement },
    4432             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4433             :   JSJitInfo::Getter,
    4434             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4435             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4436             :   false,  /* isInfallible. False in setters. */
    4437             :   false,  /* isMovable.  Not relevant for setters. */
    4438             :   false, /* isEliminatable.  Not relevant for setters. */
    4439             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4440             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4441             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4442             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4443             : };
    4444             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4445             : static_assert(0 < 1, "There is no slot for us");
    4446             : static const JSJitInfo onsuspend_setterinfo = {
    4447             :   { (JSJitGetterOp)set_onsuspend },
    4448             :   { prototypes::id::SVGElement },
    4449             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4450             :   JSJitInfo::Setter,
    4451             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4452             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4453             :   false,  /* isInfallible. False in setters. */
    4454             :   false,  /* isMovable.  Not relevant for setters. */
    4455             :   false, /* isEliminatable.  Not relevant for setters. */
    4456             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4457             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4458             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4459             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4460             : };
    4461             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4462             : static_assert(0 < 1, "There is no slot for us");
    4463             : 
    4464             : static bool
    4465           0 : get_ontimeupdate(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    4466             : {
    4467           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntimeupdate());
    4468           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4469           0 :   if (result) {
    4470           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4471           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4472           0 :       return false;
    4473             :     }
    4474           0 :     return true;
    4475             :   } else {
    4476           0 :     args.rval().setNull();
    4477           0 :     return true;
    4478             :   }
    4479             : }
    4480             : 
    4481             : static bool
    4482           0 : set_ontimeupdate(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    4483             : {
    4484           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4485           0 :   if (args[0].isObject()) {
    4486             :     { // scope for tempRoot
    4487           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4488           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4489             :     }
    4490             :   } else {
    4491           0 :     arg0 = nullptr;
    4492             :   }
    4493           0 :   self->SetOntimeupdate(Constify(arg0));
    4494           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4495             : 
    4496           0 :   return true;
    4497             : }
    4498             : 
    4499             : static const JSJitInfo ontimeupdate_getterinfo = {
    4500             :   { (JSJitGetterOp)get_ontimeupdate },
    4501             :   { prototypes::id::SVGElement },
    4502             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4503             :   JSJitInfo::Getter,
    4504             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4505             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4506             :   false,  /* isInfallible. False in setters. */
    4507             :   false,  /* isMovable.  Not relevant for setters. */
    4508             :   false, /* isEliminatable.  Not relevant for setters. */
    4509             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4510             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4511             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4512             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4513             : };
    4514             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4515             : static_assert(0 < 1, "There is no slot for us");
    4516             : static const JSJitInfo ontimeupdate_setterinfo = {
    4517             :   { (JSJitGetterOp)set_ontimeupdate },
    4518             :   { prototypes::id::SVGElement },
    4519             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4520             :   JSJitInfo::Setter,
    4521             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4522             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4523             :   false,  /* isInfallible. False in setters. */
    4524             :   false,  /* isMovable.  Not relevant for setters. */
    4525             :   false, /* isEliminatable.  Not relevant for setters. */
    4526             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4527             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4528             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4529             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4530             : };
    4531             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4532             : static_assert(0 < 1, "There is no slot for us");
    4533             : 
    4534             : static bool
    4535           0 : get_onvolumechange(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    4536             : {
    4537           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnvolumechange());
    4538           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4539           0 :   if (result) {
    4540           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4541           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4542           0 :       return false;
    4543             :     }
    4544           0 :     return true;
    4545             :   } else {
    4546           0 :     args.rval().setNull();
    4547           0 :     return true;
    4548             :   }
    4549             : }
    4550             : 
    4551             : static bool
    4552           0 : set_onvolumechange(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    4553             : {
    4554           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4555           0 :   if (args[0].isObject()) {
    4556             :     { // scope for tempRoot
    4557           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4558           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4559             :     }
    4560             :   } else {
    4561           0 :     arg0 = nullptr;
    4562             :   }
    4563           0 :   self->SetOnvolumechange(Constify(arg0));
    4564           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4565             : 
    4566           0 :   return true;
    4567             : }
    4568             : 
    4569             : static const JSJitInfo onvolumechange_getterinfo = {
    4570             :   { (JSJitGetterOp)get_onvolumechange },
    4571             :   { prototypes::id::SVGElement },
    4572             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4573             :   JSJitInfo::Getter,
    4574             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4575             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4576             :   false,  /* isInfallible. False in setters. */
    4577             :   false,  /* isMovable.  Not relevant for setters. */
    4578             :   false, /* isEliminatable.  Not relevant for setters. */
    4579             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4580             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4581             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4582             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4583             : };
    4584             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4585             : static_assert(0 < 1, "There is no slot for us");
    4586             : static const JSJitInfo onvolumechange_setterinfo = {
    4587             :   { (JSJitGetterOp)set_onvolumechange },
    4588             :   { prototypes::id::SVGElement },
    4589             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4590             :   JSJitInfo::Setter,
    4591             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4592             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4593             :   false,  /* isInfallible. False in setters. */
    4594             :   false,  /* isMovable.  Not relevant for setters. */
    4595             :   false, /* isEliminatable.  Not relevant for setters. */
    4596             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4597             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4598             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4599             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4600             : };
    4601             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4602             : static_assert(0 < 1, "There is no slot for us");
    4603             : 
    4604             : static bool
    4605           0 : get_onwaiting(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    4606             : {
    4607           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwaiting());
    4608           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4609           0 :   if (result) {
    4610           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4611           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4612           0 :       return false;
    4613             :     }
    4614           0 :     return true;
    4615             :   } else {
    4616           0 :     args.rval().setNull();
    4617           0 :     return true;
    4618             :   }
    4619             : }
    4620             : 
    4621             : static bool
    4622           0 : set_onwaiting(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    4623             : {
    4624           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4625           0 :   if (args[0].isObject()) {
    4626             :     { // scope for tempRoot
    4627           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4628           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4629             :     }
    4630             :   } else {
    4631           0 :     arg0 = nullptr;
    4632             :   }
    4633           0 :   self->SetOnwaiting(Constify(arg0));
    4634           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4635             : 
    4636           0 :   return true;
    4637             : }
    4638             : 
    4639             : static const JSJitInfo onwaiting_getterinfo = {
    4640             :   { (JSJitGetterOp)get_onwaiting },
    4641             :   { prototypes::id::SVGElement },
    4642             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4643             :   JSJitInfo::Getter,
    4644             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4645             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4646             :   false,  /* isInfallible. False in setters. */
    4647             :   false,  /* isMovable.  Not relevant for setters. */
    4648             :   false, /* isEliminatable.  Not relevant for setters. */
    4649             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4650             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4651             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4652             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4653             : };
    4654             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4655             : static_assert(0 < 1, "There is no slot for us");
    4656             : static const JSJitInfo onwaiting_setterinfo = {
    4657             :   { (JSJitGetterOp)set_onwaiting },
    4658             :   { prototypes::id::SVGElement },
    4659             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4660             :   JSJitInfo::Setter,
    4661             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4662             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4663             :   false,  /* isInfallible. False in setters. */
    4664             :   false,  /* isMovable.  Not relevant for setters. */
    4665             :   false, /* isEliminatable.  Not relevant for setters. */
    4666             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4667             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4668             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4669             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4670             : };
    4671             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4672             : static_assert(0 < 1, "There is no slot for us");
    4673             : 
    4674             : static bool
    4675           0 : get_onselectstart(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    4676             : {
    4677           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnselectstart());
    4678           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4679           0 :   if (result) {
    4680           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4681           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4682           0 :       return false;
    4683             :     }
    4684           0 :     return true;
    4685             :   } else {
    4686           0 :     args.rval().setNull();
    4687           0 :     return true;
    4688             :   }
    4689             : }
    4690             : 
    4691             : static bool
    4692           0 : set_onselectstart(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    4693             : {
    4694           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4695           0 :   if (args[0].isObject()) {
    4696             :     { // scope for tempRoot
    4697           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4698           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4699             :     }
    4700             :   } else {
    4701           0 :     arg0 = nullptr;
    4702             :   }
    4703           0 :   self->SetOnselectstart(Constify(arg0));
    4704           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4705             : 
    4706           0 :   return true;
    4707             : }
    4708             : 
    4709             : static const JSJitInfo onselectstart_getterinfo = {
    4710             :   { (JSJitGetterOp)get_onselectstart },
    4711             :   { prototypes::id::SVGElement },
    4712             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4713             :   JSJitInfo::Getter,
    4714             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4715             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4716             :   false,  /* isInfallible. False in setters. */
    4717             :   false,  /* isMovable.  Not relevant for setters. */
    4718             :   false, /* isEliminatable.  Not relevant for setters. */
    4719             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4720             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4721             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4722             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4723             : };
    4724             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4725             : static_assert(0 < 1, "There is no slot for us");
    4726             : static const JSJitInfo onselectstart_setterinfo = {
    4727             :   { (JSJitGetterOp)set_onselectstart },
    4728             :   { prototypes::id::SVGElement },
    4729             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4730             :   JSJitInfo::Setter,
    4731             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4732             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4733             :   false,  /* isInfallible. False in setters. */
    4734             :   false,  /* isMovable.  Not relevant for setters. */
    4735             :   false, /* isEliminatable.  Not relevant for setters. */
    4736             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4737             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4738             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4739             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4740             : };
    4741             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4742             : static_assert(0 < 1, "There is no slot for us");
    4743             : 
    4744             : static bool
    4745           0 : get_ontoggle(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    4746             : {
    4747           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntoggle());
    4748           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4749           0 :   if (result) {
    4750           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4751           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4752           0 :       return false;
    4753             :     }
    4754           0 :     return true;
    4755             :   } else {
    4756           0 :     args.rval().setNull();
    4757           0 :     return true;
    4758             :   }
    4759             : }
    4760             : 
    4761             : static bool
    4762           0 : set_ontoggle(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    4763             : {
    4764           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4765           0 :   if (args[0].isObject()) {
    4766             :     { // scope for tempRoot
    4767           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4768           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4769             :     }
    4770             :   } else {
    4771           0 :     arg0 = nullptr;
    4772             :   }
    4773           0 :   self->SetOntoggle(Constify(arg0));
    4774           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4775             : 
    4776           0 :   return true;
    4777             : }
    4778             : 
    4779             : static const JSJitInfo ontoggle_getterinfo = {
    4780             :   { (JSJitGetterOp)get_ontoggle },
    4781             :   { prototypes::id::SVGElement },
    4782             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4783             :   JSJitInfo::Getter,
    4784             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4785             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4786             :   false,  /* isInfallible. False in setters. */
    4787             :   false,  /* isMovable.  Not relevant for setters. */
    4788             :   false, /* isEliminatable.  Not relevant for setters. */
    4789             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4790             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4791             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4792             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4793             : };
    4794             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4795             : static_assert(0 < 1, "There is no slot for us");
    4796             : static const JSJitInfo ontoggle_setterinfo = {
    4797             :   { (JSJitGetterOp)set_ontoggle },
    4798             :   { prototypes::id::SVGElement },
    4799             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4800             :   JSJitInfo::Setter,
    4801             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4802             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4803             :   false,  /* isInfallible. False in setters. */
    4804             :   false,  /* isMovable.  Not relevant for setters. */
    4805             :   false, /* isEliminatable.  Not relevant for setters. */
    4806             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4807             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4808             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4809             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4810             : };
    4811             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4812             : static_assert(0 < 1, "There is no slot for us");
    4813             : 
    4814             : static bool
    4815           0 : get_onpointercancel(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    4816             : {
    4817           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointercancel());
    4818           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4819           0 :   if (result) {
    4820           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4821           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4822           0 :       return false;
    4823             :     }
    4824           0 :     return true;
    4825             :   } else {
    4826           0 :     args.rval().setNull();
    4827           0 :     return true;
    4828             :   }
    4829             : }
    4830             : 
    4831             : static bool
    4832           0 : set_onpointercancel(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    4833             : {
    4834           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4835           0 :   if (args[0].isObject()) {
    4836             :     { // scope for tempRoot
    4837           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4838           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4839             :     }
    4840             :   } else {
    4841           0 :     arg0 = nullptr;
    4842             :   }
    4843           0 :   self->SetOnpointercancel(Constify(arg0));
    4844           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4845             : 
    4846           0 :   return true;
    4847             : }
    4848             : 
    4849             : static const JSJitInfo onpointercancel_getterinfo = {
    4850             :   { (JSJitGetterOp)get_onpointercancel },
    4851             :   { prototypes::id::SVGElement },
    4852             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4853             :   JSJitInfo::Getter,
    4854             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4855             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4856             :   false,  /* isInfallible. False in setters. */
    4857             :   false,  /* isMovable.  Not relevant for setters. */
    4858             :   false, /* isEliminatable.  Not relevant for setters. */
    4859             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4860             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4861             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4862             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4863             : };
    4864             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4865             : static_assert(0 < 1, "There is no slot for us");
    4866             : static const JSJitInfo onpointercancel_setterinfo = {
    4867             :   { (JSJitGetterOp)set_onpointercancel },
    4868             :   { prototypes::id::SVGElement },
    4869             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4870             :   JSJitInfo::Setter,
    4871             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4872             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4873             :   false,  /* isInfallible. False in setters. */
    4874             :   false,  /* isMovable.  Not relevant for setters. */
    4875             :   false, /* isEliminatable.  Not relevant for setters. */
    4876             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4877             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4878             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4879             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4880             : };
    4881             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4882             : static_assert(0 < 1, "There is no slot for us");
    4883             : 
    4884             : static bool
    4885           0 : get_onpointerdown(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    4886             : {
    4887           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerdown());
    4888           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4889           0 :   if (result) {
    4890           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4891           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4892           0 :       return false;
    4893             :     }
    4894           0 :     return true;
    4895             :   } else {
    4896           0 :     args.rval().setNull();
    4897           0 :     return true;
    4898             :   }
    4899             : }
    4900             : 
    4901             : static bool
    4902           0 : set_onpointerdown(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    4903             : {
    4904           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4905           0 :   if (args[0].isObject()) {
    4906             :     { // scope for tempRoot
    4907           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4908           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4909             :     }
    4910             :   } else {
    4911           0 :     arg0 = nullptr;
    4912             :   }
    4913           0 :   self->SetOnpointerdown(Constify(arg0));
    4914           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4915             : 
    4916           0 :   return true;
    4917             : }
    4918             : 
    4919             : static const JSJitInfo onpointerdown_getterinfo = {
    4920             :   { (JSJitGetterOp)get_onpointerdown },
    4921             :   { prototypes::id::SVGElement },
    4922             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4923             :   JSJitInfo::Getter,
    4924             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4925             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4926             :   false,  /* isInfallible. False in setters. */
    4927             :   false,  /* isMovable.  Not relevant for setters. */
    4928             :   false, /* isEliminatable.  Not relevant for setters. */
    4929             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4930             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4931             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4932             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4933             : };
    4934             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4935             : static_assert(0 < 1, "There is no slot for us");
    4936             : static const JSJitInfo onpointerdown_setterinfo = {
    4937             :   { (JSJitGetterOp)set_onpointerdown },
    4938             :   { prototypes::id::SVGElement },
    4939             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4940             :   JSJitInfo::Setter,
    4941             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4942             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4943             :   false,  /* isInfallible. False in setters. */
    4944             :   false,  /* isMovable.  Not relevant for setters. */
    4945             :   false, /* isEliminatable.  Not relevant for setters. */
    4946             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4947             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4948             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4949             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4950             : };
    4951             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4952             : static_assert(0 < 1, "There is no slot for us");
    4953             : 
    4954             : static bool
    4955           0 : get_onpointerup(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    4956             : {
    4957           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerup());
    4958           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4959           0 :   if (result) {
    4960           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4961           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4962           0 :       return false;
    4963             :     }
    4964           0 :     return true;
    4965             :   } else {
    4966           0 :     args.rval().setNull();
    4967           0 :     return true;
    4968             :   }
    4969             : }
    4970             : 
    4971             : static bool
    4972           0 : set_onpointerup(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    4973             : {
    4974           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4975           0 :   if (args[0].isObject()) {
    4976             :     { // scope for tempRoot
    4977           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4978           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4979             :     }
    4980             :   } else {
    4981           0 :     arg0 = nullptr;
    4982             :   }
    4983           0 :   self->SetOnpointerup(Constify(arg0));
    4984           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4985             : 
    4986           0 :   return true;
    4987             : }
    4988             : 
    4989             : static const JSJitInfo onpointerup_getterinfo = {
    4990             :   { (JSJitGetterOp)get_onpointerup },
    4991             :   { prototypes::id::SVGElement },
    4992             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    4993             :   JSJitInfo::Getter,
    4994             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4995             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4996             :   false,  /* isInfallible. False in setters. */
    4997             :   false,  /* isMovable.  Not relevant for setters. */
    4998             :   false, /* isEliminatable.  Not relevant for setters. */
    4999             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5000             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5001             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5002             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5003             : };
    5004             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5005             : static_assert(0 < 1, "There is no slot for us");
    5006             : static const JSJitInfo onpointerup_setterinfo = {
    5007             :   { (JSJitGetterOp)set_onpointerup },
    5008             :   { prototypes::id::SVGElement },
    5009             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5010             :   JSJitInfo::Setter,
    5011             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5012             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5013             :   false,  /* isInfallible. False in setters. */
    5014             :   false,  /* isMovable.  Not relevant for setters. */
    5015             :   false, /* isEliminatable.  Not relevant for setters. */
    5016             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5017             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5018             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5019             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5020             : };
    5021             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5022             : static_assert(0 < 1, "There is no slot for us");
    5023             : 
    5024             : static bool
    5025           0 : get_onpointermove(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    5026             : {
    5027           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointermove());
    5028           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5029           0 :   if (result) {
    5030           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5031           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5032           0 :       return false;
    5033             :     }
    5034           0 :     return true;
    5035             :   } else {
    5036           0 :     args.rval().setNull();
    5037           0 :     return true;
    5038             :   }
    5039             : }
    5040             : 
    5041             : static bool
    5042           0 : set_onpointermove(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    5043             : {
    5044           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5045           0 :   if (args[0].isObject()) {
    5046             :     { // scope for tempRoot
    5047           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5048           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5049             :     }
    5050             :   } else {
    5051           0 :     arg0 = nullptr;
    5052             :   }
    5053           0 :   self->SetOnpointermove(Constify(arg0));
    5054           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5055             : 
    5056           0 :   return true;
    5057             : }
    5058             : 
    5059             : static const JSJitInfo onpointermove_getterinfo = {
    5060             :   { (JSJitGetterOp)get_onpointermove },
    5061             :   { prototypes::id::SVGElement },
    5062             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5063             :   JSJitInfo::Getter,
    5064             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5065             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5066             :   false,  /* isInfallible. False in setters. */
    5067             :   false,  /* isMovable.  Not relevant for setters. */
    5068             :   false, /* isEliminatable.  Not relevant for setters. */
    5069             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5070             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5071             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5072             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5073             : };
    5074             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5075             : static_assert(0 < 1, "There is no slot for us");
    5076             : static const JSJitInfo onpointermove_setterinfo = {
    5077             :   { (JSJitGetterOp)set_onpointermove },
    5078             :   { prototypes::id::SVGElement },
    5079             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5080             :   JSJitInfo::Setter,
    5081             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5082             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5083             :   false,  /* isInfallible. False in setters. */
    5084             :   false,  /* isMovable.  Not relevant for setters. */
    5085             :   false, /* isEliminatable.  Not relevant for setters. */
    5086             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5087             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5088             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5089             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5090             : };
    5091             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5092             : static_assert(0 < 1, "There is no slot for us");
    5093             : 
    5094             : static bool
    5095           0 : get_onpointerout(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    5096             : {
    5097           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerout());
    5098           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5099           0 :   if (result) {
    5100           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5101           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5102           0 :       return false;
    5103             :     }
    5104           0 :     return true;
    5105             :   } else {
    5106           0 :     args.rval().setNull();
    5107           0 :     return true;
    5108             :   }
    5109             : }
    5110             : 
    5111             : static bool
    5112           0 : set_onpointerout(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    5113             : {
    5114           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5115           0 :   if (args[0].isObject()) {
    5116             :     { // scope for tempRoot
    5117           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5118           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5119             :     }
    5120             :   } else {
    5121           0 :     arg0 = nullptr;
    5122             :   }
    5123           0 :   self->SetOnpointerout(Constify(arg0));
    5124           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5125             : 
    5126           0 :   return true;
    5127             : }
    5128             : 
    5129             : static const JSJitInfo onpointerout_getterinfo = {
    5130             :   { (JSJitGetterOp)get_onpointerout },
    5131             :   { prototypes::id::SVGElement },
    5132             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5133             :   JSJitInfo::Getter,
    5134             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5135             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5136             :   false,  /* isInfallible. False in setters. */
    5137             :   false,  /* isMovable.  Not relevant for setters. */
    5138             :   false, /* isEliminatable.  Not relevant for setters. */
    5139             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5140             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5141             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5142             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5143             : };
    5144             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5145             : static_assert(0 < 1, "There is no slot for us");
    5146             : static const JSJitInfo onpointerout_setterinfo = {
    5147             :   { (JSJitGetterOp)set_onpointerout },
    5148             :   { prototypes::id::SVGElement },
    5149             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5150             :   JSJitInfo::Setter,
    5151             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5152             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5153             :   false,  /* isInfallible. False in setters. */
    5154             :   false,  /* isMovable.  Not relevant for setters. */
    5155             :   false, /* isEliminatable.  Not relevant for setters. */
    5156             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5157             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5158             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5159             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5160             : };
    5161             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5162             : static_assert(0 < 1, "There is no slot for us");
    5163             : 
    5164             : static bool
    5165           0 : get_onpointerover(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    5166             : {
    5167           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerover());
    5168           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5169           0 :   if (result) {
    5170           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5171           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5172           0 :       return false;
    5173             :     }
    5174           0 :     return true;
    5175             :   } else {
    5176           0 :     args.rval().setNull();
    5177           0 :     return true;
    5178             :   }
    5179             : }
    5180             : 
    5181             : static bool
    5182           0 : set_onpointerover(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    5183             : {
    5184           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5185           0 :   if (args[0].isObject()) {
    5186             :     { // scope for tempRoot
    5187           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5188           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5189             :     }
    5190             :   } else {
    5191           0 :     arg0 = nullptr;
    5192             :   }
    5193           0 :   self->SetOnpointerover(Constify(arg0));
    5194           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5195             : 
    5196           0 :   return true;
    5197             : }
    5198             : 
    5199             : static const JSJitInfo onpointerover_getterinfo = {
    5200             :   { (JSJitGetterOp)get_onpointerover },
    5201             :   { prototypes::id::SVGElement },
    5202             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5203             :   JSJitInfo::Getter,
    5204             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5205             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5206             :   false,  /* isInfallible. False in setters. */
    5207             :   false,  /* isMovable.  Not relevant for setters. */
    5208             :   false, /* isEliminatable.  Not relevant for setters. */
    5209             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5210             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5211             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5212             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5213             : };
    5214             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5215             : static_assert(0 < 1, "There is no slot for us");
    5216             : static const JSJitInfo onpointerover_setterinfo = {
    5217             :   { (JSJitGetterOp)set_onpointerover },
    5218             :   { prototypes::id::SVGElement },
    5219             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5220             :   JSJitInfo::Setter,
    5221             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5222             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5223             :   false,  /* isInfallible. False in setters. */
    5224             :   false,  /* isMovable.  Not relevant for setters. */
    5225             :   false, /* isEliminatable.  Not relevant for setters. */
    5226             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5227             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5228             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5229             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5230             : };
    5231             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5232             : static_assert(0 < 1, "There is no slot for us");
    5233             : 
    5234             : static bool
    5235           0 : get_onpointerenter(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    5236             : {
    5237           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerenter());
    5238           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5239           0 :   if (result) {
    5240           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5241           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5242           0 :       return false;
    5243             :     }
    5244           0 :     return true;
    5245             :   } else {
    5246           0 :     args.rval().setNull();
    5247           0 :     return true;
    5248             :   }
    5249             : }
    5250             : 
    5251             : static bool
    5252           0 : set_onpointerenter(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    5253             : {
    5254           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5255           0 :   if (args[0].isObject()) {
    5256             :     { // scope for tempRoot
    5257           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5258           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5259             :     }
    5260             :   } else {
    5261           0 :     arg0 = nullptr;
    5262             :   }
    5263           0 :   self->SetOnpointerenter(Constify(arg0));
    5264           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5265             : 
    5266           0 :   return true;
    5267             : }
    5268             : 
    5269             : static const JSJitInfo onpointerenter_getterinfo = {
    5270             :   { (JSJitGetterOp)get_onpointerenter },
    5271             :   { prototypes::id::SVGElement },
    5272             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5273             :   JSJitInfo::Getter,
    5274             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5275             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5276             :   false,  /* isInfallible. False in setters. */
    5277             :   false,  /* isMovable.  Not relevant for setters. */
    5278             :   false, /* isEliminatable.  Not relevant for setters. */
    5279             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5280             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5281             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5282             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5283             : };
    5284             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5285             : static_assert(0 < 1, "There is no slot for us");
    5286             : static const JSJitInfo onpointerenter_setterinfo = {
    5287             :   { (JSJitGetterOp)set_onpointerenter },
    5288             :   { prototypes::id::SVGElement },
    5289             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5290             :   JSJitInfo::Setter,
    5291             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5292             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5293             :   false,  /* isInfallible. False in setters. */
    5294             :   false,  /* isMovable.  Not relevant for setters. */
    5295             :   false, /* isEliminatable.  Not relevant for setters. */
    5296             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5297             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5298             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5299             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5300             : };
    5301             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5302             : static_assert(0 < 1, "There is no slot for us");
    5303             : 
    5304             : static bool
    5305           0 : get_onpointerleave(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    5306             : {
    5307           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerleave());
    5308           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5309           0 :   if (result) {
    5310           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5311           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5312           0 :       return false;
    5313             :     }
    5314           0 :     return true;
    5315             :   } else {
    5316           0 :     args.rval().setNull();
    5317           0 :     return true;
    5318             :   }
    5319             : }
    5320             : 
    5321             : static bool
    5322           0 : set_onpointerleave(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    5323             : {
    5324           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5325           0 :   if (args[0].isObject()) {
    5326             :     { // scope for tempRoot
    5327           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5328           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5329             :     }
    5330             :   } else {
    5331           0 :     arg0 = nullptr;
    5332             :   }
    5333           0 :   self->SetOnpointerleave(Constify(arg0));
    5334           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5335             : 
    5336           0 :   return true;
    5337             : }
    5338             : 
    5339             : static const JSJitInfo onpointerleave_getterinfo = {
    5340             :   { (JSJitGetterOp)get_onpointerleave },
    5341             :   { prototypes::id::SVGElement },
    5342             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5343             :   JSJitInfo::Getter,
    5344             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5345             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5346             :   false,  /* isInfallible. False in setters. */
    5347             :   false,  /* isMovable.  Not relevant for setters. */
    5348             :   false, /* isEliminatable.  Not relevant for setters. */
    5349             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5350             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5351             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5352             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5353             : };
    5354             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5355             : static_assert(0 < 1, "There is no slot for us");
    5356             : static const JSJitInfo onpointerleave_setterinfo = {
    5357             :   { (JSJitGetterOp)set_onpointerleave },
    5358             :   { prototypes::id::SVGElement },
    5359             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5360             :   JSJitInfo::Setter,
    5361             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5362             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5363             :   false,  /* isInfallible. False in setters. */
    5364             :   false,  /* isMovable.  Not relevant for setters. */
    5365             :   false, /* isEliminatable.  Not relevant for setters. */
    5366             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5367             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5368             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5369             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5370             : };
    5371             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5372             : static_assert(0 < 1, "There is no slot for us");
    5373             : 
    5374             : static bool
    5375           0 : get_ongotpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    5376             : {
    5377           0 :   RefPtr<EventHandlerNonNull> result(self->GetOngotpointercapture());
    5378           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5379           0 :   if (result) {
    5380           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5381           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5382           0 :       return false;
    5383             :     }
    5384           0 :     return true;
    5385             :   } else {
    5386           0 :     args.rval().setNull();
    5387           0 :     return true;
    5388             :   }
    5389             : }
    5390             : 
    5391             : static bool
    5392           0 : set_ongotpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    5393             : {
    5394           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5395           0 :   if (args[0].isObject()) {
    5396             :     { // scope for tempRoot
    5397           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5398           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5399             :     }
    5400             :   } else {
    5401           0 :     arg0 = nullptr;
    5402             :   }
    5403           0 :   self->SetOngotpointercapture(Constify(arg0));
    5404           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5405             : 
    5406           0 :   return true;
    5407             : }
    5408             : 
    5409             : static const JSJitInfo ongotpointercapture_getterinfo = {
    5410             :   { (JSJitGetterOp)get_ongotpointercapture },
    5411             :   { prototypes::id::SVGElement },
    5412             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5413             :   JSJitInfo::Getter,
    5414             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5415             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5416             :   false,  /* isInfallible. False in setters. */
    5417             :   false,  /* isMovable.  Not relevant for setters. */
    5418             :   false, /* isEliminatable.  Not relevant for setters. */
    5419             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5420             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5421             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5422             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5423             : };
    5424             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5425             : static_assert(0 < 1, "There is no slot for us");
    5426             : static const JSJitInfo ongotpointercapture_setterinfo = {
    5427             :   { (JSJitGetterOp)set_ongotpointercapture },
    5428             :   { prototypes::id::SVGElement },
    5429             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5430             :   JSJitInfo::Setter,
    5431             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5432             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5433             :   false,  /* isInfallible. False in setters. */
    5434             :   false,  /* isMovable.  Not relevant for setters. */
    5435             :   false, /* isEliminatable.  Not relevant for setters. */
    5436             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5437             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5438             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5439             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5440             : };
    5441             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5442             : static_assert(0 < 1, "There is no slot for us");
    5443             : 
    5444             : static bool
    5445           0 : get_onlostpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    5446             : {
    5447           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnlostpointercapture());
    5448           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5449           0 :   if (result) {
    5450           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5451           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5452           0 :       return false;
    5453             :     }
    5454           0 :     return true;
    5455             :   } else {
    5456           0 :     args.rval().setNull();
    5457           0 :     return true;
    5458             :   }
    5459             : }
    5460             : 
    5461             : static bool
    5462           0 : set_onlostpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    5463             : {
    5464           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5465           0 :   if (args[0].isObject()) {
    5466             :     { // scope for tempRoot
    5467           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5468           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5469             :     }
    5470             :   } else {
    5471           0 :     arg0 = nullptr;
    5472             :   }
    5473           0 :   self->SetOnlostpointercapture(Constify(arg0));
    5474           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5475             : 
    5476           0 :   return true;
    5477             : }
    5478             : 
    5479             : static const JSJitInfo onlostpointercapture_getterinfo = {
    5480             :   { (JSJitGetterOp)get_onlostpointercapture },
    5481             :   { prototypes::id::SVGElement },
    5482             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5483             :   JSJitInfo::Getter,
    5484             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5485             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5486             :   false,  /* isInfallible. False in setters. */
    5487             :   false,  /* isMovable.  Not relevant for setters. */
    5488             :   false, /* isEliminatable.  Not relevant for setters. */
    5489             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5490             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5491             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5492             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5493             : };
    5494             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5495             : static_assert(0 < 1, "There is no slot for us");
    5496             : static const JSJitInfo onlostpointercapture_setterinfo = {
    5497             :   { (JSJitGetterOp)set_onlostpointercapture },
    5498             :   { prototypes::id::SVGElement },
    5499             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5500             :   JSJitInfo::Setter,
    5501             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5502             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5503             :   false,  /* isInfallible. False in setters. */
    5504             :   false,  /* isMovable.  Not relevant for setters. */
    5505             :   false, /* isEliminatable.  Not relevant for setters. */
    5506             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5507             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5508             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5509             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5510             : };
    5511             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5512             : static_assert(0 < 1, "There is no slot for us");
    5513             : 
    5514             : static bool
    5515           0 : get_onmozfullscreenchange(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    5516             : {
    5517           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmozfullscreenchange());
    5518           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5519           0 :   if (result) {
    5520           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5521           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5522           0 :       return false;
    5523             :     }
    5524           0 :     return true;
    5525             :   } else {
    5526           0 :     args.rval().setNull();
    5527           0 :     return true;
    5528             :   }
    5529             : }
    5530             : 
    5531             : static bool
    5532           0 : set_onmozfullscreenchange(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    5533             : {
    5534           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5535           0 :   if (args[0].isObject()) {
    5536             :     { // scope for tempRoot
    5537           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5538           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5539             :     }
    5540             :   } else {
    5541           0 :     arg0 = nullptr;
    5542             :   }
    5543           0 :   self->SetOnmozfullscreenchange(Constify(arg0));
    5544           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5545             : 
    5546           0 :   return true;
    5547             : }
    5548             : 
    5549             : static const JSJitInfo onmozfullscreenchange_getterinfo = {
    5550             :   { (JSJitGetterOp)get_onmozfullscreenchange },
    5551             :   { prototypes::id::SVGElement },
    5552             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5553             :   JSJitInfo::Getter,
    5554             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5555             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5556             :   false,  /* isInfallible. False in setters. */
    5557             :   false,  /* isMovable.  Not relevant for setters. */
    5558             :   false, /* isEliminatable.  Not relevant for setters. */
    5559             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5560             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5561             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5562             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5563             : };
    5564             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5565             : static_assert(0 < 1, "There is no slot for us");
    5566             : static const JSJitInfo onmozfullscreenchange_setterinfo = {
    5567             :   { (JSJitGetterOp)set_onmozfullscreenchange },
    5568             :   { prototypes::id::SVGElement },
    5569             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5570             :   JSJitInfo::Setter,
    5571             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5572             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5573             :   false,  /* isInfallible. False in setters. */
    5574             :   false,  /* isMovable.  Not relevant for setters. */
    5575             :   false, /* isEliminatable.  Not relevant for setters. */
    5576             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5577             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5578             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5579             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5580             : };
    5581             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5582             : static_assert(0 < 1, "There is no slot for us");
    5583             : 
    5584             : static bool
    5585           0 : get_onmozfullscreenerror(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    5586             : {
    5587           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmozfullscreenerror());
    5588           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5589           0 :   if (result) {
    5590           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5591           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5592           0 :       return false;
    5593             :     }
    5594           0 :     return true;
    5595             :   } else {
    5596           0 :     args.rval().setNull();
    5597           0 :     return true;
    5598             :   }
    5599             : }
    5600             : 
    5601             : static bool
    5602           0 : set_onmozfullscreenerror(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    5603             : {
    5604           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5605           0 :   if (args[0].isObject()) {
    5606             :     { // scope for tempRoot
    5607           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5608           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5609             :     }
    5610             :   } else {
    5611           0 :     arg0 = nullptr;
    5612             :   }
    5613           0 :   self->SetOnmozfullscreenerror(Constify(arg0));
    5614           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5615             : 
    5616           0 :   return true;
    5617             : }
    5618             : 
    5619             : static const JSJitInfo onmozfullscreenerror_getterinfo = {
    5620             :   { (JSJitGetterOp)get_onmozfullscreenerror },
    5621             :   { prototypes::id::SVGElement },
    5622             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5623             :   JSJitInfo::Getter,
    5624             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5625             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5626             :   false,  /* isInfallible. False in setters. */
    5627             :   false,  /* isMovable.  Not relevant for setters. */
    5628             :   false, /* isEliminatable.  Not relevant for setters. */
    5629             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5630             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5631             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5632             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5633             : };
    5634             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5635             : static_assert(0 < 1, "There is no slot for us");
    5636             : static const JSJitInfo onmozfullscreenerror_setterinfo = {
    5637             :   { (JSJitGetterOp)set_onmozfullscreenerror },
    5638             :   { prototypes::id::SVGElement },
    5639             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5640             :   JSJitInfo::Setter,
    5641             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5642             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5643             :   false,  /* isInfallible. False in setters. */
    5644             :   false,  /* isMovable.  Not relevant for setters. */
    5645             :   false, /* isEliminatable.  Not relevant for setters. */
    5646             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5647             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5648             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5649             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5650             : };
    5651             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5652             : static_assert(0 < 1, "There is no slot for us");
    5653             : 
    5654             : static bool
    5655           0 : get_onanimationcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    5656             : {
    5657           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnanimationcancel());
    5658           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5659           0 :   if (result) {
    5660           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5661           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5662           0 :       return false;
    5663             :     }
    5664           0 :     return true;
    5665             :   } else {
    5666           0 :     args.rval().setNull();
    5667           0 :     return true;
    5668             :   }
    5669             : }
    5670             : 
    5671             : static bool
    5672           0 : set_onanimationcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    5673             : {
    5674           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5675           0 :   if (args[0].isObject()) {
    5676             :     { // scope for tempRoot
    5677           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5678           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5679             :     }
    5680             :   } else {
    5681           0 :     arg0 = nullptr;
    5682             :   }
    5683           0 :   self->SetOnanimationcancel(Constify(arg0));
    5684           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5685             : 
    5686           0 :   return true;
    5687             : }
    5688             : 
    5689             : static const JSJitInfo onanimationcancel_getterinfo = {
    5690             :   { (JSJitGetterOp)get_onanimationcancel },
    5691             :   { prototypes::id::SVGElement },
    5692             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5693             :   JSJitInfo::Getter,
    5694             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5695             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5696             :   false,  /* isInfallible. False in setters. */
    5697             :   false,  /* isMovable.  Not relevant for setters. */
    5698             :   false, /* isEliminatable.  Not relevant for setters. */
    5699             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5700             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5701             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5702             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5703             : };
    5704             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5705             : static_assert(0 < 1, "There is no slot for us");
    5706             : static const JSJitInfo onanimationcancel_setterinfo = {
    5707             :   { (JSJitGetterOp)set_onanimationcancel },
    5708             :   { prototypes::id::SVGElement },
    5709             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5710             :   JSJitInfo::Setter,
    5711             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5712             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5713             :   false,  /* isInfallible. False in setters. */
    5714             :   false,  /* isMovable.  Not relevant for setters. */
    5715             :   false, /* isEliminatable.  Not relevant for setters. */
    5716             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5717             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5718             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5719             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5720             : };
    5721             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5722             : static_assert(0 < 1, "There is no slot for us");
    5723             : 
    5724             : static bool
    5725           0 : get_onanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    5726             : {
    5727           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnanimationend());
    5728           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5729           0 :   if (result) {
    5730           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5731           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5732           0 :       return false;
    5733             :     }
    5734           0 :     return true;
    5735             :   } else {
    5736           0 :     args.rval().setNull();
    5737           0 :     return true;
    5738             :   }
    5739             : }
    5740             : 
    5741             : static bool
    5742           0 : set_onanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    5743             : {
    5744           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5745           0 :   if (args[0].isObject()) {
    5746             :     { // scope for tempRoot
    5747           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5748           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5749             :     }
    5750             :   } else {
    5751           0 :     arg0 = nullptr;
    5752             :   }
    5753           0 :   self->SetOnanimationend(Constify(arg0));
    5754           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5755             : 
    5756           0 :   return true;
    5757             : }
    5758             : 
    5759             : static const JSJitInfo onanimationend_getterinfo = {
    5760             :   { (JSJitGetterOp)get_onanimationend },
    5761             :   { prototypes::id::SVGElement },
    5762             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5763             :   JSJitInfo::Getter,
    5764             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5765             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5766             :   false,  /* isInfallible. False in setters. */
    5767             :   false,  /* isMovable.  Not relevant for setters. */
    5768             :   false, /* isEliminatable.  Not relevant for setters. */
    5769             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5770             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5771             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5772             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5773             : };
    5774             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5775             : static_assert(0 < 1, "There is no slot for us");
    5776             : static const JSJitInfo onanimationend_setterinfo = {
    5777             :   { (JSJitGetterOp)set_onanimationend },
    5778             :   { prototypes::id::SVGElement },
    5779             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5780             :   JSJitInfo::Setter,
    5781             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5782             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5783             :   false,  /* isInfallible. False in setters. */
    5784             :   false,  /* isMovable.  Not relevant for setters. */
    5785             :   false, /* isEliminatable.  Not relevant for setters. */
    5786             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5787             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5788             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5789             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5790             : };
    5791             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5792             : static_assert(0 < 1, "There is no slot for us");
    5793             : 
    5794             : static bool
    5795           0 : get_onanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    5796             : {
    5797           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnanimationiteration());
    5798           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5799           0 :   if (result) {
    5800           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5801           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5802           0 :       return false;
    5803             :     }
    5804           0 :     return true;
    5805             :   } else {
    5806           0 :     args.rval().setNull();
    5807           0 :     return true;
    5808             :   }
    5809             : }
    5810             : 
    5811             : static bool
    5812           0 : set_onanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    5813             : {
    5814           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5815           0 :   if (args[0].isObject()) {
    5816             :     { // scope for tempRoot
    5817           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5818           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5819             :     }
    5820             :   } else {
    5821           0 :     arg0 = nullptr;
    5822             :   }
    5823           0 :   self->SetOnanimationiteration(Constify(arg0));
    5824           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5825             : 
    5826           0 :   return true;
    5827             : }
    5828             : 
    5829             : static const JSJitInfo onanimationiteration_getterinfo = {
    5830             :   { (JSJitGetterOp)get_onanimationiteration },
    5831             :   { prototypes::id::SVGElement },
    5832             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5833             :   JSJitInfo::Getter,
    5834             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5835             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5836             :   false,  /* isInfallible. False in setters. */
    5837             :   false,  /* isMovable.  Not relevant for setters. */
    5838             :   false, /* isEliminatable.  Not relevant for setters. */
    5839             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5840             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5841             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5842             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5843             : };
    5844             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5845             : static_assert(0 < 1, "There is no slot for us");
    5846             : static const JSJitInfo onanimationiteration_setterinfo = {
    5847             :   { (JSJitGetterOp)set_onanimationiteration },
    5848             :   { prototypes::id::SVGElement },
    5849             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5850             :   JSJitInfo::Setter,
    5851             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5852             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5853             :   false,  /* isInfallible. False in setters. */
    5854             :   false,  /* isMovable.  Not relevant for setters. */
    5855             :   false, /* isEliminatable.  Not relevant for setters. */
    5856             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5857             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5858             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5859             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5860             : };
    5861             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5862             : static_assert(0 < 1, "There is no slot for us");
    5863             : 
    5864             : static bool
    5865           0 : get_onanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    5866             : {
    5867           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnanimationstart());
    5868           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5869           0 :   if (result) {
    5870           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5871           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5872           0 :       return false;
    5873             :     }
    5874           0 :     return true;
    5875             :   } else {
    5876           0 :     args.rval().setNull();
    5877           0 :     return true;
    5878             :   }
    5879             : }
    5880             : 
    5881             : static bool
    5882           0 : set_onanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    5883             : {
    5884           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5885           0 :   if (args[0].isObject()) {
    5886             :     { // scope for tempRoot
    5887           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5888           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5889             :     }
    5890             :   } else {
    5891           0 :     arg0 = nullptr;
    5892             :   }
    5893           0 :   self->SetOnanimationstart(Constify(arg0));
    5894           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5895             : 
    5896           0 :   return true;
    5897             : }
    5898             : 
    5899             : static const JSJitInfo onanimationstart_getterinfo = {
    5900             :   { (JSJitGetterOp)get_onanimationstart },
    5901             :   { prototypes::id::SVGElement },
    5902             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5903             :   JSJitInfo::Getter,
    5904             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5905             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5906             :   false,  /* isInfallible. False in setters. */
    5907             :   false,  /* isMovable.  Not relevant for setters. */
    5908             :   false, /* isEliminatable.  Not relevant for setters. */
    5909             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5910             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5911             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5912             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5913             : };
    5914             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5915             : static_assert(0 < 1, "There is no slot for us");
    5916             : static const JSJitInfo onanimationstart_setterinfo = {
    5917             :   { (JSJitGetterOp)set_onanimationstart },
    5918             :   { prototypes::id::SVGElement },
    5919             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5920             :   JSJitInfo::Setter,
    5921             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5922             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5923             :   false,  /* isInfallible. False in setters. */
    5924             :   false,  /* isMovable.  Not relevant for setters. */
    5925             :   false, /* isEliminatable.  Not relevant for setters. */
    5926             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5927             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5928             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5929             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5930             : };
    5931             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5932             : static_assert(0 < 1, "There is no slot for us");
    5933             : 
    5934             : static bool
    5935           0 : get_ontransitioncancel(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    5936             : {
    5937           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntransitioncancel());
    5938           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5939           0 :   if (result) {
    5940           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5941           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5942           0 :       return false;
    5943             :     }
    5944           0 :     return true;
    5945             :   } else {
    5946           0 :     args.rval().setNull();
    5947           0 :     return true;
    5948             :   }
    5949             : }
    5950             : 
    5951             : static bool
    5952           0 : set_ontransitioncancel(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    5953             : {
    5954           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5955           0 :   if (args[0].isObject()) {
    5956             :     { // scope for tempRoot
    5957           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5958           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5959             :     }
    5960             :   } else {
    5961           0 :     arg0 = nullptr;
    5962             :   }
    5963           0 :   self->SetOntransitioncancel(Constify(arg0));
    5964           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5965             : 
    5966           0 :   return true;
    5967             : }
    5968             : 
    5969             : static const JSJitInfo ontransitioncancel_getterinfo = {
    5970             :   { (JSJitGetterOp)get_ontransitioncancel },
    5971             :   { prototypes::id::SVGElement },
    5972             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5973             :   JSJitInfo::Getter,
    5974             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5975             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5976             :   false,  /* isInfallible. False in setters. */
    5977             :   false,  /* isMovable.  Not relevant for setters. */
    5978             :   false, /* isEliminatable.  Not relevant for setters. */
    5979             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5980             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5981             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5982             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5983             : };
    5984             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5985             : static_assert(0 < 1, "There is no slot for us");
    5986             : static const JSJitInfo ontransitioncancel_setterinfo = {
    5987             :   { (JSJitGetterOp)set_ontransitioncancel },
    5988             :   { prototypes::id::SVGElement },
    5989             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    5990             :   JSJitInfo::Setter,
    5991             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5992             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5993             :   false,  /* isInfallible. False in setters. */
    5994             :   false,  /* isMovable.  Not relevant for setters. */
    5995             :   false, /* isEliminatable.  Not relevant for setters. */
    5996             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5997             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5998             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5999             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6000             : };
    6001             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6002             : static_assert(0 < 1, "There is no slot for us");
    6003             : 
    6004             : static bool
    6005           0 : get_ontransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    6006             : {
    6007           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntransitionend());
    6008           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6009           0 :   if (result) {
    6010           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6011           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6012           0 :       return false;
    6013             :     }
    6014           0 :     return true;
    6015             :   } else {
    6016           0 :     args.rval().setNull();
    6017           0 :     return true;
    6018             :   }
    6019             : }
    6020             : 
    6021             : static bool
    6022           0 : set_ontransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    6023             : {
    6024           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6025           0 :   if (args[0].isObject()) {
    6026             :     { // scope for tempRoot
    6027           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6028           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6029             :     }
    6030             :   } else {
    6031           0 :     arg0 = nullptr;
    6032             :   }
    6033           0 :   self->SetOntransitionend(Constify(arg0));
    6034           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6035             : 
    6036           0 :   return true;
    6037             : }
    6038             : 
    6039             : static const JSJitInfo ontransitionend_getterinfo = {
    6040             :   { (JSJitGetterOp)get_ontransitionend },
    6041             :   { prototypes::id::SVGElement },
    6042             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6043             :   JSJitInfo::Getter,
    6044             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6045             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6046             :   false,  /* isInfallible. False in setters. */
    6047             :   false,  /* isMovable.  Not relevant for setters. */
    6048             :   false, /* isEliminatable.  Not relevant for setters. */
    6049             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6050             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6051             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6052             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6053             : };
    6054             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6055             : static_assert(0 < 1, "There is no slot for us");
    6056             : static const JSJitInfo ontransitionend_setterinfo = {
    6057             :   { (JSJitGetterOp)set_ontransitionend },
    6058             :   { prototypes::id::SVGElement },
    6059             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6060             :   JSJitInfo::Setter,
    6061             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6062             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6063             :   false,  /* isInfallible. False in setters. */
    6064             :   false,  /* isMovable.  Not relevant for setters. */
    6065             :   false, /* isEliminatable.  Not relevant for setters. */
    6066             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6067             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6068             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6069             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6070             : };
    6071             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6072             : static_assert(0 < 1, "There is no slot for us");
    6073             : 
    6074             : static bool
    6075           0 : get_ontransitionrun(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    6076             : {
    6077           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntransitionrun());
    6078           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6079           0 :   if (result) {
    6080           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6081           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6082           0 :       return false;
    6083             :     }
    6084           0 :     return true;
    6085             :   } else {
    6086           0 :     args.rval().setNull();
    6087           0 :     return true;
    6088             :   }
    6089             : }
    6090             : 
    6091             : static bool
    6092           0 : set_ontransitionrun(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    6093             : {
    6094           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6095           0 :   if (args[0].isObject()) {
    6096             :     { // scope for tempRoot
    6097           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6098           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6099             :     }
    6100             :   } else {
    6101           0 :     arg0 = nullptr;
    6102             :   }
    6103           0 :   self->SetOntransitionrun(Constify(arg0));
    6104           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6105             : 
    6106           0 :   return true;
    6107             : }
    6108             : 
    6109             : static const JSJitInfo ontransitionrun_getterinfo = {
    6110             :   { (JSJitGetterOp)get_ontransitionrun },
    6111             :   { prototypes::id::SVGElement },
    6112             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6113             :   JSJitInfo::Getter,
    6114             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6115             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6116             :   false,  /* isInfallible. False in setters. */
    6117             :   false,  /* isMovable.  Not relevant for setters. */
    6118             :   false, /* isEliminatable.  Not relevant for setters. */
    6119             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6120             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6121             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6122             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6123             : };
    6124             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6125             : static_assert(0 < 1, "There is no slot for us");
    6126             : static const JSJitInfo ontransitionrun_setterinfo = {
    6127             :   { (JSJitGetterOp)set_ontransitionrun },
    6128             :   { prototypes::id::SVGElement },
    6129             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6130             :   JSJitInfo::Setter,
    6131             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6132             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6133             :   false,  /* isInfallible. False in setters. */
    6134             :   false,  /* isMovable.  Not relevant for setters. */
    6135             :   false, /* isEliminatable.  Not relevant for setters. */
    6136             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6137             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6138             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6139             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6140             : };
    6141             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6142             : static_assert(0 < 1, "There is no slot for us");
    6143             : 
    6144             : static bool
    6145           0 : get_ontransitionstart(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    6146             : {
    6147           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntransitionstart());
    6148           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6149           0 :   if (result) {
    6150           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6151           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6152           0 :       return false;
    6153             :     }
    6154           0 :     return true;
    6155             :   } else {
    6156           0 :     args.rval().setNull();
    6157           0 :     return true;
    6158             :   }
    6159             : }
    6160             : 
    6161             : static bool
    6162           0 : set_ontransitionstart(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    6163             : {
    6164           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6165           0 :   if (args[0].isObject()) {
    6166             :     { // scope for tempRoot
    6167           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6168           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6169             :     }
    6170             :   } else {
    6171           0 :     arg0 = nullptr;
    6172             :   }
    6173           0 :   self->SetOntransitionstart(Constify(arg0));
    6174           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6175             : 
    6176           0 :   return true;
    6177             : }
    6178             : 
    6179             : static const JSJitInfo ontransitionstart_getterinfo = {
    6180             :   { (JSJitGetterOp)get_ontransitionstart },
    6181             :   { prototypes::id::SVGElement },
    6182             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6183             :   JSJitInfo::Getter,
    6184             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6185             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6186             :   false,  /* isInfallible. False in setters. */
    6187             :   false,  /* isMovable.  Not relevant for setters. */
    6188             :   false, /* isEliminatable.  Not relevant for setters. */
    6189             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6190             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6191             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6192             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6193             : };
    6194             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6195             : static_assert(0 < 1, "There is no slot for us");
    6196             : static const JSJitInfo ontransitionstart_setterinfo = {
    6197             :   { (JSJitGetterOp)set_ontransitionstart },
    6198             :   { prototypes::id::SVGElement },
    6199             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6200             :   JSJitInfo::Setter,
    6201             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6202             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6203             :   false,  /* isInfallible. False in setters. */
    6204             :   false,  /* isMovable.  Not relevant for setters. */
    6205             :   false, /* isEliminatable.  Not relevant for setters. */
    6206             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6207             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6208             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6209             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6210             : };
    6211             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6212             : static_assert(0 < 1, "There is no slot for us");
    6213             : 
    6214             : static bool
    6215           0 : get_onwebkitanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    6216             : {
    6217           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationend());
    6218           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6219           0 :   if (result) {
    6220           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6221           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6222           0 :       return false;
    6223             :     }
    6224           0 :     return true;
    6225             :   } else {
    6226           0 :     args.rval().setNull();
    6227           0 :     return true;
    6228             :   }
    6229             : }
    6230             : 
    6231             : static bool
    6232           0 : set_onwebkitanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    6233             : {
    6234           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6235           0 :   if (args[0].isObject()) {
    6236             :     { // scope for tempRoot
    6237           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6238           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6239             :     }
    6240             :   } else {
    6241           0 :     arg0 = nullptr;
    6242             :   }
    6243           0 :   self->SetOnwebkitanimationend(Constify(arg0));
    6244           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6245             : 
    6246           0 :   return true;
    6247             : }
    6248             : 
    6249             : static const JSJitInfo onwebkitanimationend_getterinfo = {
    6250             :   { (JSJitGetterOp)get_onwebkitanimationend },
    6251             :   { prototypes::id::SVGElement },
    6252             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6253             :   JSJitInfo::Getter,
    6254             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6255             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6256             :   false,  /* isInfallible. False in setters. */
    6257             :   false,  /* isMovable.  Not relevant for setters. */
    6258             :   false, /* isEliminatable.  Not relevant for setters. */
    6259             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6260             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6261             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6262             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6263             : };
    6264             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6265             : static_assert(0 < 1, "There is no slot for us");
    6266             : static const JSJitInfo onwebkitanimationend_setterinfo = {
    6267             :   { (JSJitGetterOp)set_onwebkitanimationend },
    6268             :   { prototypes::id::SVGElement },
    6269             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6270             :   JSJitInfo::Setter,
    6271             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6272             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6273             :   false,  /* isInfallible. False in setters. */
    6274             :   false,  /* isMovable.  Not relevant for setters. */
    6275             :   false, /* isEliminatable.  Not relevant for setters. */
    6276             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6277             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6278             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6279             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6280             : };
    6281             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6282             : static_assert(0 < 1, "There is no slot for us");
    6283             : 
    6284             : static bool
    6285           0 : get_onwebkitanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    6286             : {
    6287           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationiteration());
    6288           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6289           0 :   if (result) {
    6290           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6291           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6292           0 :       return false;
    6293             :     }
    6294           0 :     return true;
    6295             :   } else {
    6296           0 :     args.rval().setNull();
    6297           0 :     return true;
    6298             :   }
    6299             : }
    6300             : 
    6301             : static bool
    6302           0 : set_onwebkitanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    6303             : {
    6304           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6305           0 :   if (args[0].isObject()) {
    6306             :     { // scope for tempRoot
    6307           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6308           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6309             :     }
    6310             :   } else {
    6311           0 :     arg0 = nullptr;
    6312             :   }
    6313           0 :   self->SetOnwebkitanimationiteration(Constify(arg0));
    6314           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6315             : 
    6316           0 :   return true;
    6317             : }
    6318             : 
    6319             : static const JSJitInfo onwebkitanimationiteration_getterinfo = {
    6320             :   { (JSJitGetterOp)get_onwebkitanimationiteration },
    6321             :   { prototypes::id::SVGElement },
    6322             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6323             :   JSJitInfo::Getter,
    6324             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6325             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6326             :   false,  /* isInfallible. False in setters. */
    6327             :   false,  /* isMovable.  Not relevant for setters. */
    6328             :   false, /* isEliminatable.  Not relevant for setters. */
    6329             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6330             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6331             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6332             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6333             : };
    6334             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6335             : static_assert(0 < 1, "There is no slot for us");
    6336             : static const JSJitInfo onwebkitanimationiteration_setterinfo = {
    6337             :   { (JSJitGetterOp)set_onwebkitanimationiteration },
    6338             :   { prototypes::id::SVGElement },
    6339             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6340             :   JSJitInfo::Setter,
    6341             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6342             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6343             :   false,  /* isInfallible. False in setters. */
    6344             :   false,  /* isMovable.  Not relevant for setters. */
    6345             :   false, /* isEliminatable.  Not relevant for setters. */
    6346             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6347             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6348             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6349             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6350             : };
    6351             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6352             : static_assert(0 < 1, "There is no slot for us");
    6353             : 
    6354             : static bool
    6355           0 : get_onwebkitanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    6356             : {
    6357           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationstart());
    6358           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6359           0 :   if (result) {
    6360           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6361           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6362           0 :       return false;
    6363             :     }
    6364           0 :     return true;
    6365             :   } else {
    6366           0 :     args.rval().setNull();
    6367           0 :     return true;
    6368             :   }
    6369             : }
    6370             : 
    6371             : static bool
    6372           0 : set_onwebkitanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    6373             : {
    6374           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6375           0 :   if (args[0].isObject()) {
    6376             :     { // scope for tempRoot
    6377           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6378           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6379             :     }
    6380             :   } else {
    6381           0 :     arg0 = nullptr;
    6382             :   }
    6383           0 :   self->SetOnwebkitanimationstart(Constify(arg0));
    6384           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6385             : 
    6386           0 :   return true;
    6387             : }
    6388             : 
    6389             : static const JSJitInfo onwebkitanimationstart_getterinfo = {
    6390             :   { (JSJitGetterOp)get_onwebkitanimationstart },
    6391             :   { prototypes::id::SVGElement },
    6392             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6393             :   JSJitInfo::Getter,
    6394             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6395             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6396             :   false,  /* isInfallible. False in setters. */
    6397             :   false,  /* isMovable.  Not relevant for setters. */
    6398             :   false, /* isEliminatable.  Not relevant for setters. */
    6399             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6400             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6401             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6402             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6403             : };
    6404             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6405             : static_assert(0 < 1, "There is no slot for us");
    6406             : static const JSJitInfo onwebkitanimationstart_setterinfo = {
    6407             :   { (JSJitGetterOp)set_onwebkitanimationstart },
    6408             :   { prototypes::id::SVGElement },
    6409             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6410             :   JSJitInfo::Setter,
    6411             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6412             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6413             :   false,  /* isInfallible. False in setters. */
    6414             :   false,  /* isMovable.  Not relevant for setters. */
    6415             :   false, /* isEliminatable.  Not relevant for setters. */
    6416             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6417             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6418             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6419             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6420             : };
    6421             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6422             : static_assert(0 < 1, "There is no slot for us");
    6423             : 
    6424             : static bool
    6425           0 : get_onwebkittransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    6426             : {
    6427           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwebkittransitionend());
    6428           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6429           0 :   if (result) {
    6430           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6431           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6432           0 :       return false;
    6433             :     }
    6434           0 :     return true;
    6435             :   } else {
    6436           0 :     args.rval().setNull();
    6437           0 :     return true;
    6438             :   }
    6439             : }
    6440             : 
    6441             : static bool
    6442           0 : set_onwebkittransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    6443             : {
    6444           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6445           0 :   if (args[0].isObject()) {
    6446             :     { // scope for tempRoot
    6447           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6448           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6449             :     }
    6450             :   } else {
    6451           0 :     arg0 = nullptr;
    6452             :   }
    6453           0 :   self->SetOnwebkittransitionend(Constify(arg0));
    6454           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6455             : 
    6456           0 :   return true;
    6457             : }
    6458             : 
    6459             : static const JSJitInfo onwebkittransitionend_getterinfo = {
    6460             :   { (JSJitGetterOp)get_onwebkittransitionend },
    6461             :   { prototypes::id::SVGElement },
    6462             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6463             :   JSJitInfo::Getter,
    6464             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6465             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6466             :   false,  /* isInfallible. False in setters. */
    6467             :   false,  /* isMovable.  Not relevant for setters. */
    6468             :   false, /* isEliminatable.  Not relevant for setters. */
    6469             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6470             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6471             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6472             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6473             : };
    6474             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6475             : static_assert(0 < 1, "There is no slot for us");
    6476             : static const JSJitInfo onwebkittransitionend_setterinfo = {
    6477             :   { (JSJitGetterOp)set_onwebkittransitionend },
    6478             :   { prototypes::id::SVGElement },
    6479             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6480             :   JSJitInfo::Setter,
    6481             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6482             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6483             :   false,  /* isInfallible. False in setters. */
    6484             :   false,  /* isMovable.  Not relevant for setters. */
    6485             :   false, /* isEliminatable.  Not relevant for setters. */
    6486             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6487             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6488             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6489             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6490             : };
    6491             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6492             : static_assert(0 < 1, "There is no slot for us");
    6493             : 
    6494             : static bool
    6495           0 : get_onerror(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    6496             : {
    6497           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnerror());
    6498           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6499           0 :   if (result) {
    6500           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6501           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6502           0 :       return false;
    6503             :     }
    6504           0 :     return true;
    6505             :   } else {
    6506           0 :     args.rval().setNull();
    6507           0 :     return true;
    6508             :   }
    6509             : }
    6510             : 
    6511             : static bool
    6512           0 : set_onerror(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    6513             : {
    6514           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6515           0 :   if (args[0].isObject()) {
    6516             :     { // scope for tempRoot
    6517           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6518           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6519             :     }
    6520             :   } else {
    6521           0 :     arg0 = nullptr;
    6522             :   }
    6523           0 :   self->SetOnerror(Constify(arg0));
    6524           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6525             : 
    6526           0 :   return true;
    6527             : }
    6528             : 
    6529             : static const JSJitInfo onerror_getterinfo = {
    6530             :   { (JSJitGetterOp)get_onerror },
    6531             :   { prototypes::id::SVGElement },
    6532             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6533             :   JSJitInfo::Getter,
    6534             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6535             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6536             :   false,  /* isInfallible. False in setters. */
    6537             :   false,  /* isMovable.  Not relevant for setters. */
    6538             :   false, /* isEliminatable.  Not relevant for setters. */
    6539             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6540             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6541             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6542             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6543             : };
    6544             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6545             : static_assert(0 < 1, "There is no slot for us");
    6546             : static const JSJitInfo onerror_setterinfo = {
    6547             :   { (JSJitGetterOp)set_onerror },
    6548             :   { prototypes::id::SVGElement },
    6549             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6550             :   JSJitInfo::Setter,
    6551             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6552             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6553             :   false,  /* isInfallible. False in setters. */
    6554             :   false,  /* isMovable.  Not relevant for setters. */
    6555             :   false, /* isEliminatable.  Not relevant for setters. */
    6556             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6557             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6558             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6559             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6560             : };
    6561             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6562             : static_assert(0 < 1, "There is no slot for us");
    6563             : 
    6564             : static bool
    6565           0 : get_ontouchstart(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    6566             : {
    6567           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntouchstart());
    6568           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6569           0 :   if (result) {
    6570           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6571           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6572           0 :       return false;
    6573             :     }
    6574           0 :     return true;
    6575             :   } else {
    6576           0 :     args.rval().setNull();
    6577           0 :     return true;
    6578             :   }
    6579             : }
    6580             : 
    6581             : static bool
    6582           0 : set_ontouchstart(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    6583             : {
    6584           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6585           0 :   if (args[0].isObject()) {
    6586             :     { // scope for tempRoot
    6587           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6588           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6589             :     }
    6590             :   } else {
    6591           0 :     arg0 = nullptr;
    6592             :   }
    6593           0 :   self->SetOntouchstart(Constify(arg0));
    6594           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6595             : 
    6596           0 :   return true;
    6597             : }
    6598             : 
    6599             : static const JSJitInfo ontouchstart_getterinfo = {
    6600             :   { (JSJitGetterOp)get_ontouchstart },
    6601             :   { prototypes::id::SVGElement },
    6602             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6603             :   JSJitInfo::Getter,
    6604             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6605             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6606             :   false,  /* isInfallible. False in setters. */
    6607             :   false,  /* isMovable.  Not relevant for setters. */
    6608             :   false, /* isEliminatable.  Not relevant for setters. */
    6609             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6610             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6611             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6612             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6613             : };
    6614             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6615             : static_assert(0 < 1, "There is no slot for us");
    6616             : static const JSJitInfo ontouchstart_setterinfo = {
    6617             :   { (JSJitGetterOp)set_ontouchstart },
    6618             :   { prototypes::id::SVGElement },
    6619             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6620             :   JSJitInfo::Setter,
    6621             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6622             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6623             :   false,  /* isInfallible. False in setters. */
    6624             :   false,  /* isMovable.  Not relevant for setters. */
    6625             :   false, /* isEliminatable.  Not relevant for setters. */
    6626             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6627             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6628             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6629             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6630             : };
    6631             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6632             : static_assert(0 < 1, "There is no slot for us");
    6633             : 
    6634             : static bool
    6635           0 : get_ontouchend(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    6636             : {
    6637           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntouchend());
    6638           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6639           0 :   if (result) {
    6640           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6641           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6642           0 :       return false;
    6643             :     }
    6644           0 :     return true;
    6645             :   } else {
    6646           0 :     args.rval().setNull();
    6647           0 :     return true;
    6648             :   }
    6649             : }
    6650             : 
    6651             : static bool
    6652           0 : set_ontouchend(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    6653             : {
    6654           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6655           0 :   if (args[0].isObject()) {
    6656             :     { // scope for tempRoot
    6657           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6658           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6659             :     }
    6660             :   } else {
    6661           0 :     arg0 = nullptr;
    6662             :   }
    6663           0 :   self->SetOntouchend(Constify(arg0));
    6664           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6665             : 
    6666           0 :   return true;
    6667             : }
    6668             : 
    6669             : static const JSJitInfo ontouchend_getterinfo = {
    6670             :   { (JSJitGetterOp)get_ontouchend },
    6671             :   { prototypes::id::SVGElement },
    6672             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6673             :   JSJitInfo::Getter,
    6674             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6675             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6676             :   false,  /* isInfallible. False in setters. */
    6677             :   false,  /* isMovable.  Not relevant for setters. */
    6678             :   false, /* isEliminatable.  Not relevant for setters. */
    6679             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6680             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6681             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6682             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6683             : };
    6684             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6685             : static_assert(0 < 1, "There is no slot for us");
    6686             : static const JSJitInfo ontouchend_setterinfo = {
    6687             :   { (JSJitGetterOp)set_ontouchend },
    6688             :   { prototypes::id::SVGElement },
    6689             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6690             :   JSJitInfo::Setter,
    6691             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6692             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6693             :   false,  /* isInfallible. False in setters. */
    6694             :   false,  /* isMovable.  Not relevant for setters. */
    6695             :   false, /* isEliminatable.  Not relevant for setters. */
    6696             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6697             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6698             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6699             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6700             : };
    6701             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6702             : static_assert(0 < 1, "There is no slot for us");
    6703             : 
    6704             : static bool
    6705           0 : get_ontouchmove(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    6706             : {
    6707           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntouchmove());
    6708           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6709           0 :   if (result) {
    6710           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6711           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6712           0 :       return false;
    6713             :     }
    6714           0 :     return true;
    6715             :   } else {
    6716           0 :     args.rval().setNull();
    6717           0 :     return true;
    6718             :   }
    6719             : }
    6720             : 
    6721             : static bool
    6722           0 : set_ontouchmove(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    6723             : {
    6724           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6725           0 :   if (args[0].isObject()) {
    6726             :     { // scope for tempRoot
    6727           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6728           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6729             :     }
    6730             :   } else {
    6731           0 :     arg0 = nullptr;
    6732             :   }
    6733           0 :   self->SetOntouchmove(Constify(arg0));
    6734           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6735             : 
    6736           0 :   return true;
    6737             : }
    6738             : 
    6739             : static const JSJitInfo ontouchmove_getterinfo = {
    6740             :   { (JSJitGetterOp)get_ontouchmove },
    6741             :   { prototypes::id::SVGElement },
    6742             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6743             :   JSJitInfo::Getter,
    6744             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6745             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6746             :   false,  /* isInfallible. False in setters. */
    6747             :   false,  /* isMovable.  Not relevant for setters. */
    6748             :   false, /* isEliminatable.  Not relevant for setters. */
    6749             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6750             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6751             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6752             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6753             : };
    6754             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6755             : static_assert(0 < 1, "There is no slot for us");
    6756             : static const JSJitInfo ontouchmove_setterinfo = {
    6757             :   { (JSJitGetterOp)set_ontouchmove },
    6758             :   { prototypes::id::SVGElement },
    6759             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6760             :   JSJitInfo::Setter,
    6761             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6762             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6763             :   false,  /* isInfallible. False in setters. */
    6764             :   false,  /* isMovable.  Not relevant for setters. */
    6765             :   false, /* isEliminatable.  Not relevant for setters. */
    6766             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6767             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6768             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6769             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6770             : };
    6771             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6772             : static_assert(0 < 1, "There is no slot for us");
    6773             : 
    6774             : static bool
    6775           0 : get_ontouchcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitGetterCallArgs args)
    6776             : {
    6777           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntouchcancel());
    6778           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6779           0 :   if (result) {
    6780           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6781           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6782           0 :       return false;
    6783             :     }
    6784           0 :     return true;
    6785             :   } else {
    6786           0 :     args.rval().setNull();
    6787           0 :     return true;
    6788             :   }
    6789             : }
    6790             : 
    6791             : static bool
    6792           0 : set_ontouchcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsSVGElement* self, JSJitSetterCallArgs args)
    6793             : {
    6794           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6795           0 :   if (args[0].isObject()) {
    6796             :     { // scope for tempRoot
    6797           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6798           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6799             :     }
    6800             :   } else {
    6801           0 :     arg0 = nullptr;
    6802             :   }
    6803           0 :   self->SetOntouchcancel(Constify(arg0));
    6804           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6805             : 
    6806           0 :   return true;
    6807             : }
    6808             : 
    6809             : static const JSJitInfo ontouchcancel_getterinfo = {
    6810             :   { (JSJitGetterOp)get_ontouchcancel },
    6811             :   { prototypes::id::SVGElement },
    6812             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6813             :   JSJitInfo::Getter,
    6814             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6815             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6816             :   false,  /* isInfallible. False in setters. */
    6817             :   false,  /* isMovable.  Not relevant for setters. */
    6818             :   false, /* isEliminatable.  Not relevant for setters. */
    6819             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6820             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6821             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6822             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6823             : };
    6824             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6825             : static_assert(0 < 1, "There is no slot for us");
    6826             : static const JSJitInfo ontouchcancel_setterinfo = {
    6827             :   { (JSJitGetterOp)set_ontouchcancel },
    6828             :   { prototypes::id::SVGElement },
    6829             :   { PrototypeTraits<prototypes::id::SVGElement>::Depth },
    6830             :   JSJitInfo::Setter,
    6831             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6832             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6833             :   false,  /* isInfallible. False in setters. */
    6834             :   false,  /* isMovable.  Not relevant for setters. */
    6835             :   false, /* isEliminatable.  Not relevant for setters. */
    6836             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6837             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6838             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6839             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6840             : };
    6841             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6842             : static_assert(0 < 1, "There is no slot for us");
    6843             : 
    6844             : static bool
    6845           0 : genericLenientGetter(JSContext* cx, unsigned argc, JS::Value* vp)
    6846             : {
    6847           0 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
    6848           0 :   if (!args.thisv().isObject()) {
    6849           0 :     MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6850           0 :     if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
    6851           0 :       return false;
    6852             :     }
    6853           0 :     args.rval().set(JS::UndefinedValue());
    6854           0 :     return true;
    6855             :   }
    6856           0 :   JS::Rooted<JSObject*> obj(cx, &args.thisv().toObject());
    6857             : 
    6858             :   nsSVGElement* self;
    6859           0 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
    6860             :   {
    6861           0 :     nsresult rv = UnwrapObject<prototypes::id::SVGElement, nsSVGElement>(&rootSelf, self);
    6862           0 :     if (NS_FAILED(rv)) {
    6863           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6864           0 :       if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
    6865           0 :         return false;
    6866             :       }
    6867           0 :       args.rval().set(JS::UndefinedValue());
    6868           0 :       return true;
    6869             :     }
    6870             :   }
    6871           0 :   const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
    6872           0 :   MOZ_ASSERT(info->type() == JSJitInfo::Getter);
    6873           0 :   JSJitGetterOp getter = info->getter;
    6874           0 :   bool ok = getter(cx, obj, self, JSJitGetterCallArgs(args));
    6875             : #ifdef DEBUG
    6876           0 :   if (ok) {
    6877           0 :     AssertReturnTypeMatchesJitinfo(info, args.rval());
    6878             :   }
    6879             : #endif
    6880           0 :   return ok;
    6881             : }
    6882             : 
    6883             : static bool
    6884           0 : genericLenientSetter(JSContext* cx, unsigned argc, JS::Value* vp)
    6885             : {
    6886           0 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
    6887           0 :   if (!args.thisv().isObject()) {
    6888           0 :     MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6889           0 :     if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
    6890           0 :       return false;
    6891             :     }
    6892           0 :     args.rval().set(JS::UndefinedValue());
    6893           0 :     return true;
    6894             :   }
    6895           0 :   JS::Rooted<JSObject*> obj(cx, &args.thisv().toObject());
    6896             : 
    6897             :   nsSVGElement* self;
    6898           0 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
    6899             :   {
    6900           0 :     nsresult rv = UnwrapObject<prototypes::id::SVGElement, nsSVGElement>(&rootSelf, self);
    6901           0 :     if (NS_FAILED(rv)) {
    6902           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6903           0 :       if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
    6904           0 :         return false;
    6905             :       }
    6906           0 :       args.rval().set(JS::UndefinedValue());
    6907           0 :       return true;
    6908             :     }
    6909             :   }
    6910           0 :   if (args.length() == 0) {
    6911           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "SVGElement attribute setter");
    6912             :   }
    6913           0 :   const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
    6914           0 :   MOZ_ASSERT(info->type() == JSJitInfo::Setter);
    6915           0 :   JSJitSetterOp setter = info->setter;
    6916           0 :   if (!setter(cx, obj, self, JSJitSetterCallArgs(args))) {
    6917           0 :     return false;
    6918             :   }
    6919           0 :   args.rval().setUndefined();
    6920             : #ifdef DEBUG
    6921           0 :   AssertReturnTypeMatchesJitinfo(info, args.rval());
    6922             : #endif
    6923           0 :   return true;
    6924             : }
    6925             : 
    6926             : static bool
    6927           0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
    6928             : {
    6929           0 :   nsSVGElement* self = UnwrapPossiblyNotInitializedDOMObject<nsSVGElement>(obj);
    6930             :   // We don't want to preserve if we don't have a wrapper, and we
    6931             :   // obviously can't preserve if we're not initialized.
    6932           0 :   if (self && self->GetWrapperPreserveColor()) {
    6933           0 :     PreserveWrapper(self);
    6934             :   }
    6935           0 :   return true;
    6936             : }
    6937             : 
    6938             : static void
    6939           0 : _finalize(js::FreeOp* fop, JSObject* obj)
    6940             : {
    6941           0 :   nsSVGElement* self = UnwrapPossiblyNotInitializedDOMObject<nsSVGElement>(obj);
    6942           0 :   if (self) {
    6943           0 :     ClearWrapper(self, self, obj);
    6944           0 :     AddForDeferredFinalization<nsSVGElement>(self);
    6945             :   }
    6946           0 : }
    6947             : 
    6948             : static void
    6949           0 : _objectMoved(JSObject* obj, const JSObject* old)
    6950             : {
    6951           0 :   nsSVGElement* self = UnwrapPossiblyNotInitializedDOMObject<nsSVGElement>(obj);
    6952           0 :   if (self) {
    6953           0 :     UpdateWrapper(self, self, obj, old);
    6954             :   }
    6955           0 : }
    6956             : 
    6957             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    6958             : #if defined(__clang__)
    6959             : #pragma clang diagnostic push
    6960             : #pragma clang diagnostic ignored "-Wmissing-braces"
    6961             : #endif
    6962             : static const JSFunctionSpec sMethods_specs[] = {
    6963             :   JS_FNSPEC("focus", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&focus_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    6964             :   JS_FNSPEC("blur", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&blur_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    6965             :   JS_FS_END
    6966             : };
    6967             : #if defined(__clang__)
    6968             : #pragma clang diagnostic pop
    6969             : #endif
    6970             : 
    6971             : 
    6972             : // Can't be const because the pref-enabled boolean needs to be writable
    6973             : static Prefable<const JSFunctionSpec> sMethods[] = {
    6974             :   { nullptr, &sMethods_specs[0] },
    6975             :   { nullptr, nullptr }
    6976             : };
    6977             : 
    6978             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    6979             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    6980             : static_assert(2 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    6981             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    6982             : 
    6983             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    6984             : #if defined(__clang__)
    6985             : #pragma clang diagnostic push
    6986             : #pragma clang diagnostic ignored "-Wmissing-braces"
    6987             : #endif
    6988             : static const JSPropertySpec sAttributes_specs[] = {
    6989             :   { "id", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &id_getterinfo, GenericBindingSetter, &id_setterinfo },
    6990             :   { "className", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &className_getterinfo, nullptr, nullptr },
    6991             :   { "dataset", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &dataset_getterinfo, nullptr, nullptr },
    6992             :   { "style", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &style_getterinfo, GenericBindingSetter, &style_setterinfo },
    6993             :   { "ownerSVGElement", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ownerSVGElement_getterinfo, nullptr, nullptr },
    6994             :   { "viewportElement", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &viewportElement_getterinfo, nullptr, nullptr },
    6995             :   { "tabIndex", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &tabIndex_getterinfo, GenericBindingSetter, &tabIndex_setterinfo },
    6996             :   { "oncopy", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oncopy_getterinfo, GenericBindingSetter, &oncopy_setterinfo },
    6997             :   { "oncut", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oncut_getterinfo, GenericBindingSetter, &oncut_setterinfo },
    6998             :   { "onpaste", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpaste_getterinfo, GenericBindingSetter, &onpaste_setterinfo },
    6999             :   { "onabort", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onabort_getterinfo, GenericBindingSetter, &onabort_setterinfo },
    7000             :   { "onblur", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onblur_getterinfo, GenericBindingSetter, &onblur_setterinfo },
    7001             :   { "onfocus", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onfocus_getterinfo, GenericBindingSetter, &onfocus_setterinfo },
    7002             :   { "onauxclick", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onauxclick_getterinfo, GenericBindingSetter, &onauxclick_setterinfo },
    7003             :   { "oncanplay", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oncanplay_getterinfo, GenericBindingSetter, &oncanplay_setterinfo },
    7004             :   { "oncanplaythrough", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oncanplaythrough_getterinfo, GenericBindingSetter, &oncanplaythrough_setterinfo },
    7005             :   { "onchange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onchange_getterinfo, GenericBindingSetter, &onchange_setterinfo },
    7006             :   { "onclick", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onclick_getterinfo, GenericBindingSetter, &onclick_setterinfo },
    7007             :   { "onclose", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onclose_getterinfo, GenericBindingSetter, &onclose_setterinfo },
    7008             :   { "oncontextmenu", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oncontextmenu_getterinfo, GenericBindingSetter, &oncontextmenu_setterinfo },
    7009             :   { "ondblclick", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondblclick_getterinfo, GenericBindingSetter, &ondblclick_setterinfo },
    7010             :   { "ondrag", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondrag_getterinfo, GenericBindingSetter, &ondrag_setterinfo },
    7011             :   { "ondragend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragend_getterinfo, GenericBindingSetter, &ondragend_setterinfo },
    7012             :   { "ondragenter", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragenter_getterinfo, GenericBindingSetter, &ondragenter_setterinfo },
    7013             :   { "ondragexit", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragexit_getterinfo, GenericBindingSetter, &ondragexit_setterinfo },
    7014             :   { "ondragleave", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragleave_getterinfo, GenericBindingSetter, &ondragleave_setterinfo },
    7015             :   { "ondragover", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragover_getterinfo, GenericBindingSetter, &ondragover_setterinfo },
    7016             :   { "ondragstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragstart_getterinfo, GenericBindingSetter, &ondragstart_setterinfo },
    7017             :   { "ondrop", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondrop_getterinfo, GenericBindingSetter, &ondrop_setterinfo },
    7018             :   { "ondurationchange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondurationchange_getterinfo, GenericBindingSetter, &ondurationchange_setterinfo },
    7019             :   { "onemptied", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onemptied_getterinfo, GenericBindingSetter, &onemptied_setterinfo },
    7020             :   { "onended", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onended_getterinfo, GenericBindingSetter, &onended_setterinfo },
    7021             :   { "oninput", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oninput_getterinfo, GenericBindingSetter, &oninput_setterinfo },
    7022             :   { "oninvalid", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oninvalid_getterinfo, GenericBindingSetter, &oninvalid_setterinfo },
    7023             :   { "onkeydown", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onkeydown_getterinfo, GenericBindingSetter, &onkeydown_setterinfo },
    7024             :   { "onkeypress", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onkeypress_getterinfo, GenericBindingSetter, &onkeypress_setterinfo },
    7025             :   { "onkeyup", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onkeyup_getterinfo, GenericBindingSetter, &onkeyup_setterinfo },
    7026             :   { "onload", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onload_getterinfo, GenericBindingSetter, &onload_setterinfo },
    7027             :   { "onloadeddata", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onloadeddata_getterinfo, GenericBindingSetter, &onloadeddata_setterinfo },
    7028             :   { "onloadedmetadata", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onloadedmetadata_getterinfo, GenericBindingSetter, &onloadedmetadata_setterinfo },
    7029             :   { "onloadend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onloadend_getterinfo, GenericBindingSetter, &onloadend_setterinfo },
    7030             :   { "onloadstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onloadstart_getterinfo, GenericBindingSetter, &onloadstart_setterinfo },
    7031             :   { "onmousedown", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmousedown_getterinfo, GenericBindingSetter, &onmousedown_setterinfo },
    7032             :   { "onmouseenter", JSPROP_SHARED | JSPROP_ENUMERATE, genericLenientGetter, &onmouseenter_getterinfo, genericLenientSetter, &onmouseenter_setterinfo },
    7033             :   { "onmouseleave", JSPROP_SHARED | JSPROP_ENUMERATE, genericLenientGetter, &onmouseleave_getterinfo, genericLenientSetter, &onmouseleave_setterinfo },
    7034             :   { "onmousemove", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmousemove_getterinfo, GenericBindingSetter, &onmousemove_setterinfo },
    7035             :   { "onmouseout", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmouseout_getterinfo, GenericBindingSetter, &onmouseout_setterinfo },
    7036             :   { "onmouseover", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmouseover_getterinfo, GenericBindingSetter, &onmouseover_setterinfo },
    7037             :   { "onmouseup", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmouseup_getterinfo, GenericBindingSetter, &onmouseup_setterinfo },
    7038             :   { "onwheel", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwheel_getterinfo, GenericBindingSetter, &onwheel_setterinfo },
    7039             :   { "onpause", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpause_getterinfo, GenericBindingSetter, &onpause_setterinfo },
    7040             :   { "onplay", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onplay_getterinfo, GenericBindingSetter, &onplay_setterinfo },
    7041             :   { "onplaying", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onplaying_getterinfo, GenericBindingSetter, &onplaying_setterinfo },
    7042             :   { "onprogress", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onprogress_getterinfo, GenericBindingSetter, &onprogress_setterinfo },
    7043             :   { "onratechange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onratechange_getterinfo, GenericBindingSetter, &onratechange_setterinfo },
    7044             :   { "onreset", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onreset_getterinfo, GenericBindingSetter, &onreset_setterinfo },
    7045             :   { "onresize", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onresize_getterinfo, GenericBindingSetter, &onresize_setterinfo },
    7046             :   { "onscroll", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onscroll_getterinfo, GenericBindingSetter, &onscroll_setterinfo },
    7047             :   { "onseeked", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onseeked_getterinfo, GenericBindingSetter, &onseeked_setterinfo },
    7048             :   { "onseeking", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onseeking_getterinfo, GenericBindingSetter, &onseeking_setterinfo },
    7049             :   { "onselect", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onselect_getterinfo, GenericBindingSetter, &onselect_setterinfo },
    7050             :   { "onshow", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onshow_getterinfo, GenericBindingSetter, &onshow_setterinfo },
    7051             :   { "onstalled", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onstalled_getterinfo, GenericBindingSetter, &onstalled_setterinfo },
    7052             :   { "onsubmit", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onsubmit_getterinfo, GenericBindingSetter, &onsubmit_setterinfo },
    7053             :   { "onsuspend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onsuspend_getterinfo, GenericBindingSetter, &onsuspend_setterinfo },
    7054             :   { "ontimeupdate", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontimeupdate_getterinfo, GenericBindingSetter, &ontimeupdate_setterinfo },
    7055             :   { "onvolumechange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onvolumechange_getterinfo, GenericBindingSetter, &onvolumechange_setterinfo },
    7056             :   { "onwaiting", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwaiting_getterinfo, GenericBindingSetter, &onwaiting_setterinfo },
    7057             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    7058             :   { "onselectstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onselectstart_getterinfo, GenericBindingSetter, &onselectstart_setterinfo },
    7059             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    7060             :   { "ontoggle", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontoggle_getterinfo, GenericBindingSetter, &ontoggle_setterinfo },
    7061             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    7062             :   { "onpointercancel", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointercancel_getterinfo, GenericBindingSetter, &onpointercancel_setterinfo },
    7063             :   { "onpointerdown", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerdown_getterinfo, GenericBindingSetter, &onpointerdown_setterinfo },
    7064             :   { "onpointerup", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerup_getterinfo, GenericBindingSetter, &onpointerup_setterinfo },
    7065             :   { "onpointermove", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointermove_getterinfo, GenericBindingSetter, &onpointermove_setterinfo },
    7066             :   { "onpointerout", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerout_getterinfo, GenericBindingSetter, &onpointerout_setterinfo },
    7067             :   { "onpointerover", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerover_getterinfo, GenericBindingSetter, &onpointerover_setterinfo },
    7068             :   { "onpointerenter", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerenter_getterinfo, GenericBindingSetter, &onpointerenter_setterinfo },
    7069             :   { "onpointerleave", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerleave_getterinfo, GenericBindingSetter, &onpointerleave_setterinfo },
    7070             :   { "ongotpointercapture", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ongotpointercapture_getterinfo, GenericBindingSetter, &ongotpointercapture_setterinfo },
    7071             :   { "onlostpointercapture", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onlostpointercapture_getterinfo, GenericBindingSetter, &onlostpointercapture_setterinfo },
    7072             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    7073             :   { "onmozfullscreenchange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmozfullscreenchange_getterinfo, GenericBindingSetter, &onmozfullscreenchange_setterinfo },
    7074             :   { "onmozfullscreenerror", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmozfullscreenerror_getterinfo, GenericBindingSetter, &onmozfullscreenerror_setterinfo },
    7075             :   { "onanimationcancel", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onanimationcancel_getterinfo, GenericBindingSetter, &onanimationcancel_setterinfo },
    7076             :   { "onanimationend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onanimationend_getterinfo, GenericBindingSetter, &onanimationend_setterinfo },
    7077             :   { "onanimationiteration", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onanimationiteration_getterinfo, GenericBindingSetter, &onanimationiteration_setterinfo },
    7078             :   { "onanimationstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onanimationstart_getterinfo, GenericBindingSetter, &onanimationstart_setterinfo },
    7079             :   { "ontransitioncancel", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontransitioncancel_getterinfo, GenericBindingSetter, &ontransitioncancel_setterinfo },
    7080             :   { "ontransitionend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontransitionend_getterinfo, GenericBindingSetter, &ontransitionend_setterinfo },
    7081             :   { "ontransitionrun", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontransitionrun_getterinfo, GenericBindingSetter, &ontransitionrun_setterinfo },
    7082             :   { "ontransitionstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontransitionstart_getterinfo, GenericBindingSetter, &ontransitionstart_setterinfo },
    7083             :   { "onwebkitanimationend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwebkitanimationend_getterinfo, GenericBindingSetter, &onwebkitanimationend_setterinfo },
    7084             :   { "onwebkitanimationiteration", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwebkitanimationiteration_getterinfo, GenericBindingSetter, &onwebkitanimationiteration_setterinfo },
    7085             :   { "onwebkitanimationstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwebkitanimationstart_getterinfo, GenericBindingSetter, &onwebkitanimationstart_setterinfo },
    7086             :   { "onwebkittransitionend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwebkittransitionend_getterinfo, GenericBindingSetter, &onwebkittransitionend_setterinfo },
    7087             :   { "onerror", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onerror_getterinfo, GenericBindingSetter, &onerror_setterinfo },
    7088             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    7089             :   { "ontouchstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontouchstart_getterinfo, GenericBindingSetter, &ontouchstart_setterinfo },
    7090             :   { "ontouchend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontouchend_getterinfo, GenericBindingSetter, &ontouchend_setterinfo },
    7091             :   { "ontouchmove", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontouchmove_getterinfo, GenericBindingSetter, &ontouchmove_setterinfo },
    7092             :   { "ontouchcancel", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontouchcancel_getterinfo, GenericBindingSetter, &ontouchcancel_setterinfo },
    7093             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
    7094             : };
    7095             : #if defined(__clang__)
    7096             : #pragma clang diagnostic pop
    7097             : #endif
    7098             : 
    7099             : static PrefableDisablers sAttributes_disablers69 = {
    7100             :   true, false, 0, nullptr
    7101             : };
    7102             : 
    7103             : static PrefableDisablers sAttributes_disablers73 = {
    7104             :   true, false, 0, nullptr
    7105             : };
    7106             : 
    7107             : static PrefableDisablers sAttributes_disablers100 = {
    7108             :   true, false, 0, &nsGenericHTMLElement::TouchEventsEnabled
    7109             : };
    7110             : 
    7111             : // Can't be const because the pref-enabled boolean needs to be writable
    7112             : static Prefable<const JSPropertySpec> sAttributes[] = {
    7113             :   { nullptr, &sAttributes_specs[0] },
    7114             :   { &sAttributes_disablers69, &sAttributes_specs[69] },
    7115             :   { nullptr, &sAttributes_specs[71] },
    7116             :   { &sAttributes_disablers73, &sAttributes_specs[73] },
    7117             :   { nullptr, &sAttributes_specs[84] },
    7118             :   { &sAttributes_disablers100, &sAttributes_specs[100] },
    7119             :   { nullptr, nullptr }
    7120             : };
    7121             : 
    7122             : static_assert(6 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    7123             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    7124             : static_assert(68 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    7125             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    7126             : 
    7127             : 
    7128             : static uint16_t sNativeProperties_sortedPropertyIndices[101];
    7129             : static PropertyInfo sNativeProperties_propertyInfos[101];
    7130             : 
    7131             : static const NativePropertiesN<2> sNativeProperties = {
    7132             :   false, 0,
    7133             :   false, 0,
    7134             :   true,  0 /* sMethods */,
    7135             :   true,  1 /* sAttributes */,
    7136             :   false, 0,
    7137             :   false, 0,
    7138             :   false, 0,
    7139             :   -1,
    7140             :   101,
    7141             :   sNativeProperties_sortedPropertyIndices,
    7142             :   {
    7143             :     { sMethods, &sNativeProperties_propertyInfos[0] },
    7144             :     { sAttributes, &sNativeProperties_propertyInfos[2] }
    7145             :   }
    7146             : };
    7147             : static_assert(101 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
    7148             :     "We have a property info count that is oversized");
    7149             : 
    7150             : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
    7151             :   {
    7152             :     "Function",
    7153             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
    7154             :     &sBoringInterfaceObjectClassClassOps,
    7155             :     JS_NULL_CLASS_SPEC,
    7156             :     JS_NULL_CLASS_EXT,
    7157             :     &sInterfaceObjectClassObjectOps
    7158             :   },
    7159             :   eInterface,
    7160             :   true,
    7161             :   prototypes::id::SVGElement,
    7162             :   PrototypeTraits<prototypes::id::SVGElement>::Depth,
    7163             :   sNativePropertyHooks,
    7164             :   "function SVGElement() {\n    [native code]\n}",
    7165             :   ElementBinding::GetConstructorObject
    7166             : };
    7167             : 
    7168             : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
    7169             :   {
    7170             :     "SVGElementPrototype",
    7171             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
    7172             :     JS_NULL_CLASS_OPS,
    7173             :     JS_NULL_CLASS_SPEC,
    7174             :     JS_NULL_CLASS_EXT,
    7175             :     JS_NULL_OBJECT_OPS
    7176             :   },
    7177             :   eInterfacePrototype,
    7178             :   false,
    7179             :   prototypes::id::SVGElement,
    7180             :   PrototypeTraits<prototypes::id::SVGElement>::Depth,
    7181             :   sNativePropertyHooks,
    7182             :   "[object SVGElementPrototype]",
    7183             :   ElementBinding::GetProtoObject
    7184             : };
    7185             : 
    7186             : JSObject*
    7187           0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
    7188             : {
    7189           0 :   return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
    7190             : }
    7191             : 
    7192             : static const js::ClassOps sClassOps = {
    7193             :   _addProperty, /* addProperty */
    7194             :   nullptr,               /* delProperty */
    7195             :   nullptr,               /* getProperty */
    7196             :   nullptr,               /* setProperty */
    7197             :   nullptr,               /* enumerate */
    7198             :   nullptr, /* newEnumerate */
    7199             :   nullptr, /* resolve */
    7200             :   nullptr, /* mayResolve */
    7201             :   _finalize, /* finalize */
    7202             :   nullptr, /* call */
    7203             :   nullptr,               /* hasInstance */
    7204             :   nullptr,               /* construct */
    7205             :   nullptr, /* trace */
    7206             : };
    7207             : 
    7208             : static const js::ClassExtension sClassExtension = {
    7209             :   nullptr, /* weakmapKeyDelegateOp */
    7210             :   _objectMoved /* objectMovedOp */
    7211             : };
    7212             : 
    7213             : static const DOMJSClass sClass = {
    7214             :   { "SVGElement",
    7215             :     JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
    7216             :     &sClassOps,
    7217             :     JS_NULL_CLASS_SPEC,
    7218             :     &sClassExtension,
    7219             :     JS_NULL_OBJECT_OPS
    7220             :   },
    7221             :   { prototypes::id::EventTarget, prototypes::id::Node, prototypes::id::Element, prototypes::id::SVGElement, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
    7222             :   IsBaseOf<nsISupports, nsSVGElement >::value,
    7223             :   sNativePropertyHooks,
    7224             :   FindAssociatedGlobalForNative<nsSVGElement>::Get,
    7225             :   GetProtoObjectHandle,
    7226             :   GetCCParticipant<nsSVGElement>::Get()
    7227             : };
    7228             : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
    7229             :               "Must have the right minimal number of reserved slots.");
    7230             : static_assert(1 >= 1,
    7231             :               "Must have enough reserved slots.");
    7232             : 
    7233             : const JSClass*
    7234           0 : GetJSClass()
    7235             : {
    7236           0 :   return sClass.ToJSClass();
    7237             : }
    7238             : 
    7239             : bool
    7240           0 : Wrap(JSContext* aCx, nsSVGElement* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
    7241             : {
    7242             :   MOZ_ASSERT(static_cast<nsSVGElement*>(aObject) ==
    7243             :              reinterpret_cast<nsSVGElement*>(aObject),
    7244             :              "Multiple inheritance for nsSVGElement is broken.");
    7245             :   MOZ_ASSERT(static_cast<mozilla::dom::Element*>(aObject) ==
    7246             :              reinterpret_cast<mozilla::dom::Element*>(aObject),
    7247             :              "Multiple inheritance for mozilla::dom::Element is broken.");
    7248             :   MOZ_ASSERT(static_cast<nsINode*>(aObject) ==
    7249             :              reinterpret_cast<nsINode*>(aObject),
    7250             :              "Multiple inheritance for nsINode is broken.");
    7251             :   MOZ_ASSERT(static_cast<mozilla::dom::EventTarget*>(aObject) ==
    7252             :              reinterpret_cast<mozilla::dom::EventTarget*>(aObject),
    7253             :              "Multiple inheritance for mozilla::dom::EventTarget is broken.");
    7254           0 :   MOZ_ASSERT(ToSupportsIsCorrect(aObject));
    7255           0 :   MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
    7256           0 :   MOZ_ASSERT(!aCache->GetWrapper(),
    7257             :              "You should probably not be using Wrap() directly; use "
    7258             :              "GetOrCreateDOMReflector instead");
    7259             : 
    7260           0 :   MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
    7261             :              "nsISupports must be on our primary inheritance chain");
    7262             : 
    7263           0 :   JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
    7264           0 :   if (!global) {
    7265           0 :     return false;
    7266             :   }
    7267           0 :   MOZ_ASSERT(JS_IsGlobalObject(global));
    7268           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(global));
    7269             : 
    7270             :   // That might have ended up wrapping us already, due to the wonders
    7271             :   // of XBL.  Check for that, and bail out as needed.
    7272           0 :   aReflector.set(aCache->GetWrapper());
    7273           0 :   if (aReflector) {
    7274             : #ifdef DEBUG
    7275           0 :     binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
    7276             : #endif // DEBUG
    7277           0 :     return true;
    7278             :   }
    7279             : 
    7280           0 :   JSAutoCompartment ac(aCx, global);
    7281           0 :   JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
    7282           0 :   if (!canonicalProto) {
    7283           0 :     return false;
    7284             :   }
    7285           0 :   JS::Rooted<JSObject*> proto(aCx);
    7286           0 :   if (aGivenProto) {
    7287           0 :     proto = aGivenProto;
    7288             :     // Unfortunately, while aGivenProto was in the compartment of aCx
    7289             :     // coming in, we changed compartments to that of "parent" so may need
    7290             :     // to wrap the proto here.
    7291           0 :     if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
    7292           0 :       if (!JS_WrapObject(aCx, &proto)) {
    7293           0 :         return false;
    7294             :       }
    7295             :     }
    7296             :   } else {
    7297           0 :     proto = canonicalProto;
    7298             :   }
    7299             : 
    7300           0 :   BindingJSObjectCreator<nsSVGElement> creator(aCx);
    7301           0 :   creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
    7302           0 :   if (!aReflector) {
    7303           0 :     return false;
    7304             :   }
    7305             : 
    7306           0 :   aCache->SetWrapper(aReflector);
    7307           0 :   creator.InitializationSucceeded();
    7308             : 
    7309           0 :   MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
    7310             :              aCache->GetWrapperPreserveColor() == aReflector);
    7311             :   // If proto != canonicalProto, we have to preserve our wrapper;
    7312             :   // otherwise we won't be able to properly recreate it later, since
    7313             :   // we won't know what proto to use.  Note that we don't check
    7314             :   // aGivenProto here, since it's entirely possible (and even
    7315             :   // somewhat common) to have a non-null aGivenProto which is the
    7316             :   // same as canonicalProto.
    7317           0 :   if (proto != canonicalProto) {
    7318           0 :     PreserveWrapper(aObject);
    7319             :   }
    7320             : 
    7321           0 :   return true;
    7322             : }
    7323             : 
    7324             : const NativePropertyHooks sNativePropertyHooks[] = { {
    7325             :   nullptr,
    7326             :   nullptr,
    7327             :   nullptr,
    7328             :   { sNativeProperties.Upcast(), nullptr },
    7329             :   prototypes::id::SVGElement,
    7330             :   constructors::id::SVGElement,
    7331             :   ElementBinding::sNativePropertyHooks,
    7332             :   &DefaultXrayExpandoObjectClass
    7333             : } };
    7334             : 
    7335             : void
    7336           0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
    7337             : {
    7338           0 :   JS::Handle<JSObject*> parentProto(ElementBinding::GetProtoObjectHandle(aCx));
    7339           0 :   if (!parentProto) {
    7340           0 :     return;
    7341             :   }
    7342             : 
    7343           0 :   JS::Handle<JSObject*> constructorProto(ElementBinding::GetConstructorObjectHandle(aCx));
    7344           0 :   if (!constructorProto) {
    7345           0 :     return;
    7346             :   }
    7347             : 
    7348             :   static bool sIdsInited = false;
    7349           0 :   if (!sIdsInited && NS_IsMainThread()) {
    7350           0 :     if (!InitIds(aCx, sNativeProperties.Upcast())) {
    7351           0 :       return;
    7352             :     }
    7353           0 :     sIdsInited = true;
    7354             :   }
    7355             : 
    7356             :   static bool sPrefCachesInited = false;
    7357           0 :   if (!sPrefCachesInited && NS_IsMainThread()) {
    7358           0 :     sPrefCachesInited = true;
    7359           0 :     Preferences::AddBoolVarCache(&sAttributes[1].disablers->enabled, "dom.select_events.enabled");
    7360           0 :     Preferences::AddBoolVarCache(&sAttributes[3].disablers->enabled, "dom.w3c_pointer_events.enabled");
    7361             :   }
    7362             : 
    7363           0 :   JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::SVGElement);
    7364           0 :   JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::SVGElement);
    7365           0 :   dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
    7366             :                               &sPrototypeClass.mBase, protoCache,
    7367             :                               constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
    7368             :                               interfaceCache,
    7369             :                               sNativeProperties.Upcast(),
    7370             :                               nullptr,
    7371             :                               "SVGElement", aDefineOnGlobal,
    7372             :                               nullptr,
    7373           0 :                               false);
    7374             : }
    7375             : 
    7376             : JS::Handle<JSObject*>
    7377           0 : GetProtoObjectHandle(JSContext* aCx)
    7378             : {
    7379             :   /* Get the interface prototype object for this class.  This will create the
    7380             :      object as needed. */
    7381           0 :   bool aDefineOnGlobal = true;
    7382             : 
    7383             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
    7384           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
    7385           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
    7386           0 :     return nullptr;
    7387             :   }
    7388             : 
    7389             :   /* Check to see whether the interface objects are already installed */
    7390           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
    7391           0 :   if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::SVGElement)) {
    7392           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
    7393           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
    7394             :   }
    7395             : 
    7396             :   /*
    7397             :    * The object might _still_ be null, but that's OK.
    7398             :    *
    7399             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
    7400             :    * traced by TraceProtoAndIfaceCache() and its contents are never
    7401             :    * changed after they have been set.
    7402             :    *
    7403             :    * Calling address() avoids the read read barrier that does gray
    7404             :    * unmarking, but it's not possible for the object to be gray here.
    7405             :    */
    7406             : 
    7407           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::SVGElement);
    7408           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
    7409           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
    7410             : }
    7411             : 
    7412             : JSObject*
    7413           0 : GetProtoObject(JSContext* aCx)
    7414             : {
    7415           0 :   return GetProtoObjectHandle(aCx);
    7416             : }
    7417             : 
    7418             : JS::Handle<JSObject*>
    7419           0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
    7420             : {
    7421             :   /* Get the interface object for this class.  This will create the object as
    7422             :      needed. */
    7423             : 
    7424             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
    7425           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
    7426           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
    7427           0 :     return nullptr;
    7428             :   }
    7429             : 
    7430             :   /* Check to see whether the interface objects are already installed */
    7431           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
    7432           0 :   if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::SVGElement)) {
    7433           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
    7434           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
    7435             :   }
    7436             : 
    7437             :   /*
    7438             :    * The object might _still_ be null, but that's OK.
    7439             :    *
    7440             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
    7441             :    * traced by TraceProtoAndIfaceCache() and its contents are never
    7442             :    * changed after they have been set.
    7443             :    *
    7444             :    * Calling address() avoids the read read barrier that does gray
    7445             :    * unmarking, but it's not possible for the object to be gray here.
    7446             :    */
    7447             : 
    7448           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::SVGElement);
    7449           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
    7450           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
    7451             : }
    7452             : 
    7453             : JSObject*
    7454           0 : GetConstructorObject(JSContext* aCx)
    7455             : {
    7456           0 :   return GetConstructorObjectHandle(aCx);
    7457             : }
    7458             : 
    7459             : } // namespace SVGElementBinding
    7460             : 
    7461             : 
    7462             : 
    7463             : } // namespace dom
    7464             : } // namespace mozilla

Generated by: LCOV version 1.13