LCOV - code coverage report
Current view: top level - obj-x86_64-pc-linux-gnu/dom/bindings - XULElementBinding.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 140 2473 5.7 %
Date: 2017-07-14 16:53:18 Functions: 17 261 6.5 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* THIS FILE IS AUTOGENERATED FROM XULElement.webidl BY Codegen.py - DO NOT EDIT */
       2             : 
       3             : #include "ElementBinding.h"
       4             : #include "EventHandlerBinding.h"
       5             : #include "WrapperFactory.h"
       6             : #include "XULElementBinding.h"
       7             : #include "mozilla/OwningNonNull.h"
       8             : #include "mozilla/Preferences.h"
       9             : #include "mozilla/dom/BindingUtils.h"
      10             : #include "mozilla/dom/BoxObject.h"
      11             : #include "mozilla/dom/DOMJSClass.h"
      12             : #include "mozilla/dom/HTMLIFrameElement.h"
      13             : #include "mozilla/dom/NonRefcountedDOMObject.h"
      14             : #include "mozilla/dom/Nullable.h"
      15             : #include "mozilla/dom/PrimitiveConversions.h"
      16             : #include "mozilla/dom/XrayExpandoClass.h"
      17             : #include "nsContentUtils.h"
      18             : #include "nsGenericHTMLElement.h"
      19             : #include "nsICSSDeclaration.h"
      20             : #include "nsIControllers.h"
      21             : #include "nsIFrameLoader.h"
      22             : #include "nsINodeList.h"
      23             : #include "nsIRDFCompositeDataSource.h"
      24             : #include "nsIRDFResource.h"
      25             : #include "nsPIDOMWindow.h"
      26             : #include "nsXULElement.h"
      27             : #include "nsXULTemplateBuilder.h"
      28             : 
      29             : namespace mozilla {
      30             : namespace dom {
      31             : 
      32             : namespace XULElementBinding {
      33             : 
      34             : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<ElementBinding::NativeType>::value,
      35             :               "Can't inherit from an interface with a different ownership model.");
      36             : 
      37             : static bool
      38           0 : get_align(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
      39             : {
      40           0 :   DOMString result;
      41           0 :   self->GetAlign(result);
      42           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
      43           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
      44           0 :     return false;
      45             :   }
      46           0 :   return true;
      47             : }
      48             : 
      49             : static bool
      50           0 : set_align(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
      51             : {
      52           0 :   binding_detail::FakeString arg0;
      53           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
      54           0 :     return false;
      55             :   }
      56           0 :   binding_detail::FastErrorResult rv;
      57           0 :   self->SetAlign(NonNullHelper(Constify(arg0)), rv);
      58           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
      59           0 :     return false;
      60             :   }
      61           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
      62             : 
      63           0 :   return true;
      64             : }
      65             : 
      66             : static const JSJitInfo align_getterinfo = {
      67             :   { (JSJitGetterOp)get_align },
      68             :   { prototypes::id::XULElement },
      69             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
      70             :   JSJitInfo::Getter,
      71             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
      72             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
      73             :   false,  /* isInfallible. False in setters. */
      74             :   false,  /* isMovable.  Not relevant for setters. */
      75             :   false, /* isEliminatable.  Not relevant for setters. */
      76             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
      77             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
      78             :   false,  /* isTypedMethod.  Only relevant for methods. */
      79             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
      80             : };
      81             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
      82             : static_assert(0 < 1, "There is no slot for us");
      83             : static const JSJitInfo align_setterinfo = {
      84             :   { (JSJitGetterOp)set_align },
      85             :   { prototypes::id::XULElement },
      86             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
      87             :   JSJitInfo::Setter,
      88             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
      89             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
      90             :   false,  /* isInfallible. False in setters. */
      91             :   false,  /* isMovable.  Not relevant for setters. */
      92             :   false, /* isEliminatable.  Not relevant for setters. */
      93             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
      94             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
      95             :   false,  /* isTypedMethod.  Only relevant for methods. */
      96             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
      97             : };
      98             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
      99             : static_assert(0 < 1, "There is no slot for us");
     100             : 
     101             : static bool
     102           0 : get_dir(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
     103             : {
     104           0 :   DOMString result;
     105           0 :   self->GetDir(result);
     106           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     107           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     108           0 :     return false;
     109             :   }
     110           0 :   return true;
     111             : }
     112             : 
     113             : static bool
     114           0 : set_dir(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
     115             : {
     116           0 :   binding_detail::FakeString arg0;
     117           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     118           0 :     return false;
     119             :   }
     120           0 :   binding_detail::FastErrorResult rv;
     121           0 :   self->SetDir(NonNullHelper(Constify(arg0)), rv);
     122           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     123           0 :     return false;
     124             :   }
     125           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     126             : 
     127           0 :   return true;
     128             : }
     129             : 
     130             : static const JSJitInfo dir_getterinfo = {
     131             :   { (JSJitGetterOp)get_dir },
     132             :   { prototypes::id::XULElement },
     133             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     134             :   JSJitInfo::Getter,
     135             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     136             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     137             :   false,  /* isInfallible. False in setters. */
     138             :   false,  /* isMovable.  Not relevant for setters. */
     139             :   false, /* isEliminatable.  Not relevant for setters. */
     140             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     141             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     142             :   false,  /* isTypedMethod.  Only relevant for methods. */
     143             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     144             : };
     145             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     146             : static_assert(0 < 1, "There is no slot for us");
     147             : static const JSJitInfo dir_setterinfo = {
     148             :   { (JSJitGetterOp)set_dir },
     149             :   { prototypes::id::XULElement },
     150             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     151             :   JSJitInfo::Setter,
     152             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     153             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     154             :   false,  /* isInfallible. False in setters. */
     155             :   false,  /* isMovable.  Not relevant for setters. */
     156             :   false, /* isEliminatable.  Not relevant for setters. */
     157             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     158             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     159             :   false,  /* isTypedMethod.  Only relevant for methods. */
     160             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     161             : };
     162             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     163             : static_assert(0 < 1, "There is no slot for us");
     164             : 
     165             : static bool
     166           0 : get_flex(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
     167             : {
     168           0 :   DOMString result;
     169           0 :   self->GetFlex(result);
     170           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     171           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     172           0 :     return false;
     173             :   }
     174           0 :   return true;
     175             : }
     176             : 
     177             : static bool
     178           0 : set_flex(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
     179             : {
     180           0 :   binding_detail::FakeString arg0;
     181           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     182           0 :     return false;
     183             :   }
     184           0 :   binding_detail::FastErrorResult rv;
     185           0 :   self->SetFlex(NonNullHelper(Constify(arg0)), rv);
     186           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     187           0 :     return false;
     188             :   }
     189           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     190             : 
     191           0 :   return true;
     192             : }
     193             : 
     194             : static const JSJitInfo flex_getterinfo = {
     195             :   { (JSJitGetterOp)get_flex },
     196             :   { prototypes::id::XULElement },
     197             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     198             :   JSJitInfo::Getter,
     199             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     200             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     201             :   false,  /* isInfallible. False in setters. */
     202             :   false,  /* isMovable.  Not relevant for setters. */
     203             :   false, /* isEliminatable.  Not relevant for setters. */
     204             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     205             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     206             :   false,  /* isTypedMethod.  Only relevant for methods. */
     207             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     208             : };
     209             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     210             : static_assert(0 < 1, "There is no slot for us");
     211             : static const JSJitInfo flex_setterinfo = {
     212             :   { (JSJitGetterOp)set_flex },
     213             :   { prototypes::id::XULElement },
     214             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     215             :   JSJitInfo::Setter,
     216             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     217             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     218             :   false,  /* isInfallible. False in setters. */
     219             :   false,  /* isMovable.  Not relevant for setters. */
     220             :   false, /* isEliminatable.  Not relevant for setters. */
     221             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     222             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     223             :   false,  /* isTypedMethod.  Only relevant for methods. */
     224             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     225             : };
     226             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     227             : static_assert(0 < 1, "There is no slot for us");
     228             : 
     229             : static bool
     230           0 : get_flexGroup(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
     231             : {
     232           0 :   DOMString result;
     233           0 :   self->GetFlexGroup(result);
     234           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     235           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     236           0 :     return false;
     237             :   }
     238           0 :   return true;
     239             : }
     240             : 
     241             : static bool
     242           0 : set_flexGroup(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
     243             : {
     244           0 :   binding_detail::FakeString arg0;
     245           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     246           0 :     return false;
     247             :   }
     248           0 :   binding_detail::FastErrorResult rv;
     249           0 :   self->SetFlexGroup(NonNullHelper(Constify(arg0)), rv);
     250           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     251           0 :     return false;
     252             :   }
     253           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     254             : 
     255           0 :   return true;
     256             : }
     257             : 
     258             : static const JSJitInfo flexGroup_getterinfo = {
     259             :   { (JSJitGetterOp)get_flexGroup },
     260             :   { prototypes::id::XULElement },
     261             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     262             :   JSJitInfo::Getter,
     263             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     264             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     265             :   false,  /* isInfallible. False in setters. */
     266             :   false,  /* isMovable.  Not relevant for setters. */
     267             :   false, /* isEliminatable.  Not relevant for setters. */
     268             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     269             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     270             :   false,  /* isTypedMethod.  Only relevant for methods. */
     271             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     272             : };
     273             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     274             : static_assert(0 < 1, "There is no slot for us");
     275             : static const JSJitInfo flexGroup_setterinfo = {
     276             :   { (JSJitGetterOp)set_flexGroup },
     277             :   { prototypes::id::XULElement },
     278             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     279             :   JSJitInfo::Setter,
     280             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     281             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     282             :   false,  /* isInfallible. False in setters. */
     283             :   false,  /* isMovable.  Not relevant for setters. */
     284             :   false, /* isEliminatable.  Not relevant for setters. */
     285             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     286             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     287             :   false,  /* isTypedMethod.  Only relevant for methods. */
     288             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     289             : };
     290             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     291             : static_assert(0 < 1, "There is no slot for us");
     292             : 
     293             : static bool
     294           0 : get_ordinal(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
     295             : {
     296           0 :   DOMString result;
     297           0 :   self->GetOrdinal(result);
     298           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     299           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     300           0 :     return false;
     301             :   }
     302           0 :   return true;
     303             : }
     304             : 
     305             : static bool
     306           0 : set_ordinal(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
     307             : {
     308           0 :   binding_detail::FakeString arg0;
     309           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     310           0 :     return false;
     311             :   }
     312           0 :   binding_detail::FastErrorResult rv;
     313           0 :   self->SetOrdinal(NonNullHelper(Constify(arg0)), rv);
     314           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     315           0 :     return false;
     316             :   }
     317           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     318             : 
     319           0 :   return true;
     320             : }
     321             : 
     322             : static const JSJitInfo ordinal_getterinfo = {
     323             :   { (JSJitGetterOp)get_ordinal },
     324             :   { prototypes::id::XULElement },
     325             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     326             :   JSJitInfo::Getter,
     327             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     328             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     329             :   false,  /* isInfallible. False in setters. */
     330             :   false,  /* isMovable.  Not relevant for setters. */
     331             :   false, /* isEliminatable.  Not relevant for setters. */
     332             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     333             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     334             :   false,  /* isTypedMethod.  Only relevant for methods. */
     335             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     336             : };
     337             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     338             : static_assert(0 < 1, "There is no slot for us");
     339             : static const JSJitInfo ordinal_setterinfo = {
     340             :   { (JSJitGetterOp)set_ordinal },
     341             :   { prototypes::id::XULElement },
     342             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     343             :   JSJitInfo::Setter,
     344             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     345             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     346             :   false,  /* isInfallible. False in setters. */
     347             :   false,  /* isMovable.  Not relevant for setters. */
     348             :   false, /* isEliminatable.  Not relevant for setters. */
     349             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     350             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     351             :   false,  /* isTypedMethod.  Only relevant for methods. */
     352             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     353             : };
     354             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     355             : static_assert(0 < 1, "There is no slot for us");
     356             : 
     357             : static bool
     358           0 : get_orient(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
     359             : {
     360           0 :   DOMString result;
     361           0 :   self->GetOrient(result);
     362           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     363           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     364           0 :     return false;
     365             :   }
     366           0 :   return true;
     367             : }
     368             : 
     369             : static bool
     370           0 : set_orient(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
     371             : {
     372           0 :   binding_detail::FakeString arg0;
     373           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     374           0 :     return false;
     375             :   }
     376           0 :   binding_detail::FastErrorResult rv;
     377           0 :   self->SetOrient(NonNullHelper(Constify(arg0)), rv);
     378           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     379           0 :     return false;
     380             :   }
     381           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     382             : 
     383           0 :   return true;
     384             : }
     385             : 
     386             : static const JSJitInfo orient_getterinfo = {
     387             :   { (JSJitGetterOp)get_orient },
     388             :   { prototypes::id::XULElement },
     389             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     390             :   JSJitInfo::Getter,
     391             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     392             :   JSVAL_TYPE_STRING,  /* 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             : static const JSJitInfo orient_setterinfo = {
     404             :   { (JSJitGetterOp)set_orient },
     405             :   { prototypes::id::XULElement },
     406             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     407             :   JSJitInfo::Setter,
     408             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     409             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     410             :   false,  /* isInfallible. False in setters. */
     411             :   false,  /* isMovable.  Not relevant for setters. */
     412             :   false, /* isEliminatable.  Not relevant for setters. */
     413             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     414             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     415             :   false,  /* isTypedMethod.  Only relevant for methods. */
     416             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     417             : };
     418             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     419             : static_assert(0 < 1, "There is no slot for us");
     420             : 
     421             : static bool
     422           0 : get_pack(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
     423             : {
     424           0 :   DOMString result;
     425           0 :   self->GetPack(result);
     426           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     427           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     428           0 :     return false;
     429             :   }
     430           0 :   return true;
     431             : }
     432             : 
     433             : static bool
     434           0 : set_pack(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
     435             : {
     436           0 :   binding_detail::FakeString arg0;
     437           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     438           0 :     return false;
     439             :   }
     440           0 :   binding_detail::FastErrorResult rv;
     441           0 :   self->SetPack(NonNullHelper(Constify(arg0)), rv);
     442           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     443           0 :     return false;
     444             :   }
     445           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     446             : 
     447           0 :   return true;
     448             : }
     449             : 
     450             : static const JSJitInfo pack_getterinfo = {
     451             :   { (JSJitGetterOp)get_pack },
     452             :   { prototypes::id::XULElement },
     453             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     454             :   JSJitInfo::Getter,
     455             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     456             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     457             :   false,  /* isInfallible. False in setters. */
     458             :   false,  /* isMovable.  Not relevant for setters. */
     459             :   false, /* isEliminatable.  Not relevant for setters. */
     460             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     461             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     462             :   false,  /* isTypedMethod.  Only relevant for methods. */
     463             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     464             : };
     465             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     466             : static_assert(0 < 1, "There is no slot for us");
     467             : static const JSJitInfo pack_setterinfo = {
     468             :   { (JSJitGetterOp)set_pack },
     469             :   { prototypes::id::XULElement },
     470             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     471             :   JSJitInfo::Setter,
     472             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     473             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     474             :   false,  /* isInfallible. False in setters. */
     475             :   false,  /* isMovable.  Not relevant for setters. */
     476             :   false, /* isEliminatable.  Not relevant for setters. */
     477             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     478             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     479             :   false,  /* isTypedMethod.  Only relevant for methods. */
     480             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     481             : };
     482             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     483             : static_assert(0 < 1, "There is no slot for us");
     484             : 
     485             : static bool
     486           3 : get_hidden(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
     487             : {
     488           3 :   bool result(self->Hidden());
     489           3 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     490           3 :   args.rval().setBoolean(result);
     491           3 :   return true;
     492             : }
     493             : 
     494             : static bool
     495          18 : set_hidden(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
     496             : {
     497             :   bool arg0;
     498          18 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
     499           0 :     return false;
     500             :   }
     501          18 :   self->SetHidden(arg0);
     502          18 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     503             : 
     504          18 :   return true;
     505             : }
     506             : 
     507             : static const JSJitInfo hidden_getterinfo = {
     508             :   { (JSJitGetterOp)get_hidden },
     509             :   { prototypes::id::XULElement },
     510             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     511             :   JSJitInfo::Getter,
     512             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     513             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
     514             :   true,  /* isInfallible. False in setters. */
     515             :   false,  /* isMovable.  Not relevant for setters. */
     516             :   false, /* isEliminatable.  Not relevant for setters. */
     517             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     518             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     519             :   false,  /* isTypedMethod.  Only relevant for methods. */
     520             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     521             : };
     522             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     523             : static_assert(0 < 1, "There is no slot for us");
     524             : static const JSJitInfo hidden_setterinfo = {
     525             :   { (JSJitGetterOp)set_hidden },
     526             :   { prototypes::id::XULElement },
     527             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     528             :   JSJitInfo::Setter,
     529             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     530             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     531             :   false,  /* isInfallible. False in setters. */
     532             :   false,  /* isMovable.  Not relevant for setters. */
     533             :   false, /* isEliminatable.  Not relevant for setters. */
     534             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     535             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     536             :   false,  /* isTypedMethod.  Only relevant for methods. */
     537             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     538             : };
     539             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     540             : static_assert(0 < 1, "There is no slot for us");
     541             : 
     542             : static bool
     543           4 : get_collapsed(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
     544             : {
     545           4 :   bool result(self->Collapsed());
     546           4 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     547           4 :   args.rval().setBoolean(result);
     548           4 :   return true;
     549             : }
     550             : 
     551             : static bool
     552           6 : set_collapsed(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
     553             : {
     554             :   bool arg0;
     555           6 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
     556           0 :     return false;
     557             :   }
     558           6 :   self->SetCollapsed(arg0);
     559           6 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     560             : 
     561           6 :   return true;
     562             : }
     563             : 
     564             : static const JSJitInfo collapsed_getterinfo = {
     565             :   { (JSJitGetterOp)get_collapsed },
     566             :   { prototypes::id::XULElement },
     567             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     568             :   JSJitInfo::Getter,
     569             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     570             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
     571             :   true,  /* isInfallible. False in setters. */
     572             :   false,  /* isMovable.  Not relevant for setters. */
     573             :   false, /* isEliminatable.  Not relevant for setters. */
     574             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     575             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     576             :   false,  /* isTypedMethod.  Only relevant for methods. */
     577             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     578             : };
     579             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     580             : static_assert(0 < 1, "There is no slot for us");
     581             : static const JSJitInfo collapsed_setterinfo = {
     582             :   { (JSJitGetterOp)set_collapsed },
     583             :   { prototypes::id::XULElement },
     584             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     585             :   JSJitInfo::Setter,
     586             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     587             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     588             :   false,  /* isInfallible. False in setters. */
     589             :   false,  /* isMovable.  Not relevant for setters. */
     590             :   false, /* isEliminatable.  Not relevant for setters. */
     591             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     592             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     593             :   false,  /* isTypedMethod.  Only relevant for methods. */
     594             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     595             : };
     596             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     597             : static_assert(0 < 1, "There is no slot for us");
     598             : 
     599             : static bool
     600           0 : get_observes(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
     601             : {
     602           0 :   DOMString result;
     603           0 :   self->GetObserves(result);
     604           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     605           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     606           0 :     return false;
     607             :   }
     608           0 :   return true;
     609             : }
     610             : 
     611             : static bool
     612           0 : set_observes(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
     613             : {
     614           0 :   binding_detail::FakeString arg0;
     615           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     616           0 :     return false;
     617             :   }
     618           0 :   binding_detail::FastErrorResult rv;
     619           0 :   self->SetObserves(NonNullHelper(Constify(arg0)), rv);
     620           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     621           0 :     return false;
     622             :   }
     623           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     624             : 
     625           0 :   return true;
     626             : }
     627             : 
     628             : static const JSJitInfo observes_getterinfo = {
     629             :   { (JSJitGetterOp)get_observes },
     630             :   { prototypes::id::XULElement },
     631             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     632             :   JSJitInfo::Getter,
     633             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     634             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     635             :   false,  /* isInfallible. False in setters. */
     636             :   false,  /* isMovable.  Not relevant for setters. */
     637             :   false, /* isEliminatable.  Not relevant for setters. */
     638             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     639             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     640             :   false,  /* isTypedMethod.  Only relevant for methods. */
     641             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     642             : };
     643             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     644             : static_assert(0 < 1, "There is no slot for us");
     645             : static const JSJitInfo observes_setterinfo = {
     646             :   { (JSJitGetterOp)set_observes },
     647             :   { prototypes::id::XULElement },
     648             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     649             :   JSJitInfo::Setter,
     650             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     651             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     652             :   false,  /* isInfallible. False in setters. */
     653             :   false,  /* isMovable.  Not relevant for setters. */
     654             :   false, /* isEliminatable.  Not relevant for setters. */
     655             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     656             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     657             :   false,  /* isTypedMethod.  Only relevant for methods. */
     658             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     659             : };
     660             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     661             : static_assert(0 < 1, "There is no slot for us");
     662             : 
     663             : static bool
     664           0 : get_menu(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
     665             : {
     666           0 :   DOMString result;
     667           0 :   self->GetMenu(result);
     668           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     669           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     670           0 :     return false;
     671             :   }
     672           0 :   return true;
     673             : }
     674             : 
     675             : static bool
     676           0 : set_menu(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
     677             : {
     678           0 :   binding_detail::FakeString arg0;
     679           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     680           0 :     return false;
     681             :   }
     682           0 :   binding_detail::FastErrorResult rv;
     683           0 :   self->SetMenu(NonNullHelper(Constify(arg0)), rv);
     684           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     685           0 :     return false;
     686             :   }
     687           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     688             : 
     689           0 :   return true;
     690             : }
     691             : 
     692             : static const JSJitInfo menu_getterinfo = {
     693             :   { (JSJitGetterOp)get_menu },
     694             :   { prototypes::id::XULElement },
     695             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     696             :   JSJitInfo::Getter,
     697             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     698             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     699             :   false,  /* isInfallible. False in setters. */
     700             :   false,  /* isMovable.  Not relevant for setters. */
     701             :   false, /* isEliminatable.  Not relevant for setters. */
     702             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     703             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     704             :   false,  /* isTypedMethod.  Only relevant for methods. */
     705             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     706             : };
     707             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     708             : static_assert(0 < 1, "There is no slot for us");
     709             : static const JSJitInfo menu_setterinfo = {
     710             :   { (JSJitGetterOp)set_menu },
     711             :   { prototypes::id::XULElement },
     712             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     713             :   JSJitInfo::Setter,
     714             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     715             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     716             :   false,  /* isInfallible. False in setters. */
     717             :   false,  /* isMovable.  Not relevant for setters. */
     718             :   false, /* isEliminatable.  Not relevant for setters. */
     719             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     720             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     721             :   false,  /* isTypedMethod.  Only relevant for methods. */
     722             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     723             : };
     724             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     725             : static_assert(0 < 1, "There is no slot for us");
     726             : 
     727             : static bool
     728           0 : get_contextMenu(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
     729             : {
     730           0 :   DOMString result;
     731           0 :   self->GetContextMenu(result);
     732           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     733           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     734           0 :     return false;
     735             :   }
     736           0 :   return true;
     737             : }
     738             : 
     739             : static bool
     740           0 : set_contextMenu(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
     741             : {
     742           0 :   binding_detail::FakeString arg0;
     743           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     744           0 :     return false;
     745             :   }
     746           0 :   binding_detail::FastErrorResult rv;
     747           0 :   self->SetContextMenu(NonNullHelper(Constify(arg0)), rv);
     748           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     749           0 :     return false;
     750             :   }
     751           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     752             : 
     753           0 :   return true;
     754             : }
     755             : 
     756             : static const JSJitInfo contextMenu_getterinfo = {
     757             :   { (JSJitGetterOp)get_contextMenu },
     758             :   { prototypes::id::XULElement },
     759             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     760             :   JSJitInfo::Getter,
     761             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     762             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     763             :   false,  /* isInfallible. False in setters. */
     764             :   false,  /* isMovable.  Not relevant for setters. */
     765             :   false, /* isEliminatable.  Not relevant for setters. */
     766             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     767             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     768             :   false,  /* isTypedMethod.  Only relevant for methods. */
     769             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     770             : };
     771             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     772             : static_assert(0 < 1, "There is no slot for us");
     773             : static const JSJitInfo contextMenu_setterinfo = {
     774             :   { (JSJitGetterOp)set_contextMenu },
     775             :   { prototypes::id::XULElement },
     776             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     777             :   JSJitInfo::Setter,
     778             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     779             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     780             :   false,  /* isInfallible. False in setters. */
     781             :   false,  /* isMovable.  Not relevant for setters. */
     782             :   false, /* isEliminatable.  Not relevant for setters. */
     783             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     784             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     785             :   false,  /* isTypedMethod.  Only relevant for methods. */
     786             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     787             : };
     788             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     789             : static_assert(0 < 1, "There is no slot for us");
     790             : 
     791             : static bool
     792           0 : get_tooltip(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
     793             : {
     794           0 :   DOMString result;
     795           0 :   self->GetTooltip(result);
     796           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     797           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     798           0 :     return false;
     799             :   }
     800           0 :   return true;
     801             : }
     802             : 
     803             : static bool
     804           0 : set_tooltip(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
     805             : {
     806           0 :   binding_detail::FakeString arg0;
     807           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     808           0 :     return false;
     809             :   }
     810           0 :   binding_detail::FastErrorResult rv;
     811           0 :   self->SetTooltip(NonNullHelper(Constify(arg0)), rv);
     812           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     813           0 :     return false;
     814             :   }
     815           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     816             : 
     817           0 :   return true;
     818             : }
     819             : 
     820             : static const JSJitInfo tooltip_getterinfo = {
     821             :   { (JSJitGetterOp)get_tooltip },
     822             :   { prototypes::id::XULElement },
     823             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     824             :   JSJitInfo::Getter,
     825             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     826             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     827             :   false,  /* isInfallible. False in setters. */
     828             :   false,  /* isMovable.  Not relevant for setters. */
     829             :   false, /* isEliminatable.  Not relevant for setters. */
     830             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     831             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     832             :   false,  /* isTypedMethod.  Only relevant for methods. */
     833             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     834             : };
     835             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     836             : static_assert(0 < 1, "There is no slot for us");
     837             : static const JSJitInfo tooltip_setterinfo = {
     838             :   { (JSJitGetterOp)set_tooltip },
     839             :   { prototypes::id::XULElement },
     840             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     841             :   JSJitInfo::Setter,
     842             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     843             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     844             :   false,  /* isInfallible. False in setters. */
     845             :   false,  /* isMovable.  Not relevant for setters. */
     846             :   false, /* isEliminatable.  Not relevant for setters. */
     847             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     848             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     849             :   false,  /* isTypedMethod.  Only relevant for methods. */
     850             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     851             : };
     852             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     853             : static_assert(0 < 1, "There is no slot for us");
     854             : 
     855             : static bool
     856           0 : get_width(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
     857             : {
     858           0 :   DOMString result;
     859           0 :   self->GetWidth(result);
     860           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     861           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     862           0 :     return false;
     863             :   }
     864           0 :   return true;
     865             : }
     866             : 
     867             : static bool
     868           0 : set_width(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
     869             : {
     870           0 :   binding_detail::FakeString arg0;
     871           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     872           0 :     return false;
     873             :   }
     874           0 :   binding_detail::FastErrorResult rv;
     875           0 :   self->SetWidth(NonNullHelper(Constify(arg0)), rv);
     876           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     877           0 :     return false;
     878             :   }
     879           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     880             : 
     881           0 :   return true;
     882             : }
     883             : 
     884             : static const JSJitInfo width_getterinfo = {
     885             :   { (JSJitGetterOp)get_width },
     886             :   { prototypes::id::XULElement },
     887             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     888             :   JSJitInfo::Getter,
     889             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     890             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     891             :   false,  /* isInfallible. False in setters. */
     892             :   false,  /* isMovable.  Not relevant for setters. */
     893             :   false, /* isEliminatable.  Not relevant for setters. */
     894             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     895             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     896             :   false,  /* isTypedMethod.  Only relevant for methods. */
     897             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     898             : };
     899             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     900             : static_assert(0 < 1, "There is no slot for us");
     901             : static const JSJitInfo width_setterinfo = {
     902             :   { (JSJitGetterOp)set_width },
     903             :   { prototypes::id::XULElement },
     904             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     905             :   JSJitInfo::Setter,
     906             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     907             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     908             :   false,  /* isInfallible. False in setters. */
     909             :   false,  /* isMovable.  Not relevant for setters. */
     910             :   false, /* isEliminatable.  Not relevant for setters. */
     911             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     912             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     913             :   false,  /* isTypedMethod.  Only relevant for methods. */
     914             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     915             : };
     916             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     917             : static_assert(0 < 1, "There is no slot for us");
     918             : 
     919             : static bool
     920           0 : get_height(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
     921             : {
     922           0 :   DOMString result;
     923           0 :   self->GetHeight(result);
     924           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     925           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     926           0 :     return false;
     927             :   }
     928           0 :   return true;
     929             : }
     930             : 
     931             : static bool
     932           0 : set_height(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
     933             : {
     934           0 :   binding_detail::FakeString arg0;
     935           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     936           0 :     return false;
     937             :   }
     938           0 :   binding_detail::FastErrorResult rv;
     939           0 :   self->SetHeight(NonNullHelper(Constify(arg0)), rv);
     940           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     941           0 :     return false;
     942             :   }
     943           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     944             : 
     945           0 :   return true;
     946             : }
     947             : 
     948             : static const JSJitInfo height_getterinfo = {
     949             :   { (JSJitGetterOp)get_height },
     950             :   { prototypes::id::XULElement },
     951             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     952             :   JSJitInfo::Getter,
     953             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     954             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     955             :   false,  /* isInfallible. False in setters. */
     956             :   false,  /* isMovable.  Not relevant for setters. */
     957             :   false, /* isEliminatable.  Not relevant for setters. */
     958             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     959             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     960             :   false,  /* isTypedMethod.  Only relevant for methods. */
     961             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     962             : };
     963             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     964             : static_assert(0 < 1, "There is no slot for us");
     965             : static const JSJitInfo height_setterinfo = {
     966             :   { (JSJitGetterOp)set_height },
     967             :   { prototypes::id::XULElement },
     968             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
     969             :   JSJitInfo::Setter,
     970             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     971             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     972             :   false,  /* isInfallible. False in setters. */
     973             :   false,  /* isMovable.  Not relevant for setters. */
     974             :   false, /* isEliminatable.  Not relevant for setters. */
     975             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     976             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     977             :   false,  /* isTypedMethod.  Only relevant for methods. */
     978             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     979             : };
     980             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     981             : static_assert(0 < 1, "There is no slot for us");
     982             : 
     983             : static bool
     984           0 : get_minWidth(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
     985             : {
     986           0 :   DOMString result;
     987           0 :   self->GetMinWidth(result);
     988           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     989           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     990           0 :     return false;
     991             :   }
     992           0 :   return true;
     993             : }
     994             : 
     995             : static bool
     996           0 : set_minWidth(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
     997             : {
     998           0 :   binding_detail::FakeString arg0;
     999           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1000           0 :     return false;
    1001             :   }
    1002           0 :   binding_detail::FastErrorResult rv;
    1003           0 :   self->SetMinWidth(NonNullHelper(Constify(arg0)), rv);
    1004           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1005           0 :     return false;
    1006             :   }
    1007           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1008             : 
    1009           0 :   return true;
    1010             : }
    1011             : 
    1012             : static const JSJitInfo minWidth_getterinfo = {
    1013             :   { (JSJitGetterOp)get_minWidth },
    1014             :   { prototypes::id::XULElement },
    1015             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1016             :   JSJitInfo::Getter,
    1017             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1018             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1019             :   false,  /* isInfallible. False in setters. */
    1020             :   false,  /* isMovable.  Not relevant for setters. */
    1021             :   false, /* isEliminatable.  Not relevant for setters. */
    1022             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1023             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1024             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1025             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1026             : };
    1027             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1028             : static_assert(0 < 1, "There is no slot for us");
    1029             : static const JSJitInfo minWidth_setterinfo = {
    1030             :   { (JSJitGetterOp)set_minWidth },
    1031             :   { prototypes::id::XULElement },
    1032             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1033             :   JSJitInfo::Setter,
    1034             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1035             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1036             :   false,  /* isInfallible. False in setters. */
    1037             :   false,  /* isMovable.  Not relevant for setters. */
    1038             :   false, /* isEliminatable.  Not relevant for setters. */
    1039             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1040             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1041             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1042             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1043             : };
    1044             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1045             : static_assert(0 < 1, "There is no slot for us");
    1046             : 
    1047             : static bool
    1048           0 : get_minHeight(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    1049             : {
    1050           0 :   DOMString result;
    1051           0 :   self->GetMinHeight(result);
    1052           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1053           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1054           0 :     return false;
    1055             :   }
    1056           0 :   return true;
    1057             : }
    1058             : 
    1059             : static bool
    1060           0 : set_minHeight(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    1061             : {
    1062           0 :   binding_detail::FakeString arg0;
    1063           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1064           0 :     return false;
    1065             :   }
    1066           0 :   binding_detail::FastErrorResult rv;
    1067           0 :   self->SetMinHeight(NonNullHelper(Constify(arg0)), rv);
    1068           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1069           0 :     return false;
    1070             :   }
    1071           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1072             : 
    1073           0 :   return true;
    1074             : }
    1075             : 
    1076             : static const JSJitInfo minHeight_getterinfo = {
    1077             :   { (JSJitGetterOp)get_minHeight },
    1078             :   { prototypes::id::XULElement },
    1079             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1080             :   JSJitInfo::Getter,
    1081             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1082             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1083             :   false,  /* isInfallible. False in setters. */
    1084             :   false,  /* isMovable.  Not relevant for setters. */
    1085             :   false, /* isEliminatable.  Not relevant for setters. */
    1086             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1087             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1088             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1089             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1090             : };
    1091             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1092             : static_assert(0 < 1, "There is no slot for us");
    1093             : static const JSJitInfo minHeight_setterinfo = {
    1094             :   { (JSJitGetterOp)set_minHeight },
    1095             :   { prototypes::id::XULElement },
    1096             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1097             :   JSJitInfo::Setter,
    1098             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1099             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1100             :   false,  /* isInfallible. False in setters. */
    1101             :   false,  /* isMovable.  Not relevant for setters. */
    1102             :   false, /* isEliminatable.  Not relevant for setters. */
    1103             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1104             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1105             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1106             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1107             : };
    1108             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1109             : static_assert(0 < 1, "There is no slot for us");
    1110             : 
    1111             : static bool
    1112           0 : get_maxWidth(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    1113             : {
    1114           0 :   DOMString result;
    1115           0 :   self->GetMaxWidth(result);
    1116           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1117           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1118           0 :     return false;
    1119             :   }
    1120           0 :   return true;
    1121             : }
    1122             : 
    1123             : static bool
    1124           0 : set_maxWidth(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    1125             : {
    1126           0 :   binding_detail::FakeString arg0;
    1127           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1128           0 :     return false;
    1129             :   }
    1130           0 :   binding_detail::FastErrorResult rv;
    1131           0 :   self->SetMaxWidth(NonNullHelper(Constify(arg0)), rv);
    1132           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1133           0 :     return false;
    1134             :   }
    1135           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1136             : 
    1137           0 :   return true;
    1138             : }
    1139             : 
    1140             : static const JSJitInfo maxWidth_getterinfo = {
    1141             :   { (JSJitGetterOp)get_maxWidth },
    1142             :   { prototypes::id::XULElement },
    1143             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1144             :   JSJitInfo::Getter,
    1145             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1146             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1147             :   false,  /* isInfallible. False in setters. */
    1148             :   false,  /* isMovable.  Not relevant for setters. */
    1149             :   false, /* isEliminatable.  Not relevant for setters. */
    1150             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1151             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1152             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1153             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1154             : };
    1155             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1156             : static_assert(0 < 1, "There is no slot for us");
    1157             : static const JSJitInfo maxWidth_setterinfo = {
    1158             :   { (JSJitGetterOp)set_maxWidth },
    1159             :   { prototypes::id::XULElement },
    1160             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1161             :   JSJitInfo::Setter,
    1162             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1163             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1164             :   false,  /* isInfallible. False in setters. */
    1165             :   false,  /* isMovable.  Not relevant for setters. */
    1166             :   false, /* isEliminatable.  Not relevant for setters. */
    1167             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1168             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1169             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1170             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1171             : };
    1172             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1173             : static_assert(0 < 1, "There is no slot for us");
    1174             : 
    1175             : static bool
    1176           0 : get_maxHeight(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    1177             : {
    1178           0 :   DOMString result;
    1179           0 :   self->GetMaxHeight(result);
    1180           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1181           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1182           0 :     return false;
    1183             :   }
    1184           0 :   return true;
    1185             : }
    1186             : 
    1187             : static bool
    1188           0 : set_maxHeight(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    1189             : {
    1190           0 :   binding_detail::FakeString arg0;
    1191           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1192           0 :     return false;
    1193             :   }
    1194           0 :   binding_detail::FastErrorResult rv;
    1195           0 :   self->SetMaxHeight(NonNullHelper(Constify(arg0)), rv);
    1196           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1197           0 :     return false;
    1198             :   }
    1199           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1200             : 
    1201           0 :   return true;
    1202             : }
    1203             : 
    1204             : static const JSJitInfo maxHeight_getterinfo = {
    1205             :   { (JSJitGetterOp)get_maxHeight },
    1206             :   { prototypes::id::XULElement },
    1207             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1208             :   JSJitInfo::Getter,
    1209             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1210             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1211             :   false,  /* isInfallible. False in setters. */
    1212             :   false,  /* isMovable.  Not relevant for setters. */
    1213             :   false, /* isEliminatable.  Not relevant for setters. */
    1214             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1215             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1216             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1217             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1218             : };
    1219             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1220             : static_assert(0 < 1, "There is no slot for us");
    1221             : static const JSJitInfo maxHeight_setterinfo = {
    1222             :   { (JSJitGetterOp)set_maxHeight },
    1223             :   { prototypes::id::XULElement },
    1224             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1225             :   JSJitInfo::Setter,
    1226             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1227             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1228             :   false,  /* isInfallible. False in setters. */
    1229             :   false,  /* isMovable.  Not relevant for setters. */
    1230             :   false, /* isEliminatable.  Not relevant for setters. */
    1231             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1232             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1233             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1234             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1235             : };
    1236             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1237             : static_assert(0 < 1, "There is no slot for us");
    1238             : 
    1239             : static bool
    1240           0 : get_persist(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    1241             : {
    1242           0 :   DOMString result;
    1243           0 :   self->GetPersist(result);
    1244           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1245           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1246           0 :     return false;
    1247             :   }
    1248           0 :   return true;
    1249             : }
    1250             : 
    1251             : static bool
    1252           0 : set_persist(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    1253             : {
    1254           0 :   binding_detail::FakeString arg0;
    1255           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1256           0 :     return false;
    1257             :   }
    1258           0 :   binding_detail::FastErrorResult rv;
    1259           0 :   self->SetPersist(NonNullHelper(Constify(arg0)), rv);
    1260           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1261           0 :     return false;
    1262             :   }
    1263           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1264             : 
    1265           0 :   return true;
    1266             : }
    1267             : 
    1268             : static const JSJitInfo persist_getterinfo = {
    1269             :   { (JSJitGetterOp)get_persist },
    1270             :   { prototypes::id::XULElement },
    1271             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1272             :   JSJitInfo::Getter,
    1273             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1274             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1275             :   false,  /* isInfallible. False in setters. */
    1276             :   false,  /* isMovable.  Not relevant for setters. */
    1277             :   false, /* isEliminatable.  Not relevant for setters. */
    1278             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1279             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1280             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1281             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1282             : };
    1283             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1284             : static_assert(0 < 1, "There is no slot for us");
    1285             : static const JSJitInfo persist_setterinfo = {
    1286             :   { (JSJitGetterOp)set_persist },
    1287             :   { prototypes::id::XULElement },
    1288             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1289             :   JSJitInfo::Setter,
    1290             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1291             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1292             :   false,  /* isInfallible. False in setters. */
    1293             :   false,  /* isMovable.  Not relevant for setters. */
    1294             :   false, /* isEliminatable.  Not relevant for setters. */
    1295             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1296             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1297             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1298             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1299             : };
    1300             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1301             : static_assert(0 < 1, "There is no slot for us");
    1302             : 
    1303             : static bool
    1304           0 : get_left(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    1305             : {
    1306           0 :   DOMString result;
    1307           0 :   self->GetLeft(result);
    1308           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1309           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1310           0 :     return false;
    1311             :   }
    1312           0 :   return true;
    1313             : }
    1314             : 
    1315             : static bool
    1316           0 : set_left(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    1317             : {
    1318           0 :   binding_detail::FakeString arg0;
    1319           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1320           0 :     return false;
    1321             :   }
    1322           0 :   binding_detail::FastErrorResult rv;
    1323           0 :   self->SetLeft(NonNullHelper(Constify(arg0)), rv);
    1324           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1325           0 :     return false;
    1326             :   }
    1327           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1328             : 
    1329           0 :   return true;
    1330             : }
    1331             : 
    1332             : static const JSJitInfo left_getterinfo = {
    1333             :   { (JSJitGetterOp)get_left },
    1334             :   { prototypes::id::XULElement },
    1335             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1336             :   JSJitInfo::Getter,
    1337             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1338             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1339             :   false,  /* isInfallible. False in setters. */
    1340             :   false,  /* isMovable.  Not relevant for setters. */
    1341             :   false, /* isEliminatable.  Not relevant for setters. */
    1342             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1343             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1344             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1345             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1346             : };
    1347             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1348             : static_assert(0 < 1, "There is no slot for us");
    1349             : static const JSJitInfo left_setterinfo = {
    1350             :   { (JSJitGetterOp)set_left },
    1351             :   { prototypes::id::XULElement },
    1352             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1353             :   JSJitInfo::Setter,
    1354             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1355             :   JSVAL_TYPE_UNDEFINED,  /* 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             : 
    1367             : static bool
    1368           0 : get_top(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    1369             : {
    1370           0 :   DOMString result;
    1371           0 :   self->GetTop(result);
    1372           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1373           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1374           0 :     return false;
    1375             :   }
    1376           0 :   return true;
    1377             : }
    1378             : 
    1379             : static bool
    1380           0 : set_top(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    1381             : {
    1382           0 :   binding_detail::FakeString arg0;
    1383           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1384           0 :     return false;
    1385             :   }
    1386           0 :   binding_detail::FastErrorResult rv;
    1387           0 :   self->SetTop(NonNullHelper(Constify(arg0)), rv);
    1388           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1389           0 :     return false;
    1390             :   }
    1391           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1392             : 
    1393           0 :   return true;
    1394             : }
    1395             : 
    1396             : static const JSJitInfo top_getterinfo = {
    1397             :   { (JSJitGetterOp)get_top },
    1398             :   { prototypes::id::XULElement },
    1399             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1400             :   JSJitInfo::Getter,
    1401             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1402             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1403             :   false,  /* isInfallible. False in setters. */
    1404             :   false,  /* isMovable.  Not relevant for setters. */
    1405             :   false, /* isEliminatable.  Not relevant for setters. */
    1406             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1407             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1408             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1409             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1410             : };
    1411             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1412             : static_assert(0 < 1, "There is no slot for us");
    1413             : static const JSJitInfo top_setterinfo = {
    1414             :   { (JSJitGetterOp)set_top },
    1415             :   { prototypes::id::XULElement },
    1416             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1417             :   JSJitInfo::Setter,
    1418             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1419             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1420             :   false,  /* isInfallible. False in setters. */
    1421             :   false,  /* isMovable.  Not relevant for setters. */
    1422             :   false, /* isEliminatable.  Not relevant for setters. */
    1423             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1424             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1425             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1426             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1427             : };
    1428             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1429             : static_assert(0 < 1, "There is no slot for us");
    1430             : 
    1431             : static bool
    1432           0 : get_datasources(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    1433             : {
    1434           0 :   DOMString result;
    1435           0 :   self->GetDatasources(result);
    1436           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1437           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1438           0 :     return false;
    1439             :   }
    1440           0 :   return true;
    1441             : }
    1442             : 
    1443             : static bool
    1444           0 : set_datasources(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    1445             : {
    1446           0 :   binding_detail::FakeString arg0;
    1447           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1448           0 :     return false;
    1449             :   }
    1450           0 :   binding_detail::FastErrorResult rv;
    1451           0 :   self->SetDatasources(NonNullHelper(Constify(arg0)), rv);
    1452           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1453           0 :     return false;
    1454             :   }
    1455           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1456             : 
    1457           0 :   return true;
    1458             : }
    1459             : 
    1460             : static const JSJitInfo datasources_getterinfo = {
    1461             :   { (JSJitGetterOp)get_datasources },
    1462             :   { prototypes::id::XULElement },
    1463             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1464             :   JSJitInfo::Getter,
    1465             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1466             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1467             :   false,  /* isInfallible. False in setters. */
    1468             :   false,  /* isMovable.  Not relevant for setters. */
    1469             :   false, /* isEliminatable.  Not relevant for setters. */
    1470             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1471             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1472             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1473             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1474             : };
    1475             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1476             : static_assert(0 < 1, "There is no slot for us");
    1477             : static const JSJitInfo datasources_setterinfo = {
    1478             :   { (JSJitGetterOp)set_datasources },
    1479             :   { prototypes::id::XULElement },
    1480             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1481             :   JSJitInfo::Setter,
    1482             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1483             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1484             :   false,  /* isInfallible. False in setters. */
    1485             :   false,  /* isMovable.  Not relevant for setters. */
    1486             :   false, /* isEliminatable.  Not relevant for setters. */
    1487             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1488             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1489             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1490             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1491             : };
    1492             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1493             : static_assert(0 < 1, "There is no slot for us");
    1494             : 
    1495             : static bool
    1496           0 : get_ref(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    1497             : {
    1498           0 :   DOMString result;
    1499           0 :   self->GetRef(result);
    1500           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1501           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1502           0 :     return false;
    1503             :   }
    1504           0 :   return true;
    1505             : }
    1506             : 
    1507             : static bool
    1508           0 : set_ref(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    1509             : {
    1510           0 :   binding_detail::FakeString arg0;
    1511           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1512           0 :     return false;
    1513             :   }
    1514           0 :   binding_detail::FastErrorResult rv;
    1515           0 :   self->SetRef(NonNullHelper(Constify(arg0)), rv);
    1516           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1517           0 :     return false;
    1518             :   }
    1519           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1520             : 
    1521           0 :   return true;
    1522             : }
    1523             : 
    1524             : static const JSJitInfo ref_getterinfo = {
    1525             :   { (JSJitGetterOp)get_ref },
    1526             :   { prototypes::id::XULElement },
    1527             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1528             :   JSJitInfo::Getter,
    1529             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1530             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1531             :   false,  /* isInfallible. False in setters. */
    1532             :   false,  /* isMovable.  Not relevant for setters. */
    1533             :   false, /* isEliminatable.  Not relevant for setters. */
    1534             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1535             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1536             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1537             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1538             : };
    1539             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1540             : static_assert(0 < 1, "There is no slot for us");
    1541             : static const JSJitInfo ref_setterinfo = {
    1542             :   { (JSJitGetterOp)set_ref },
    1543             :   { prototypes::id::XULElement },
    1544             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1545             :   JSJitInfo::Setter,
    1546             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1547             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1548             :   false,  /* isInfallible. False in setters. */
    1549             :   false,  /* isMovable.  Not relevant for setters. */
    1550             :   false, /* isEliminatable.  Not relevant for setters. */
    1551             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1552             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1553             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1554             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1555             : };
    1556             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1557             : static_assert(0 < 1, "There is no slot for us");
    1558             : 
    1559             : static bool
    1560           0 : get_tooltipText(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    1561             : {
    1562           0 :   DOMString result;
    1563           0 :   self->GetTooltipText(result);
    1564           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1565           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1566           0 :     return false;
    1567             :   }
    1568           0 :   return true;
    1569             : }
    1570             : 
    1571             : static bool
    1572          12 : set_tooltipText(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    1573             : {
    1574          24 :   binding_detail::FakeString arg0;
    1575          12 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1576           0 :     return false;
    1577             :   }
    1578          24 :   binding_detail::FastErrorResult rv;
    1579          12 :   self->SetTooltipText(NonNullHelper(Constify(arg0)), rv);
    1580          12 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1581           0 :     return false;
    1582             :   }
    1583          12 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1584             : 
    1585          12 :   return true;
    1586             : }
    1587             : 
    1588             : static const JSJitInfo tooltipText_getterinfo = {
    1589             :   { (JSJitGetterOp)get_tooltipText },
    1590             :   { prototypes::id::XULElement },
    1591             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1592             :   JSJitInfo::Getter,
    1593             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1594             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1595             :   false,  /* isInfallible. False in setters. */
    1596             :   false,  /* isMovable.  Not relevant for setters. */
    1597             :   false, /* isEliminatable.  Not relevant for setters. */
    1598             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1599             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1600             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1601             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1602             : };
    1603             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1604             : static_assert(0 < 1, "There is no slot for us");
    1605             : static const JSJitInfo tooltipText_setterinfo = {
    1606             :   { (JSJitGetterOp)set_tooltipText },
    1607             :   { prototypes::id::XULElement },
    1608             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1609             :   JSJitInfo::Setter,
    1610             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1611             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1612             :   false,  /* isInfallible. False in setters. */
    1613             :   false,  /* isMovable.  Not relevant for setters. */
    1614             :   false, /* isEliminatable.  Not relevant for setters. */
    1615             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1616             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1617             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1618             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1619             : };
    1620             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1621             : static_assert(0 < 1, "There is no slot for us");
    1622             : 
    1623             : static bool
    1624           0 : get_statusText(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    1625             : {
    1626           0 :   DOMString result;
    1627           0 :   self->GetStatusText(result);
    1628           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1629           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1630           0 :     return false;
    1631             :   }
    1632           0 :   return true;
    1633             : }
    1634             : 
    1635             : static bool
    1636           0 : set_statusText(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    1637             : {
    1638           0 :   binding_detail::FakeString arg0;
    1639           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1640           0 :     return false;
    1641             :   }
    1642           0 :   binding_detail::FastErrorResult rv;
    1643           0 :   self->SetStatusText(NonNullHelper(Constify(arg0)), rv);
    1644           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1645           0 :     return false;
    1646             :   }
    1647           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1648             : 
    1649           0 :   return true;
    1650             : }
    1651             : 
    1652             : static const JSJitInfo statusText_getterinfo = {
    1653             :   { (JSJitGetterOp)get_statusText },
    1654             :   { prototypes::id::XULElement },
    1655             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1656             :   JSJitInfo::Getter,
    1657             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1658             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1659             :   false,  /* isInfallible. False in setters. */
    1660             :   false,  /* isMovable.  Not relevant for setters. */
    1661             :   false, /* isEliminatable.  Not relevant for setters. */
    1662             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1663             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1664             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1665             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1666             : };
    1667             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1668             : static_assert(0 < 1, "There is no slot for us");
    1669             : static const JSJitInfo statusText_setterinfo = {
    1670             :   { (JSJitGetterOp)set_statusText },
    1671             :   { prototypes::id::XULElement },
    1672             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1673             :   JSJitInfo::Setter,
    1674             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1675             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1676             :   false,  /* isInfallible. False in setters. */
    1677             :   false,  /* isMovable.  Not relevant for setters. */
    1678             :   false, /* isEliminatable.  Not relevant for setters. */
    1679             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1680             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1681             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1682             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1683             : };
    1684             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1685             : static_assert(0 < 1, "There is no slot for us");
    1686             : 
    1687             : static bool
    1688           0 : get_allowEvents(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    1689             : {
    1690           0 :   bool result(self->AllowEvents());
    1691           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1692           0 :   args.rval().setBoolean(result);
    1693           0 :   return true;
    1694             : }
    1695             : 
    1696             : static bool
    1697           0 : set_allowEvents(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    1698             : {
    1699             :   bool arg0;
    1700           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    1701           0 :     return false;
    1702             :   }
    1703           0 :   self->SetAllowEvents(arg0);
    1704           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1705             : 
    1706           0 :   return true;
    1707             : }
    1708             : 
    1709             : static const JSJitInfo allowEvents_getterinfo = {
    1710             :   { (JSJitGetterOp)get_allowEvents },
    1711             :   { prototypes::id::XULElement },
    1712             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1713             :   JSJitInfo::Getter,
    1714             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1715             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    1716             :   true,  /* isInfallible. False in setters. */
    1717             :   false,  /* isMovable.  Not relevant for setters. */
    1718             :   false, /* isEliminatable.  Not relevant for setters. */
    1719             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1720             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1721             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1722             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1723             : };
    1724             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1725             : static_assert(0 < 1, "There is no slot for us");
    1726             : static const JSJitInfo allowEvents_setterinfo = {
    1727             :   { (JSJitGetterOp)set_allowEvents },
    1728             :   { prototypes::id::XULElement },
    1729             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1730             :   JSJitInfo::Setter,
    1731             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1732             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1733             :   false,  /* isInfallible. False in setters. */
    1734             :   false,  /* isMovable.  Not relevant for setters. */
    1735             :   false, /* isEliminatable.  Not relevant for setters. */
    1736             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1737             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1738             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1739             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1740             : };
    1741             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1742             : static_assert(0 < 1, "There is no slot for us");
    1743             : 
    1744             : static bool
    1745           0 : get_database(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    1746             : {
    1747           0 :   auto result(StrongOrRawPtr<nsIRDFCompositeDataSource>(self->GetDatabase()));
    1748           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1749           0 :   if (!result) {
    1750           0 :     args.rval().setNull();
    1751           0 :     return true;
    1752             :   }
    1753           0 :   if (!WrapObject(cx, result, &NS_GET_IID(nsIRDFCompositeDataSource), args.rval())) {
    1754           0 :     return false;
    1755             :   }
    1756           0 :   return true;
    1757             : }
    1758             : 
    1759             : static const JSJitInfo database_getterinfo = {
    1760             :   { (JSJitGetterOp)get_database },
    1761             :   { prototypes::id::XULElement },
    1762             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1763             :   JSJitInfo::Getter,
    1764             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1765             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1766             :   false,  /* isInfallible. False in setters. */
    1767             :   false,  /* isMovable.  Not relevant for setters. */
    1768             :   false, /* isEliminatable.  Not relevant for setters. */
    1769             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1770             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1771             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1772             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1773             : };
    1774             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1775             : static_assert(0 < 1, "There is no slot for us");
    1776             : 
    1777             : static bool
    1778           0 : get_builder(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    1779             : {
    1780           0 :   auto result(StrongOrRawPtr<nsXULTemplateBuilder>(self->GetBuilder()));
    1781           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1782           0 :   if (!result) {
    1783           0 :     args.rval().setNull();
    1784           0 :     return true;
    1785             :   }
    1786           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1787           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1788           0 :     return false;
    1789             :   }
    1790           0 :   return true;
    1791             : }
    1792             : 
    1793             : static const JSJitInfo builder_getterinfo = {
    1794             :   { (JSJitGetterOp)get_builder },
    1795             :   { prototypes::id::XULElement },
    1796             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1797             :   JSJitInfo::Getter,
    1798             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1799             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1800             :   false,  /* isInfallible. False in setters. */
    1801             :   false,  /* isMovable.  Not relevant for setters. */
    1802             :   false, /* isEliminatable.  Not relevant for setters. */
    1803             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1804             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1805             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1806             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1807             : };
    1808             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1809             : static_assert(0 < 1, "There is no slot for us");
    1810             : 
    1811             : static bool
    1812           0 : get_resource(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    1813             : {
    1814           0 :   binding_detail::FastErrorResult rv;
    1815           0 :   auto result(StrongOrRawPtr<nsIRDFResource>(self->GetResource(rv)));
    1816           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1817           0 :     return false;
    1818             :   }
    1819           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1820           0 :   if (!result) {
    1821           0 :     args.rval().setNull();
    1822           0 :     return true;
    1823             :   }
    1824           0 :   if (!WrapObject(cx, result, &NS_GET_IID(nsIRDFResource), args.rval())) {
    1825           0 :     return false;
    1826             :   }
    1827           0 :   return true;
    1828             : }
    1829             : 
    1830             : static const JSJitInfo resource_getterinfo = {
    1831             :   { (JSJitGetterOp)get_resource },
    1832             :   { prototypes::id::XULElement },
    1833             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1834             :   JSJitInfo::Getter,
    1835             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1836             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1837             :   false,  /* isInfallible. False in setters. */
    1838             :   false,  /* isMovable.  Not relevant for setters. */
    1839             :   false, /* isEliminatable.  Not relevant for setters. */
    1840             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1841             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1842             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1843             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1844             : };
    1845             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1846             : static_assert(0 < 1, "There is no slot for us");
    1847             : 
    1848             : static bool
    1849           1 : get_controllers(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    1850             : {
    1851           2 :   binding_detail::FastErrorResult rv;
    1852           1 :   auto result(StrongOrRawPtr<nsIControllers>(self->GetControllers(rv)));
    1853           1 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1854           0 :     return false;
    1855             :   }
    1856           1 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1857           1 :   if (!WrapObject(cx, result, &NS_GET_IID(nsIControllers), args.rval())) {
    1858           0 :     return false;
    1859             :   }
    1860           1 :   return true;
    1861             : }
    1862             : 
    1863             : static const JSJitInfo controllers_getterinfo = {
    1864             :   { (JSJitGetterOp)get_controllers },
    1865             :   { prototypes::id::XULElement },
    1866             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1867             :   JSJitInfo::Getter,
    1868             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1869             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    1870             :   false,  /* isInfallible. False in setters. */
    1871             :   false,  /* isMovable.  Not relevant for setters. */
    1872             :   false, /* isEliminatable.  Not relevant for setters. */
    1873             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1874             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1875             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1876             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1877             : };
    1878             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1879             : static_assert(0 < 1, "There is no slot for us");
    1880             : 
    1881             : static bool
    1882          12 : get_boxObject(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    1883             : {
    1884          24 :   binding_detail::FastErrorResult rv;
    1885          24 :   auto result(StrongOrRawPtr<mozilla::dom::BoxObject>(self->GetBoxObject(rv)));
    1886          12 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1887           0 :     return false;
    1888             :   }
    1889          12 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1890          12 :   if (!result) {
    1891           0 :     args.rval().setNull();
    1892           0 :     return true;
    1893             :   }
    1894          12 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1895           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1896           0 :     return false;
    1897             :   }
    1898          12 :   return true;
    1899             : }
    1900             : 
    1901             : static const JSJitInfo boxObject_getterinfo = {
    1902             :   { (JSJitGetterOp)get_boxObject },
    1903             :   { prototypes::id::XULElement },
    1904             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1905             :   JSJitInfo::Getter,
    1906             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1907             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1908             :   false,  /* isInfallible. False in setters. */
    1909             :   false,  /* isMovable.  Not relevant for setters. */
    1910             :   false, /* isEliminatable.  Not relevant for setters. */
    1911             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1912             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1913             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1914             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1915             : };
    1916             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1917             : static_assert(0 < 1, "There is no slot for us");
    1918             : 
    1919             : static bool
    1920           2 : focus(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, const JSJitMethodCallArgs& args)
    1921             : {
    1922           4 :   binding_detail::FastErrorResult rv;
    1923           2 :   self->Focus(rv);
    1924           2 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1925           0 :     return false;
    1926             :   }
    1927           2 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1928           2 :   args.rval().setUndefined();
    1929           2 :   return true;
    1930             : }
    1931             : 
    1932             : static const JSJitInfo focus_methodinfo = {
    1933             :   { (JSJitGetterOp)focus },
    1934             :   { prototypes::id::XULElement },
    1935             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1936             :   JSJitInfo::Method,
    1937             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1938             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1939             :   false,  /* isInfallible. False in setters. */
    1940             :   false,  /* isMovable.  Not relevant for setters. */
    1941             :   false, /* isEliminatable.  Not relevant for setters. */
    1942             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1943             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1944             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1945             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1946             : };
    1947             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1948             : static_assert(0 < 1, "There is no slot for us");
    1949             : 
    1950             : static bool
    1951           0 : blur(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, const JSJitMethodCallArgs& args)
    1952             : {
    1953           0 :   binding_detail::FastErrorResult rv;
    1954           0 :   self->Blur(rv);
    1955           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1956           0 :     return false;
    1957             :   }
    1958           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1959           0 :   args.rval().setUndefined();
    1960           0 :   return true;
    1961             : }
    1962             : 
    1963             : static const JSJitInfo blur_methodinfo = {
    1964             :   { (JSJitGetterOp)blur },
    1965             :   { prototypes::id::XULElement },
    1966             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1967             :   JSJitInfo::Method,
    1968             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1969             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1970             :   false,  /* isInfallible. False in setters. */
    1971             :   false,  /* isMovable.  Not relevant for setters. */
    1972             :   false, /* isEliminatable.  Not relevant for setters. */
    1973             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1974             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1975             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1976             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1977             : };
    1978             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1979             : static_assert(0 < 1, "There is no slot for us");
    1980             : 
    1981             : static bool
    1982           0 : click(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, const JSJitMethodCallArgs& args)
    1983             : {
    1984           0 :   self->Click(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem);
    1985           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1986           0 :   args.rval().setUndefined();
    1987           0 :   return true;
    1988             : }
    1989             : 
    1990             : static const JSJitInfo click_methodinfo = {
    1991             :   { (JSJitGetterOp)click },
    1992             :   { prototypes::id::XULElement },
    1993             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    1994             :   JSJitInfo::Method,
    1995             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1996             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1997             :   true,  /* isInfallible. False in setters. */
    1998             :   false,  /* isMovable.  Not relevant for setters. */
    1999             :   false, /* isEliminatable.  Not relevant for setters. */
    2000             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2001             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2002             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2003             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2004             : };
    2005             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2006             : static_assert(0 < 1, "There is no slot for us");
    2007             : 
    2008             : static bool
    2009           0 : doCommand(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, const JSJitMethodCallArgs& args)
    2010             : {
    2011           0 :   self->DoCommand();
    2012           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2013           0 :   args.rval().setUndefined();
    2014           0 :   return true;
    2015             : }
    2016             : 
    2017             : static const JSJitInfo doCommand_methodinfo = {
    2018             :   { (JSJitGetterOp)doCommand },
    2019             :   { prototypes::id::XULElement },
    2020             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2021             :   JSJitInfo::Method,
    2022             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2023             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2024             :   true,  /* isInfallible. False in setters. */
    2025             :   false,  /* isMovable.  Not relevant for setters. */
    2026             :   false, /* isEliminatable.  Not relevant for setters. */
    2027             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2028             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2029             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2030             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2031             : };
    2032             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2033             : static_assert(0 < 1, "There is no slot for us");
    2034             : 
    2035             : static bool
    2036           2 : getElementsByAttribute(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, const JSJitMethodCallArgs& args)
    2037             : {
    2038           2 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    2039           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULElement.getElementsByAttribute");
    2040             :   }
    2041           4 :   binding_detail::FakeString arg0;
    2042           2 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    2043           0 :     return false;
    2044             :   }
    2045           4 :   binding_detail::FakeString arg1;
    2046           2 :   if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
    2047           0 :     return false;
    2048             :   }
    2049           4 :   auto result(StrongOrRawPtr<nsINodeList>(self->GetElementsByAttribute(NonNullHelper(Constify(arg0)), NonNullHelper(Constify(arg1)))));
    2050           2 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2051           2 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    2052           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    2053           0 :     return false;
    2054             :   }
    2055           2 :   return true;
    2056             : }
    2057             : 
    2058             : static const JSJitInfo getElementsByAttribute_methodinfo = {
    2059             :   { (JSJitGetterOp)getElementsByAttribute },
    2060             :   { prototypes::id::XULElement },
    2061             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2062             :   JSJitInfo::Method,
    2063             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2064             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    2065             :   false,  /* isInfallible. False in setters. */
    2066             :   false,  /* isMovable.  Not relevant for setters. */
    2067             :   false, /* isEliminatable.  Not relevant for setters. */
    2068             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2069             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2070             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2071             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2072             : };
    2073             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2074             : static_assert(0 < 1, "There is no slot for us");
    2075             : 
    2076             : static bool
    2077           0 : getElementsByAttributeNS(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, const JSJitMethodCallArgs& args)
    2078             : {
    2079           0 :   if (MOZ_UNLIKELY(args.length() < 3)) {
    2080           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULElement.getElementsByAttributeNS");
    2081             :   }
    2082           0 :   binding_detail::FakeString arg0;
    2083           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    2084           0 :     return false;
    2085             :   }
    2086           0 :   binding_detail::FakeString arg1;
    2087           0 :   if (!ConvertJSValueToString(cx, args[1], eStringify, eStringify, arg1)) {
    2088           0 :     return false;
    2089             :   }
    2090           0 :   binding_detail::FakeString arg2;
    2091           0 :   if (!ConvertJSValueToString(cx, args[2], eStringify, eStringify, arg2)) {
    2092           0 :     return false;
    2093             :   }
    2094           0 :   binding_detail::FastErrorResult rv;
    2095           0 :   auto result(StrongOrRawPtr<nsINodeList>(self->GetElementsByAttributeNS(NonNullHelper(Constify(arg0)), NonNullHelper(Constify(arg1)), NonNullHelper(Constify(arg2)), rv)));
    2096           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2097           0 :     return false;
    2098             :   }
    2099           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2100           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    2101           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    2102           0 :     return false;
    2103             :   }
    2104           0 :   return true;
    2105             : }
    2106             : 
    2107             : static const JSJitInfo getElementsByAttributeNS_methodinfo = {
    2108             :   { (JSJitGetterOp)getElementsByAttributeNS },
    2109             :   { prototypes::id::XULElement },
    2110             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2111             :   JSJitInfo::Method,
    2112             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2113             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    2114             :   false,  /* isInfallible. False in setters. */
    2115             :   false,  /* isMovable.  Not relevant for setters. */
    2116             :   false, /* isEliminatable.  Not relevant for setters. */
    2117             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2118             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2119             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2120             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2121             : };
    2122             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2123             : static_assert(0 < 1, "There is no slot for us");
    2124             : 
    2125             : static bool
    2126          19 : get_style(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    2127             : {
    2128          19 :   auto result(StrongOrRawPtr<nsICSSDeclaration>(self->Style()));
    2129          19 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2130          19 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    2131           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    2132           0 :     return false;
    2133             :   }
    2134          19 :   return true;
    2135             : }
    2136             : 
    2137             : static const JSJitInfo style_getterinfo = {
    2138             :   { (JSJitGetterOp)get_style },
    2139             :   { prototypes::id::XULElement },
    2140             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2141             :   JSJitInfo::Getter,
    2142             :   JSJitInfo::AliasNone, /* aliasSet.  Not relevant for setters. */
    2143             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    2144             :   false,  /* isInfallible. False in setters. */
    2145             :   true,  /* isMovable.  Not relevant for setters. */
    2146             :   true, /* isEliminatable.  Not relevant for setters. */
    2147             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2148             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2149             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2150             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2151             : };
    2152             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2153             : static_assert(0 < 1, "There is no slot for us");
    2154             : 
    2155             : static bool
    2156           0 : get_onabort(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    2157             : {
    2158           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnabort());
    2159           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2160           0 :   if (result) {
    2161           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2162           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2163           0 :       return false;
    2164             :     }
    2165           0 :     return true;
    2166             :   } else {
    2167           0 :     args.rval().setNull();
    2168           0 :     return true;
    2169             :   }
    2170             : }
    2171             : 
    2172             : static bool
    2173           0 : set_onabort(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    2174             : {
    2175           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2176           0 :   if (args[0].isObject()) {
    2177             :     { // scope for tempRoot
    2178           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2179           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2180             :     }
    2181             :   } else {
    2182           0 :     arg0 = nullptr;
    2183             :   }
    2184           0 :   self->SetOnabort(Constify(arg0));
    2185           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2186             : 
    2187           0 :   return true;
    2188             : }
    2189             : 
    2190             : static const JSJitInfo onabort_getterinfo = {
    2191             :   { (JSJitGetterOp)get_onabort },
    2192             :   { prototypes::id::XULElement },
    2193             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2194             :   JSJitInfo::Getter,
    2195             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2196             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2197             :   false,  /* isInfallible. False in setters. */
    2198             :   false,  /* isMovable.  Not relevant for setters. */
    2199             :   false, /* isEliminatable.  Not relevant for setters. */
    2200             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2201             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2202             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2203             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2204             : };
    2205             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2206             : static_assert(0 < 1, "There is no slot for us");
    2207             : static const JSJitInfo onabort_setterinfo = {
    2208             :   { (JSJitGetterOp)set_onabort },
    2209             :   { prototypes::id::XULElement },
    2210             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2211             :   JSJitInfo::Setter,
    2212             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2213             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2214             :   false,  /* isInfallible. False in setters. */
    2215             :   false,  /* isMovable.  Not relevant for setters. */
    2216             :   false, /* isEliminatable.  Not relevant for setters. */
    2217             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2218             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2219             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2220             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2221             : };
    2222             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2223             : static_assert(0 < 1, "There is no slot for us");
    2224             : 
    2225             : static bool
    2226           0 : get_onblur(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    2227             : {
    2228           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnblur());
    2229           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2230           0 :   if (result) {
    2231           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2232           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2233           0 :       return false;
    2234             :     }
    2235           0 :     return true;
    2236             :   } else {
    2237           0 :     args.rval().setNull();
    2238           0 :     return true;
    2239             :   }
    2240             : }
    2241             : 
    2242             : static bool
    2243           0 : set_onblur(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    2244             : {
    2245           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2246           0 :   if (args[0].isObject()) {
    2247             :     { // scope for tempRoot
    2248           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2249           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2250             :     }
    2251             :   } else {
    2252           0 :     arg0 = nullptr;
    2253             :   }
    2254           0 :   self->SetOnblur(Constify(arg0));
    2255           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2256             : 
    2257           0 :   return true;
    2258             : }
    2259             : 
    2260             : static const JSJitInfo onblur_getterinfo = {
    2261             :   { (JSJitGetterOp)get_onblur },
    2262             :   { prototypes::id::XULElement },
    2263             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2264             :   JSJitInfo::Getter,
    2265             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2266             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2267             :   false,  /* isInfallible. False in setters. */
    2268             :   false,  /* isMovable.  Not relevant for setters. */
    2269             :   false, /* isEliminatable.  Not relevant for setters. */
    2270             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2271             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2272             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2273             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2274             : };
    2275             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2276             : static_assert(0 < 1, "There is no slot for us");
    2277             : static const JSJitInfo onblur_setterinfo = {
    2278             :   { (JSJitGetterOp)set_onblur },
    2279             :   { prototypes::id::XULElement },
    2280             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2281             :   JSJitInfo::Setter,
    2282             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2283             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2284             :   false,  /* isInfallible. False in setters. */
    2285             :   false,  /* isMovable.  Not relevant for setters. */
    2286             :   false, /* isEliminatable.  Not relevant for setters. */
    2287             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2288             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2289             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2290             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2291             : };
    2292             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2293             : static_assert(0 < 1, "There is no slot for us");
    2294             : 
    2295             : static bool
    2296           0 : get_onfocus(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    2297             : {
    2298           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnfocus());
    2299           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2300           0 :   if (result) {
    2301           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2302           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2303           0 :       return false;
    2304             :     }
    2305           0 :     return true;
    2306             :   } else {
    2307           0 :     args.rval().setNull();
    2308           0 :     return true;
    2309             :   }
    2310             : }
    2311             : 
    2312             : static bool
    2313           0 : set_onfocus(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    2314             : {
    2315           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2316           0 :   if (args[0].isObject()) {
    2317             :     { // scope for tempRoot
    2318           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2319           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2320             :     }
    2321             :   } else {
    2322           0 :     arg0 = nullptr;
    2323             :   }
    2324           0 :   self->SetOnfocus(Constify(arg0));
    2325           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2326             : 
    2327           0 :   return true;
    2328             : }
    2329             : 
    2330             : static const JSJitInfo onfocus_getterinfo = {
    2331             :   { (JSJitGetterOp)get_onfocus },
    2332             :   { prototypes::id::XULElement },
    2333             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2334             :   JSJitInfo::Getter,
    2335             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2336             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2337             :   false,  /* isInfallible. False in setters. */
    2338             :   false,  /* isMovable.  Not relevant for setters. */
    2339             :   false, /* isEliminatable.  Not relevant for setters. */
    2340             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2341             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2342             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2343             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2344             : };
    2345             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2346             : static_assert(0 < 1, "There is no slot for us");
    2347             : static const JSJitInfo onfocus_setterinfo = {
    2348             :   { (JSJitGetterOp)set_onfocus },
    2349             :   { prototypes::id::XULElement },
    2350             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2351             :   JSJitInfo::Setter,
    2352             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2353             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2354             :   false,  /* isInfallible. False in setters. */
    2355             :   false,  /* isMovable.  Not relevant for setters. */
    2356             :   false, /* isEliminatable.  Not relevant for setters. */
    2357             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2358             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2359             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2360             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2361             : };
    2362             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2363             : static_assert(0 < 1, "There is no slot for us");
    2364             : 
    2365             : static bool
    2366           0 : get_onauxclick(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    2367             : {
    2368           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnauxclick());
    2369           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2370           0 :   if (result) {
    2371           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2372           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2373           0 :       return false;
    2374             :     }
    2375           0 :     return true;
    2376             :   } else {
    2377           0 :     args.rval().setNull();
    2378           0 :     return true;
    2379             :   }
    2380             : }
    2381             : 
    2382             : static bool
    2383           0 : set_onauxclick(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    2384             : {
    2385           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2386           0 :   if (args[0].isObject()) {
    2387             :     { // scope for tempRoot
    2388           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2389           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2390             :     }
    2391             :   } else {
    2392           0 :     arg0 = nullptr;
    2393             :   }
    2394           0 :   self->SetOnauxclick(Constify(arg0));
    2395           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2396             : 
    2397           0 :   return true;
    2398             : }
    2399             : 
    2400             : static const JSJitInfo onauxclick_getterinfo = {
    2401             :   { (JSJitGetterOp)get_onauxclick },
    2402             :   { prototypes::id::XULElement },
    2403             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2404             :   JSJitInfo::Getter,
    2405             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2406             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2407             :   false,  /* isInfallible. False in setters. */
    2408             :   false,  /* isMovable.  Not relevant for setters. */
    2409             :   false, /* isEliminatable.  Not relevant for setters. */
    2410             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2411             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2412             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2413             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2414             : };
    2415             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2416             : static_assert(0 < 1, "There is no slot for us");
    2417             : static const JSJitInfo onauxclick_setterinfo = {
    2418             :   { (JSJitGetterOp)set_onauxclick },
    2419             :   { prototypes::id::XULElement },
    2420             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2421             :   JSJitInfo::Setter,
    2422             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2423             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2424             :   false,  /* isInfallible. False in setters. */
    2425             :   false,  /* isMovable.  Not relevant for setters. */
    2426             :   false, /* isEliminatable.  Not relevant for setters. */
    2427             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2428             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2429             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2430             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2431             : };
    2432             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2433             : static_assert(0 < 1, "There is no slot for us");
    2434             : 
    2435             : static bool
    2436           0 : get_oncanplay(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    2437             : {
    2438           0 :   RefPtr<EventHandlerNonNull> result(self->GetOncanplay());
    2439           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2440           0 :   if (result) {
    2441           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2442           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2443           0 :       return false;
    2444             :     }
    2445           0 :     return true;
    2446             :   } else {
    2447           0 :     args.rval().setNull();
    2448           0 :     return true;
    2449             :   }
    2450             : }
    2451             : 
    2452             : static bool
    2453           0 : set_oncanplay(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    2454             : {
    2455           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2456           0 :   if (args[0].isObject()) {
    2457             :     { // scope for tempRoot
    2458           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2459           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2460             :     }
    2461             :   } else {
    2462           0 :     arg0 = nullptr;
    2463             :   }
    2464           0 :   self->SetOncanplay(Constify(arg0));
    2465           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2466             : 
    2467           0 :   return true;
    2468             : }
    2469             : 
    2470             : static const JSJitInfo oncanplay_getterinfo = {
    2471             :   { (JSJitGetterOp)get_oncanplay },
    2472             :   { prototypes::id::XULElement },
    2473             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2474             :   JSJitInfo::Getter,
    2475             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2476             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2477             :   false,  /* isInfallible. False in setters. */
    2478             :   false,  /* isMovable.  Not relevant for setters. */
    2479             :   false, /* isEliminatable.  Not relevant for setters. */
    2480             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2481             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2482             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2483             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2484             : };
    2485             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2486             : static_assert(0 < 1, "There is no slot for us");
    2487             : static const JSJitInfo oncanplay_setterinfo = {
    2488             :   { (JSJitGetterOp)set_oncanplay },
    2489             :   { prototypes::id::XULElement },
    2490             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2491             :   JSJitInfo::Setter,
    2492             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2493             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2494             :   false,  /* isInfallible. False in setters. */
    2495             :   false,  /* isMovable.  Not relevant for setters. */
    2496             :   false, /* isEliminatable.  Not relevant for setters. */
    2497             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2498             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2499             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2500             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2501             : };
    2502             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2503             : static_assert(0 < 1, "There is no slot for us");
    2504             : 
    2505             : static bool
    2506           0 : get_oncanplaythrough(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    2507             : {
    2508           0 :   RefPtr<EventHandlerNonNull> result(self->GetOncanplaythrough());
    2509           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2510           0 :   if (result) {
    2511           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2512           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2513           0 :       return false;
    2514             :     }
    2515           0 :     return true;
    2516             :   } else {
    2517           0 :     args.rval().setNull();
    2518           0 :     return true;
    2519             :   }
    2520             : }
    2521             : 
    2522             : static bool
    2523           0 : set_oncanplaythrough(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    2524             : {
    2525           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2526           0 :   if (args[0].isObject()) {
    2527             :     { // scope for tempRoot
    2528           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2529           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2530             :     }
    2531             :   } else {
    2532           0 :     arg0 = nullptr;
    2533             :   }
    2534           0 :   self->SetOncanplaythrough(Constify(arg0));
    2535           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2536             : 
    2537           0 :   return true;
    2538             : }
    2539             : 
    2540             : static const JSJitInfo oncanplaythrough_getterinfo = {
    2541             :   { (JSJitGetterOp)get_oncanplaythrough },
    2542             :   { prototypes::id::XULElement },
    2543             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2544             :   JSJitInfo::Getter,
    2545             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2546             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2547             :   false,  /* isInfallible. False in setters. */
    2548             :   false,  /* isMovable.  Not relevant for setters. */
    2549             :   false, /* isEliminatable.  Not relevant for setters. */
    2550             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2551             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2552             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2553             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2554             : };
    2555             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2556             : static_assert(0 < 1, "There is no slot for us");
    2557             : static const JSJitInfo oncanplaythrough_setterinfo = {
    2558             :   { (JSJitGetterOp)set_oncanplaythrough },
    2559             :   { prototypes::id::XULElement },
    2560             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2561             :   JSJitInfo::Setter,
    2562             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2563             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2564             :   false,  /* isInfallible. False in setters. */
    2565             :   false,  /* isMovable.  Not relevant for setters. */
    2566             :   false, /* isEliminatable.  Not relevant for setters. */
    2567             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2568             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2569             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2570             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2571             : };
    2572             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2573             : static_assert(0 < 1, "There is no slot for us");
    2574             : 
    2575             : static bool
    2576           0 : get_onchange(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    2577             : {
    2578           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnchange());
    2579           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2580           0 :   if (result) {
    2581           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2582           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2583           0 :       return false;
    2584             :     }
    2585           0 :     return true;
    2586             :   } else {
    2587           0 :     args.rval().setNull();
    2588           0 :     return true;
    2589             :   }
    2590             : }
    2591             : 
    2592             : static bool
    2593           0 : set_onchange(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    2594             : {
    2595           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2596           0 :   if (args[0].isObject()) {
    2597             :     { // scope for tempRoot
    2598           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2599           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2600             :     }
    2601             :   } else {
    2602           0 :     arg0 = nullptr;
    2603             :   }
    2604           0 :   self->SetOnchange(Constify(arg0));
    2605           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2606             : 
    2607           0 :   return true;
    2608             : }
    2609             : 
    2610             : static const JSJitInfo onchange_getterinfo = {
    2611             :   { (JSJitGetterOp)get_onchange },
    2612             :   { prototypes::id::XULElement },
    2613             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2614             :   JSJitInfo::Getter,
    2615             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2616             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2617             :   false,  /* isInfallible. False in setters. */
    2618             :   false,  /* isMovable.  Not relevant for setters. */
    2619             :   false, /* isEliminatable.  Not relevant for setters. */
    2620             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2621             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2622             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2623             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2624             : };
    2625             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2626             : static_assert(0 < 1, "There is no slot for us");
    2627             : static const JSJitInfo onchange_setterinfo = {
    2628             :   { (JSJitGetterOp)set_onchange },
    2629             :   { prototypes::id::XULElement },
    2630             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2631             :   JSJitInfo::Setter,
    2632             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2633             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2634             :   false,  /* isInfallible. False in setters. */
    2635             :   false,  /* isMovable.  Not relevant for setters. */
    2636             :   false, /* isEliminatable.  Not relevant for setters. */
    2637             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2638             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2639             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2640             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2641             : };
    2642             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2643             : static_assert(0 < 1, "There is no slot for us");
    2644             : 
    2645             : static bool
    2646           0 : get_onclick(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    2647             : {
    2648           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnclick());
    2649           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2650           0 :   if (result) {
    2651           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2652           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2653           0 :       return false;
    2654             :     }
    2655           0 :     return true;
    2656             :   } else {
    2657           0 :     args.rval().setNull();
    2658           0 :     return true;
    2659             :   }
    2660             : }
    2661             : 
    2662             : static bool
    2663           0 : set_onclick(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    2664             : {
    2665           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2666           0 :   if (args[0].isObject()) {
    2667             :     { // scope for tempRoot
    2668           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2669           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2670             :     }
    2671             :   } else {
    2672           0 :     arg0 = nullptr;
    2673             :   }
    2674           0 :   self->SetOnclick(Constify(arg0));
    2675           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2676             : 
    2677           0 :   return true;
    2678             : }
    2679             : 
    2680             : static const JSJitInfo onclick_getterinfo = {
    2681             :   { (JSJitGetterOp)get_onclick },
    2682             :   { prototypes::id::XULElement },
    2683             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2684             :   JSJitInfo::Getter,
    2685             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2686             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2687             :   false,  /* isInfallible. False in setters. */
    2688             :   false,  /* isMovable.  Not relevant for setters. */
    2689             :   false, /* isEliminatable.  Not relevant for setters. */
    2690             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2691             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2692             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2693             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2694             : };
    2695             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2696             : static_assert(0 < 1, "There is no slot for us");
    2697             : static const JSJitInfo onclick_setterinfo = {
    2698             :   { (JSJitGetterOp)set_onclick },
    2699             :   { prototypes::id::XULElement },
    2700             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2701             :   JSJitInfo::Setter,
    2702             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2703             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2704             :   false,  /* isInfallible. False in setters. */
    2705             :   false,  /* isMovable.  Not relevant for setters. */
    2706             :   false, /* isEliminatable.  Not relevant for setters. */
    2707             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2708             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2709             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2710             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2711             : };
    2712             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2713             : static_assert(0 < 1, "There is no slot for us");
    2714             : 
    2715             : static bool
    2716           0 : get_onclose(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    2717             : {
    2718           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnclose());
    2719           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2720           0 :   if (result) {
    2721           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2722           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2723           0 :       return false;
    2724             :     }
    2725           0 :     return true;
    2726             :   } else {
    2727           0 :     args.rval().setNull();
    2728           0 :     return true;
    2729             :   }
    2730             : }
    2731             : 
    2732             : static bool
    2733           0 : set_onclose(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    2734             : {
    2735           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2736           0 :   if (args[0].isObject()) {
    2737             :     { // scope for tempRoot
    2738           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2739           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2740             :     }
    2741             :   } else {
    2742           0 :     arg0 = nullptr;
    2743             :   }
    2744           0 :   self->SetOnclose(Constify(arg0));
    2745           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2746             : 
    2747           0 :   return true;
    2748             : }
    2749             : 
    2750             : static const JSJitInfo onclose_getterinfo = {
    2751             :   { (JSJitGetterOp)get_onclose },
    2752             :   { prototypes::id::XULElement },
    2753             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2754             :   JSJitInfo::Getter,
    2755             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2756             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2757             :   false,  /* isInfallible. False in setters. */
    2758             :   false,  /* isMovable.  Not relevant for setters. */
    2759             :   false, /* isEliminatable.  Not relevant for setters. */
    2760             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2761             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2762             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2763             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2764             : };
    2765             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2766             : static_assert(0 < 1, "There is no slot for us");
    2767             : static const JSJitInfo onclose_setterinfo = {
    2768             :   { (JSJitGetterOp)set_onclose },
    2769             :   { prototypes::id::XULElement },
    2770             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2771             :   JSJitInfo::Setter,
    2772             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2773             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2774             :   false,  /* isInfallible. False in setters. */
    2775             :   false,  /* isMovable.  Not relevant for setters. */
    2776             :   false, /* isEliminatable.  Not relevant for setters. */
    2777             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2778             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2779             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2780             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2781             : };
    2782             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2783             : static_assert(0 < 1, "There is no slot for us");
    2784             : 
    2785             : static bool
    2786           0 : get_oncontextmenu(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    2787             : {
    2788           0 :   RefPtr<EventHandlerNonNull> result(self->GetOncontextmenu());
    2789           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2790           0 :   if (result) {
    2791           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2792           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2793           0 :       return false;
    2794             :     }
    2795           0 :     return true;
    2796             :   } else {
    2797           0 :     args.rval().setNull();
    2798           0 :     return true;
    2799             :   }
    2800             : }
    2801             : 
    2802             : static bool
    2803           0 : set_oncontextmenu(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    2804             : {
    2805           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2806           0 :   if (args[0].isObject()) {
    2807             :     { // scope for tempRoot
    2808           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2809           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2810             :     }
    2811             :   } else {
    2812           0 :     arg0 = nullptr;
    2813             :   }
    2814           0 :   self->SetOncontextmenu(Constify(arg0));
    2815           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2816             : 
    2817           0 :   return true;
    2818             : }
    2819             : 
    2820             : static const JSJitInfo oncontextmenu_getterinfo = {
    2821             :   { (JSJitGetterOp)get_oncontextmenu },
    2822             :   { prototypes::id::XULElement },
    2823             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2824             :   JSJitInfo::Getter,
    2825             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2826             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2827             :   false,  /* isInfallible. False in setters. */
    2828             :   false,  /* isMovable.  Not relevant for setters. */
    2829             :   false, /* isEliminatable.  Not relevant for setters. */
    2830             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2831             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2832             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2833             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2834             : };
    2835             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2836             : static_assert(0 < 1, "There is no slot for us");
    2837             : static const JSJitInfo oncontextmenu_setterinfo = {
    2838             :   { (JSJitGetterOp)set_oncontextmenu },
    2839             :   { prototypes::id::XULElement },
    2840             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2841             :   JSJitInfo::Setter,
    2842             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2843             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2844             :   false,  /* isInfallible. False in setters. */
    2845             :   false,  /* isMovable.  Not relevant for setters. */
    2846             :   false, /* isEliminatable.  Not relevant for setters. */
    2847             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2848             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2849             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2850             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2851             : };
    2852             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2853             : static_assert(0 < 1, "There is no slot for us");
    2854             : 
    2855             : static bool
    2856           0 : get_ondblclick(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    2857             : {
    2858           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndblclick());
    2859           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2860           0 :   if (result) {
    2861           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2862           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2863           0 :       return false;
    2864             :     }
    2865           0 :     return true;
    2866             :   } else {
    2867           0 :     args.rval().setNull();
    2868           0 :     return true;
    2869             :   }
    2870             : }
    2871             : 
    2872             : static bool
    2873           0 : set_ondblclick(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    2874             : {
    2875           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2876           0 :   if (args[0].isObject()) {
    2877             :     { // scope for tempRoot
    2878           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2879           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2880             :     }
    2881             :   } else {
    2882           0 :     arg0 = nullptr;
    2883             :   }
    2884           0 :   self->SetOndblclick(Constify(arg0));
    2885           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2886             : 
    2887           0 :   return true;
    2888             : }
    2889             : 
    2890             : static const JSJitInfo ondblclick_getterinfo = {
    2891             :   { (JSJitGetterOp)get_ondblclick },
    2892             :   { prototypes::id::XULElement },
    2893             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2894             :   JSJitInfo::Getter,
    2895             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2896             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2897             :   false,  /* isInfallible. False in setters. */
    2898             :   false,  /* isMovable.  Not relevant for setters. */
    2899             :   false, /* isEliminatable.  Not relevant for setters. */
    2900             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2901             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2902             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2903             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2904             : };
    2905             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2906             : static_assert(0 < 1, "There is no slot for us");
    2907             : static const JSJitInfo ondblclick_setterinfo = {
    2908             :   { (JSJitGetterOp)set_ondblclick },
    2909             :   { prototypes::id::XULElement },
    2910             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2911             :   JSJitInfo::Setter,
    2912             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2913             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2914             :   false,  /* isInfallible. False in setters. */
    2915             :   false,  /* isMovable.  Not relevant for setters. */
    2916             :   false, /* isEliminatable.  Not relevant for setters. */
    2917             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2918             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2919             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2920             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2921             : };
    2922             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2923             : static_assert(0 < 1, "There is no slot for us");
    2924             : 
    2925             : static bool
    2926           0 : get_ondrag(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    2927             : {
    2928           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndrag());
    2929           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2930           0 :   if (result) {
    2931           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    2932           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    2933           0 :       return false;
    2934             :     }
    2935           0 :     return true;
    2936             :   } else {
    2937           0 :     args.rval().setNull();
    2938           0 :     return true;
    2939             :   }
    2940             : }
    2941             : 
    2942             : static bool
    2943           0 : set_ondrag(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    2944             : {
    2945           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    2946           0 :   if (args[0].isObject()) {
    2947             :     { // scope for tempRoot
    2948           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    2949           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    2950             :     }
    2951             :   } else {
    2952           0 :     arg0 = nullptr;
    2953             :   }
    2954           0 :   self->SetOndrag(Constify(arg0));
    2955           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2956             : 
    2957           0 :   return true;
    2958             : }
    2959             : 
    2960             : static const JSJitInfo ondrag_getterinfo = {
    2961             :   { (JSJitGetterOp)get_ondrag },
    2962             :   { prototypes::id::XULElement },
    2963             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2964             :   JSJitInfo::Getter,
    2965             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2966             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2967             :   false,  /* isInfallible. False in setters. */
    2968             :   false,  /* isMovable.  Not relevant for setters. */
    2969             :   false, /* isEliminatable.  Not relevant for setters. */
    2970             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2971             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2972             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2973             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2974             : };
    2975             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2976             : static_assert(0 < 1, "There is no slot for us");
    2977             : static const JSJitInfo ondrag_setterinfo = {
    2978             :   { (JSJitGetterOp)set_ondrag },
    2979             :   { prototypes::id::XULElement },
    2980             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    2981             :   JSJitInfo::Setter,
    2982             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2983             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2984             :   false,  /* isInfallible. False in setters. */
    2985             :   false,  /* isMovable.  Not relevant for setters. */
    2986             :   false, /* isEliminatable.  Not relevant for setters. */
    2987             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2988             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2989             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2990             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2991             : };
    2992             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2993             : static_assert(0 < 1, "There is no slot for us");
    2994             : 
    2995             : static bool
    2996           0 : get_ondragend(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    2997             : {
    2998           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragend());
    2999           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3000           0 :   if (result) {
    3001           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3002           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3003           0 :       return false;
    3004             :     }
    3005           0 :     return true;
    3006             :   } else {
    3007           0 :     args.rval().setNull();
    3008           0 :     return true;
    3009             :   }
    3010             : }
    3011             : 
    3012             : static bool
    3013           0 : set_ondragend(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    3014             : {
    3015           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3016           0 :   if (args[0].isObject()) {
    3017             :     { // scope for tempRoot
    3018           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3019           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3020             :     }
    3021             :   } else {
    3022           0 :     arg0 = nullptr;
    3023             :   }
    3024           0 :   self->SetOndragend(Constify(arg0));
    3025           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3026             : 
    3027           0 :   return true;
    3028             : }
    3029             : 
    3030             : static const JSJitInfo ondragend_getterinfo = {
    3031             :   { (JSJitGetterOp)get_ondragend },
    3032             :   { prototypes::id::XULElement },
    3033             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3034             :   JSJitInfo::Getter,
    3035             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3036             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3037             :   false,  /* isInfallible. False in setters. */
    3038             :   false,  /* isMovable.  Not relevant for setters. */
    3039             :   false, /* isEliminatable.  Not relevant for setters. */
    3040             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3041             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3042             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3043             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3044             : };
    3045             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3046             : static_assert(0 < 1, "There is no slot for us");
    3047             : static const JSJitInfo ondragend_setterinfo = {
    3048             :   { (JSJitGetterOp)set_ondragend },
    3049             :   { prototypes::id::XULElement },
    3050             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3051             :   JSJitInfo::Setter,
    3052             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3053             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3054             :   false,  /* isInfallible. False in setters. */
    3055             :   false,  /* isMovable.  Not relevant for setters. */
    3056             :   false, /* isEliminatable.  Not relevant for setters. */
    3057             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3058             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3059             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3060             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3061             : };
    3062             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3063             : static_assert(0 < 1, "There is no slot for us");
    3064             : 
    3065             : static bool
    3066           0 : get_ondragenter(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    3067             : {
    3068           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragenter());
    3069           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3070           0 :   if (result) {
    3071           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3072           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3073           0 :       return false;
    3074             :     }
    3075           0 :     return true;
    3076             :   } else {
    3077           0 :     args.rval().setNull();
    3078           0 :     return true;
    3079             :   }
    3080             : }
    3081             : 
    3082             : static bool
    3083           0 : set_ondragenter(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    3084             : {
    3085           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3086           0 :   if (args[0].isObject()) {
    3087             :     { // scope for tempRoot
    3088           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3089           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3090             :     }
    3091             :   } else {
    3092           0 :     arg0 = nullptr;
    3093             :   }
    3094           0 :   self->SetOndragenter(Constify(arg0));
    3095           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3096             : 
    3097           0 :   return true;
    3098             : }
    3099             : 
    3100             : static const JSJitInfo ondragenter_getterinfo = {
    3101             :   { (JSJitGetterOp)get_ondragenter },
    3102             :   { prototypes::id::XULElement },
    3103             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3104             :   JSJitInfo::Getter,
    3105             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3106             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3107             :   false,  /* isInfallible. False in setters. */
    3108             :   false,  /* isMovable.  Not relevant for setters. */
    3109             :   false, /* isEliminatable.  Not relevant for setters. */
    3110             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3111             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3112             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3113             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3114             : };
    3115             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3116             : static_assert(0 < 1, "There is no slot for us");
    3117             : static const JSJitInfo ondragenter_setterinfo = {
    3118             :   { (JSJitGetterOp)set_ondragenter },
    3119             :   { prototypes::id::XULElement },
    3120             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3121             :   JSJitInfo::Setter,
    3122             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3123             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3124             :   false,  /* isInfallible. False in setters. */
    3125             :   false,  /* isMovable.  Not relevant for setters. */
    3126             :   false, /* isEliminatable.  Not relevant for setters. */
    3127             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3128             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3129             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3130             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3131             : };
    3132             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3133             : static_assert(0 < 1, "There is no slot for us");
    3134             : 
    3135             : static bool
    3136           0 : get_ondragexit(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    3137             : {
    3138           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragexit());
    3139           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3140           0 :   if (result) {
    3141           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3142           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3143           0 :       return false;
    3144             :     }
    3145           0 :     return true;
    3146             :   } else {
    3147           0 :     args.rval().setNull();
    3148           0 :     return true;
    3149             :   }
    3150             : }
    3151             : 
    3152             : static bool
    3153           0 : set_ondragexit(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    3154             : {
    3155           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3156           0 :   if (args[0].isObject()) {
    3157             :     { // scope for tempRoot
    3158           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3159           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3160             :     }
    3161             :   } else {
    3162           0 :     arg0 = nullptr;
    3163             :   }
    3164           0 :   self->SetOndragexit(Constify(arg0));
    3165           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3166             : 
    3167           0 :   return true;
    3168             : }
    3169             : 
    3170             : static const JSJitInfo ondragexit_getterinfo = {
    3171             :   { (JSJitGetterOp)get_ondragexit },
    3172             :   { prototypes::id::XULElement },
    3173             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3174             :   JSJitInfo::Getter,
    3175             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3176             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3177             :   false,  /* isInfallible. False in setters. */
    3178             :   false,  /* isMovable.  Not relevant for setters. */
    3179             :   false, /* isEliminatable.  Not relevant for setters. */
    3180             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3181             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3182             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3183             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3184             : };
    3185             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3186             : static_assert(0 < 1, "There is no slot for us");
    3187             : static const JSJitInfo ondragexit_setterinfo = {
    3188             :   { (JSJitGetterOp)set_ondragexit },
    3189             :   { prototypes::id::XULElement },
    3190             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3191             :   JSJitInfo::Setter,
    3192             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3193             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3194             :   false,  /* isInfallible. False in setters. */
    3195             :   false,  /* isMovable.  Not relevant for setters. */
    3196             :   false, /* isEliminatable.  Not relevant for setters. */
    3197             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3198             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3199             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3200             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3201             : };
    3202             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3203             : static_assert(0 < 1, "There is no slot for us");
    3204             : 
    3205             : static bool
    3206           0 : get_ondragleave(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    3207             : {
    3208           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragleave());
    3209           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3210           0 :   if (result) {
    3211           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3212           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3213           0 :       return false;
    3214             :     }
    3215           0 :     return true;
    3216             :   } else {
    3217           0 :     args.rval().setNull();
    3218           0 :     return true;
    3219             :   }
    3220             : }
    3221             : 
    3222             : static bool
    3223           0 : set_ondragleave(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    3224             : {
    3225           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3226           0 :   if (args[0].isObject()) {
    3227             :     { // scope for tempRoot
    3228           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3229           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3230             :     }
    3231             :   } else {
    3232           0 :     arg0 = nullptr;
    3233             :   }
    3234           0 :   self->SetOndragleave(Constify(arg0));
    3235           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3236             : 
    3237           0 :   return true;
    3238             : }
    3239             : 
    3240             : static const JSJitInfo ondragleave_getterinfo = {
    3241             :   { (JSJitGetterOp)get_ondragleave },
    3242             :   { prototypes::id::XULElement },
    3243             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3244             :   JSJitInfo::Getter,
    3245             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3246             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3247             :   false,  /* isInfallible. False in setters. */
    3248             :   false,  /* isMovable.  Not relevant for setters. */
    3249             :   false, /* isEliminatable.  Not relevant for setters. */
    3250             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3251             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3252             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3253             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3254             : };
    3255             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3256             : static_assert(0 < 1, "There is no slot for us");
    3257             : static const JSJitInfo ondragleave_setterinfo = {
    3258             :   { (JSJitGetterOp)set_ondragleave },
    3259             :   { prototypes::id::XULElement },
    3260             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3261             :   JSJitInfo::Setter,
    3262             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3263             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3264             :   false,  /* isInfallible. False in setters. */
    3265             :   false,  /* isMovable.  Not relevant for setters. */
    3266             :   false, /* isEliminatable.  Not relevant for setters. */
    3267             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3268             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3269             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3270             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3271             : };
    3272             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3273             : static_assert(0 < 1, "There is no slot for us");
    3274             : 
    3275             : static bool
    3276           0 : get_ondragover(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    3277             : {
    3278           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragover());
    3279           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3280           0 :   if (result) {
    3281           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3282           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3283           0 :       return false;
    3284             :     }
    3285           0 :     return true;
    3286             :   } else {
    3287           0 :     args.rval().setNull();
    3288           0 :     return true;
    3289             :   }
    3290             : }
    3291             : 
    3292             : static bool
    3293           0 : set_ondragover(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    3294             : {
    3295           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3296           0 :   if (args[0].isObject()) {
    3297             :     { // scope for tempRoot
    3298           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3299           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3300             :     }
    3301             :   } else {
    3302           0 :     arg0 = nullptr;
    3303             :   }
    3304           0 :   self->SetOndragover(Constify(arg0));
    3305           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3306             : 
    3307           0 :   return true;
    3308             : }
    3309             : 
    3310             : static const JSJitInfo ondragover_getterinfo = {
    3311             :   { (JSJitGetterOp)get_ondragover },
    3312             :   { prototypes::id::XULElement },
    3313             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3314             :   JSJitInfo::Getter,
    3315             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3316             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3317             :   false,  /* isInfallible. False in setters. */
    3318             :   false,  /* isMovable.  Not relevant for setters. */
    3319             :   false, /* isEliminatable.  Not relevant for setters. */
    3320             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3321             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3322             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3323             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3324             : };
    3325             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3326             : static_assert(0 < 1, "There is no slot for us");
    3327             : static const JSJitInfo ondragover_setterinfo = {
    3328             :   { (JSJitGetterOp)set_ondragover },
    3329             :   { prototypes::id::XULElement },
    3330             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3331             :   JSJitInfo::Setter,
    3332             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3333             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3334             :   false,  /* isInfallible. False in setters. */
    3335             :   false,  /* isMovable.  Not relevant for setters. */
    3336             :   false, /* isEliminatable.  Not relevant for setters. */
    3337             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3338             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3339             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3340             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3341             : };
    3342             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3343             : static_assert(0 < 1, "There is no slot for us");
    3344             : 
    3345             : static bool
    3346           0 : get_ondragstart(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    3347             : {
    3348           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndragstart());
    3349           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3350           0 :   if (result) {
    3351           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3352           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3353           0 :       return false;
    3354             :     }
    3355           0 :     return true;
    3356             :   } else {
    3357           0 :     args.rval().setNull();
    3358           0 :     return true;
    3359             :   }
    3360             : }
    3361             : 
    3362             : static bool
    3363           0 : set_ondragstart(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    3364             : {
    3365           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3366           0 :   if (args[0].isObject()) {
    3367             :     { // scope for tempRoot
    3368           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3369           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3370             :     }
    3371             :   } else {
    3372           0 :     arg0 = nullptr;
    3373             :   }
    3374           0 :   self->SetOndragstart(Constify(arg0));
    3375           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3376             : 
    3377           0 :   return true;
    3378             : }
    3379             : 
    3380             : static const JSJitInfo ondragstart_getterinfo = {
    3381             :   { (JSJitGetterOp)get_ondragstart },
    3382             :   { prototypes::id::XULElement },
    3383             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3384             :   JSJitInfo::Getter,
    3385             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3386             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3387             :   false,  /* isInfallible. False in setters. */
    3388             :   false,  /* isMovable.  Not relevant for setters. */
    3389             :   false, /* isEliminatable.  Not relevant for setters. */
    3390             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3391             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3392             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3393             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3394             : };
    3395             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3396             : static_assert(0 < 1, "There is no slot for us");
    3397             : static const JSJitInfo ondragstart_setterinfo = {
    3398             :   { (JSJitGetterOp)set_ondragstart },
    3399             :   { prototypes::id::XULElement },
    3400             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3401             :   JSJitInfo::Setter,
    3402             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3403             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3404             :   false,  /* isInfallible. False in setters. */
    3405             :   false,  /* isMovable.  Not relevant for setters. */
    3406             :   false, /* isEliminatable.  Not relevant for setters. */
    3407             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3408             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3409             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3410             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3411             : };
    3412             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3413             : static_assert(0 < 1, "There is no slot for us");
    3414             : 
    3415             : static bool
    3416           0 : get_ondrop(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    3417             : {
    3418           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndrop());
    3419           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3420           0 :   if (result) {
    3421           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3422           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3423           0 :       return false;
    3424             :     }
    3425           0 :     return true;
    3426             :   } else {
    3427           0 :     args.rval().setNull();
    3428           0 :     return true;
    3429             :   }
    3430             : }
    3431             : 
    3432             : static bool
    3433           0 : set_ondrop(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    3434             : {
    3435           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3436           0 :   if (args[0].isObject()) {
    3437             :     { // scope for tempRoot
    3438           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3439           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3440             :     }
    3441             :   } else {
    3442           0 :     arg0 = nullptr;
    3443             :   }
    3444           0 :   self->SetOndrop(Constify(arg0));
    3445           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3446             : 
    3447           0 :   return true;
    3448             : }
    3449             : 
    3450             : static const JSJitInfo ondrop_getterinfo = {
    3451             :   { (JSJitGetterOp)get_ondrop },
    3452             :   { prototypes::id::XULElement },
    3453             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3454             :   JSJitInfo::Getter,
    3455             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3456             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3457             :   false,  /* isInfallible. False in setters. */
    3458             :   false,  /* isMovable.  Not relevant for setters. */
    3459             :   false, /* isEliminatable.  Not relevant for setters. */
    3460             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3461             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3462             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3463             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3464             : };
    3465             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3466             : static_assert(0 < 1, "There is no slot for us");
    3467             : static const JSJitInfo ondrop_setterinfo = {
    3468             :   { (JSJitGetterOp)set_ondrop },
    3469             :   { prototypes::id::XULElement },
    3470             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3471             :   JSJitInfo::Setter,
    3472             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3473             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3474             :   false,  /* isInfallible. False in setters. */
    3475             :   false,  /* isMovable.  Not relevant for setters. */
    3476             :   false, /* isEliminatable.  Not relevant for setters. */
    3477             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3478             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3479             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3480             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3481             : };
    3482             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3483             : static_assert(0 < 1, "There is no slot for us");
    3484             : 
    3485             : static bool
    3486           0 : get_ondurationchange(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    3487             : {
    3488           0 :   RefPtr<EventHandlerNonNull> result(self->GetOndurationchange());
    3489           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3490           0 :   if (result) {
    3491           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3492           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3493           0 :       return false;
    3494             :     }
    3495           0 :     return true;
    3496             :   } else {
    3497           0 :     args.rval().setNull();
    3498           0 :     return true;
    3499             :   }
    3500             : }
    3501             : 
    3502             : static bool
    3503           0 : set_ondurationchange(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    3504             : {
    3505           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3506           0 :   if (args[0].isObject()) {
    3507             :     { // scope for tempRoot
    3508           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3509           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3510             :     }
    3511             :   } else {
    3512           0 :     arg0 = nullptr;
    3513             :   }
    3514           0 :   self->SetOndurationchange(Constify(arg0));
    3515           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3516             : 
    3517           0 :   return true;
    3518             : }
    3519             : 
    3520             : static const JSJitInfo ondurationchange_getterinfo = {
    3521             :   { (JSJitGetterOp)get_ondurationchange },
    3522             :   { prototypes::id::XULElement },
    3523             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3524             :   JSJitInfo::Getter,
    3525             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3526             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3527             :   false,  /* isInfallible. False in setters. */
    3528             :   false,  /* isMovable.  Not relevant for setters. */
    3529             :   false, /* isEliminatable.  Not relevant for setters. */
    3530             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3531             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3532             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3533             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3534             : };
    3535             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3536             : static_assert(0 < 1, "There is no slot for us");
    3537             : static const JSJitInfo ondurationchange_setterinfo = {
    3538             :   { (JSJitGetterOp)set_ondurationchange },
    3539             :   { prototypes::id::XULElement },
    3540             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3541             :   JSJitInfo::Setter,
    3542             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3543             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3544             :   false,  /* isInfallible. False in setters. */
    3545             :   false,  /* isMovable.  Not relevant for setters. */
    3546             :   false, /* isEliminatable.  Not relevant for setters. */
    3547             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3548             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3549             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3550             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3551             : };
    3552             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3553             : static_assert(0 < 1, "There is no slot for us");
    3554             : 
    3555             : static bool
    3556           0 : get_onemptied(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    3557             : {
    3558           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnemptied());
    3559           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3560           0 :   if (result) {
    3561           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3562           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3563           0 :       return false;
    3564             :     }
    3565           0 :     return true;
    3566             :   } else {
    3567           0 :     args.rval().setNull();
    3568           0 :     return true;
    3569             :   }
    3570             : }
    3571             : 
    3572             : static bool
    3573           0 : set_onemptied(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    3574             : {
    3575           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3576           0 :   if (args[0].isObject()) {
    3577             :     { // scope for tempRoot
    3578           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3579           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3580             :     }
    3581             :   } else {
    3582           0 :     arg0 = nullptr;
    3583             :   }
    3584           0 :   self->SetOnemptied(Constify(arg0));
    3585           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3586             : 
    3587           0 :   return true;
    3588             : }
    3589             : 
    3590             : static const JSJitInfo onemptied_getterinfo = {
    3591             :   { (JSJitGetterOp)get_onemptied },
    3592             :   { prototypes::id::XULElement },
    3593             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3594             :   JSJitInfo::Getter,
    3595             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3596             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3597             :   false,  /* isInfallible. False in setters. */
    3598             :   false,  /* isMovable.  Not relevant for setters. */
    3599             :   false, /* isEliminatable.  Not relevant for setters. */
    3600             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3601             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3602             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3603             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3604             : };
    3605             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3606             : static_assert(0 < 1, "There is no slot for us");
    3607             : static const JSJitInfo onemptied_setterinfo = {
    3608             :   { (JSJitGetterOp)set_onemptied },
    3609             :   { prototypes::id::XULElement },
    3610             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3611             :   JSJitInfo::Setter,
    3612             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3613             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3614             :   false,  /* isInfallible. False in setters. */
    3615             :   false,  /* isMovable.  Not relevant for setters. */
    3616             :   false, /* isEliminatable.  Not relevant for setters. */
    3617             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3618             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3619             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3620             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3621             : };
    3622             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3623             : static_assert(0 < 1, "There is no slot for us");
    3624             : 
    3625             : static bool
    3626           0 : get_onended(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    3627             : {
    3628           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnended());
    3629           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3630           0 :   if (result) {
    3631           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3632           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3633           0 :       return false;
    3634             :     }
    3635           0 :     return true;
    3636             :   } else {
    3637           0 :     args.rval().setNull();
    3638           0 :     return true;
    3639             :   }
    3640             : }
    3641             : 
    3642             : static bool
    3643           0 : set_onended(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    3644             : {
    3645           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3646           0 :   if (args[0].isObject()) {
    3647             :     { // scope for tempRoot
    3648           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3649           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3650             :     }
    3651             :   } else {
    3652           0 :     arg0 = nullptr;
    3653             :   }
    3654           0 :   self->SetOnended(Constify(arg0));
    3655           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3656             : 
    3657           0 :   return true;
    3658             : }
    3659             : 
    3660             : static const JSJitInfo onended_getterinfo = {
    3661             :   { (JSJitGetterOp)get_onended },
    3662             :   { prototypes::id::XULElement },
    3663             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3664             :   JSJitInfo::Getter,
    3665             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3666             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3667             :   false,  /* isInfallible. False in setters. */
    3668             :   false,  /* isMovable.  Not relevant for setters. */
    3669             :   false, /* isEliminatable.  Not relevant for setters. */
    3670             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3671             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3672             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3673             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3674             : };
    3675             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3676             : static_assert(0 < 1, "There is no slot for us");
    3677             : static const JSJitInfo onended_setterinfo = {
    3678             :   { (JSJitGetterOp)set_onended },
    3679             :   { prototypes::id::XULElement },
    3680             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3681             :   JSJitInfo::Setter,
    3682             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3683             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3684             :   false,  /* isInfallible. False in setters. */
    3685             :   false,  /* isMovable.  Not relevant for setters. */
    3686             :   false, /* isEliminatable.  Not relevant for setters. */
    3687             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3688             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3689             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3690             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3691             : };
    3692             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3693             : static_assert(0 < 1, "There is no slot for us");
    3694             : 
    3695             : static bool
    3696           0 : get_oninput(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    3697             : {
    3698           0 :   RefPtr<EventHandlerNonNull> result(self->GetOninput());
    3699           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3700           0 :   if (result) {
    3701           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3702           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3703           0 :       return false;
    3704             :     }
    3705           0 :     return true;
    3706             :   } else {
    3707           0 :     args.rval().setNull();
    3708           0 :     return true;
    3709             :   }
    3710             : }
    3711             : 
    3712             : static bool
    3713           0 : set_oninput(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    3714             : {
    3715           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3716           0 :   if (args[0].isObject()) {
    3717             :     { // scope for tempRoot
    3718           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3719           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3720             :     }
    3721             :   } else {
    3722           0 :     arg0 = nullptr;
    3723             :   }
    3724           0 :   self->SetOninput(Constify(arg0));
    3725           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3726             : 
    3727           0 :   return true;
    3728             : }
    3729             : 
    3730             : static const JSJitInfo oninput_getterinfo = {
    3731             :   { (JSJitGetterOp)get_oninput },
    3732             :   { prototypes::id::XULElement },
    3733             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3734             :   JSJitInfo::Getter,
    3735             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3736             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3737             :   false,  /* isInfallible. False in setters. */
    3738             :   false,  /* isMovable.  Not relevant for setters. */
    3739             :   false, /* isEliminatable.  Not relevant for setters. */
    3740             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3741             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3742             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3743             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3744             : };
    3745             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3746             : static_assert(0 < 1, "There is no slot for us");
    3747             : static const JSJitInfo oninput_setterinfo = {
    3748             :   { (JSJitGetterOp)set_oninput },
    3749             :   { prototypes::id::XULElement },
    3750             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3751             :   JSJitInfo::Setter,
    3752             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3753             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3754             :   false,  /* isInfallible. False in setters. */
    3755             :   false,  /* isMovable.  Not relevant for setters. */
    3756             :   false, /* isEliminatable.  Not relevant for setters. */
    3757             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3758             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3759             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3760             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3761             : };
    3762             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3763             : static_assert(0 < 1, "There is no slot for us");
    3764             : 
    3765             : static bool
    3766           0 : get_oninvalid(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    3767             : {
    3768           0 :   RefPtr<EventHandlerNonNull> result(self->GetOninvalid());
    3769           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3770           0 :   if (result) {
    3771           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3772           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3773           0 :       return false;
    3774             :     }
    3775           0 :     return true;
    3776             :   } else {
    3777           0 :     args.rval().setNull();
    3778           0 :     return true;
    3779             :   }
    3780             : }
    3781             : 
    3782             : static bool
    3783           0 : set_oninvalid(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    3784             : {
    3785           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3786           0 :   if (args[0].isObject()) {
    3787             :     { // scope for tempRoot
    3788           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3789           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3790             :     }
    3791             :   } else {
    3792           0 :     arg0 = nullptr;
    3793             :   }
    3794           0 :   self->SetOninvalid(Constify(arg0));
    3795           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3796             : 
    3797           0 :   return true;
    3798             : }
    3799             : 
    3800             : static const JSJitInfo oninvalid_getterinfo = {
    3801             :   { (JSJitGetterOp)get_oninvalid },
    3802             :   { prototypes::id::XULElement },
    3803             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3804             :   JSJitInfo::Getter,
    3805             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3806             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3807             :   false,  /* isInfallible. False in setters. */
    3808             :   false,  /* isMovable.  Not relevant for setters. */
    3809             :   false, /* isEliminatable.  Not relevant for setters. */
    3810             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3811             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3812             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3813             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3814             : };
    3815             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3816             : static_assert(0 < 1, "There is no slot for us");
    3817             : static const JSJitInfo oninvalid_setterinfo = {
    3818             :   { (JSJitGetterOp)set_oninvalid },
    3819             :   { prototypes::id::XULElement },
    3820             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3821             :   JSJitInfo::Setter,
    3822             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3823             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3824             :   false,  /* isInfallible. False in setters. */
    3825             :   false,  /* isMovable.  Not relevant for setters. */
    3826             :   false, /* isEliminatable.  Not relevant for setters. */
    3827             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3828             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3829             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3830             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3831             : };
    3832             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3833             : static_assert(0 < 1, "There is no slot for us");
    3834             : 
    3835             : static bool
    3836           0 : get_onkeydown(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    3837             : {
    3838           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnkeydown());
    3839           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3840           0 :   if (result) {
    3841           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3842           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3843           0 :       return false;
    3844             :     }
    3845           0 :     return true;
    3846             :   } else {
    3847           0 :     args.rval().setNull();
    3848           0 :     return true;
    3849             :   }
    3850             : }
    3851             : 
    3852             : static bool
    3853           0 : set_onkeydown(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    3854             : {
    3855           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3856           0 :   if (args[0].isObject()) {
    3857             :     { // scope for tempRoot
    3858           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3859           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3860             :     }
    3861             :   } else {
    3862           0 :     arg0 = nullptr;
    3863             :   }
    3864           0 :   self->SetOnkeydown(Constify(arg0));
    3865           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3866             : 
    3867           0 :   return true;
    3868             : }
    3869             : 
    3870             : static const JSJitInfo onkeydown_getterinfo = {
    3871             :   { (JSJitGetterOp)get_onkeydown },
    3872             :   { prototypes::id::XULElement },
    3873             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3874             :   JSJitInfo::Getter,
    3875             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3876             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3877             :   false,  /* isInfallible. False in setters. */
    3878             :   false,  /* isMovable.  Not relevant for setters. */
    3879             :   false, /* isEliminatable.  Not relevant for setters. */
    3880             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3881             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3882             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3883             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3884             : };
    3885             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3886             : static_assert(0 < 1, "There is no slot for us");
    3887             : static const JSJitInfo onkeydown_setterinfo = {
    3888             :   { (JSJitGetterOp)set_onkeydown },
    3889             :   { prototypes::id::XULElement },
    3890             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3891             :   JSJitInfo::Setter,
    3892             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3893             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3894             :   false,  /* isInfallible. False in setters. */
    3895             :   false,  /* isMovable.  Not relevant for setters. */
    3896             :   false, /* isEliminatable.  Not relevant for setters. */
    3897             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3898             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3899             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3900             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3901             : };
    3902             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3903             : static_assert(0 < 1, "There is no slot for us");
    3904             : 
    3905             : static bool
    3906           0 : get_onkeypress(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    3907             : {
    3908           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnkeypress());
    3909           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3910           0 :   if (result) {
    3911           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3912           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3913           0 :       return false;
    3914             :     }
    3915           0 :     return true;
    3916             :   } else {
    3917           0 :     args.rval().setNull();
    3918           0 :     return true;
    3919             :   }
    3920             : }
    3921             : 
    3922             : static bool
    3923           0 : set_onkeypress(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    3924             : {
    3925           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3926           0 :   if (args[0].isObject()) {
    3927             :     { // scope for tempRoot
    3928           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3929           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    3930             :     }
    3931             :   } else {
    3932           0 :     arg0 = nullptr;
    3933             :   }
    3934           0 :   self->SetOnkeypress(Constify(arg0));
    3935           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3936             : 
    3937           0 :   return true;
    3938             : }
    3939             : 
    3940             : static const JSJitInfo onkeypress_getterinfo = {
    3941             :   { (JSJitGetterOp)get_onkeypress },
    3942             :   { prototypes::id::XULElement },
    3943             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3944             :   JSJitInfo::Getter,
    3945             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3946             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3947             :   false,  /* isInfallible. False in setters. */
    3948             :   false,  /* isMovable.  Not relevant for setters. */
    3949             :   false, /* isEliminatable.  Not relevant for setters. */
    3950             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3951             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3952             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3953             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3954             : };
    3955             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3956             : static_assert(0 < 1, "There is no slot for us");
    3957             : static const JSJitInfo onkeypress_setterinfo = {
    3958             :   { (JSJitGetterOp)set_onkeypress },
    3959             :   { prototypes::id::XULElement },
    3960             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    3961             :   JSJitInfo::Setter,
    3962             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3963             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3964             :   false,  /* isInfallible. False in setters. */
    3965             :   false,  /* isMovable.  Not relevant for setters. */
    3966             :   false, /* isEliminatable.  Not relevant for setters. */
    3967             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3968             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3969             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3970             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3971             : };
    3972             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3973             : static_assert(0 < 1, "There is no slot for us");
    3974             : 
    3975             : static bool
    3976           0 : get_onkeyup(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    3977             : {
    3978           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnkeyup());
    3979           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3980           0 :   if (result) {
    3981           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    3982           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    3983           0 :       return false;
    3984             :     }
    3985           0 :     return true;
    3986             :   } else {
    3987           0 :     args.rval().setNull();
    3988           0 :     return true;
    3989             :   }
    3990             : }
    3991             : 
    3992             : static bool
    3993           0 : set_onkeyup(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    3994             : {
    3995           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    3996           0 :   if (args[0].isObject()) {
    3997             :     { // scope for tempRoot
    3998           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    3999           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4000             :     }
    4001             :   } else {
    4002           0 :     arg0 = nullptr;
    4003             :   }
    4004           0 :   self->SetOnkeyup(Constify(arg0));
    4005           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4006             : 
    4007           0 :   return true;
    4008             : }
    4009             : 
    4010             : static const JSJitInfo onkeyup_getterinfo = {
    4011             :   { (JSJitGetterOp)get_onkeyup },
    4012             :   { prototypes::id::XULElement },
    4013             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4014             :   JSJitInfo::Getter,
    4015             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4016             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4017             :   false,  /* isInfallible. False in setters. */
    4018             :   false,  /* isMovable.  Not relevant for setters. */
    4019             :   false, /* isEliminatable.  Not relevant for setters. */
    4020             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4021             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4022             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4023             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4024             : };
    4025             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4026             : static_assert(0 < 1, "There is no slot for us");
    4027             : static const JSJitInfo onkeyup_setterinfo = {
    4028             :   { (JSJitGetterOp)set_onkeyup },
    4029             :   { prototypes::id::XULElement },
    4030             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4031             :   JSJitInfo::Setter,
    4032             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4033             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4034             :   false,  /* isInfallible. False in setters. */
    4035             :   false,  /* isMovable.  Not relevant for setters. */
    4036             :   false, /* isEliminatable.  Not relevant for setters. */
    4037             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4038             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4039             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4040             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4041             : };
    4042             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4043             : static_assert(0 < 1, "There is no slot for us");
    4044             : 
    4045             : static bool
    4046           0 : get_onload(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    4047             : {
    4048           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnload());
    4049           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4050           0 :   if (result) {
    4051           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4052           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4053           0 :       return false;
    4054             :     }
    4055           0 :     return true;
    4056             :   } else {
    4057           0 :     args.rval().setNull();
    4058           0 :     return true;
    4059             :   }
    4060             : }
    4061             : 
    4062             : static bool
    4063           0 : set_onload(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    4064             : {
    4065           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4066           0 :   if (args[0].isObject()) {
    4067             :     { // scope for tempRoot
    4068           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4069           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4070             :     }
    4071             :   } else {
    4072           0 :     arg0 = nullptr;
    4073             :   }
    4074           0 :   self->SetOnload(Constify(arg0));
    4075           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4076             : 
    4077           0 :   return true;
    4078             : }
    4079             : 
    4080             : static const JSJitInfo onload_getterinfo = {
    4081             :   { (JSJitGetterOp)get_onload },
    4082             :   { prototypes::id::XULElement },
    4083             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4084             :   JSJitInfo::Getter,
    4085             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4086             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4087             :   false,  /* isInfallible. False in setters. */
    4088             :   false,  /* isMovable.  Not relevant for setters. */
    4089             :   false, /* isEliminatable.  Not relevant for setters. */
    4090             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4091             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4092             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4093             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4094             : };
    4095             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4096             : static_assert(0 < 1, "There is no slot for us");
    4097             : static const JSJitInfo onload_setterinfo = {
    4098             :   { (JSJitGetterOp)set_onload },
    4099             :   { prototypes::id::XULElement },
    4100             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4101             :   JSJitInfo::Setter,
    4102             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4103             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4104             :   false,  /* isInfallible. False in setters. */
    4105             :   false,  /* isMovable.  Not relevant for setters. */
    4106             :   false, /* isEliminatable.  Not relevant for setters. */
    4107             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4108             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4109             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4110             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4111             : };
    4112             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4113             : static_assert(0 < 1, "There is no slot for us");
    4114             : 
    4115             : static bool
    4116           0 : get_onloadeddata(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    4117             : {
    4118           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnloadeddata());
    4119           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4120           0 :   if (result) {
    4121           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4122           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4123           0 :       return false;
    4124             :     }
    4125           0 :     return true;
    4126             :   } else {
    4127           0 :     args.rval().setNull();
    4128           0 :     return true;
    4129             :   }
    4130             : }
    4131             : 
    4132             : static bool
    4133           0 : set_onloadeddata(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    4134             : {
    4135           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4136           0 :   if (args[0].isObject()) {
    4137             :     { // scope for tempRoot
    4138           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4139           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4140             :     }
    4141             :   } else {
    4142           0 :     arg0 = nullptr;
    4143             :   }
    4144           0 :   self->SetOnloadeddata(Constify(arg0));
    4145           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4146             : 
    4147           0 :   return true;
    4148             : }
    4149             : 
    4150             : static const JSJitInfo onloadeddata_getterinfo = {
    4151             :   { (JSJitGetterOp)get_onloadeddata },
    4152             :   { prototypes::id::XULElement },
    4153             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4154             :   JSJitInfo::Getter,
    4155             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4156             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4157             :   false,  /* isInfallible. False in setters. */
    4158             :   false,  /* isMovable.  Not relevant for setters. */
    4159             :   false, /* isEliminatable.  Not relevant for setters. */
    4160             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4161             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4162             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4163             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4164             : };
    4165             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4166             : static_assert(0 < 1, "There is no slot for us");
    4167             : static const JSJitInfo onloadeddata_setterinfo = {
    4168             :   { (JSJitGetterOp)set_onloadeddata },
    4169             :   { prototypes::id::XULElement },
    4170             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4171             :   JSJitInfo::Setter,
    4172             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4173             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4174             :   false,  /* isInfallible. False in setters. */
    4175             :   false,  /* isMovable.  Not relevant for setters. */
    4176             :   false, /* isEliminatable.  Not relevant for setters. */
    4177             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4178             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4179             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4180             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4181             : };
    4182             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4183             : static_assert(0 < 1, "There is no slot for us");
    4184             : 
    4185             : static bool
    4186           0 : get_onloadedmetadata(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    4187             : {
    4188           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnloadedmetadata());
    4189           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4190           0 :   if (result) {
    4191           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4192           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4193           0 :       return false;
    4194             :     }
    4195           0 :     return true;
    4196             :   } else {
    4197           0 :     args.rval().setNull();
    4198           0 :     return true;
    4199             :   }
    4200             : }
    4201             : 
    4202             : static bool
    4203           0 : set_onloadedmetadata(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    4204             : {
    4205           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4206           0 :   if (args[0].isObject()) {
    4207             :     { // scope for tempRoot
    4208           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4209           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4210             :     }
    4211             :   } else {
    4212           0 :     arg0 = nullptr;
    4213             :   }
    4214           0 :   self->SetOnloadedmetadata(Constify(arg0));
    4215           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4216             : 
    4217           0 :   return true;
    4218             : }
    4219             : 
    4220             : static const JSJitInfo onloadedmetadata_getterinfo = {
    4221             :   { (JSJitGetterOp)get_onloadedmetadata },
    4222             :   { prototypes::id::XULElement },
    4223             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4224             :   JSJitInfo::Getter,
    4225             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4226             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4227             :   false,  /* isInfallible. False in setters. */
    4228             :   false,  /* isMovable.  Not relevant for setters. */
    4229             :   false, /* isEliminatable.  Not relevant for setters. */
    4230             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4231             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4232             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4233             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4234             : };
    4235             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4236             : static_assert(0 < 1, "There is no slot for us");
    4237             : static const JSJitInfo onloadedmetadata_setterinfo = {
    4238             :   { (JSJitGetterOp)set_onloadedmetadata },
    4239             :   { prototypes::id::XULElement },
    4240             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4241             :   JSJitInfo::Setter,
    4242             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4243             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4244             :   false,  /* isInfallible. False in setters. */
    4245             :   false,  /* isMovable.  Not relevant for setters. */
    4246             :   false, /* isEliminatable.  Not relevant for setters. */
    4247             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4248             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4249             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4250             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4251             : };
    4252             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4253             : static_assert(0 < 1, "There is no slot for us");
    4254             : 
    4255             : static bool
    4256           0 : get_onloadend(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    4257             : {
    4258           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnloadend());
    4259           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4260           0 :   if (result) {
    4261           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4262           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4263           0 :       return false;
    4264             :     }
    4265           0 :     return true;
    4266             :   } else {
    4267           0 :     args.rval().setNull();
    4268           0 :     return true;
    4269             :   }
    4270             : }
    4271             : 
    4272             : static bool
    4273           0 : set_onloadend(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    4274             : {
    4275           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4276           0 :   if (args[0].isObject()) {
    4277             :     { // scope for tempRoot
    4278           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4279           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4280             :     }
    4281             :   } else {
    4282           0 :     arg0 = nullptr;
    4283             :   }
    4284           0 :   self->SetOnloadend(Constify(arg0));
    4285           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4286             : 
    4287           0 :   return true;
    4288             : }
    4289             : 
    4290             : static const JSJitInfo onloadend_getterinfo = {
    4291             :   { (JSJitGetterOp)get_onloadend },
    4292             :   { prototypes::id::XULElement },
    4293             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4294             :   JSJitInfo::Getter,
    4295             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4296             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4297             :   false,  /* isInfallible. False in setters. */
    4298             :   false,  /* isMovable.  Not relevant for setters. */
    4299             :   false, /* isEliminatable.  Not relevant for setters. */
    4300             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4301             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4302             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4303             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4304             : };
    4305             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4306             : static_assert(0 < 1, "There is no slot for us");
    4307             : static const JSJitInfo onloadend_setterinfo = {
    4308             :   { (JSJitGetterOp)set_onloadend },
    4309             :   { prototypes::id::XULElement },
    4310             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4311             :   JSJitInfo::Setter,
    4312             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4313             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4314             :   false,  /* isInfallible. False in setters. */
    4315             :   false,  /* isMovable.  Not relevant for setters. */
    4316             :   false, /* isEliminatable.  Not relevant for setters. */
    4317             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4318             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4319             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4320             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4321             : };
    4322             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4323             : static_assert(0 < 1, "There is no slot for us");
    4324             : 
    4325             : static bool
    4326           0 : get_onloadstart(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    4327             : {
    4328           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnloadstart());
    4329           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4330           0 :   if (result) {
    4331           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4332           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4333           0 :       return false;
    4334             :     }
    4335           0 :     return true;
    4336             :   } else {
    4337           0 :     args.rval().setNull();
    4338           0 :     return true;
    4339             :   }
    4340             : }
    4341             : 
    4342             : static bool
    4343           0 : set_onloadstart(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    4344             : {
    4345           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4346           0 :   if (args[0].isObject()) {
    4347             :     { // scope for tempRoot
    4348           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4349           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4350             :     }
    4351             :   } else {
    4352           0 :     arg0 = nullptr;
    4353             :   }
    4354           0 :   self->SetOnloadstart(Constify(arg0));
    4355           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4356             : 
    4357           0 :   return true;
    4358             : }
    4359             : 
    4360             : static const JSJitInfo onloadstart_getterinfo = {
    4361             :   { (JSJitGetterOp)get_onloadstart },
    4362             :   { prototypes::id::XULElement },
    4363             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4364             :   JSJitInfo::Getter,
    4365             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4366             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4367             :   false,  /* isInfallible. False in setters. */
    4368             :   false,  /* isMovable.  Not relevant for setters. */
    4369             :   false, /* isEliminatable.  Not relevant for setters. */
    4370             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4371             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4372             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4373             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4374             : };
    4375             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4376             : static_assert(0 < 1, "There is no slot for us");
    4377             : static const JSJitInfo onloadstart_setterinfo = {
    4378             :   { (JSJitGetterOp)set_onloadstart },
    4379             :   { prototypes::id::XULElement },
    4380             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4381             :   JSJitInfo::Setter,
    4382             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4383             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4384             :   false,  /* isInfallible. False in setters. */
    4385             :   false,  /* isMovable.  Not relevant for setters. */
    4386             :   false, /* isEliminatable.  Not relevant for setters. */
    4387             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4388             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4389             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4390             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4391             : };
    4392             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4393             : static_assert(0 < 1, "There is no slot for us");
    4394             : 
    4395             : static bool
    4396           0 : get_onmousedown(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    4397             : {
    4398           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmousedown());
    4399           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4400           0 :   if (result) {
    4401           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4402           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4403           0 :       return false;
    4404             :     }
    4405           0 :     return true;
    4406             :   } else {
    4407           0 :     args.rval().setNull();
    4408           0 :     return true;
    4409             :   }
    4410             : }
    4411             : 
    4412             : static bool
    4413           0 : set_onmousedown(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    4414             : {
    4415           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4416           0 :   if (args[0].isObject()) {
    4417             :     { // scope for tempRoot
    4418           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4419           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4420             :     }
    4421             :   } else {
    4422           0 :     arg0 = nullptr;
    4423             :   }
    4424           0 :   self->SetOnmousedown(Constify(arg0));
    4425           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4426             : 
    4427           0 :   return true;
    4428             : }
    4429             : 
    4430             : static const JSJitInfo onmousedown_getterinfo = {
    4431             :   { (JSJitGetterOp)get_onmousedown },
    4432             :   { prototypes::id::XULElement },
    4433             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4434             :   JSJitInfo::Getter,
    4435             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4436             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4437             :   false,  /* isInfallible. False in setters. */
    4438             :   false,  /* isMovable.  Not relevant for setters. */
    4439             :   false, /* isEliminatable.  Not relevant for setters. */
    4440             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4441             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4442             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4443             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4444             : };
    4445             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4446             : static_assert(0 < 1, "There is no slot for us");
    4447             : static const JSJitInfo onmousedown_setterinfo = {
    4448             :   { (JSJitGetterOp)set_onmousedown },
    4449             :   { prototypes::id::XULElement },
    4450             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4451             :   JSJitInfo::Setter,
    4452             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4453             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4454             :   false,  /* isInfallible. False in setters. */
    4455             :   false,  /* isMovable.  Not relevant for setters. */
    4456             :   false, /* isEliminatable.  Not relevant for setters. */
    4457             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4458             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4459             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4460             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4461             : };
    4462             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4463             : static_assert(0 < 1, "There is no slot for us");
    4464             : 
    4465             : static bool
    4466           0 : get_onmouseenter(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    4467             : {
    4468           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseenter());
    4469           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4470           0 :   if (result) {
    4471           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4472           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4473           0 :       return false;
    4474             :     }
    4475           0 :     return true;
    4476             :   } else {
    4477           0 :     args.rval().setNull();
    4478           0 :     return true;
    4479             :   }
    4480             : }
    4481             : 
    4482             : static bool
    4483           0 : set_onmouseenter(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    4484             : {
    4485           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4486           0 :   if (args[0].isObject()) {
    4487             :     { // scope for tempRoot
    4488           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4489           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4490             :     }
    4491             :   } else {
    4492           0 :     arg0 = nullptr;
    4493             :   }
    4494           0 :   self->SetOnmouseenter(Constify(arg0));
    4495           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4496             : 
    4497           0 :   return true;
    4498             : }
    4499             : 
    4500             : static const JSJitInfo onmouseenter_getterinfo = {
    4501             :   { (JSJitGetterOp)get_onmouseenter },
    4502             :   { prototypes::id::XULElement },
    4503             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4504             :   JSJitInfo::Getter,
    4505             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4506             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4507             :   false,  /* isInfallible. False in setters. */
    4508             :   false,  /* isMovable.  Not relevant for setters. */
    4509             :   false, /* isEliminatable.  Not relevant for setters. */
    4510             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4511             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4512             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4513             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4514             : };
    4515             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4516             : static_assert(0 < 1, "There is no slot for us");
    4517             : static const JSJitInfo onmouseenter_setterinfo = {
    4518             :   { (JSJitGetterOp)set_onmouseenter },
    4519             :   { prototypes::id::XULElement },
    4520             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4521             :   JSJitInfo::Setter,
    4522             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4523             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4524             :   false,  /* isInfallible. False in setters. */
    4525             :   false,  /* isMovable.  Not relevant for setters. */
    4526             :   false, /* isEliminatable.  Not relevant for setters. */
    4527             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4528             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4529             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4530             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4531             : };
    4532             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4533             : static_assert(0 < 1, "There is no slot for us");
    4534             : 
    4535             : static bool
    4536           0 : get_onmouseleave(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    4537             : {
    4538           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseleave());
    4539           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4540           0 :   if (result) {
    4541           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4542           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4543           0 :       return false;
    4544             :     }
    4545           0 :     return true;
    4546             :   } else {
    4547           0 :     args.rval().setNull();
    4548           0 :     return true;
    4549             :   }
    4550             : }
    4551             : 
    4552             : static bool
    4553           0 : set_onmouseleave(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    4554             : {
    4555           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4556           0 :   if (args[0].isObject()) {
    4557             :     { // scope for tempRoot
    4558           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4559           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4560             :     }
    4561             :   } else {
    4562           0 :     arg0 = nullptr;
    4563             :   }
    4564           0 :   self->SetOnmouseleave(Constify(arg0));
    4565           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4566             : 
    4567           0 :   return true;
    4568             : }
    4569             : 
    4570             : static const JSJitInfo onmouseleave_getterinfo = {
    4571             :   { (JSJitGetterOp)get_onmouseleave },
    4572             :   { prototypes::id::XULElement },
    4573             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4574             :   JSJitInfo::Getter,
    4575             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4576             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4577             :   false,  /* isInfallible. False in setters. */
    4578             :   false,  /* isMovable.  Not relevant for setters. */
    4579             :   false, /* isEliminatable.  Not relevant for setters. */
    4580             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4581             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4582             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4583             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4584             : };
    4585             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4586             : static_assert(0 < 1, "There is no slot for us");
    4587             : static const JSJitInfo onmouseleave_setterinfo = {
    4588             :   { (JSJitGetterOp)set_onmouseleave },
    4589             :   { prototypes::id::XULElement },
    4590             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4591             :   JSJitInfo::Setter,
    4592             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4593             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4594             :   false,  /* isInfallible. False in setters. */
    4595             :   false,  /* isMovable.  Not relevant for setters. */
    4596             :   false, /* isEliminatable.  Not relevant for setters. */
    4597             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4598             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4599             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4600             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4601             : };
    4602             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4603             : static_assert(0 < 1, "There is no slot for us");
    4604             : 
    4605             : static bool
    4606           0 : get_onmousemove(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    4607             : {
    4608           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmousemove());
    4609           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4610           0 :   if (result) {
    4611           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4612           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4613           0 :       return false;
    4614             :     }
    4615           0 :     return true;
    4616             :   } else {
    4617           0 :     args.rval().setNull();
    4618           0 :     return true;
    4619             :   }
    4620             : }
    4621             : 
    4622             : static bool
    4623           0 : set_onmousemove(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    4624             : {
    4625           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4626           0 :   if (args[0].isObject()) {
    4627             :     { // scope for tempRoot
    4628           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4629           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4630             :     }
    4631             :   } else {
    4632           0 :     arg0 = nullptr;
    4633             :   }
    4634           0 :   self->SetOnmousemove(Constify(arg0));
    4635           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4636             : 
    4637           0 :   return true;
    4638             : }
    4639             : 
    4640             : static const JSJitInfo onmousemove_getterinfo = {
    4641             :   { (JSJitGetterOp)get_onmousemove },
    4642             :   { prototypes::id::XULElement },
    4643             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4644             :   JSJitInfo::Getter,
    4645             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4646             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4647             :   false,  /* isInfallible. False in setters. */
    4648             :   false,  /* isMovable.  Not relevant for setters. */
    4649             :   false, /* isEliminatable.  Not relevant for setters. */
    4650             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4651             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4652             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4653             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4654             : };
    4655             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4656             : static_assert(0 < 1, "There is no slot for us");
    4657             : static const JSJitInfo onmousemove_setterinfo = {
    4658             :   { (JSJitGetterOp)set_onmousemove },
    4659             :   { prototypes::id::XULElement },
    4660             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4661             :   JSJitInfo::Setter,
    4662             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4663             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4664             :   false,  /* isInfallible. False in setters. */
    4665             :   false,  /* isMovable.  Not relevant for setters. */
    4666             :   false, /* isEliminatable.  Not relevant for setters. */
    4667             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4668             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4669             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4670             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4671             : };
    4672             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4673             : static_assert(0 < 1, "There is no slot for us");
    4674             : 
    4675             : static bool
    4676           0 : get_onmouseout(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    4677             : {
    4678           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseout());
    4679           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4680           0 :   if (result) {
    4681           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4682           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4683           0 :       return false;
    4684             :     }
    4685           0 :     return true;
    4686             :   } else {
    4687           0 :     args.rval().setNull();
    4688           0 :     return true;
    4689             :   }
    4690             : }
    4691             : 
    4692             : static bool
    4693           0 : set_onmouseout(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    4694             : {
    4695           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4696           0 :   if (args[0].isObject()) {
    4697             :     { // scope for tempRoot
    4698           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4699           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4700             :     }
    4701             :   } else {
    4702           0 :     arg0 = nullptr;
    4703             :   }
    4704           0 :   self->SetOnmouseout(Constify(arg0));
    4705           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4706             : 
    4707           0 :   return true;
    4708             : }
    4709             : 
    4710             : static const JSJitInfo onmouseout_getterinfo = {
    4711             :   { (JSJitGetterOp)get_onmouseout },
    4712             :   { prototypes::id::XULElement },
    4713             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4714             :   JSJitInfo::Getter,
    4715             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4716             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4717             :   false,  /* isInfallible. False in setters. */
    4718             :   false,  /* isMovable.  Not relevant for setters. */
    4719             :   false, /* isEliminatable.  Not relevant for setters. */
    4720             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4721             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4722             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4723             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4724             : };
    4725             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4726             : static_assert(0 < 1, "There is no slot for us");
    4727             : static const JSJitInfo onmouseout_setterinfo = {
    4728             :   { (JSJitGetterOp)set_onmouseout },
    4729             :   { prototypes::id::XULElement },
    4730             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4731             :   JSJitInfo::Setter,
    4732             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4733             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4734             :   false,  /* isInfallible. False in setters. */
    4735             :   false,  /* isMovable.  Not relevant for setters. */
    4736             :   false, /* isEliminatable.  Not relevant for setters. */
    4737             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4738             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4739             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4740             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4741             : };
    4742             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4743             : static_assert(0 < 1, "There is no slot for us");
    4744             : 
    4745             : static bool
    4746           0 : get_onmouseover(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    4747             : {
    4748           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseover());
    4749           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4750           0 :   if (result) {
    4751           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4752           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4753           0 :       return false;
    4754             :     }
    4755           0 :     return true;
    4756             :   } else {
    4757           0 :     args.rval().setNull();
    4758           0 :     return true;
    4759             :   }
    4760             : }
    4761             : 
    4762             : static bool
    4763           0 : set_onmouseover(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    4764             : {
    4765           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4766           0 :   if (args[0].isObject()) {
    4767             :     { // scope for tempRoot
    4768           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4769           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4770             :     }
    4771             :   } else {
    4772           0 :     arg0 = nullptr;
    4773             :   }
    4774           0 :   self->SetOnmouseover(Constify(arg0));
    4775           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4776             : 
    4777           0 :   return true;
    4778             : }
    4779             : 
    4780             : static const JSJitInfo onmouseover_getterinfo = {
    4781             :   { (JSJitGetterOp)get_onmouseover },
    4782             :   { prototypes::id::XULElement },
    4783             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4784             :   JSJitInfo::Getter,
    4785             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4786             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4787             :   false,  /* isInfallible. False in setters. */
    4788             :   false,  /* isMovable.  Not relevant for setters. */
    4789             :   false, /* isEliminatable.  Not relevant for setters. */
    4790             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4791             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4792             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4793             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4794             : };
    4795             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4796             : static_assert(0 < 1, "There is no slot for us");
    4797             : static const JSJitInfo onmouseover_setterinfo = {
    4798             :   { (JSJitGetterOp)set_onmouseover },
    4799             :   { prototypes::id::XULElement },
    4800             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4801             :   JSJitInfo::Setter,
    4802             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4803             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4804             :   false,  /* isInfallible. False in setters. */
    4805             :   false,  /* isMovable.  Not relevant for setters. */
    4806             :   false, /* isEliminatable.  Not relevant for setters. */
    4807             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4808             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4809             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4810             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4811             : };
    4812             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4813             : static_assert(0 < 1, "There is no slot for us");
    4814             : 
    4815             : static bool
    4816           0 : get_onmouseup(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    4817             : {
    4818           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmouseup());
    4819           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4820           0 :   if (result) {
    4821           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4822           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4823           0 :       return false;
    4824             :     }
    4825           0 :     return true;
    4826             :   } else {
    4827           0 :     args.rval().setNull();
    4828           0 :     return true;
    4829             :   }
    4830             : }
    4831             : 
    4832             : static bool
    4833           0 : set_onmouseup(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    4834             : {
    4835           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4836           0 :   if (args[0].isObject()) {
    4837             :     { // scope for tempRoot
    4838           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4839           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4840             :     }
    4841             :   } else {
    4842           0 :     arg0 = nullptr;
    4843             :   }
    4844           0 :   self->SetOnmouseup(Constify(arg0));
    4845           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4846             : 
    4847           0 :   return true;
    4848             : }
    4849             : 
    4850             : static const JSJitInfo onmouseup_getterinfo = {
    4851             :   { (JSJitGetterOp)get_onmouseup },
    4852             :   { prototypes::id::XULElement },
    4853             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4854             :   JSJitInfo::Getter,
    4855             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4856             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4857             :   false,  /* isInfallible. False in setters. */
    4858             :   false,  /* isMovable.  Not relevant for setters. */
    4859             :   false, /* isEliminatable.  Not relevant for setters. */
    4860             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4861             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4862             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4863             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4864             : };
    4865             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4866             : static_assert(0 < 1, "There is no slot for us");
    4867             : static const JSJitInfo onmouseup_setterinfo = {
    4868             :   { (JSJitGetterOp)set_onmouseup },
    4869             :   { prototypes::id::XULElement },
    4870             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4871             :   JSJitInfo::Setter,
    4872             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4873             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4874             :   false,  /* isInfallible. False in setters. */
    4875             :   false,  /* isMovable.  Not relevant for setters. */
    4876             :   false, /* isEliminatable.  Not relevant for setters. */
    4877             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4878             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4879             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4880             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4881             : };
    4882             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4883             : static_assert(0 < 1, "There is no slot for us");
    4884             : 
    4885             : static bool
    4886           0 : get_onwheel(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    4887             : {
    4888           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwheel());
    4889           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4890           0 :   if (result) {
    4891           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4892           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4893           0 :       return false;
    4894             :     }
    4895           0 :     return true;
    4896             :   } else {
    4897           0 :     args.rval().setNull();
    4898           0 :     return true;
    4899             :   }
    4900             : }
    4901             : 
    4902             : static bool
    4903           0 : set_onwheel(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    4904             : {
    4905           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4906           0 :   if (args[0].isObject()) {
    4907             :     { // scope for tempRoot
    4908           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4909           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4910             :     }
    4911             :   } else {
    4912           0 :     arg0 = nullptr;
    4913             :   }
    4914           0 :   self->SetOnwheel(Constify(arg0));
    4915           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4916             : 
    4917           0 :   return true;
    4918             : }
    4919             : 
    4920             : static const JSJitInfo onwheel_getterinfo = {
    4921             :   { (JSJitGetterOp)get_onwheel },
    4922             :   { prototypes::id::XULElement },
    4923             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4924             :   JSJitInfo::Getter,
    4925             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4926             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4927             :   false,  /* isInfallible. False in setters. */
    4928             :   false,  /* isMovable.  Not relevant for setters. */
    4929             :   false, /* isEliminatable.  Not relevant for setters. */
    4930             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4931             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4932             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4933             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4934             : };
    4935             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4936             : static_assert(0 < 1, "There is no slot for us");
    4937             : static const JSJitInfo onwheel_setterinfo = {
    4938             :   { (JSJitGetterOp)set_onwheel },
    4939             :   { prototypes::id::XULElement },
    4940             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4941             :   JSJitInfo::Setter,
    4942             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4943             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4944             :   false,  /* isInfallible. False in setters. */
    4945             :   false,  /* isMovable.  Not relevant for setters. */
    4946             :   false, /* isEliminatable.  Not relevant for setters. */
    4947             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4948             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4949             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4950             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4951             : };
    4952             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4953             : static_assert(0 < 1, "There is no slot for us");
    4954             : 
    4955             : static bool
    4956           0 : get_onpause(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    4957             : {
    4958           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpause());
    4959           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4960           0 :   if (result) {
    4961           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    4962           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    4963           0 :       return false;
    4964             :     }
    4965           0 :     return true;
    4966             :   } else {
    4967           0 :     args.rval().setNull();
    4968           0 :     return true;
    4969             :   }
    4970             : }
    4971             : 
    4972             : static bool
    4973           0 : set_onpause(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    4974             : {
    4975           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    4976           0 :   if (args[0].isObject()) {
    4977             :     { // scope for tempRoot
    4978           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    4979           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    4980             :     }
    4981             :   } else {
    4982           0 :     arg0 = nullptr;
    4983             :   }
    4984           0 :   self->SetOnpause(Constify(arg0));
    4985           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4986             : 
    4987           0 :   return true;
    4988             : }
    4989             : 
    4990             : static const JSJitInfo onpause_getterinfo = {
    4991             :   { (JSJitGetterOp)get_onpause },
    4992             :   { prototypes::id::XULElement },
    4993             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    4994             :   JSJitInfo::Getter,
    4995             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4996             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4997             :   false,  /* isInfallible. False in setters. */
    4998             :   false,  /* isMovable.  Not relevant for setters. */
    4999             :   false, /* isEliminatable.  Not relevant for setters. */
    5000             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5001             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5002             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5003             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5004             : };
    5005             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5006             : static_assert(0 < 1, "There is no slot for us");
    5007             : static const JSJitInfo onpause_setterinfo = {
    5008             :   { (JSJitGetterOp)set_onpause },
    5009             :   { prototypes::id::XULElement },
    5010             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5011             :   JSJitInfo::Setter,
    5012             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5013             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5014             :   false,  /* isInfallible. False in setters. */
    5015             :   false,  /* isMovable.  Not relevant for setters. */
    5016             :   false, /* isEliminatable.  Not relevant for setters. */
    5017             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5018             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5019             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5020             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5021             : };
    5022             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5023             : static_assert(0 < 1, "There is no slot for us");
    5024             : 
    5025             : static bool
    5026           0 : get_onplay(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    5027             : {
    5028           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnplay());
    5029           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5030           0 :   if (result) {
    5031           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5032           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5033           0 :       return false;
    5034             :     }
    5035           0 :     return true;
    5036             :   } else {
    5037           0 :     args.rval().setNull();
    5038           0 :     return true;
    5039             :   }
    5040             : }
    5041             : 
    5042             : static bool
    5043           0 : set_onplay(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    5044             : {
    5045           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5046           0 :   if (args[0].isObject()) {
    5047             :     { // scope for tempRoot
    5048           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5049           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5050             :     }
    5051             :   } else {
    5052           0 :     arg0 = nullptr;
    5053             :   }
    5054           0 :   self->SetOnplay(Constify(arg0));
    5055           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5056             : 
    5057           0 :   return true;
    5058             : }
    5059             : 
    5060             : static const JSJitInfo onplay_getterinfo = {
    5061             :   { (JSJitGetterOp)get_onplay },
    5062             :   { prototypes::id::XULElement },
    5063             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5064             :   JSJitInfo::Getter,
    5065             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5066             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5067             :   false,  /* isInfallible. False in setters. */
    5068             :   false,  /* isMovable.  Not relevant for setters. */
    5069             :   false, /* isEliminatable.  Not relevant for setters. */
    5070             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5071             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5072             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5073             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5074             : };
    5075             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5076             : static_assert(0 < 1, "There is no slot for us");
    5077             : static const JSJitInfo onplay_setterinfo = {
    5078             :   { (JSJitGetterOp)set_onplay },
    5079             :   { prototypes::id::XULElement },
    5080             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5081             :   JSJitInfo::Setter,
    5082             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5083             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5084             :   false,  /* isInfallible. False in setters. */
    5085             :   false,  /* isMovable.  Not relevant for setters. */
    5086             :   false, /* isEliminatable.  Not relevant for setters. */
    5087             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5088             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5089             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5090             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5091             : };
    5092             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5093             : static_assert(0 < 1, "There is no slot for us");
    5094             : 
    5095             : static bool
    5096           0 : get_onplaying(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    5097             : {
    5098           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnplaying());
    5099           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5100           0 :   if (result) {
    5101           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5102           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5103           0 :       return false;
    5104             :     }
    5105           0 :     return true;
    5106             :   } else {
    5107           0 :     args.rval().setNull();
    5108           0 :     return true;
    5109             :   }
    5110             : }
    5111             : 
    5112             : static bool
    5113           0 : set_onplaying(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    5114             : {
    5115           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5116           0 :   if (args[0].isObject()) {
    5117             :     { // scope for tempRoot
    5118           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5119           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5120             :     }
    5121             :   } else {
    5122           0 :     arg0 = nullptr;
    5123             :   }
    5124           0 :   self->SetOnplaying(Constify(arg0));
    5125           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5126             : 
    5127           0 :   return true;
    5128             : }
    5129             : 
    5130             : static const JSJitInfo onplaying_getterinfo = {
    5131             :   { (JSJitGetterOp)get_onplaying },
    5132             :   { prototypes::id::XULElement },
    5133             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5134             :   JSJitInfo::Getter,
    5135             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5136             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5137             :   false,  /* isInfallible. False in setters. */
    5138             :   false,  /* isMovable.  Not relevant for setters. */
    5139             :   false, /* isEliminatable.  Not relevant for setters. */
    5140             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5141             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5142             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5143             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5144             : };
    5145             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5146             : static_assert(0 < 1, "There is no slot for us");
    5147             : static const JSJitInfo onplaying_setterinfo = {
    5148             :   { (JSJitGetterOp)set_onplaying },
    5149             :   { prototypes::id::XULElement },
    5150             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5151             :   JSJitInfo::Setter,
    5152             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5153             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5154             :   false,  /* isInfallible. False in setters. */
    5155             :   false,  /* isMovable.  Not relevant for setters. */
    5156             :   false, /* isEliminatable.  Not relevant for setters. */
    5157             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5158             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5159             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5160             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5161             : };
    5162             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5163             : static_assert(0 < 1, "There is no slot for us");
    5164             : 
    5165             : static bool
    5166           0 : get_onprogress(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    5167             : {
    5168           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnprogress());
    5169           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5170           0 :   if (result) {
    5171           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5172           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5173           0 :       return false;
    5174             :     }
    5175           0 :     return true;
    5176             :   } else {
    5177           0 :     args.rval().setNull();
    5178           0 :     return true;
    5179             :   }
    5180             : }
    5181             : 
    5182             : static bool
    5183           0 : set_onprogress(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    5184             : {
    5185           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5186           0 :   if (args[0].isObject()) {
    5187             :     { // scope for tempRoot
    5188           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5189           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5190             :     }
    5191             :   } else {
    5192           0 :     arg0 = nullptr;
    5193             :   }
    5194           0 :   self->SetOnprogress(Constify(arg0));
    5195           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5196             : 
    5197           0 :   return true;
    5198             : }
    5199             : 
    5200             : static const JSJitInfo onprogress_getterinfo = {
    5201             :   { (JSJitGetterOp)get_onprogress },
    5202             :   { prototypes::id::XULElement },
    5203             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5204             :   JSJitInfo::Getter,
    5205             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5206             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5207             :   false,  /* isInfallible. False in setters. */
    5208             :   false,  /* isMovable.  Not relevant for setters. */
    5209             :   false, /* isEliminatable.  Not relevant for setters. */
    5210             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5211             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5212             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5213             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5214             : };
    5215             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5216             : static_assert(0 < 1, "There is no slot for us");
    5217             : static const JSJitInfo onprogress_setterinfo = {
    5218             :   { (JSJitGetterOp)set_onprogress },
    5219             :   { prototypes::id::XULElement },
    5220             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5221             :   JSJitInfo::Setter,
    5222             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5223             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5224             :   false,  /* isInfallible. False in setters. */
    5225             :   false,  /* isMovable.  Not relevant for setters. */
    5226             :   false, /* isEliminatable.  Not relevant for setters. */
    5227             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5228             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5229             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5230             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5231             : };
    5232             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5233             : static_assert(0 < 1, "There is no slot for us");
    5234             : 
    5235             : static bool
    5236           0 : get_onratechange(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    5237             : {
    5238           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnratechange());
    5239           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5240           0 :   if (result) {
    5241           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5242           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5243           0 :       return false;
    5244             :     }
    5245           0 :     return true;
    5246             :   } else {
    5247           0 :     args.rval().setNull();
    5248           0 :     return true;
    5249             :   }
    5250             : }
    5251             : 
    5252             : static bool
    5253           0 : set_onratechange(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    5254             : {
    5255           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5256           0 :   if (args[0].isObject()) {
    5257             :     { // scope for tempRoot
    5258           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5259           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5260             :     }
    5261             :   } else {
    5262           0 :     arg0 = nullptr;
    5263             :   }
    5264           0 :   self->SetOnratechange(Constify(arg0));
    5265           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5266             : 
    5267           0 :   return true;
    5268             : }
    5269             : 
    5270             : static const JSJitInfo onratechange_getterinfo = {
    5271             :   { (JSJitGetterOp)get_onratechange },
    5272             :   { prototypes::id::XULElement },
    5273             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5274             :   JSJitInfo::Getter,
    5275             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5276             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5277             :   false,  /* isInfallible. False in setters. */
    5278             :   false,  /* isMovable.  Not relevant for setters. */
    5279             :   false, /* isEliminatable.  Not relevant for setters. */
    5280             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5281             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5282             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5283             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5284             : };
    5285             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5286             : static_assert(0 < 1, "There is no slot for us");
    5287             : static const JSJitInfo onratechange_setterinfo = {
    5288             :   { (JSJitGetterOp)set_onratechange },
    5289             :   { prototypes::id::XULElement },
    5290             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5291             :   JSJitInfo::Setter,
    5292             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5293             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5294             :   false,  /* isInfallible. False in setters. */
    5295             :   false,  /* isMovable.  Not relevant for setters. */
    5296             :   false, /* isEliminatable.  Not relevant for setters. */
    5297             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5298             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5299             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5300             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5301             : };
    5302             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5303             : static_assert(0 < 1, "There is no slot for us");
    5304             : 
    5305             : static bool
    5306           0 : get_onreset(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    5307             : {
    5308           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnreset());
    5309           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5310           0 :   if (result) {
    5311           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5312           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5313           0 :       return false;
    5314             :     }
    5315           0 :     return true;
    5316             :   } else {
    5317           0 :     args.rval().setNull();
    5318           0 :     return true;
    5319             :   }
    5320             : }
    5321             : 
    5322             : static bool
    5323           0 : set_onreset(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    5324             : {
    5325           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5326           0 :   if (args[0].isObject()) {
    5327             :     { // scope for tempRoot
    5328           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5329           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5330             :     }
    5331             :   } else {
    5332           0 :     arg0 = nullptr;
    5333             :   }
    5334           0 :   self->SetOnreset(Constify(arg0));
    5335           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5336             : 
    5337           0 :   return true;
    5338             : }
    5339             : 
    5340             : static const JSJitInfo onreset_getterinfo = {
    5341             :   { (JSJitGetterOp)get_onreset },
    5342             :   { prototypes::id::XULElement },
    5343             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5344             :   JSJitInfo::Getter,
    5345             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5346             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5347             :   false,  /* isInfallible. False in setters. */
    5348             :   false,  /* isMovable.  Not relevant for setters. */
    5349             :   false, /* isEliminatable.  Not relevant for setters. */
    5350             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5351             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5352             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5353             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5354             : };
    5355             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5356             : static_assert(0 < 1, "There is no slot for us");
    5357             : static const JSJitInfo onreset_setterinfo = {
    5358             :   { (JSJitGetterOp)set_onreset },
    5359             :   { prototypes::id::XULElement },
    5360             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5361             :   JSJitInfo::Setter,
    5362             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5363             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5364             :   false,  /* isInfallible. False in setters. */
    5365             :   false,  /* isMovable.  Not relevant for setters. */
    5366             :   false, /* isEliminatable.  Not relevant for setters. */
    5367             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5368             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5369             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5370             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5371             : };
    5372             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5373             : static_assert(0 < 1, "There is no slot for us");
    5374             : 
    5375             : static bool
    5376           0 : get_onresize(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    5377             : {
    5378           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnresize());
    5379           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5380           0 :   if (result) {
    5381           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5382           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5383           0 :       return false;
    5384             :     }
    5385           0 :     return true;
    5386             :   } else {
    5387           0 :     args.rval().setNull();
    5388           0 :     return true;
    5389             :   }
    5390             : }
    5391             : 
    5392             : static bool
    5393           0 : set_onresize(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    5394             : {
    5395           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5396           0 :   if (args[0].isObject()) {
    5397             :     { // scope for tempRoot
    5398           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5399           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5400             :     }
    5401             :   } else {
    5402           0 :     arg0 = nullptr;
    5403             :   }
    5404           0 :   self->SetOnresize(Constify(arg0));
    5405           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5406             : 
    5407           0 :   return true;
    5408             : }
    5409             : 
    5410             : static const JSJitInfo onresize_getterinfo = {
    5411             :   { (JSJitGetterOp)get_onresize },
    5412             :   { prototypes::id::XULElement },
    5413             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5414             :   JSJitInfo::Getter,
    5415             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5416             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5417             :   false,  /* isInfallible. False in setters. */
    5418             :   false,  /* isMovable.  Not relevant for setters. */
    5419             :   false, /* isEliminatable.  Not relevant for setters. */
    5420             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5421             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5422             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5423             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5424             : };
    5425             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5426             : static_assert(0 < 1, "There is no slot for us");
    5427             : static const JSJitInfo onresize_setterinfo = {
    5428             :   { (JSJitGetterOp)set_onresize },
    5429             :   { prototypes::id::XULElement },
    5430             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5431             :   JSJitInfo::Setter,
    5432             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5433             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5434             :   false,  /* isInfallible. False in setters. */
    5435             :   false,  /* isMovable.  Not relevant for setters. */
    5436             :   false, /* isEliminatable.  Not relevant for setters. */
    5437             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5438             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5439             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5440             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5441             : };
    5442             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5443             : static_assert(0 < 1, "There is no slot for us");
    5444             : 
    5445             : static bool
    5446           0 : get_onscroll(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    5447             : {
    5448           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnscroll());
    5449           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5450           0 :   if (result) {
    5451           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5452           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5453           0 :       return false;
    5454             :     }
    5455           0 :     return true;
    5456             :   } else {
    5457           0 :     args.rval().setNull();
    5458           0 :     return true;
    5459             :   }
    5460             : }
    5461             : 
    5462             : static bool
    5463           0 : set_onscroll(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    5464             : {
    5465           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5466           0 :   if (args[0].isObject()) {
    5467             :     { // scope for tempRoot
    5468           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5469           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5470             :     }
    5471             :   } else {
    5472           0 :     arg0 = nullptr;
    5473             :   }
    5474           0 :   self->SetOnscroll(Constify(arg0));
    5475           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5476             : 
    5477           0 :   return true;
    5478             : }
    5479             : 
    5480             : static const JSJitInfo onscroll_getterinfo = {
    5481             :   { (JSJitGetterOp)get_onscroll },
    5482             :   { prototypes::id::XULElement },
    5483             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5484             :   JSJitInfo::Getter,
    5485             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5486             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5487             :   false,  /* isInfallible. False in setters. */
    5488             :   false,  /* isMovable.  Not relevant for setters. */
    5489             :   false, /* isEliminatable.  Not relevant for setters. */
    5490             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5491             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5492             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5493             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5494             : };
    5495             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5496             : static_assert(0 < 1, "There is no slot for us");
    5497             : static const JSJitInfo onscroll_setterinfo = {
    5498             :   { (JSJitGetterOp)set_onscroll },
    5499             :   { prototypes::id::XULElement },
    5500             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5501             :   JSJitInfo::Setter,
    5502             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5503             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5504             :   false,  /* isInfallible. False in setters. */
    5505             :   false,  /* isMovable.  Not relevant for setters. */
    5506             :   false, /* isEliminatable.  Not relevant for setters. */
    5507             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5508             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5509             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5510             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5511             : };
    5512             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5513             : static_assert(0 < 1, "There is no slot for us");
    5514             : 
    5515             : static bool
    5516           0 : get_onseeked(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    5517             : {
    5518           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnseeked());
    5519           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5520           0 :   if (result) {
    5521           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5522           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5523           0 :       return false;
    5524             :     }
    5525           0 :     return true;
    5526             :   } else {
    5527           0 :     args.rval().setNull();
    5528           0 :     return true;
    5529             :   }
    5530             : }
    5531             : 
    5532             : static bool
    5533           0 : set_onseeked(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    5534             : {
    5535           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5536           0 :   if (args[0].isObject()) {
    5537             :     { // scope for tempRoot
    5538           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5539           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5540             :     }
    5541             :   } else {
    5542           0 :     arg0 = nullptr;
    5543             :   }
    5544           0 :   self->SetOnseeked(Constify(arg0));
    5545           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5546             : 
    5547           0 :   return true;
    5548             : }
    5549             : 
    5550             : static const JSJitInfo onseeked_getterinfo = {
    5551             :   { (JSJitGetterOp)get_onseeked },
    5552             :   { prototypes::id::XULElement },
    5553             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5554             :   JSJitInfo::Getter,
    5555             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5556             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5557             :   false,  /* isInfallible. False in setters. */
    5558             :   false,  /* isMovable.  Not relevant for setters. */
    5559             :   false, /* isEliminatable.  Not relevant for setters. */
    5560             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5561             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5562             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5563             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5564             : };
    5565             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5566             : static_assert(0 < 1, "There is no slot for us");
    5567             : static const JSJitInfo onseeked_setterinfo = {
    5568             :   { (JSJitGetterOp)set_onseeked },
    5569             :   { prototypes::id::XULElement },
    5570             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5571             :   JSJitInfo::Setter,
    5572             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5573             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5574             :   false,  /* isInfallible. False in setters. */
    5575             :   false,  /* isMovable.  Not relevant for setters. */
    5576             :   false, /* isEliminatable.  Not relevant for setters. */
    5577             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5578             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5579             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5580             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5581             : };
    5582             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5583             : static_assert(0 < 1, "There is no slot for us");
    5584             : 
    5585             : static bool
    5586           0 : get_onseeking(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    5587             : {
    5588           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnseeking());
    5589           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5590           0 :   if (result) {
    5591           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5592           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5593           0 :       return false;
    5594             :     }
    5595           0 :     return true;
    5596             :   } else {
    5597           0 :     args.rval().setNull();
    5598           0 :     return true;
    5599             :   }
    5600             : }
    5601             : 
    5602             : static bool
    5603           0 : set_onseeking(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    5604             : {
    5605           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5606           0 :   if (args[0].isObject()) {
    5607             :     { // scope for tempRoot
    5608           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5609           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5610             :     }
    5611             :   } else {
    5612           0 :     arg0 = nullptr;
    5613             :   }
    5614           0 :   self->SetOnseeking(Constify(arg0));
    5615           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5616             : 
    5617           0 :   return true;
    5618             : }
    5619             : 
    5620             : static const JSJitInfo onseeking_getterinfo = {
    5621             :   { (JSJitGetterOp)get_onseeking },
    5622             :   { prototypes::id::XULElement },
    5623             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5624             :   JSJitInfo::Getter,
    5625             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5626             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5627             :   false,  /* isInfallible. False in setters. */
    5628             :   false,  /* isMovable.  Not relevant for setters. */
    5629             :   false, /* isEliminatable.  Not relevant for setters. */
    5630             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5631             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5632             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5633             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5634             : };
    5635             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5636             : static_assert(0 < 1, "There is no slot for us");
    5637             : static const JSJitInfo onseeking_setterinfo = {
    5638             :   { (JSJitGetterOp)set_onseeking },
    5639             :   { prototypes::id::XULElement },
    5640             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5641             :   JSJitInfo::Setter,
    5642             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5643             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5644             :   false,  /* isInfallible. False in setters. */
    5645             :   false,  /* isMovable.  Not relevant for setters. */
    5646             :   false, /* isEliminatable.  Not relevant for setters. */
    5647             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5648             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5649             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5650             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5651             : };
    5652             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5653             : static_assert(0 < 1, "There is no slot for us");
    5654             : 
    5655             : static bool
    5656           0 : get_onselect(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    5657             : {
    5658           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnselect());
    5659           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5660           0 :   if (result) {
    5661           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5662           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5663           0 :       return false;
    5664             :     }
    5665           0 :     return true;
    5666             :   } else {
    5667           0 :     args.rval().setNull();
    5668           0 :     return true;
    5669             :   }
    5670             : }
    5671             : 
    5672             : static bool
    5673           0 : set_onselect(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    5674             : {
    5675           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5676           0 :   if (args[0].isObject()) {
    5677             :     { // scope for tempRoot
    5678           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5679           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5680             :     }
    5681             :   } else {
    5682           0 :     arg0 = nullptr;
    5683             :   }
    5684           0 :   self->SetOnselect(Constify(arg0));
    5685           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5686             : 
    5687           0 :   return true;
    5688             : }
    5689             : 
    5690             : static const JSJitInfo onselect_getterinfo = {
    5691             :   { (JSJitGetterOp)get_onselect },
    5692             :   { prototypes::id::XULElement },
    5693             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5694             :   JSJitInfo::Getter,
    5695             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5696             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5697             :   false,  /* isInfallible. False in setters. */
    5698             :   false,  /* isMovable.  Not relevant for setters. */
    5699             :   false, /* isEliminatable.  Not relevant for setters. */
    5700             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5701             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5702             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5703             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5704             : };
    5705             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5706             : static_assert(0 < 1, "There is no slot for us");
    5707             : static const JSJitInfo onselect_setterinfo = {
    5708             :   { (JSJitGetterOp)set_onselect },
    5709             :   { prototypes::id::XULElement },
    5710             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5711             :   JSJitInfo::Setter,
    5712             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5713             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5714             :   false,  /* isInfallible. False in setters. */
    5715             :   false,  /* isMovable.  Not relevant for setters. */
    5716             :   false, /* isEliminatable.  Not relevant for setters. */
    5717             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5718             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5719             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5720             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5721             : };
    5722             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5723             : static_assert(0 < 1, "There is no slot for us");
    5724             : 
    5725             : static bool
    5726           0 : get_onshow(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    5727             : {
    5728           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnshow());
    5729           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5730           0 :   if (result) {
    5731           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5732           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5733           0 :       return false;
    5734             :     }
    5735           0 :     return true;
    5736             :   } else {
    5737           0 :     args.rval().setNull();
    5738           0 :     return true;
    5739             :   }
    5740             : }
    5741             : 
    5742             : static bool
    5743           0 : set_onshow(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    5744             : {
    5745           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5746           0 :   if (args[0].isObject()) {
    5747             :     { // scope for tempRoot
    5748           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5749           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5750             :     }
    5751             :   } else {
    5752           0 :     arg0 = nullptr;
    5753             :   }
    5754           0 :   self->SetOnshow(Constify(arg0));
    5755           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5756             : 
    5757           0 :   return true;
    5758             : }
    5759             : 
    5760             : static const JSJitInfo onshow_getterinfo = {
    5761             :   { (JSJitGetterOp)get_onshow },
    5762             :   { prototypes::id::XULElement },
    5763             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5764             :   JSJitInfo::Getter,
    5765             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5766             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5767             :   false,  /* isInfallible. False in setters. */
    5768             :   false,  /* isMovable.  Not relevant for setters. */
    5769             :   false, /* isEliminatable.  Not relevant for setters. */
    5770             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5771             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5772             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5773             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5774             : };
    5775             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5776             : static_assert(0 < 1, "There is no slot for us");
    5777             : static const JSJitInfo onshow_setterinfo = {
    5778             :   { (JSJitGetterOp)set_onshow },
    5779             :   { prototypes::id::XULElement },
    5780             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5781             :   JSJitInfo::Setter,
    5782             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5783             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5784             :   false,  /* isInfallible. False in setters. */
    5785             :   false,  /* isMovable.  Not relevant for setters. */
    5786             :   false, /* isEliminatable.  Not relevant for setters. */
    5787             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5788             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5789             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5790             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5791             : };
    5792             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5793             : static_assert(0 < 1, "There is no slot for us");
    5794             : 
    5795             : static bool
    5796           0 : get_onstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    5797             : {
    5798           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnstalled());
    5799           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5800           0 :   if (result) {
    5801           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5802           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5803           0 :       return false;
    5804             :     }
    5805           0 :     return true;
    5806             :   } else {
    5807           0 :     args.rval().setNull();
    5808           0 :     return true;
    5809             :   }
    5810             : }
    5811             : 
    5812             : static bool
    5813           0 : set_onstalled(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    5814             : {
    5815           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5816           0 :   if (args[0].isObject()) {
    5817             :     { // scope for tempRoot
    5818           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5819           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5820             :     }
    5821             :   } else {
    5822           0 :     arg0 = nullptr;
    5823             :   }
    5824           0 :   self->SetOnstalled(Constify(arg0));
    5825           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5826             : 
    5827           0 :   return true;
    5828             : }
    5829             : 
    5830             : static const JSJitInfo onstalled_getterinfo = {
    5831             :   { (JSJitGetterOp)get_onstalled },
    5832             :   { prototypes::id::XULElement },
    5833             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5834             :   JSJitInfo::Getter,
    5835             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5836             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5837             :   false,  /* isInfallible. False in setters. */
    5838             :   false,  /* isMovable.  Not relevant for setters. */
    5839             :   false, /* isEliminatable.  Not relevant for setters. */
    5840             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5841             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5842             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5843             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5844             : };
    5845             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5846             : static_assert(0 < 1, "There is no slot for us");
    5847             : static const JSJitInfo onstalled_setterinfo = {
    5848             :   { (JSJitGetterOp)set_onstalled },
    5849             :   { prototypes::id::XULElement },
    5850             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5851             :   JSJitInfo::Setter,
    5852             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5853             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5854             :   false,  /* isInfallible. False in setters. */
    5855             :   false,  /* isMovable.  Not relevant for setters. */
    5856             :   false, /* isEliminatable.  Not relevant for setters. */
    5857             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5858             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5859             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5860             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5861             : };
    5862             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5863             : static_assert(0 < 1, "There is no slot for us");
    5864             : 
    5865             : static bool
    5866           0 : get_onsubmit(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    5867             : {
    5868           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnsubmit());
    5869           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5870           0 :   if (result) {
    5871           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5872           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5873           0 :       return false;
    5874             :     }
    5875           0 :     return true;
    5876             :   } else {
    5877           0 :     args.rval().setNull();
    5878           0 :     return true;
    5879             :   }
    5880             : }
    5881             : 
    5882             : static bool
    5883           0 : set_onsubmit(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    5884             : {
    5885           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5886           0 :   if (args[0].isObject()) {
    5887             :     { // scope for tempRoot
    5888           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5889           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5890             :     }
    5891             :   } else {
    5892           0 :     arg0 = nullptr;
    5893             :   }
    5894           0 :   self->SetOnsubmit(Constify(arg0));
    5895           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5896             : 
    5897           0 :   return true;
    5898             : }
    5899             : 
    5900             : static const JSJitInfo onsubmit_getterinfo = {
    5901             :   { (JSJitGetterOp)get_onsubmit },
    5902             :   { prototypes::id::XULElement },
    5903             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5904             :   JSJitInfo::Getter,
    5905             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5906             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5907             :   false,  /* isInfallible. False in setters. */
    5908             :   false,  /* isMovable.  Not relevant for setters. */
    5909             :   false, /* isEliminatable.  Not relevant for setters. */
    5910             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5911             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5912             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5913             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5914             : };
    5915             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5916             : static_assert(0 < 1, "There is no slot for us");
    5917             : static const JSJitInfo onsubmit_setterinfo = {
    5918             :   { (JSJitGetterOp)set_onsubmit },
    5919             :   { prototypes::id::XULElement },
    5920             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5921             :   JSJitInfo::Setter,
    5922             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5923             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5924             :   false,  /* isInfallible. False in setters. */
    5925             :   false,  /* isMovable.  Not relevant for setters. */
    5926             :   false, /* isEliminatable.  Not relevant for setters. */
    5927             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5928             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5929             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5930             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5931             : };
    5932             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5933             : static_assert(0 < 1, "There is no slot for us");
    5934             : 
    5935             : static bool
    5936           0 : get_onsuspend(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    5937             : {
    5938           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnsuspend());
    5939           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5940           0 :   if (result) {
    5941           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    5942           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    5943           0 :       return false;
    5944             :     }
    5945           0 :     return true;
    5946             :   } else {
    5947           0 :     args.rval().setNull();
    5948           0 :     return true;
    5949             :   }
    5950             : }
    5951             : 
    5952             : static bool
    5953           0 : set_onsuspend(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    5954             : {
    5955           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    5956           0 :   if (args[0].isObject()) {
    5957             :     { // scope for tempRoot
    5958           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    5959           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    5960             :     }
    5961             :   } else {
    5962           0 :     arg0 = nullptr;
    5963             :   }
    5964           0 :   self->SetOnsuspend(Constify(arg0));
    5965           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5966             : 
    5967           0 :   return true;
    5968             : }
    5969             : 
    5970             : static const JSJitInfo onsuspend_getterinfo = {
    5971             :   { (JSJitGetterOp)get_onsuspend },
    5972             :   { prototypes::id::XULElement },
    5973             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5974             :   JSJitInfo::Getter,
    5975             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5976             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5977             :   false,  /* isInfallible. False in setters. */
    5978             :   false,  /* isMovable.  Not relevant for setters. */
    5979             :   false, /* isEliminatable.  Not relevant for setters. */
    5980             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5981             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5982             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5983             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5984             : };
    5985             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5986             : static_assert(0 < 1, "There is no slot for us");
    5987             : static const JSJitInfo onsuspend_setterinfo = {
    5988             :   { (JSJitGetterOp)set_onsuspend },
    5989             :   { prototypes::id::XULElement },
    5990             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    5991             :   JSJitInfo::Setter,
    5992             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5993             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5994             :   false,  /* isInfallible. False in setters. */
    5995             :   false,  /* isMovable.  Not relevant for setters. */
    5996             :   false, /* isEliminatable.  Not relevant for setters. */
    5997             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5998             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5999             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6000             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6001             : };
    6002             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6003             : static_assert(0 < 1, "There is no slot for us");
    6004             : 
    6005             : static bool
    6006           0 : get_ontimeupdate(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    6007             : {
    6008           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntimeupdate());
    6009           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6010           0 :   if (result) {
    6011           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6012           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6013           0 :       return false;
    6014             :     }
    6015           0 :     return true;
    6016             :   } else {
    6017           0 :     args.rval().setNull();
    6018           0 :     return true;
    6019             :   }
    6020             : }
    6021             : 
    6022             : static bool
    6023           0 : set_ontimeupdate(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    6024             : {
    6025           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6026           0 :   if (args[0].isObject()) {
    6027             :     { // scope for tempRoot
    6028           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6029           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6030             :     }
    6031             :   } else {
    6032           0 :     arg0 = nullptr;
    6033             :   }
    6034           0 :   self->SetOntimeupdate(Constify(arg0));
    6035           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6036             : 
    6037           0 :   return true;
    6038             : }
    6039             : 
    6040             : static const JSJitInfo ontimeupdate_getterinfo = {
    6041             :   { (JSJitGetterOp)get_ontimeupdate },
    6042             :   { prototypes::id::XULElement },
    6043             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6044             :   JSJitInfo::Getter,
    6045             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6046             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6047             :   false,  /* isInfallible. False in setters. */
    6048             :   false,  /* isMovable.  Not relevant for setters. */
    6049             :   false, /* isEliminatable.  Not relevant for setters. */
    6050             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6051             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6052             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6053             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6054             : };
    6055             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6056             : static_assert(0 < 1, "There is no slot for us");
    6057             : static const JSJitInfo ontimeupdate_setterinfo = {
    6058             :   { (JSJitGetterOp)set_ontimeupdate },
    6059             :   { prototypes::id::XULElement },
    6060             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6061             :   JSJitInfo::Setter,
    6062             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6063             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6064             :   false,  /* isInfallible. False in setters. */
    6065             :   false,  /* isMovable.  Not relevant for setters. */
    6066             :   false, /* isEliminatable.  Not relevant for setters. */
    6067             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6068             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6069             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6070             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6071             : };
    6072             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6073             : static_assert(0 < 1, "There is no slot for us");
    6074             : 
    6075             : static bool
    6076           0 : get_onvolumechange(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    6077             : {
    6078           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnvolumechange());
    6079           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6080           0 :   if (result) {
    6081           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6082           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6083           0 :       return false;
    6084             :     }
    6085           0 :     return true;
    6086             :   } else {
    6087           0 :     args.rval().setNull();
    6088           0 :     return true;
    6089             :   }
    6090             : }
    6091             : 
    6092             : static bool
    6093           0 : set_onvolumechange(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    6094             : {
    6095           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6096           0 :   if (args[0].isObject()) {
    6097             :     { // scope for tempRoot
    6098           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6099           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6100             :     }
    6101             :   } else {
    6102           0 :     arg0 = nullptr;
    6103             :   }
    6104           0 :   self->SetOnvolumechange(Constify(arg0));
    6105           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6106             : 
    6107           0 :   return true;
    6108             : }
    6109             : 
    6110             : static const JSJitInfo onvolumechange_getterinfo = {
    6111             :   { (JSJitGetterOp)get_onvolumechange },
    6112             :   { prototypes::id::XULElement },
    6113             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6114             :   JSJitInfo::Getter,
    6115             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6116             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6117             :   false,  /* isInfallible. False in setters. */
    6118             :   false,  /* isMovable.  Not relevant for setters. */
    6119             :   false, /* isEliminatable.  Not relevant for setters. */
    6120             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6121             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6122             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6123             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6124             : };
    6125             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6126             : static_assert(0 < 1, "There is no slot for us");
    6127             : static const JSJitInfo onvolumechange_setterinfo = {
    6128             :   { (JSJitGetterOp)set_onvolumechange },
    6129             :   { prototypes::id::XULElement },
    6130             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6131             :   JSJitInfo::Setter,
    6132             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6133             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6134             :   false,  /* isInfallible. False in setters. */
    6135             :   false,  /* isMovable.  Not relevant for setters. */
    6136             :   false, /* isEliminatable.  Not relevant for setters. */
    6137             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6138             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6139             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6140             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6141             : };
    6142             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6143             : static_assert(0 < 1, "There is no slot for us");
    6144             : 
    6145             : static bool
    6146           0 : get_onwaiting(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    6147             : {
    6148           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwaiting());
    6149           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6150           0 :   if (result) {
    6151           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6152           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6153           0 :       return false;
    6154             :     }
    6155           0 :     return true;
    6156             :   } else {
    6157           0 :     args.rval().setNull();
    6158           0 :     return true;
    6159             :   }
    6160             : }
    6161             : 
    6162             : static bool
    6163           0 : set_onwaiting(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    6164             : {
    6165           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6166           0 :   if (args[0].isObject()) {
    6167             :     { // scope for tempRoot
    6168           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6169           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6170             :     }
    6171             :   } else {
    6172           0 :     arg0 = nullptr;
    6173             :   }
    6174           0 :   self->SetOnwaiting(Constify(arg0));
    6175           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6176             : 
    6177           0 :   return true;
    6178             : }
    6179             : 
    6180             : static const JSJitInfo onwaiting_getterinfo = {
    6181             :   { (JSJitGetterOp)get_onwaiting },
    6182             :   { prototypes::id::XULElement },
    6183             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6184             :   JSJitInfo::Getter,
    6185             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6186             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6187             :   false,  /* isInfallible. False in setters. */
    6188             :   false,  /* isMovable.  Not relevant for setters. */
    6189             :   false, /* isEliminatable.  Not relevant for setters. */
    6190             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6191             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6192             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6193             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6194             : };
    6195             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6196             : static_assert(0 < 1, "There is no slot for us");
    6197             : static const JSJitInfo onwaiting_setterinfo = {
    6198             :   { (JSJitGetterOp)set_onwaiting },
    6199             :   { prototypes::id::XULElement },
    6200             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6201             :   JSJitInfo::Setter,
    6202             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6203             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6204             :   false,  /* isInfallible. False in setters. */
    6205             :   false,  /* isMovable.  Not relevant for setters. */
    6206             :   false, /* isEliminatable.  Not relevant for setters. */
    6207             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6208             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6209             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6210             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6211             : };
    6212             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6213             : static_assert(0 < 1, "There is no slot for us");
    6214             : 
    6215             : static bool
    6216           0 : get_onselectstart(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    6217             : {
    6218           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnselectstart());
    6219           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6220           0 :   if (result) {
    6221           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6222           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6223           0 :       return false;
    6224             :     }
    6225           0 :     return true;
    6226             :   } else {
    6227           0 :     args.rval().setNull();
    6228           0 :     return true;
    6229             :   }
    6230             : }
    6231             : 
    6232             : static bool
    6233           0 : set_onselectstart(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    6234             : {
    6235           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6236           0 :   if (args[0].isObject()) {
    6237             :     { // scope for tempRoot
    6238           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6239           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6240             :     }
    6241             :   } else {
    6242           0 :     arg0 = nullptr;
    6243             :   }
    6244           0 :   self->SetOnselectstart(Constify(arg0));
    6245           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6246             : 
    6247           0 :   return true;
    6248             : }
    6249             : 
    6250             : static const JSJitInfo onselectstart_getterinfo = {
    6251             :   { (JSJitGetterOp)get_onselectstart },
    6252             :   { prototypes::id::XULElement },
    6253             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6254             :   JSJitInfo::Getter,
    6255             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6256             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6257             :   false,  /* isInfallible. False in setters. */
    6258             :   false,  /* isMovable.  Not relevant for setters. */
    6259             :   false, /* isEliminatable.  Not relevant for setters. */
    6260             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6261             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6262             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6263             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6264             : };
    6265             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6266             : static_assert(0 < 1, "There is no slot for us");
    6267             : static const JSJitInfo onselectstart_setterinfo = {
    6268             :   { (JSJitGetterOp)set_onselectstart },
    6269             :   { prototypes::id::XULElement },
    6270             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6271             :   JSJitInfo::Setter,
    6272             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6273             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6274             :   false,  /* isInfallible. False in setters. */
    6275             :   false,  /* isMovable.  Not relevant for setters. */
    6276             :   false, /* isEliminatable.  Not relevant for setters. */
    6277             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6278             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6279             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6280             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6281             : };
    6282             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6283             : static_assert(0 < 1, "There is no slot for us");
    6284             : 
    6285             : static bool
    6286           0 : get_ontoggle(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    6287             : {
    6288           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntoggle());
    6289           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6290           0 :   if (result) {
    6291           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6292           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6293           0 :       return false;
    6294             :     }
    6295           0 :     return true;
    6296             :   } else {
    6297           0 :     args.rval().setNull();
    6298           0 :     return true;
    6299             :   }
    6300             : }
    6301             : 
    6302             : static bool
    6303           0 : set_ontoggle(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    6304             : {
    6305           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6306           0 :   if (args[0].isObject()) {
    6307             :     { // scope for tempRoot
    6308           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6309           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6310             :     }
    6311             :   } else {
    6312           0 :     arg0 = nullptr;
    6313             :   }
    6314           0 :   self->SetOntoggle(Constify(arg0));
    6315           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6316             : 
    6317           0 :   return true;
    6318             : }
    6319             : 
    6320             : static const JSJitInfo ontoggle_getterinfo = {
    6321             :   { (JSJitGetterOp)get_ontoggle },
    6322             :   { prototypes::id::XULElement },
    6323             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6324             :   JSJitInfo::Getter,
    6325             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6326             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6327             :   false,  /* isInfallible. False in setters. */
    6328             :   false,  /* isMovable.  Not relevant for setters. */
    6329             :   false, /* isEliminatable.  Not relevant for setters. */
    6330             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6331             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6332             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6333             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6334             : };
    6335             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6336             : static_assert(0 < 1, "There is no slot for us");
    6337             : static const JSJitInfo ontoggle_setterinfo = {
    6338             :   { (JSJitGetterOp)set_ontoggle },
    6339             :   { prototypes::id::XULElement },
    6340             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6341             :   JSJitInfo::Setter,
    6342             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6343             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6344             :   false,  /* isInfallible. False in setters. */
    6345             :   false,  /* isMovable.  Not relevant for setters. */
    6346             :   false, /* isEliminatable.  Not relevant for setters. */
    6347             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6348             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6349             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6350             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6351             : };
    6352             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6353             : static_assert(0 < 1, "There is no slot for us");
    6354             : 
    6355             : static bool
    6356           0 : get_onpointercancel(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    6357             : {
    6358           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointercancel());
    6359           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6360           0 :   if (result) {
    6361           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6362           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6363           0 :       return false;
    6364             :     }
    6365           0 :     return true;
    6366             :   } else {
    6367           0 :     args.rval().setNull();
    6368           0 :     return true;
    6369             :   }
    6370             : }
    6371             : 
    6372             : static bool
    6373           0 : set_onpointercancel(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    6374             : {
    6375           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6376           0 :   if (args[0].isObject()) {
    6377             :     { // scope for tempRoot
    6378           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6379           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6380             :     }
    6381             :   } else {
    6382           0 :     arg0 = nullptr;
    6383             :   }
    6384           0 :   self->SetOnpointercancel(Constify(arg0));
    6385           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6386             : 
    6387           0 :   return true;
    6388             : }
    6389             : 
    6390             : static const JSJitInfo onpointercancel_getterinfo = {
    6391             :   { (JSJitGetterOp)get_onpointercancel },
    6392             :   { prototypes::id::XULElement },
    6393             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6394             :   JSJitInfo::Getter,
    6395             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6396             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6397             :   false,  /* isInfallible. False in setters. */
    6398             :   false,  /* isMovable.  Not relevant for setters. */
    6399             :   false, /* isEliminatable.  Not relevant for setters. */
    6400             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6401             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6402             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6403             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6404             : };
    6405             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6406             : static_assert(0 < 1, "There is no slot for us");
    6407             : static const JSJitInfo onpointercancel_setterinfo = {
    6408             :   { (JSJitGetterOp)set_onpointercancel },
    6409             :   { prototypes::id::XULElement },
    6410             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6411             :   JSJitInfo::Setter,
    6412             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6413             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6414             :   false,  /* isInfallible. False in setters. */
    6415             :   false,  /* isMovable.  Not relevant for setters. */
    6416             :   false, /* isEliminatable.  Not relevant for setters. */
    6417             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6418             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6419             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6420             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6421             : };
    6422             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6423             : static_assert(0 < 1, "There is no slot for us");
    6424             : 
    6425             : static bool
    6426           0 : get_onpointerdown(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    6427             : {
    6428           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerdown());
    6429           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6430           0 :   if (result) {
    6431           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6432           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6433           0 :       return false;
    6434             :     }
    6435           0 :     return true;
    6436             :   } else {
    6437           0 :     args.rval().setNull();
    6438           0 :     return true;
    6439             :   }
    6440             : }
    6441             : 
    6442             : static bool
    6443           0 : set_onpointerdown(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    6444             : {
    6445           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6446           0 :   if (args[0].isObject()) {
    6447             :     { // scope for tempRoot
    6448           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6449           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6450             :     }
    6451             :   } else {
    6452           0 :     arg0 = nullptr;
    6453             :   }
    6454           0 :   self->SetOnpointerdown(Constify(arg0));
    6455           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6456             : 
    6457           0 :   return true;
    6458             : }
    6459             : 
    6460             : static const JSJitInfo onpointerdown_getterinfo = {
    6461             :   { (JSJitGetterOp)get_onpointerdown },
    6462             :   { prototypes::id::XULElement },
    6463             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6464             :   JSJitInfo::Getter,
    6465             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6466             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6467             :   false,  /* isInfallible. False in setters. */
    6468             :   false,  /* isMovable.  Not relevant for setters. */
    6469             :   false, /* isEliminatable.  Not relevant for setters. */
    6470             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6471             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6472             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6473             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6474             : };
    6475             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6476             : static_assert(0 < 1, "There is no slot for us");
    6477             : static const JSJitInfo onpointerdown_setterinfo = {
    6478             :   { (JSJitGetterOp)set_onpointerdown },
    6479             :   { prototypes::id::XULElement },
    6480             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6481             :   JSJitInfo::Setter,
    6482             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6483             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6484             :   false,  /* isInfallible. False in setters. */
    6485             :   false,  /* isMovable.  Not relevant for setters. */
    6486             :   false, /* isEliminatable.  Not relevant for setters. */
    6487             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6488             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6489             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6490             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6491             : };
    6492             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6493             : static_assert(0 < 1, "There is no slot for us");
    6494             : 
    6495             : static bool
    6496           0 : get_onpointerup(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    6497             : {
    6498           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerup());
    6499           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6500           0 :   if (result) {
    6501           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6502           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6503           0 :       return false;
    6504             :     }
    6505           0 :     return true;
    6506             :   } else {
    6507           0 :     args.rval().setNull();
    6508           0 :     return true;
    6509             :   }
    6510             : }
    6511             : 
    6512             : static bool
    6513           0 : set_onpointerup(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    6514             : {
    6515           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6516           0 :   if (args[0].isObject()) {
    6517             :     { // scope for tempRoot
    6518           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6519           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6520             :     }
    6521             :   } else {
    6522           0 :     arg0 = nullptr;
    6523             :   }
    6524           0 :   self->SetOnpointerup(Constify(arg0));
    6525           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6526             : 
    6527           0 :   return true;
    6528             : }
    6529             : 
    6530             : static const JSJitInfo onpointerup_getterinfo = {
    6531             :   { (JSJitGetterOp)get_onpointerup },
    6532             :   { prototypes::id::XULElement },
    6533             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6534             :   JSJitInfo::Getter,
    6535             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6536             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6537             :   false,  /* isInfallible. False in setters. */
    6538             :   false,  /* isMovable.  Not relevant for setters. */
    6539             :   false, /* isEliminatable.  Not relevant for setters. */
    6540             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6541             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6542             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6543             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6544             : };
    6545             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6546             : static_assert(0 < 1, "There is no slot for us");
    6547             : static const JSJitInfo onpointerup_setterinfo = {
    6548             :   { (JSJitGetterOp)set_onpointerup },
    6549             :   { prototypes::id::XULElement },
    6550             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6551             :   JSJitInfo::Setter,
    6552             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6553             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6554             :   false,  /* isInfallible. False in setters. */
    6555             :   false,  /* isMovable.  Not relevant for setters. */
    6556             :   false, /* isEliminatable.  Not relevant for setters. */
    6557             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6558             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6559             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6560             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6561             : };
    6562             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6563             : static_assert(0 < 1, "There is no slot for us");
    6564             : 
    6565             : static bool
    6566           0 : get_onpointermove(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    6567             : {
    6568           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointermove());
    6569           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6570           0 :   if (result) {
    6571           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6572           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6573           0 :       return false;
    6574             :     }
    6575           0 :     return true;
    6576             :   } else {
    6577           0 :     args.rval().setNull();
    6578           0 :     return true;
    6579             :   }
    6580             : }
    6581             : 
    6582             : static bool
    6583           0 : set_onpointermove(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    6584             : {
    6585           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6586           0 :   if (args[0].isObject()) {
    6587             :     { // scope for tempRoot
    6588           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6589           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6590             :     }
    6591             :   } else {
    6592           0 :     arg0 = nullptr;
    6593             :   }
    6594           0 :   self->SetOnpointermove(Constify(arg0));
    6595           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6596             : 
    6597           0 :   return true;
    6598             : }
    6599             : 
    6600             : static const JSJitInfo onpointermove_getterinfo = {
    6601             :   { (JSJitGetterOp)get_onpointermove },
    6602             :   { prototypes::id::XULElement },
    6603             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6604             :   JSJitInfo::Getter,
    6605             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6606             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6607             :   false,  /* isInfallible. False in setters. */
    6608             :   false,  /* isMovable.  Not relevant for setters. */
    6609             :   false, /* isEliminatable.  Not relevant for setters. */
    6610             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6611             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6612             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6613             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6614             : };
    6615             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6616             : static_assert(0 < 1, "There is no slot for us");
    6617             : static const JSJitInfo onpointermove_setterinfo = {
    6618             :   { (JSJitGetterOp)set_onpointermove },
    6619             :   { prototypes::id::XULElement },
    6620             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6621             :   JSJitInfo::Setter,
    6622             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6623             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6624             :   false,  /* isInfallible. False in setters. */
    6625             :   false,  /* isMovable.  Not relevant for setters. */
    6626             :   false, /* isEliminatable.  Not relevant for setters. */
    6627             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6628             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6629             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6630             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6631             : };
    6632             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6633             : static_assert(0 < 1, "There is no slot for us");
    6634             : 
    6635             : static bool
    6636           0 : get_onpointerout(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    6637             : {
    6638           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerout());
    6639           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6640           0 :   if (result) {
    6641           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6642           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6643           0 :       return false;
    6644             :     }
    6645           0 :     return true;
    6646             :   } else {
    6647           0 :     args.rval().setNull();
    6648           0 :     return true;
    6649             :   }
    6650             : }
    6651             : 
    6652             : static bool
    6653           0 : set_onpointerout(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    6654             : {
    6655           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6656           0 :   if (args[0].isObject()) {
    6657             :     { // scope for tempRoot
    6658           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6659           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6660             :     }
    6661             :   } else {
    6662           0 :     arg0 = nullptr;
    6663             :   }
    6664           0 :   self->SetOnpointerout(Constify(arg0));
    6665           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6666             : 
    6667           0 :   return true;
    6668             : }
    6669             : 
    6670             : static const JSJitInfo onpointerout_getterinfo = {
    6671             :   { (JSJitGetterOp)get_onpointerout },
    6672             :   { prototypes::id::XULElement },
    6673             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6674             :   JSJitInfo::Getter,
    6675             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6676             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6677             :   false,  /* isInfallible. False in setters. */
    6678             :   false,  /* isMovable.  Not relevant for setters. */
    6679             :   false, /* isEliminatable.  Not relevant for setters. */
    6680             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6681             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6682             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6683             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6684             : };
    6685             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6686             : static_assert(0 < 1, "There is no slot for us");
    6687             : static const JSJitInfo onpointerout_setterinfo = {
    6688             :   { (JSJitGetterOp)set_onpointerout },
    6689             :   { prototypes::id::XULElement },
    6690             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6691             :   JSJitInfo::Setter,
    6692             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6693             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6694             :   false,  /* isInfallible. False in setters. */
    6695             :   false,  /* isMovable.  Not relevant for setters. */
    6696             :   false, /* isEliminatable.  Not relevant for setters. */
    6697             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6698             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6699             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6700             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6701             : };
    6702             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6703             : static_assert(0 < 1, "There is no slot for us");
    6704             : 
    6705             : static bool
    6706           0 : get_onpointerover(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    6707             : {
    6708           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerover());
    6709           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6710           0 :   if (result) {
    6711           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6712           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6713           0 :       return false;
    6714             :     }
    6715           0 :     return true;
    6716             :   } else {
    6717           0 :     args.rval().setNull();
    6718           0 :     return true;
    6719             :   }
    6720             : }
    6721             : 
    6722             : static bool
    6723           0 : set_onpointerover(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    6724             : {
    6725           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6726           0 :   if (args[0].isObject()) {
    6727             :     { // scope for tempRoot
    6728           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6729           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6730             :     }
    6731             :   } else {
    6732           0 :     arg0 = nullptr;
    6733             :   }
    6734           0 :   self->SetOnpointerover(Constify(arg0));
    6735           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6736             : 
    6737           0 :   return true;
    6738             : }
    6739             : 
    6740             : static const JSJitInfo onpointerover_getterinfo = {
    6741             :   { (JSJitGetterOp)get_onpointerover },
    6742             :   { prototypes::id::XULElement },
    6743             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6744             :   JSJitInfo::Getter,
    6745             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6746             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6747             :   false,  /* isInfallible. False in setters. */
    6748             :   false,  /* isMovable.  Not relevant for setters. */
    6749             :   false, /* isEliminatable.  Not relevant for setters. */
    6750             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6751             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6752             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6753             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6754             : };
    6755             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6756             : static_assert(0 < 1, "There is no slot for us");
    6757             : static const JSJitInfo onpointerover_setterinfo = {
    6758             :   { (JSJitGetterOp)set_onpointerover },
    6759             :   { prototypes::id::XULElement },
    6760             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6761             :   JSJitInfo::Setter,
    6762             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6763             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6764             :   false,  /* isInfallible. False in setters. */
    6765             :   false,  /* isMovable.  Not relevant for setters. */
    6766             :   false, /* isEliminatable.  Not relevant for setters. */
    6767             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6768             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6769             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6770             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6771             : };
    6772             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6773             : static_assert(0 < 1, "There is no slot for us");
    6774             : 
    6775             : static bool
    6776           0 : get_onpointerenter(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    6777             : {
    6778           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerenter());
    6779           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6780           0 :   if (result) {
    6781           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6782           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6783           0 :       return false;
    6784             :     }
    6785           0 :     return true;
    6786             :   } else {
    6787           0 :     args.rval().setNull();
    6788           0 :     return true;
    6789             :   }
    6790             : }
    6791             : 
    6792             : static bool
    6793           0 : set_onpointerenter(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    6794             : {
    6795           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6796           0 :   if (args[0].isObject()) {
    6797             :     { // scope for tempRoot
    6798           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6799           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6800             :     }
    6801             :   } else {
    6802           0 :     arg0 = nullptr;
    6803             :   }
    6804           0 :   self->SetOnpointerenter(Constify(arg0));
    6805           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6806             : 
    6807           0 :   return true;
    6808             : }
    6809             : 
    6810             : static const JSJitInfo onpointerenter_getterinfo = {
    6811             :   { (JSJitGetterOp)get_onpointerenter },
    6812             :   { prototypes::id::XULElement },
    6813             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6814             :   JSJitInfo::Getter,
    6815             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6816             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6817             :   false,  /* isInfallible. False in setters. */
    6818             :   false,  /* isMovable.  Not relevant for setters. */
    6819             :   false, /* isEliminatable.  Not relevant for setters. */
    6820             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6821             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6822             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6823             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6824             : };
    6825             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6826             : static_assert(0 < 1, "There is no slot for us");
    6827             : static const JSJitInfo onpointerenter_setterinfo = {
    6828             :   { (JSJitGetterOp)set_onpointerenter },
    6829             :   { prototypes::id::XULElement },
    6830             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6831             :   JSJitInfo::Setter,
    6832             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6833             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6834             :   false,  /* isInfallible. False in setters. */
    6835             :   false,  /* isMovable.  Not relevant for setters. */
    6836             :   false, /* isEliminatable.  Not relevant for setters. */
    6837             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6838             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6839             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6840             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6841             : };
    6842             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6843             : static_assert(0 < 1, "There is no slot for us");
    6844             : 
    6845             : static bool
    6846           0 : get_onpointerleave(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    6847             : {
    6848           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnpointerleave());
    6849           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6850           0 :   if (result) {
    6851           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6852           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6853           0 :       return false;
    6854             :     }
    6855           0 :     return true;
    6856             :   } else {
    6857           0 :     args.rval().setNull();
    6858           0 :     return true;
    6859             :   }
    6860             : }
    6861             : 
    6862             : static bool
    6863           0 : set_onpointerleave(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    6864             : {
    6865           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6866           0 :   if (args[0].isObject()) {
    6867             :     { // scope for tempRoot
    6868           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6869           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6870             :     }
    6871             :   } else {
    6872           0 :     arg0 = nullptr;
    6873             :   }
    6874           0 :   self->SetOnpointerleave(Constify(arg0));
    6875           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6876             : 
    6877           0 :   return true;
    6878             : }
    6879             : 
    6880             : static const JSJitInfo onpointerleave_getterinfo = {
    6881             :   { (JSJitGetterOp)get_onpointerleave },
    6882             :   { prototypes::id::XULElement },
    6883             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6884             :   JSJitInfo::Getter,
    6885             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6886             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6887             :   false,  /* isInfallible. False in setters. */
    6888             :   false,  /* isMovable.  Not relevant for setters. */
    6889             :   false, /* isEliminatable.  Not relevant for setters. */
    6890             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6891             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6892             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6893             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6894             : };
    6895             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6896             : static_assert(0 < 1, "There is no slot for us");
    6897             : static const JSJitInfo onpointerleave_setterinfo = {
    6898             :   { (JSJitGetterOp)set_onpointerleave },
    6899             :   { prototypes::id::XULElement },
    6900             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6901             :   JSJitInfo::Setter,
    6902             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6903             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6904             :   false,  /* isInfallible. False in setters. */
    6905             :   false,  /* isMovable.  Not relevant for setters. */
    6906             :   false, /* isEliminatable.  Not relevant for setters. */
    6907             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6908             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6909             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6910             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6911             : };
    6912             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6913             : static_assert(0 < 1, "There is no slot for us");
    6914             : 
    6915             : static bool
    6916           0 : get_ongotpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    6917             : {
    6918           0 :   RefPtr<EventHandlerNonNull> result(self->GetOngotpointercapture());
    6919           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6920           0 :   if (result) {
    6921           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6922           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6923           0 :       return false;
    6924             :     }
    6925           0 :     return true;
    6926             :   } else {
    6927           0 :     args.rval().setNull();
    6928           0 :     return true;
    6929             :   }
    6930             : }
    6931             : 
    6932             : static bool
    6933           0 : set_ongotpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    6934             : {
    6935           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    6936           0 :   if (args[0].isObject()) {
    6937             :     { // scope for tempRoot
    6938           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    6939           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    6940             :     }
    6941             :   } else {
    6942           0 :     arg0 = nullptr;
    6943             :   }
    6944           0 :   self->SetOngotpointercapture(Constify(arg0));
    6945           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6946             : 
    6947           0 :   return true;
    6948             : }
    6949             : 
    6950             : static const JSJitInfo ongotpointercapture_getterinfo = {
    6951             :   { (JSJitGetterOp)get_ongotpointercapture },
    6952             :   { prototypes::id::XULElement },
    6953             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6954             :   JSJitInfo::Getter,
    6955             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6956             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    6957             :   false,  /* isInfallible. False in setters. */
    6958             :   false,  /* isMovable.  Not relevant for setters. */
    6959             :   false, /* isEliminatable.  Not relevant for setters. */
    6960             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6961             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6962             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6963             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6964             : };
    6965             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6966             : static_assert(0 < 1, "There is no slot for us");
    6967             : static const JSJitInfo ongotpointercapture_setterinfo = {
    6968             :   { (JSJitGetterOp)set_ongotpointercapture },
    6969             :   { prototypes::id::XULElement },
    6970             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    6971             :   JSJitInfo::Setter,
    6972             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    6973             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    6974             :   false,  /* isInfallible. False in setters. */
    6975             :   false,  /* isMovable.  Not relevant for setters. */
    6976             :   false, /* isEliminatable.  Not relevant for setters. */
    6977             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    6978             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    6979             :   false,  /* isTypedMethod.  Only relevant for methods. */
    6980             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    6981             : };
    6982             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    6983             : static_assert(0 < 1, "There is no slot for us");
    6984             : 
    6985             : static bool
    6986           0 : get_onlostpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    6987             : {
    6988           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnlostpointercapture());
    6989           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    6990           0 :   if (result) {
    6991           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    6992           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    6993           0 :       return false;
    6994             :     }
    6995           0 :     return true;
    6996             :   } else {
    6997           0 :     args.rval().setNull();
    6998           0 :     return true;
    6999             :   }
    7000             : }
    7001             : 
    7002             : static bool
    7003           0 : set_onlostpointercapture(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    7004             : {
    7005           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7006           0 :   if (args[0].isObject()) {
    7007             :     { // scope for tempRoot
    7008           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7009           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7010             :     }
    7011             :   } else {
    7012           0 :     arg0 = nullptr;
    7013             :   }
    7014           0 :   self->SetOnlostpointercapture(Constify(arg0));
    7015           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7016             : 
    7017           0 :   return true;
    7018             : }
    7019             : 
    7020             : static const JSJitInfo onlostpointercapture_getterinfo = {
    7021             :   { (JSJitGetterOp)get_onlostpointercapture },
    7022             :   { prototypes::id::XULElement },
    7023             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7024             :   JSJitInfo::Getter,
    7025             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7026             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7027             :   false,  /* isInfallible. False in setters. */
    7028             :   false,  /* isMovable.  Not relevant for setters. */
    7029             :   false, /* isEliminatable.  Not relevant for setters. */
    7030             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7031             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7032             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7033             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7034             : };
    7035             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7036             : static_assert(0 < 1, "There is no slot for us");
    7037             : static const JSJitInfo onlostpointercapture_setterinfo = {
    7038             :   { (JSJitGetterOp)set_onlostpointercapture },
    7039             :   { prototypes::id::XULElement },
    7040             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7041             :   JSJitInfo::Setter,
    7042             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7043             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7044             :   false,  /* isInfallible. False in setters. */
    7045             :   false,  /* isMovable.  Not relevant for setters. */
    7046             :   false, /* isEliminatable.  Not relevant for setters. */
    7047             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7048             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7049             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7050             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7051             : };
    7052             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7053             : static_assert(0 < 1, "There is no slot for us");
    7054             : 
    7055             : static bool
    7056           0 : get_onmozfullscreenchange(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    7057             : {
    7058           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmozfullscreenchange());
    7059           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7060           0 :   if (result) {
    7061           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7062           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7063           0 :       return false;
    7064             :     }
    7065           0 :     return true;
    7066             :   } else {
    7067           0 :     args.rval().setNull();
    7068           0 :     return true;
    7069             :   }
    7070             : }
    7071             : 
    7072             : static bool
    7073           0 : set_onmozfullscreenchange(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    7074             : {
    7075           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7076           0 :   if (args[0].isObject()) {
    7077             :     { // scope for tempRoot
    7078           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7079           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7080             :     }
    7081             :   } else {
    7082           0 :     arg0 = nullptr;
    7083             :   }
    7084           0 :   self->SetOnmozfullscreenchange(Constify(arg0));
    7085           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7086             : 
    7087           0 :   return true;
    7088             : }
    7089             : 
    7090             : static const JSJitInfo onmozfullscreenchange_getterinfo = {
    7091             :   { (JSJitGetterOp)get_onmozfullscreenchange },
    7092             :   { prototypes::id::XULElement },
    7093             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7094             :   JSJitInfo::Getter,
    7095             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7096             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7097             :   false,  /* isInfallible. False in setters. */
    7098             :   false,  /* isMovable.  Not relevant for setters. */
    7099             :   false, /* isEliminatable.  Not relevant for setters. */
    7100             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7101             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7102             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7103             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7104             : };
    7105             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7106             : static_assert(0 < 1, "There is no slot for us");
    7107             : static const JSJitInfo onmozfullscreenchange_setterinfo = {
    7108             :   { (JSJitGetterOp)set_onmozfullscreenchange },
    7109             :   { prototypes::id::XULElement },
    7110             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7111             :   JSJitInfo::Setter,
    7112             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7113             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7114             :   false,  /* isInfallible. False in setters. */
    7115             :   false,  /* isMovable.  Not relevant for setters. */
    7116             :   false, /* isEliminatable.  Not relevant for setters. */
    7117             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7118             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7119             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7120             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7121             : };
    7122             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7123             : static_assert(0 < 1, "There is no slot for us");
    7124             : 
    7125             : static bool
    7126           0 : get_onmozfullscreenerror(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    7127             : {
    7128           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnmozfullscreenerror());
    7129           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7130           0 :   if (result) {
    7131           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7132           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7133           0 :       return false;
    7134             :     }
    7135           0 :     return true;
    7136             :   } else {
    7137           0 :     args.rval().setNull();
    7138           0 :     return true;
    7139             :   }
    7140             : }
    7141             : 
    7142             : static bool
    7143           0 : set_onmozfullscreenerror(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    7144             : {
    7145           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7146           0 :   if (args[0].isObject()) {
    7147             :     { // scope for tempRoot
    7148           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7149           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7150             :     }
    7151             :   } else {
    7152           0 :     arg0 = nullptr;
    7153             :   }
    7154           0 :   self->SetOnmozfullscreenerror(Constify(arg0));
    7155           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7156             : 
    7157           0 :   return true;
    7158             : }
    7159             : 
    7160             : static const JSJitInfo onmozfullscreenerror_getterinfo = {
    7161             :   { (JSJitGetterOp)get_onmozfullscreenerror },
    7162             :   { prototypes::id::XULElement },
    7163             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7164             :   JSJitInfo::Getter,
    7165             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7166             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7167             :   false,  /* isInfallible. False in setters. */
    7168             :   false,  /* isMovable.  Not relevant for setters. */
    7169             :   false, /* isEliminatable.  Not relevant for setters. */
    7170             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7171             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7172             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7173             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7174             : };
    7175             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7176             : static_assert(0 < 1, "There is no slot for us");
    7177             : static const JSJitInfo onmozfullscreenerror_setterinfo = {
    7178             :   { (JSJitGetterOp)set_onmozfullscreenerror },
    7179             :   { prototypes::id::XULElement },
    7180             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7181             :   JSJitInfo::Setter,
    7182             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7183             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7184             :   false,  /* isInfallible. False in setters. */
    7185             :   false,  /* isMovable.  Not relevant for setters. */
    7186             :   false, /* isEliminatable.  Not relevant for setters. */
    7187             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7188             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7189             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7190             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7191             : };
    7192             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7193             : static_assert(0 < 1, "There is no slot for us");
    7194             : 
    7195             : static bool
    7196           0 : get_onanimationcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    7197             : {
    7198           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnanimationcancel());
    7199           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7200           0 :   if (result) {
    7201           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7202           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7203           0 :       return false;
    7204             :     }
    7205           0 :     return true;
    7206             :   } else {
    7207           0 :     args.rval().setNull();
    7208           0 :     return true;
    7209             :   }
    7210             : }
    7211             : 
    7212             : static bool
    7213           0 : set_onanimationcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    7214             : {
    7215           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7216           0 :   if (args[0].isObject()) {
    7217             :     { // scope for tempRoot
    7218           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7219           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7220             :     }
    7221             :   } else {
    7222           0 :     arg0 = nullptr;
    7223             :   }
    7224           0 :   self->SetOnanimationcancel(Constify(arg0));
    7225           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7226             : 
    7227           0 :   return true;
    7228             : }
    7229             : 
    7230             : static const JSJitInfo onanimationcancel_getterinfo = {
    7231             :   { (JSJitGetterOp)get_onanimationcancel },
    7232             :   { prototypes::id::XULElement },
    7233             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7234             :   JSJitInfo::Getter,
    7235             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7236             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7237             :   false,  /* isInfallible. False in setters. */
    7238             :   false,  /* isMovable.  Not relevant for setters. */
    7239             :   false, /* isEliminatable.  Not relevant for setters. */
    7240             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7241             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7242             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7243             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7244             : };
    7245             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7246             : static_assert(0 < 1, "There is no slot for us");
    7247             : static const JSJitInfo onanimationcancel_setterinfo = {
    7248             :   { (JSJitGetterOp)set_onanimationcancel },
    7249             :   { prototypes::id::XULElement },
    7250             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7251             :   JSJitInfo::Setter,
    7252             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7253             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7254             :   false,  /* isInfallible. False in setters. */
    7255             :   false,  /* isMovable.  Not relevant for setters. */
    7256             :   false, /* isEliminatable.  Not relevant for setters. */
    7257             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7258             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7259             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7260             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7261             : };
    7262             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7263             : static_assert(0 < 1, "There is no slot for us");
    7264             : 
    7265             : static bool
    7266           0 : get_onanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    7267             : {
    7268           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnanimationend());
    7269           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7270           0 :   if (result) {
    7271           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7272           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7273           0 :       return false;
    7274             :     }
    7275           0 :     return true;
    7276             :   } else {
    7277           0 :     args.rval().setNull();
    7278           0 :     return true;
    7279             :   }
    7280             : }
    7281             : 
    7282             : static bool
    7283           0 : set_onanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    7284             : {
    7285           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7286           0 :   if (args[0].isObject()) {
    7287             :     { // scope for tempRoot
    7288           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7289           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7290             :     }
    7291             :   } else {
    7292           0 :     arg0 = nullptr;
    7293             :   }
    7294           0 :   self->SetOnanimationend(Constify(arg0));
    7295           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7296             : 
    7297           0 :   return true;
    7298             : }
    7299             : 
    7300             : static const JSJitInfo onanimationend_getterinfo = {
    7301             :   { (JSJitGetterOp)get_onanimationend },
    7302             :   { prototypes::id::XULElement },
    7303             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7304             :   JSJitInfo::Getter,
    7305             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7306             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7307             :   false,  /* isInfallible. False in setters. */
    7308             :   false,  /* isMovable.  Not relevant for setters. */
    7309             :   false, /* isEliminatable.  Not relevant for setters. */
    7310             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7311             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7312             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7313             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7314             : };
    7315             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7316             : static_assert(0 < 1, "There is no slot for us");
    7317             : static const JSJitInfo onanimationend_setterinfo = {
    7318             :   { (JSJitGetterOp)set_onanimationend },
    7319             :   { prototypes::id::XULElement },
    7320             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7321             :   JSJitInfo::Setter,
    7322             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7323             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7324             :   false,  /* isInfallible. False in setters. */
    7325             :   false,  /* isMovable.  Not relevant for setters. */
    7326             :   false, /* isEliminatable.  Not relevant for setters. */
    7327             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7328             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7329             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7330             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7331             : };
    7332             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7333             : static_assert(0 < 1, "There is no slot for us");
    7334             : 
    7335             : static bool
    7336           0 : get_onanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    7337             : {
    7338           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnanimationiteration());
    7339           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7340           0 :   if (result) {
    7341           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7342           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7343           0 :       return false;
    7344             :     }
    7345           0 :     return true;
    7346             :   } else {
    7347           0 :     args.rval().setNull();
    7348           0 :     return true;
    7349             :   }
    7350             : }
    7351             : 
    7352             : static bool
    7353           0 : set_onanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    7354             : {
    7355           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7356           0 :   if (args[0].isObject()) {
    7357             :     { // scope for tempRoot
    7358           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7359           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7360             :     }
    7361             :   } else {
    7362           0 :     arg0 = nullptr;
    7363             :   }
    7364           0 :   self->SetOnanimationiteration(Constify(arg0));
    7365           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7366             : 
    7367           0 :   return true;
    7368             : }
    7369             : 
    7370             : static const JSJitInfo onanimationiteration_getterinfo = {
    7371             :   { (JSJitGetterOp)get_onanimationiteration },
    7372             :   { prototypes::id::XULElement },
    7373             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7374             :   JSJitInfo::Getter,
    7375             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7376             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7377             :   false,  /* isInfallible. False in setters. */
    7378             :   false,  /* isMovable.  Not relevant for setters. */
    7379             :   false, /* isEliminatable.  Not relevant for setters. */
    7380             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7381             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7382             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7383             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7384             : };
    7385             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7386             : static_assert(0 < 1, "There is no slot for us");
    7387             : static const JSJitInfo onanimationiteration_setterinfo = {
    7388             :   { (JSJitGetterOp)set_onanimationiteration },
    7389             :   { prototypes::id::XULElement },
    7390             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7391             :   JSJitInfo::Setter,
    7392             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7393             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7394             :   false,  /* isInfallible. False in setters. */
    7395             :   false,  /* isMovable.  Not relevant for setters. */
    7396             :   false, /* isEliminatable.  Not relevant for setters. */
    7397             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7398             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7399             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7400             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7401             : };
    7402             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7403             : static_assert(0 < 1, "There is no slot for us");
    7404             : 
    7405             : static bool
    7406           0 : get_onanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    7407             : {
    7408           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnanimationstart());
    7409           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7410           0 :   if (result) {
    7411           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7412           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7413           0 :       return false;
    7414             :     }
    7415           0 :     return true;
    7416             :   } else {
    7417           0 :     args.rval().setNull();
    7418           0 :     return true;
    7419             :   }
    7420             : }
    7421             : 
    7422             : static bool
    7423           0 : set_onanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    7424             : {
    7425           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7426           0 :   if (args[0].isObject()) {
    7427             :     { // scope for tempRoot
    7428           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7429           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7430             :     }
    7431             :   } else {
    7432           0 :     arg0 = nullptr;
    7433             :   }
    7434           0 :   self->SetOnanimationstart(Constify(arg0));
    7435           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7436             : 
    7437           0 :   return true;
    7438             : }
    7439             : 
    7440             : static const JSJitInfo onanimationstart_getterinfo = {
    7441             :   { (JSJitGetterOp)get_onanimationstart },
    7442             :   { prototypes::id::XULElement },
    7443             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7444             :   JSJitInfo::Getter,
    7445             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7446             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7447             :   false,  /* isInfallible. False in setters. */
    7448             :   false,  /* isMovable.  Not relevant for setters. */
    7449             :   false, /* isEliminatable.  Not relevant for setters. */
    7450             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7451             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7452             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7453             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7454             : };
    7455             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7456             : static_assert(0 < 1, "There is no slot for us");
    7457             : static const JSJitInfo onanimationstart_setterinfo = {
    7458             :   { (JSJitGetterOp)set_onanimationstart },
    7459             :   { prototypes::id::XULElement },
    7460             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7461             :   JSJitInfo::Setter,
    7462             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7463             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7464             :   false,  /* isInfallible. False in setters. */
    7465             :   false,  /* isMovable.  Not relevant for setters. */
    7466             :   false, /* isEliminatable.  Not relevant for setters. */
    7467             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7468             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7469             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7470             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7471             : };
    7472             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7473             : static_assert(0 < 1, "There is no slot for us");
    7474             : 
    7475             : static bool
    7476           0 : get_ontransitioncancel(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    7477             : {
    7478           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntransitioncancel());
    7479           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7480           0 :   if (result) {
    7481           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7482           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7483           0 :       return false;
    7484             :     }
    7485           0 :     return true;
    7486             :   } else {
    7487           0 :     args.rval().setNull();
    7488           0 :     return true;
    7489             :   }
    7490             : }
    7491             : 
    7492             : static bool
    7493           0 : set_ontransitioncancel(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    7494             : {
    7495           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7496           0 :   if (args[0].isObject()) {
    7497             :     { // scope for tempRoot
    7498           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7499           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7500             :     }
    7501             :   } else {
    7502           0 :     arg0 = nullptr;
    7503             :   }
    7504           0 :   self->SetOntransitioncancel(Constify(arg0));
    7505           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7506             : 
    7507           0 :   return true;
    7508             : }
    7509             : 
    7510             : static const JSJitInfo ontransitioncancel_getterinfo = {
    7511             :   { (JSJitGetterOp)get_ontransitioncancel },
    7512             :   { prototypes::id::XULElement },
    7513             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7514             :   JSJitInfo::Getter,
    7515             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7516             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7517             :   false,  /* isInfallible. False in setters. */
    7518             :   false,  /* isMovable.  Not relevant for setters. */
    7519             :   false, /* isEliminatable.  Not relevant for setters. */
    7520             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7521             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7522             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7523             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7524             : };
    7525             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7526             : static_assert(0 < 1, "There is no slot for us");
    7527             : static const JSJitInfo ontransitioncancel_setterinfo = {
    7528             :   { (JSJitGetterOp)set_ontransitioncancel },
    7529             :   { prototypes::id::XULElement },
    7530             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7531             :   JSJitInfo::Setter,
    7532             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7533             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7534             :   false,  /* isInfallible. False in setters. */
    7535             :   false,  /* isMovable.  Not relevant for setters. */
    7536             :   false, /* isEliminatable.  Not relevant for setters. */
    7537             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7538             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7539             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7540             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7541             : };
    7542             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7543             : static_assert(0 < 1, "There is no slot for us");
    7544             : 
    7545             : static bool
    7546           0 : get_ontransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    7547             : {
    7548           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntransitionend());
    7549           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7550           0 :   if (result) {
    7551           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7552           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7553           0 :       return false;
    7554             :     }
    7555           0 :     return true;
    7556             :   } else {
    7557           0 :     args.rval().setNull();
    7558           0 :     return true;
    7559             :   }
    7560             : }
    7561             : 
    7562             : static bool
    7563           0 : set_ontransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    7564             : {
    7565           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7566           0 :   if (args[0].isObject()) {
    7567             :     { // scope for tempRoot
    7568           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7569           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7570             :     }
    7571             :   } else {
    7572           0 :     arg0 = nullptr;
    7573             :   }
    7574           0 :   self->SetOntransitionend(Constify(arg0));
    7575           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7576             : 
    7577           0 :   return true;
    7578             : }
    7579             : 
    7580             : static const JSJitInfo ontransitionend_getterinfo = {
    7581             :   { (JSJitGetterOp)get_ontransitionend },
    7582             :   { prototypes::id::XULElement },
    7583             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7584             :   JSJitInfo::Getter,
    7585             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7586             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7587             :   false,  /* isInfallible. False in setters. */
    7588             :   false,  /* isMovable.  Not relevant for setters. */
    7589             :   false, /* isEliminatable.  Not relevant for setters. */
    7590             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7591             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7592             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7593             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7594             : };
    7595             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7596             : static_assert(0 < 1, "There is no slot for us");
    7597             : static const JSJitInfo ontransitionend_setterinfo = {
    7598             :   { (JSJitGetterOp)set_ontransitionend },
    7599             :   { prototypes::id::XULElement },
    7600             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7601             :   JSJitInfo::Setter,
    7602             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7603             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7604             :   false,  /* isInfallible. False in setters. */
    7605             :   false,  /* isMovable.  Not relevant for setters. */
    7606             :   false, /* isEliminatable.  Not relevant for setters. */
    7607             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7608             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7609             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7610             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7611             : };
    7612             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7613             : static_assert(0 < 1, "There is no slot for us");
    7614             : 
    7615             : static bool
    7616           0 : get_ontransitionrun(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    7617             : {
    7618           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntransitionrun());
    7619           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7620           0 :   if (result) {
    7621           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7622           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7623           0 :       return false;
    7624             :     }
    7625           0 :     return true;
    7626             :   } else {
    7627           0 :     args.rval().setNull();
    7628           0 :     return true;
    7629             :   }
    7630             : }
    7631             : 
    7632             : static bool
    7633           0 : set_ontransitionrun(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    7634             : {
    7635           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7636           0 :   if (args[0].isObject()) {
    7637             :     { // scope for tempRoot
    7638           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7639           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7640             :     }
    7641             :   } else {
    7642           0 :     arg0 = nullptr;
    7643             :   }
    7644           0 :   self->SetOntransitionrun(Constify(arg0));
    7645           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7646             : 
    7647           0 :   return true;
    7648             : }
    7649             : 
    7650             : static const JSJitInfo ontransitionrun_getterinfo = {
    7651             :   { (JSJitGetterOp)get_ontransitionrun },
    7652             :   { prototypes::id::XULElement },
    7653             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7654             :   JSJitInfo::Getter,
    7655             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7656             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7657             :   false,  /* isInfallible. False in setters. */
    7658             :   false,  /* isMovable.  Not relevant for setters. */
    7659             :   false, /* isEliminatable.  Not relevant for setters. */
    7660             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7661             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7662             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7663             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7664             : };
    7665             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7666             : static_assert(0 < 1, "There is no slot for us");
    7667             : static const JSJitInfo ontransitionrun_setterinfo = {
    7668             :   { (JSJitGetterOp)set_ontransitionrun },
    7669             :   { prototypes::id::XULElement },
    7670             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7671             :   JSJitInfo::Setter,
    7672             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7673             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7674             :   false,  /* isInfallible. False in setters. */
    7675             :   false,  /* isMovable.  Not relevant for setters. */
    7676             :   false, /* isEliminatable.  Not relevant for setters. */
    7677             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7678             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7679             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7680             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7681             : };
    7682             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7683             : static_assert(0 < 1, "There is no slot for us");
    7684             : 
    7685             : static bool
    7686           0 : get_ontransitionstart(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    7687             : {
    7688           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntransitionstart());
    7689           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7690           0 :   if (result) {
    7691           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7692           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7693           0 :       return false;
    7694             :     }
    7695           0 :     return true;
    7696             :   } else {
    7697           0 :     args.rval().setNull();
    7698           0 :     return true;
    7699             :   }
    7700             : }
    7701             : 
    7702             : static bool
    7703           0 : set_ontransitionstart(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    7704             : {
    7705           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7706           0 :   if (args[0].isObject()) {
    7707             :     { // scope for tempRoot
    7708           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7709           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7710             :     }
    7711             :   } else {
    7712           0 :     arg0 = nullptr;
    7713             :   }
    7714           0 :   self->SetOntransitionstart(Constify(arg0));
    7715           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7716             : 
    7717           0 :   return true;
    7718             : }
    7719             : 
    7720             : static const JSJitInfo ontransitionstart_getterinfo = {
    7721             :   { (JSJitGetterOp)get_ontransitionstart },
    7722             :   { prototypes::id::XULElement },
    7723             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7724             :   JSJitInfo::Getter,
    7725             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7726             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7727             :   false,  /* isInfallible. False in setters. */
    7728             :   false,  /* isMovable.  Not relevant for setters. */
    7729             :   false, /* isEliminatable.  Not relevant for setters. */
    7730             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7731             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7732             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7733             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7734             : };
    7735             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7736             : static_assert(0 < 1, "There is no slot for us");
    7737             : static const JSJitInfo ontransitionstart_setterinfo = {
    7738             :   { (JSJitGetterOp)set_ontransitionstart },
    7739             :   { prototypes::id::XULElement },
    7740             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7741             :   JSJitInfo::Setter,
    7742             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7743             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7744             :   false,  /* isInfallible. False in setters. */
    7745             :   false,  /* isMovable.  Not relevant for setters. */
    7746             :   false, /* isEliminatable.  Not relevant for setters. */
    7747             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7748             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7749             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7750             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7751             : };
    7752             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7753             : static_assert(0 < 1, "There is no slot for us");
    7754             : 
    7755             : static bool
    7756           0 : get_onwebkitanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    7757             : {
    7758           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationend());
    7759           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7760           0 :   if (result) {
    7761           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7762           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7763           0 :       return false;
    7764             :     }
    7765           0 :     return true;
    7766             :   } else {
    7767           0 :     args.rval().setNull();
    7768           0 :     return true;
    7769             :   }
    7770             : }
    7771             : 
    7772             : static bool
    7773           0 : set_onwebkitanimationend(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    7774             : {
    7775           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7776           0 :   if (args[0].isObject()) {
    7777             :     { // scope for tempRoot
    7778           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7779           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7780             :     }
    7781             :   } else {
    7782           0 :     arg0 = nullptr;
    7783             :   }
    7784           0 :   self->SetOnwebkitanimationend(Constify(arg0));
    7785           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7786             : 
    7787           0 :   return true;
    7788             : }
    7789             : 
    7790             : static const JSJitInfo onwebkitanimationend_getterinfo = {
    7791             :   { (JSJitGetterOp)get_onwebkitanimationend },
    7792             :   { prototypes::id::XULElement },
    7793             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7794             :   JSJitInfo::Getter,
    7795             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7796             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7797             :   false,  /* isInfallible. False in setters. */
    7798             :   false,  /* isMovable.  Not relevant for setters. */
    7799             :   false, /* isEliminatable.  Not relevant for setters. */
    7800             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7801             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7802             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7803             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7804             : };
    7805             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7806             : static_assert(0 < 1, "There is no slot for us");
    7807             : static const JSJitInfo onwebkitanimationend_setterinfo = {
    7808             :   { (JSJitGetterOp)set_onwebkitanimationend },
    7809             :   { prototypes::id::XULElement },
    7810             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7811             :   JSJitInfo::Setter,
    7812             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7813             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7814             :   false,  /* isInfallible. False in setters. */
    7815             :   false,  /* isMovable.  Not relevant for setters. */
    7816             :   false, /* isEliminatable.  Not relevant for setters. */
    7817             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7818             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7819             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7820             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7821             : };
    7822             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7823             : static_assert(0 < 1, "There is no slot for us");
    7824             : 
    7825             : static bool
    7826           0 : get_onwebkitanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    7827             : {
    7828           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationiteration());
    7829           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7830           0 :   if (result) {
    7831           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7832           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7833           0 :       return false;
    7834             :     }
    7835           0 :     return true;
    7836             :   } else {
    7837           0 :     args.rval().setNull();
    7838           0 :     return true;
    7839             :   }
    7840             : }
    7841             : 
    7842             : static bool
    7843           0 : set_onwebkitanimationiteration(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    7844             : {
    7845           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7846           0 :   if (args[0].isObject()) {
    7847             :     { // scope for tempRoot
    7848           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7849           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7850             :     }
    7851             :   } else {
    7852           0 :     arg0 = nullptr;
    7853             :   }
    7854           0 :   self->SetOnwebkitanimationiteration(Constify(arg0));
    7855           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7856             : 
    7857           0 :   return true;
    7858             : }
    7859             : 
    7860             : static const JSJitInfo onwebkitanimationiteration_getterinfo = {
    7861             :   { (JSJitGetterOp)get_onwebkitanimationiteration },
    7862             :   { prototypes::id::XULElement },
    7863             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7864             :   JSJitInfo::Getter,
    7865             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7866             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7867             :   false,  /* isInfallible. False in setters. */
    7868             :   false,  /* isMovable.  Not relevant for setters. */
    7869             :   false, /* isEliminatable.  Not relevant for setters. */
    7870             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7871             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7872             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7873             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7874             : };
    7875             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7876             : static_assert(0 < 1, "There is no slot for us");
    7877             : static const JSJitInfo onwebkitanimationiteration_setterinfo = {
    7878             :   { (JSJitGetterOp)set_onwebkitanimationiteration },
    7879             :   { prototypes::id::XULElement },
    7880             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7881             :   JSJitInfo::Setter,
    7882             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7883             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7884             :   false,  /* isInfallible. False in setters. */
    7885             :   false,  /* isMovable.  Not relevant for setters. */
    7886             :   false, /* isEliminatable.  Not relevant for setters. */
    7887             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7888             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7889             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7890             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7891             : };
    7892             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7893             : static_assert(0 < 1, "There is no slot for us");
    7894             : 
    7895             : static bool
    7896           0 : get_onwebkitanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    7897             : {
    7898           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwebkitanimationstart());
    7899           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7900           0 :   if (result) {
    7901           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7902           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7903           0 :       return false;
    7904             :     }
    7905           0 :     return true;
    7906             :   } else {
    7907           0 :     args.rval().setNull();
    7908           0 :     return true;
    7909             :   }
    7910             : }
    7911             : 
    7912             : static bool
    7913           0 : set_onwebkitanimationstart(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    7914             : {
    7915           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7916           0 :   if (args[0].isObject()) {
    7917             :     { // scope for tempRoot
    7918           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7919           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7920             :     }
    7921             :   } else {
    7922           0 :     arg0 = nullptr;
    7923             :   }
    7924           0 :   self->SetOnwebkitanimationstart(Constify(arg0));
    7925           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7926             : 
    7927           0 :   return true;
    7928             : }
    7929             : 
    7930             : static const JSJitInfo onwebkitanimationstart_getterinfo = {
    7931             :   { (JSJitGetterOp)get_onwebkitanimationstart },
    7932             :   { prototypes::id::XULElement },
    7933             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7934             :   JSJitInfo::Getter,
    7935             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7936             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    7937             :   false,  /* isInfallible. False in setters. */
    7938             :   false,  /* isMovable.  Not relevant for setters. */
    7939             :   false, /* isEliminatable.  Not relevant for setters. */
    7940             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7941             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7942             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7943             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7944             : };
    7945             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7946             : static_assert(0 < 1, "There is no slot for us");
    7947             : static const JSJitInfo onwebkitanimationstart_setterinfo = {
    7948             :   { (JSJitGetterOp)set_onwebkitanimationstart },
    7949             :   { prototypes::id::XULElement },
    7950             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    7951             :   JSJitInfo::Setter,
    7952             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    7953             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    7954             :   false,  /* isInfallible. False in setters. */
    7955             :   false,  /* isMovable.  Not relevant for setters. */
    7956             :   false, /* isEliminatable.  Not relevant for setters. */
    7957             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    7958             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    7959             :   false,  /* isTypedMethod.  Only relevant for methods. */
    7960             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    7961             : };
    7962             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    7963             : static_assert(0 < 1, "There is no slot for us");
    7964             : 
    7965             : static bool
    7966           0 : get_onwebkittransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    7967             : {
    7968           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnwebkittransitionend());
    7969           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7970           0 :   if (result) {
    7971           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    7972           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    7973           0 :       return false;
    7974             :     }
    7975           0 :     return true;
    7976             :   } else {
    7977           0 :     args.rval().setNull();
    7978           0 :     return true;
    7979             :   }
    7980             : }
    7981             : 
    7982             : static bool
    7983           0 : set_onwebkittransitionend(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    7984             : {
    7985           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    7986           0 :   if (args[0].isObject()) {
    7987             :     { // scope for tempRoot
    7988           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    7989           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    7990             :     }
    7991             :   } else {
    7992           0 :     arg0 = nullptr;
    7993             :   }
    7994           0 :   self->SetOnwebkittransitionend(Constify(arg0));
    7995           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    7996             : 
    7997           0 :   return true;
    7998             : }
    7999             : 
    8000             : static const JSJitInfo onwebkittransitionend_getterinfo = {
    8001             :   { (JSJitGetterOp)get_onwebkittransitionend },
    8002             :   { prototypes::id::XULElement },
    8003             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    8004             :   JSJitInfo::Getter,
    8005             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8006             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8007             :   false,  /* isInfallible. False in setters. */
    8008             :   false,  /* isMovable.  Not relevant for setters. */
    8009             :   false, /* isEliminatable.  Not relevant for setters. */
    8010             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8011             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8012             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8013             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8014             : };
    8015             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8016             : static_assert(0 < 1, "There is no slot for us");
    8017             : static const JSJitInfo onwebkittransitionend_setterinfo = {
    8018             :   { (JSJitGetterOp)set_onwebkittransitionend },
    8019             :   { prototypes::id::XULElement },
    8020             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    8021             :   JSJitInfo::Setter,
    8022             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8023             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8024             :   false,  /* isInfallible. False in setters. */
    8025             :   false,  /* isMovable.  Not relevant for setters. */
    8026             :   false, /* isEliminatable.  Not relevant for setters. */
    8027             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8028             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8029             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8030             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8031             : };
    8032             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8033             : static_assert(0 < 1, "There is no slot for us");
    8034             : 
    8035             : static bool
    8036          98 : get_frameLoader(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    8037             : {
    8038         196 :   auto result(StrongOrRawPtr<nsIFrameLoader>(self->GetFrameLoader()));
    8039          98 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8040          98 :   if (!result) {
    8041           0 :     args.rval().setNull();
    8042           0 :     return true;
    8043             :   }
    8044          98 :   if (!WrapObject(cx, result, &NS_GET_IID(nsIFrameLoader), args.rval())) {
    8045           0 :     return false;
    8046             :   }
    8047          98 :   return true;
    8048             : }
    8049             : 
    8050             : static const JSJitInfo frameLoader_getterinfo = {
    8051             :   { (JSJitGetterOp)get_frameLoader },
    8052             :   { prototypes::id::XULElement },
    8053             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    8054             :   JSJitInfo::Getter,
    8055             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8056             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8057             :   false,  /* isInfallible. False in setters. */
    8058             :   false,  /* isMovable.  Not relevant for setters. */
    8059             :   false, /* isEliminatable.  Not relevant for setters. */
    8060             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8061             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8062             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8063             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8064             : };
    8065             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8066             : static_assert(0 < 1, "There is no slot for us");
    8067             : 
    8068             : static bool
    8069           0 : setIsPrerendered(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, const JSJitMethodCallArgs& args)
    8070             : {
    8071           0 :   self->SetIsPrerendered();
    8072           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8073           0 :   args.rval().setUndefined();
    8074           0 :   return true;
    8075             : }
    8076             : 
    8077             : static const JSJitInfo setIsPrerendered_methodinfo = {
    8078             :   { (JSJitGetterOp)setIsPrerendered },
    8079             :   { prototypes::id::XULElement },
    8080             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    8081             :   JSJitInfo::Method,
    8082             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8083             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8084             :   true,  /* isInfallible. False in setters. */
    8085             :   false,  /* isMovable.  Not relevant for setters. */
    8086             :   false, /* isEliminatable.  Not relevant for setters. */
    8087             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8088             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8089             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8090             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8091             : };
    8092             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8093             : static_assert(0 < 1, "There is no slot for us");
    8094             : 
    8095             : static bool
    8096           0 : presetOpenerWindow(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, const JSJitMethodCallArgs& args)
    8097             : {
    8098           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    8099           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULElement.presetOpenerWindow");
    8100             :   }
    8101             :   nsPIDOMWindowOuter* arg0;
    8102           0 :   RefPtr<nsPIDOMWindowOuter> arg0_holder;
    8103           0 :   if (args[0].isObject()) {
    8104           0 :     JS::Rooted<JSObject*> source(cx, &args[0].toObject());
    8105           0 :     if (NS_FAILED(UnwrapArg<nsPIDOMWindowOuter>(cx, source, getter_AddRefs(arg0_holder)))) {
    8106           0 :       ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of XULElement.presetOpenerWindow", "WindowProxy");
    8107           0 :       return false;
    8108             :     }
    8109           0 :     MOZ_ASSERT(arg0_holder);
    8110           0 :     arg0 = arg0_holder;
    8111           0 :   } else if (args[0].isNullOrUndefined()) {
    8112           0 :     arg0 = nullptr;
    8113             :   } else {
    8114           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of XULElement.presetOpenerWindow");
    8115           0 :     return false;
    8116             :   }
    8117           0 :   binding_detail::FastErrorResult rv;
    8118           0 :   self->PresetOpenerWindow(Constify(arg0), rv);
    8119           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    8120           0 :     return false;
    8121             :   }
    8122           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8123           0 :   args.rval().setUndefined();
    8124           0 :   return true;
    8125             : }
    8126             : 
    8127             : static const JSJitInfo presetOpenerWindow_methodinfo = {
    8128             :   { (JSJitGetterOp)presetOpenerWindow },
    8129             :   { prototypes::id::XULElement },
    8130             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    8131             :   JSJitInfo::Method,
    8132             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8133             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8134             :   false,  /* isInfallible. False in setters. */
    8135             :   false,  /* isMovable.  Not relevant for setters. */
    8136             :   false, /* isEliminatable.  Not relevant for setters. */
    8137             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8138             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8139             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8140             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8141             : };
    8142             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8143             : static_assert(0 < 1, "There is no slot for us");
    8144             : 
    8145             : static bool
    8146           0 : swapFrameLoaders(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, const JSJitMethodCallArgs& args)
    8147             : {
    8148           0 :   unsigned argcount = std::min(args.length(), 1u);
    8149           0 :   switch (argcount) {
    8150             :     case 1: {
    8151           0 :       if (args[0].isObject()) {
    8152             :         do {
    8153           0 :           NonNull<nsXULElement> arg0;
    8154             :           {
    8155           0 :             nsresult rv = UnwrapObject<prototypes::id::XULElement, nsXULElement>(args[0], arg0);
    8156           0 :             if (NS_FAILED(rv)) {
    8157           0 :               break;
    8158             :             }
    8159             :           }
    8160           0 :           binding_detail::FastErrorResult rv;
    8161           0 :           self->SwapFrameLoaders(NonNullHelper(arg0), rv);
    8162           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    8163           0 :             return false;
    8164             :           }
    8165           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8166           0 :           args.rval().setUndefined();
    8167           0 :           return true;
    8168             :         } while (0);
    8169             :         do {
    8170           0 :           NonNull<mozilla::dom::HTMLIFrameElement> arg0;
    8171             :           {
    8172           0 :             nsresult rv = UnwrapObject<prototypes::id::HTMLIFrameElement, mozilla::dom::HTMLIFrameElement>(args[0], arg0);
    8173           0 :             if (NS_FAILED(rv)) {
    8174           0 :               break;
    8175             :             }
    8176             :           }
    8177           0 :           binding_detail::FastErrorResult rv;
    8178           0 :           self->SwapFrameLoaders(NonNullHelper(arg0), rv);
    8179           0 :           if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    8180           0 :             return false;
    8181             :           }
    8182           0 :           MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8183           0 :           args.rval().setUndefined();
    8184           0 :           return true;
    8185             :         } while (0);
    8186             :       }
    8187           0 :       return ThrowErrorMessage(cx, MSG_OVERLOAD_RESOLUTION_FAILED, "1", "1", "XULElement.swapFrameLoaders");
    8188             :       break;
    8189             :     }
    8190             :     default: {
    8191           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULElement.swapFrameLoaders");
    8192             :       break;
    8193             :     }
    8194             :   }
    8195             :   MOZ_CRASH("We have an always-returning default case");
    8196             :   return false;
    8197             : }
    8198             : 
    8199             : static const JSJitInfo swapFrameLoaders_methodinfo = {
    8200             :   { (JSJitGetterOp)swapFrameLoaders },
    8201             :   { prototypes::id::XULElement },
    8202             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    8203             :   JSJitInfo::Method,
    8204             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8205             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8206             :   false,  /* isInfallible. False in setters. */
    8207             :   false,  /* isMovable.  Not relevant for setters. */
    8208             :   false, /* isEliminatable.  Not relevant for setters. */
    8209             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8210             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8211             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8212             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8213             : };
    8214             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8215             : static_assert(0 < 1, "There is no slot for us");
    8216             : 
    8217             : static bool
    8218           0 : get_onerror(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    8219             : {
    8220           0 :   RefPtr<EventHandlerNonNull> result(self->GetOnerror());
    8221           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8222           0 :   if (result) {
    8223           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8224           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8225           0 :       return false;
    8226             :     }
    8227           0 :     return true;
    8228             :   } else {
    8229           0 :     args.rval().setNull();
    8230           0 :     return true;
    8231             :   }
    8232             : }
    8233             : 
    8234             : static bool
    8235           0 : set_onerror(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    8236             : {
    8237           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8238           0 :   if (args[0].isObject()) {
    8239             :     { // scope for tempRoot
    8240           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8241           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8242             :     }
    8243             :   } else {
    8244           0 :     arg0 = nullptr;
    8245             :   }
    8246           0 :   self->SetOnerror(Constify(arg0));
    8247           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8248             : 
    8249           0 :   return true;
    8250             : }
    8251             : 
    8252             : static const JSJitInfo onerror_getterinfo = {
    8253             :   { (JSJitGetterOp)get_onerror },
    8254             :   { prototypes::id::XULElement },
    8255             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    8256             :   JSJitInfo::Getter,
    8257             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8258             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8259             :   false,  /* isInfallible. False in setters. */
    8260             :   false,  /* isMovable.  Not relevant for setters. */
    8261             :   false, /* isEliminatable.  Not relevant for setters. */
    8262             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8263             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8264             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8265             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8266             : };
    8267             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8268             : static_assert(0 < 1, "There is no slot for us");
    8269             : static const JSJitInfo onerror_setterinfo = {
    8270             :   { (JSJitGetterOp)set_onerror },
    8271             :   { prototypes::id::XULElement },
    8272             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    8273             :   JSJitInfo::Setter,
    8274             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8275             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8276             :   false,  /* isInfallible. False in setters. */
    8277             :   false,  /* isMovable.  Not relevant for setters. */
    8278             :   false, /* isEliminatable.  Not relevant for setters. */
    8279             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8280             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8281             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8282             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8283             : };
    8284             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8285             : static_assert(0 < 1, "There is no slot for us");
    8286             : 
    8287             : static bool
    8288           0 : get_ontouchstart(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    8289             : {
    8290           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntouchstart());
    8291           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8292           0 :   if (result) {
    8293           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8294           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8295           0 :       return false;
    8296             :     }
    8297           0 :     return true;
    8298             :   } else {
    8299           0 :     args.rval().setNull();
    8300           0 :     return true;
    8301             :   }
    8302             : }
    8303             : 
    8304             : static bool
    8305           0 : set_ontouchstart(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    8306             : {
    8307           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8308           0 :   if (args[0].isObject()) {
    8309             :     { // scope for tempRoot
    8310           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8311           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8312             :     }
    8313             :   } else {
    8314           0 :     arg0 = nullptr;
    8315             :   }
    8316           0 :   self->SetOntouchstart(Constify(arg0));
    8317           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8318             : 
    8319           0 :   return true;
    8320             : }
    8321             : 
    8322             : static const JSJitInfo ontouchstart_getterinfo = {
    8323             :   { (JSJitGetterOp)get_ontouchstart },
    8324             :   { prototypes::id::XULElement },
    8325             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    8326             :   JSJitInfo::Getter,
    8327             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8328             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8329             :   false,  /* isInfallible. False in setters. */
    8330             :   false,  /* isMovable.  Not relevant for setters. */
    8331             :   false, /* isEliminatable.  Not relevant for setters. */
    8332             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8333             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8334             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8335             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8336             : };
    8337             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8338             : static_assert(0 < 1, "There is no slot for us");
    8339             : static const JSJitInfo ontouchstart_setterinfo = {
    8340             :   { (JSJitGetterOp)set_ontouchstart },
    8341             :   { prototypes::id::XULElement },
    8342             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    8343             :   JSJitInfo::Setter,
    8344             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8345             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8346             :   false,  /* isInfallible. False in setters. */
    8347             :   false,  /* isMovable.  Not relevant for setters. */
    8348             :   false, /* isEliminatable.  Not relevant for setters. */
    8349             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8350             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8351             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8352             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8353             : };
    8354             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8355             : static_assert(0 < 1, "There is no slot for us");
    8356             : 
    8357             : static bool
    8358           0 : get_ontouchend(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    8359             : {
    8360           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntouchend());
    8361           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8362           0 :   if (result) {
    8363           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8364           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8365           0 :       return false;
    8366             :     }
    8367           0 :     return true;
    8368             :   } else {
    8369           0 :     args.rval().setNull();
    8370           0 :     return true;
    8371             :   }
    8372             : }
    8373             : 
    8374             : static bool
    8375           0 : set_ontouchend(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    8376             : {
    8377           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8378           0 :   if (args[0].isObject()) {
    8379             :     { // scope for tempRoot
    8380           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8381           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8382             :     }
    8383             :   } else {
    8384           0 :     arg0 = nullptr;
    8385             :   }
    8386           0 :   self->SetOntouchend(Constify(arg0));
    8387           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8388             : 
    8389           0 :   return true;
    8390             : }
    8391             : 
    8392             : static const JSJitInfo ontouchend_getterinfo = {
    8393             :   { (JSJitGetterOp)get_ontouchend },
    8394             :   { prototypes::id::XULElement },
    8395             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    8396             :   JSJitInfo::Getter,
    8397             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8398             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8399             :   false,  /* isInfallible. False in setters. */
    8400             :   false,  /* isMovable.  Not relevant for setters. */
    8401             :   false, /* isEliminatable.  Not relevant for setters. */
    8402             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8403             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8404             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8405             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8406             : };
    8407             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8408             : static_assert(0 < 1, "There is no slot for us");
    8409             : static const JSJitInfo ontouchend_setterinfo = {
    8410             :   { (JSJitGetterOp)set_ontouchend },
    8411             :   { prototypes::id::XULElement },
    8412             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    8413             :   JSJitInfo::Setter,
    8414             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8415             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8416             :   false,  /* isInfallible. False in setters. */
    8417             :   false,  /* isMovable.  Not relevant for setters. */
    8418             :   false, /* isEliminatable.  Not relevant for setters. */
    8419             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8420             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8421             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8422             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8423             : };
    8424             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8425             : static_assert(0 < 1, "There is no slot for us");
    8426             : 
    8427             : static bool
    8428           0 : get_ontouchmove(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    8429             : {
    8430           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntouchmove());
    8431           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8432           0 :   if (result) {
    8433           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8434           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8435           0 :       return false;
    8436             :     }
    8437           0 :     return true;
    8438             :   } else {
    8439           0 :     args.rval().setNull();
    8440           0 :     return true;
    8441             :   }
    8442             : }
    8443             : 
    8444             : static bool
    8445           0 : set_ontouchmove(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    8446             : {
    8447           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8448           0 :   if (args[0].isObject()) {
    8449             :     { // scope for tempRoot
    8450           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8451           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8452             :     }
    8453             :   } else {
    8454           0 :     arg0 = nullptr;
    8455             :   }
    8456           0 :   self->SetOntouchmove(Constify(arg0));
    8457           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8458             : 
    8459           0 :   return true;
    8460             : }
    8461             : 
    8462             : static const JSJitInfo ontouchmove_getterinfo = {
    8463             :   { (JSJitGetterOp)get_ontouchmove },
    8464             :   { prototypes::id::XULElement },
    8465             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    8466             :   JSJitInfo::Getter,
    8467             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8468             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8469             :   false,  /* isInfallible. False in setters. */
    8470             :   false,  /* isMovable.  Not relevant for setters. */
    8471             :   false, /* isEliminatable.  Not relevant for setters. */
    8472             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8473             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8474             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8475             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8476             : };
    8477             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8478             : static_assert(0 < 1, "There is no slot for us");
    8479             : static const JSJitInfo ontouchmove_setterinfo = {
    8480             :   { (JSJitGetterOp)set_ontouchmove },
    8481             :   { prototypes::id::XULElement },
    8482             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    8483             :   JSJitInfo::Setter,
    8484             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8485             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8486             :   false,  /* isInfallible. False in setters. */
    8487             :   false,  /* isMovable.  Not relevant for setters. */
    8488             :   false, /* isEliminatable.  Not relevant for setters. */
    8489             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8490             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8491             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8492             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8493             : };
    8494             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8495             : static_assert(0 < 1, "There is no slot for us");
    8496             : 
    8497             : static bool
    8498           0 : get_ontouchcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitGetterCallArgs args)
    8499             : {
    8500           0 :   RefPtr<EventHandlerNonNull> result(self->GetOntouchcancel());
    8501           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8502           0 :   if (result) {
    8503           0 :     args.rval().setObjectOrNull(GetCallbackFromCallbackObject(result));
    8504           0 :     if (!MaybeWrapObjectOrNullValue(cx, args.rval())) {
    8505           0 :       return false;
    8506             :     }
    8507           0 :     return true;
    8508             :   } else {
    8509           0 :     args.rval().setNull();
    8510           0 :     return true;
    8511             :   }
    8512             : }
    8513             : 
    8514             : static bool
    8515           0 : set_ontouchcancel(JSContext* cx, JS::Handle<JSObject*> obj, nsXULElement* self, JSJitSetterCallArgs args)
    8516             : {
    8517           0 :   RootedCallback<RefPtr<binding_detail::FastEventHandlerNonNull>> arg0(cx);
    8518           0 :   if (args[0].isObject()) {
    8519             :     { // scope for tempRoot
    8520           0 :       JS::Rooted<JSObject*> tempRoot(cx, &args[0].toObject());
    8521           0 :       arg0 = new binding_detail::FastEventHandlerNonNull(tempRoot);
    8522             :     }
    8523             :   } else {
    8524           0 :     arg0 = nullptr;
    8525             :   }
    8526           0 :   self->SetOntouchcancel(Constify(arg0));
    8527           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8528             : 
    8529           0 :   return true;
    8530             : }
    8531             : 
    8532             : static const JSJitInfo ontouchcancel_getterinfo = {
    8533             :   { (JSJitGetterOp)get_ontouchcancel },
    8534             :   { prototypes::id::XULElement },
    8535             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    8536             :   JSJitInfo::Getter,
    8537             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8538             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    8539             :   false,  /* isInfallible. False in setters. */
    8540             :   false,  /* isMovable.  Not relevant for setters. */
    8541             :   false, /* isEliminatable.  Not relevant for setters. */
    8542             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8543             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8544             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8545             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8546             : };
    8547             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8548             : static_assert(0 < 1, "There is no slot for us");
    8549             : static const JSJitInfo ontouchcancel_setterinfo = {
    8550             :   { (JSJitGetterOp)set_ontouchcancel },
    8551             :   { prototypes::id::XULElement },
    8552             :   { PrototypeTraits<prototypes::id::XULElement>::Depth },
    8553             :   JSJitInfo::Setter,
    8554             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    8555             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    8556             :   false,  /* isInfallible. False in setters. */
    8557             :   false,  /* isMovable.  Not relevant for setters. */
    8558             :   false, /* isEliminatable.  Not relevant for setters. */
    8559             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    8560             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    8561             :   false,  /* isTypedMethod.  Only relevant for methods. */
    8562             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    8563             : };
    8564             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    8565             : static_assert(0 < 1, "There is no slot for us");
    8566             : 
    8567             : static bool
    8568           0 : genericLenientGetter(JSContext* cx, unsigned argc, JS::Value* vp)
    8569             : {
    8570           0 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
    8571           0 :   if (!args.thisv().isObject()) {
    8572           0 :     MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8573           0 :     if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
    8574           0 :       return false;
    8575             :     }
    8576           0 :     args.rval().set(JS::UndefinedValue());
    8577           0 :     return true;
    8578             :   }
    8579           0 :   JS::Rooted<JSObject*> obj(cx, &args.thisv().toObject());
    8580             : 
    8581             :   nsXULElement* self;
    8582           0 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
    8583             :   {
    8584           0 :     nsresult rv = UnwrapObject<prototypes::id::XULElement, nsXULElement>(&rootSelf, self);
    8585           0 :     if (NS_FAILED(rv)) {
    8586           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8587           0 :       if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
    8588           0 :         return false;
    8589             :       }
    8590           0 :       args.rval().set(JS::UndefinedValue());
    8591           0 :       return true;
    8592             :     }
    8593             :   }
    8594           0 :   const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
    8595           0 :   MOZ_ASSERT(info->type() == JSJitInfo::Getter);
    8596           0 :   JSJitGetterOp getter = info->getter;
    8597           0 :   bool ok = getter(cx, obj, self, JSJitGetterCallArgs(args));
    8598             : #ifdef DEBUG
    8599           0 :   if (ok) {
    8600           0 :     AssertReturnTypeMatchesJitinfo(info, args.rval());
    8601             :   }
    8602             : #endif
    8603           0 :   return ok;
    8604             : }
    8605             : 
    8606             : static bool
    8607           0 : genericLenientSetter(JSContext* cx, unsigned argc, JS::Value* vp)
    8608             : {
    8609           0 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
    8610           0 :   if (!args.thisv().isObject()) {
    8611           0 :     MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8612           0 :     if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
    8613           0 :       return false;
    8614             :     }
    8615           0 :     args.rval().set(JS::UndefinedValue());
    8616           0 :     return true;
    8617             :   }
    8618           0 :   JS::Rooted<JSObject*> obj(cx, &args.thisv().toObject());
    8619             : 
    8620             :   nsXULElement* self;
    8621           0 :   JS::Rooted<JS::Value> rootSelf(cx, JS::ObjectValue(*obj));
    8622             :   {
    8623           0 :     nsresult rv = UnwrapObject<prototypes::id::XULElement, nsXULElement>(&rootSelf, self);
    8624           0 :     if (NS_FAILED(rv)) {
    8625           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    8626           0 :       if (!ReportLenientThisUnwrappingFailure(cx, &args.callee())) {
    8627           0 :         return false;
    8628             :       }
    8629           0 :       args.rval().set(JS::UndefinedValue());
    8630           0 :       return true;
    8631             :     }
    8632             :   }
    8633           0 :   if (args.length() == 0) {
    8634           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "XULElement attribute setter");
    8635             :   }
    8636           0 :   const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(args.calleev());
    8637           0 :   MOZ_ASSERT(info->type() == JSJitInfo::Setter);
    8638           0 :   JSJitSetterOp setter = info->setter;
    8639           0 :   if (!setter(cx, obj, self, JSJitSetterCallArgs(args))) {
    8640           0 :     return false;
    8641             :   }
    8642           0 :   args.rval().setUndefined();
    8643             : #ifdef DEBUG
    8644           0 :   AssertReturnTypeMatchesJitinfo(info, args.rval());
    8645             : #endif
    8646           0 :   return true;
    8647             : }
    8648             : 
    8649             : static bool
    8650         161 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
    8651             : {
    8652         161 :   nsXULElement* self = UnwrapPossiblyNotInitializedDOMObject<nsXULElement>(obj);
    8653             :   // We don't want to preserve if we don't have a wrapper, and we
    8654             :   // obviously can't preserve if we're not initialized.
    8655         161 :   if (self && self->GetWrapperPreserveColor()) {
    8656         161 :     PreserveWrapper(self);
    8657             :   }
    8658         161 :   return true;
    8659             : }
    8660             : 
    8661             : static void
    8662           0 : _finalize(js::FreeOp* fop, JSObject* obj)
    8663             : {
    8664           0 :   nsXULElement* self = UnwrapPossiblyNotInitializedDOMObject<nsXULElement>(obj);
    8665           0 :   if (self) {
    8666           0 :     ClearWrapper(self, self, obj);
    8667           0 :     AddForDeferredFinalization<nsXULElement>(self);
    8668             :   }
    8669           0 : }
    8670             : 
    8671             : static void
    8672           0 : _objectMoved(JSObject* obj, const JSObject* old)
    8673             : {
    8674           0 :   nsXULElement* self = UnwrapPossiblyNotInitializedDOMObject<nsXULElement>(obj);
    8675           0 :   if (self) {
    8676           0 :     UpdateWrapper(self, self, obj, old);
    8677             :   }
    8678           0 : }
    8679             : 
    8680             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    8681             : #if defined(__clang__)
    8682             : #pragma clang diagnostic push
    8683             : #pragma clang diagnostic ignored "-Wmissing-braces"
    8684             : #endif
    8685             : static const JSFunctionSpec sMethods_specs[] = {
    8686             :   JS_FNSPEC("focus", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&focus_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    8687             :   JS_FNSPEC("blur", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&blur_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    8688             :   JS_FNSPEC("click", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&click_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    8689             :   JS_FNSPEC("doCommand", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&doCommand_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    8690             :   JS_FNSPEC("getElementsByAttribute", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getElementsByAttribute_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
    8691             :   JS_FNSPEC("getElementsByAttributeNS", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getElementsByAttributeNS_methodinfo), 3, JSPROP_ENUMERATE, nullptr),
    8692             :   JS_FS_END
    8693             : };
    8694             : #if defined(__clang__)
    8695             : #pragma clang diagnostic pop
    8696             : #endif
    8697             : 
    8698             : 
    8699             : // Can't be const because the pref-enabled boolean needs to be writable
    8700             : static Prefable<const JSFunctionSpec> sMethods[] = {
    8701             :   { nullptr, &sMethods_specs[0] },
    8702             :   { nullptr, nullptr }
    8703             : };
    8704             : 
    8705             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    8706             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    8707             : static_assert(6 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    8708             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    8709             : 
    8710             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    8711             : #if defined(__clang__)
    8712             : #pragma clang diagnostic push
    8713             : #pragma clang diagnostic ignored "-Wmissing-braces"
    8714             : #endif
    8715             : static const JSFunctionSpec sChromeMethods_specs[] = {
    8716             :   JS_FNSPEC("setIsPrerendered", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setIsPrerendered_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    8717             :   JS_FNSPEC("presetOpenerWindow", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&presetOpenerWindow_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    8718             :   JS_FNSPEC("swapFrameLoaders", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&swapFrameLoaders_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    8719             :   JS_FS_END
    8720             : };
    8721             : #if defined(__clang__)
    8722             : #pragma clang diagnostic pop
    8723             : #endif
    8724             : 
    8725             : 
    8726             : // Can't be const because the pref-enabled boolean needs to be writable
    8727             : static Prefable<const JSFunctionSpec> sChromeMethods[] = {
    8728             :   { nullptr, &sChromeMethods_specs[0] },
    8729             :   { nullptr, nullptr }
    8730             : };
    8731             : 
    8732             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    8733             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    8734             : static_assert(3 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    8735             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    8736             : 
    8737             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    8738             : #if defined(__clang__)
    8739             : #pragma clang diagnostic push
    8740             : #pragma clang diagnostic ignored "-Wmissing-braces"
    8741             : #endif
    8742             : static const JSPropertySpec sAttributes_specs[] = {
    8743             :   { "align", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &align_getterinfo, GenericBindingSetter, &align_setterinfo },
    8744             :   { "dir", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &dir_getterinfo, GenericBindingSetter, &dir_setterinfo },
    8745             :   { "flex", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &flex_getterinfo, GenericBindingSetter, &flex_setterinfo },
    8746             :   { "flexGroup", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &flexGroup_getterinfo, GenericBindingSetter, &flexGroup_setterinfo },
    8747             :   { "ordinal", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ordinal_getterinfo, GenericBindingSetter, &ordinal_setterinfo },
    8748             :   { "orient", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &orient_getterinfo, GenericBindingSetter, &orient_setterinfo },
    8749             :   { "pack", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &pack_getterinfo, GenericBindingSetter, &pack_setterinfo },
    8750             :   { "hidden", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &hidden_getterinfo, GenericBindingSetter, &hidden_setterinfo },
    8751             :   { "collapsed", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &collapsed_getterinfo, GenericBindingSetter, &collapsed_setterinfo },
    8752             :   { "observes", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &observes_getterinfo, GenericBindingSetter, &observes_setterinfo },
    8753             :   { "menu", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &menu_getterinfo, GenericBindingSetter, &menu_setterinfo },
    8754             :   { "contextMenu", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &contextMenu_getterinfo, GenericBindingSetter, &contextMenu_setterinfo },
    8755             :   { "tooltip", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &tooltip_getterinfo, GenericBindingSetter, &tooltip_setterinfo },
    8756             :   { "width", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &width_getterinfo, GenericBindingSetter, &width_setterinfo },
    8757             :   { "height", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &height_getterinfo, GenericBindingSetter, &height_setterinfo },
    8758             :   { "minWidth", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &minWidth_getterinfo, GenericBindingSetter, &minWidth_setterinfo },
    8759             :   { "minHeight", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &minHeight_getterinfo, GenericBindingSetter, &minHeight_setterinfo },
    8760             :   { "maxWidth", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &maxWidth_getterinfo, GenericBindingSetter, &maxWidth_setterinfo },
    8761             :   { "maxHeight", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &maxHeight_getterinfo, GenericBindingSetter, &maxHeight_setterinfo },
    8762             :   { "persist", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &persist_getterinfo, GenericBindingSetter, &persist_setterinfo },
    8763             :   { "left", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &left_getterinfo, GenericBindingSetter, &left_setterinfo },
    8764             :   { "top", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &top_getterinfo, GenericBindingSetter, &top_setterinfo },
    8765             :   { "datasources", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &datasources_getterinfo, GenericBindingSetter, &datasources_setterinfo },
    8766             :   { "ref", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ref_getterinfo, GenericBindingSetter, &ref_setterinfo },
    8767             :   { "tooltipText", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &tooltipText_getterinfo, GenericBindingSetter, &tooltipText_setterinfo },
    8768             :   { "statusText", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &statusText_getterinfo, GenericBindingSetter, &statusText_setterinfo },
    8769             :   { "allowEvents", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &allowEvents_getterinfo, GenericBindingSetter, &allowEvents_setterinfo },
    8770             :   { "database", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &database_getterinfo, nullptr, nullptr },
    8771             :   { "builder", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &builder_getterinfo, nullptr, nullptr },
    8772             :   { "resource", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &resource_getterinfo, nullptr, nullptr },
    8773             :   { "boxObject", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &boxObject_getterinfo, nullptr, nullptr },
    8774             :   { "style", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &style_getterinfo, nullptr, nullptr },
    8775             :   { "onabort", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onabort_getterinfo, GenericBindingSetter, &onabort_setterinfo },
    8776             :   { "onblur", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onblur_getterinfo, GenericBindingSetter, &onblur_setterinfo },
    8777             :   { "onfocus", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onfocus_getterinfo, GenericBindingSetter, &onfocus_setterinfo },
    8778             :   { "onauxclick", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onauxclick_getterinfo, GenericBindingSetter, &onauxclick_setterinfo },
    8779             :   { "oncanplay", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oncanplay_getterinfo, GenericBindingSetter, &oncanplay_setterinfo },
    8780             :   { "oncanplaythrough", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oncanplaythrough_getterinfo, GenericBindingSetter, &oncanplaythrough_setterinfo },
    8781             :   { "onchange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onchange_getterinfo, GenericBindingSetter, &onchange_setterinfo },
    8782             :   { "onclick", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onclick_getterinfo, GenericBindingSetter, &onclick_setterinfo },
    8783             :   { "onclose", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onclose_getterinfo, GenericBindingSetter, &onclose_setterinfo },
    8784             :   { "oncontextmenu", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oncontextmenu_getterinfo, GenericBindingSetter, &oncontextmenu_setterinfo },
    8785             :   { "ondblclick", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondblclick_getterinfo, GenericBindingSetter, &ondblclick_setterinfo },
    8786             :   { "ondrag", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondrag_getterinfo, GenericBindingSetter, &ondrag_setterinfo },
    8787             :   { "ondragend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragend_getterinfo, GenericBindingSetter, &ondragend_setterinfo },
    8788             :   { "ondragenter", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragenter_getterinfo, GenericBindingSetter, &ondragenter_setterinfo },
    8789             :   { "ondragexit", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragexit_getterinfo, GenericBindingSetter, &ondragexit_setterinfo },
    8790             :   { "ondragleave", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragleave_getterinfo, GenericBindingSetter, &ondragleave_setterinfo },
    8791             :   { "ondragover", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragover_getterinfo, GenericBindingSetter, &ondragover_setterinfo },
    8792             :   { "ondragstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondragstart_getterinfo, GenericBindingSetter, &ondragstart_setterinfo },
    8793             :   { "ondrop", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondrop_getterinfo, GenericBindingSetter, &ondrop_setterinfo },
    8794             :   { "ondurationchange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ondurationchange_getterinfo, GenericBindingSetter, &ondurationchange_setterinfo },
    8795             :   { "onemptied", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onemptied_getterinfo, GenericBindingSetter, &onemptied_setterinfo },
    8796             :   { "onended", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onended_getterinfo, GenericBindingSetter, &onended_setterinfo },
    8797             :   { "oninput", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oninput_getterinfo, GenericBindingSetter, &oninput_setterinfo },
    8798             :   { "oninvalid", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &oninvalid_getterinfo, GenericBindingSetter, &oninvalid_setterinfo },
    8799             :   { "onkeydown", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onkeydown_getterinfo, GenericBindingSetter, &onkeydown_setterinfo },
    8800             :   { "onkeypress", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onkeypress_getterinfo, GenericBindingSetter, &onkeypress_setterinfo },
    8801             :   { "onkeyup", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onkeyup_getterinfo, GenericBindingSetter, &onkeyup_setterinfo },
    8802             :   { "onload", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onload_getterinfo, GenericBindingSetter, &onload_setterinfo },
    8803             :   { "onloadeddata", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onloadeddata_getterinfo, GenericBindingSetter, &onloadeddata_setterinfo },
    8804             :   { "onloadedmetadata", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onloadedmetadata_getterinfo, GenericBindingSetter, &onloadedmetadata_setterinfo },
    8805             :   { "onloadend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onloadend_getterinfo, GenericBindingSetter, &onloadend_setterinfo },
    8806             :   { "onloadstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onloadstart_getterinfo, GenericBindingSetter, &onloadstart_setterinfo },
    8807             :   { "onmousedown", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmousedown_getterinfo, GenericBindingSetter, &onmousedown_setterinfo },
    8808             :   { "onmouseenter", JSPROP_SHARED | JSPROP_ENUMERATE, genericLenientGetter, &onmouseenter_getterinfo, genericLenientSetter, &onmouseenter_setterinfo },
    8809             :   { "onmouseleave", JSPROP_SHARED | JSPROP_ENUMERATE, genericLenientGetter, &onmouseleave_getterinfo, genericLenientSetter, &onmouseleave_setterinfo },
    8810             :   { "onmousemove", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmousemove_getterinfo, GenericBindingSetter, &onmousemove_setterinfo },
    8811             :   { "onmouseout", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmouseout_getterinfo, GenericBindingSetter, &onmouseout_setterinfo },
    8812             :   { "onmouseover", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmouseover_getterinfo, GenericBindingSetter, &onmouseover_setterinfo },
    8813             :   { "onmouseup", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmouseup_getterinfo, GenericBindingSetter, &onmouseup_setterinfo },
    8814             :   { "onwheel", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwheel_getterinfo, GenericBindingSetter, &onwheel_setterinfo },
    8815             :   { "onpause", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpause_getterinfo, GenericBindingSetter, &onpause_setterinfo },
    8816             :   { "onplay", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onplay_getterinfo, GenericBindingSetter, &onplay_setterinfo },
    8817             :   { "onplaying", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onplaying_getterinfo, GenericBindingSetter, &onplaying_setterinfo },
    8818             :   { "onprogress", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onprogress_getterinfo, GenericBindingSetter, &onprogress_setterinfo },
    8819             :   { "onratechange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onratechange_getterinfo, GenericBindingSetter, &onratechange_setterinfo },
    8820             :   { "onreset", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onreset_getterinfo, GenericBindingSetter, &onreset_setterinfo },
    8821             :   { "onresize", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onresize_getterinfo, GenericBindingSetter, &onresize_setterinfo },
    8822             :   { "onscroll", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onscroll_getterinfo, GenericBindingSetter, &onscroll_setterinfo },
    8823             :   { "onseeked", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onseeked_getterinfo, GenericBindingSetter, &onseeked_setterinfo },
    8824             :   { "onseeking", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onseeking_getterinfo, GenericBindingSetter, &onseeking_setterinfo },
    8825             :   { "onselect", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onselect_getterinfo, GenericBindingSetter, &onselect_setterinfo },
    8826             :   { "onshow", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onshow_getterinfo, GenericBindingSetter, &onshow_setterinfo },
    8827             :   { "onstalled", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onstalled_getterinfo, GenericBindingSetter, &onstalled_setterinfo },
    8828             :   { "onsubmit", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onsubmit_getterinfo, GenericBindingSetter, &onsubmit_setterinfo },
    8829             :   { "onsuspend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onsuspend_getterinfo, GenericBindingSetter, &onsuspend_setterinfo },
    8830             :   { "ontimeupdate", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontimeupdate_getterinfo, GenericBindingSetter, &ontimeupdate_setterinfo },
    8831             :   { "onvolumechange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onvolumechange_getterinfo, GenericBindingSetter, &onvolumechange_setterinfo },
    8832             :   { "onwaiting", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwaiting_getterinfo, GenericBindingSetter, &onwaiting_setterinfo },
    8833             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    8834             :   { "onselectstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onselectstart_getterinfo, GenericBindingSetter, &onselectstart_setterinfo },
    8835             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    8836             :   { "ontoggle", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontoggle_getterinfo, GenericBindingSetter, &ontoggle_setterinfo },
    8837             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    8838             :   { "onpointercancel", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointercancel_getterinfo, GenericBindingSetter, &onpointercancel_setterinfo },
    8839             :   { "onpointerdown", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerdown_getterinfo, GenericBindingSetter, &onpointerdown_setterinfo },
    8840             :   { "onpointerup", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerup_getterinfo, GenericBindingSetter, &onpointerup_setterinfo },
    8841             :   { "onpointermove", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointermove_getterinfo, GenericBindingSetter, &onpointermove_setterinfo },
    8842             :   { "onpointerout", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerout_getterinfo, GenericBindingSetter, &onpointerout_setterinfo },
    8843             :   { "onpointerover", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerover_getterinfo, GenericBindingSetter, &onpointerover_setterinfo },
    8844             :   { "onpointerenter", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerenter_getterinfo, GenericBindingSetter, &onpointerenter_setterinfo },
    8845             :   { "onpointerleave", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onpointerleave_getterinfo, GenericBindingSetter, &onpointerleave_setterinfo },
    8846             :   { "ongotpointercapture", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ongotpointercapture_getterinfo, GenericBindingSetter, &ongotpointercapture_setterinfo },
    8847             :   { "onlostpointercapture", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onlostpointercapture_getterinfo, GenericBindingSetter, &onlostpointercapture_setterinfo },
    8848             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    8849             :   { "onmozfullscreenchange", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmozfullscreenchange_getterinfo, GenericBindingSetter, &onmozfullscreenchange_setterinfo },
    8850             :   { "onmozfullscreenerror", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onmozfullscreenerror_getterinfo, GenericBindingSetter, &onmozfullscreenerror_setterinfo },
    8851             :   { "onanimationcancel", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onanimationcancel_getterinfo, GenericBindingSetter, &onanimationcancel_setterinfo },
    8852             :   { "onanimationend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onanimationend_getterinfo, GenericBindingSetter, &onanimationend_setterinfo },
    8853             :   { "onanimationiteration", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onanimationiteration_getterinfo, GenericBindingSetter, &onanimationiteration_setterinfo },
    8854             :   { "onanimationstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onanimationstart_getterinfo, GenericBindingSetter, &onanimationstart_setterinfo },
    8855             :   { "ontransitioncancel", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontransitioncancel_getterinfo, GenericBindingSetter, &ontransitioncancel_setterinfo },
    8856             :   { "ontransitionend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontransitionend_getterinfo, GenericBindingSetter, &ontransitionend_setterinfo },
    8857             :   { "ontransitionrun", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontransitionrun_getterinfo, GenericBindingSetter, &ontransitionrun_setterinfo },
    8858             :   { "ontransitionstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontransitionstart_getterinfo, GenericBindingSetter, &ontransitionstart_setterinfo },
    8859             :   { "onwebkitanimationend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwebkitanimationend_getterinfo, GenericBindingSetter, &onwebkitanimationend_setterinfo },
    8860             :   { "onwebkitanimationiteration", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwebkitanimationiteration_getterinfo, GenericBindingSetter, &onwebkitanimationiteration_setterinfo },
    8861             :   { "onwebkitanimationstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwebkitanimationstart_getterinfo, GenericBindingSetter, &onwebkitanimationstart_setterinfo },
    8862             :   { "onwebkittransitionend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onwebkittransitionend_getterinfo, GenericBindingSetter, &onwebkittransitionend_setterinfo },
    8863             :   { "onerror", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &onerror_getterinfo, GenericBindingSetter, &onerror_setterinfo },
    8864             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    8865             :   { "ontouchstart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontouchstart_getterinfo, GenericBindingSetter, &ontouchstart_setterinfo },
    8866             :   { "ontouchend", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontouchend_getterinfo, GenericBindingSetter, &ontouchend_setterinfo },
    8867             :   { "ontouchmove", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontouchmove_getterinfo, GenericBindingSetter, &ontouchmove_setterinfo },
    8868             :   { "ontouchcancel", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ontouchcancel_getterinfo, GenericBindingSetter, &ontouchcancel_setterinfo },
    8869             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
    8870             : };
    8871             : #if defined(__clang__)
    8872             : #pragma clang diagnostic pop
    8873             : #endif
    8874             : 
    8875             : static PrefableDisablers sAttributes_disablers91 = {
    8876             :   true, false, 0, nullptr
    8877             : };
    8878             : 
    8879             : static PrefableDisablers sAttributes_disablers95 = {
    8880             :   true, false, 0, nullptr
    8881             : };
    8882             : 
    8883             : static PrefableDisablers sAttributes_disablers122 = {
    8884             :   true, false, 0, &nsGenericHTMLElement::TouchEventsEnabled
    8885             : };
    8886             : 
    8887             : // Can't be const because the pref-enabled boolean needs to be writable
    8888             : static Prefable<const JSPropertySpec> sAttributes[] = {
    8889             :   { nullptr, &sAttributes_specs[0] },
    8890             :   { &sAttributes_disablers91, &sAttributes_specs[91] },
    8891             :   { nullptr, &sAttributes_specs[93] },
    8892             :   { &sAttributes_disablers95, &sAttributes_specs[95] },
    8893             :   { nullptr, &sAttributes_specs[106] },
    8894             :   { &sAttributes_disablers122, &sAttributes_specs[122] },
    8895             :   { nullptr, nullptr }
    8896             : };
    8897             : 
    8898             : static_assert(6 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    8899             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    8900             : static_assert(90 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    8901             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    8902             : 
    8903             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    8904             : #if defined(__clang__)
    8905             : #pragma clang diagnostic push
    8906             : #pragma clang diagnostic ignored "-Wmissing-braces"
    8907             : #endif
    8908             : static const JSPropertySpec sChromeAttributes_specs[] = {
    8909             :   { "controllers", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &controllers_getterinfo, nullptr, nullptr },
    8910             :   { "frameLoader", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &frameLoader_getterinfo, nullptr, nullptr },
    8911             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
    8912             : };
    8913             : #if defined(__clang__)
    8914             : #pragma clang diagnostic pop
    8915             : #endif
    8916             : 
    8917             : 
    8918             : // Can't be const because the pref-enabled boolean needs to be writable
    8919             : static Prefable<const JSPropertySpec> sChromeAttributes[] = {
    8920             :   { nullptr, &sChromeAttributes_specs[0] },
    8921             :   { nullptr, nullptr }
    8922             : };
    8923             : 
    8924             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    8925             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    8926             : static_assert(2 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    8927             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    8928             : 
    8929             : 
    8930             : static uint16_t sNativeProperties_sortedPropertyIndices[127];
    8931             : static PropertyInfo sNativeProperties_propertyInfos[127];
    8932             : 
    8933             : static const NativePropertiesN<2> sNativeProperties = {
    8934             :   false, 0,
    8935             :   false, 0,
    8936             :   true,  0 /* sMethods */,
    8937             :   true,  1 /* sAttributes */,
    8938             :   false, 0,
    8939             :   false, 0,
    8940             :   false, 0,
    8941             :   -1,
    8942             :   127,
    8943             :   sNativeProperties_sortedPropertyIndices,
    8944             :   {
    8945             :     { sMethods, &sNativeProperties_propertyInfos[0] },
    8946             :     { sAttributes, &sNativeProperties_propertyInfos[6] }
    8947             :   }
    8948             : };
    8949             : static_assert(127 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
    8950             :     "We have a property info count that is oversized");
    8951             : 
    8952             : static uint16_t sChromeOnlyNativeProperties_sortedPropertyIndices[5];
    8953             : static PropertyInfo sChromeOnlyNativeProperties_propertyInfos[5];
    8954             : 
    8955             : static const NativePropertiesN<2> sChromeOnlyNativeProperties = {
    8956             :   false, 0,
    8957             :   false, 0,
    8958             :   true,  0 /* sChromeMethods */,
    8959             :   true,  1 /* sChromeAttributes */,
    8960             :   false, 0,
    8961             :   false, 0,
    8962             :   false, 0,
    8963             :   -1,
    8964             :   5,
    8965             :   sChromeOnlyNativeProperties_sortedPropertyIndices,
    8966             :   {
    8967             :     { sChromeMethods, &sChromeOnlyNativeProperties_propertyInfos[0] },
    8968             :     { sChromeAttributes, &sChromeOnlyNativeProperties_propertyInfos[3] }
    8969             :   }
    8970             : };
    8971             : static_assert(5 < 1ull << CHAR_BIT * sizeof(sChromeOnlyNativeProperties.propertyInfoCount),
    8972             :     "We have a property info count that is oversized");
    8973             : 
    8974             : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
    8975             :   {
    8976             :     "Function",
    8977             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
    8978             :     &sBoringInterfaceObjectClassClassOps,
    8979             :     JS_NULL_CLASS_SPEC,
    8980             :     JS_NULL_CLASS_EXT,
    8981             :     &sInterfaceObjectClassObjectOps
    8982             :   },
    8983             :   eInterface,
    8984             :   true,
    8985             :   prototypes::id::XULElement,
    8986             :   PrototypeTraits<prototypes::id::XULElement>::Depth,
    8987             :   sNativePropertyHooks,
    8988             :   "function XULElement() {\n    [native code]\n}",
    8989             :   ElementBinding::GetConstructorObject
    8990             : };
    8991             : 
    8992             : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
    8993             :   {
    8994             :     "XULElementPrototype",
    8995             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
    8996             :     JS_NULL_CLASS_OPS,
    8997             :     JS_NULL_CLASS_SPEC,
    8998             :     JS_NULL_CLASS_EXT,
    8999             :     JS_NULL_OBJECT_OPS
    9000             :   },
    9001             :   eInterfacePrototype,
    9002             :   false,
    9003             :   prototypes::id::XULElement,
    9004             :   PrototypeTraits<prototypes::id::XULElement>::Depth,
    9005             :   sNativePropertyHooks,
    9006             :   "[object XULElementPrototype]",
    9007             :   ElementBinding::GetProtoObject
    9008             : };
    9009             : 
    9010             : bool
    9011         523 : ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj)
    9012             : {
    9013         523 :   return IsChromeOrXBL(aCx, aObj);
    9014             : }
    9015             : 
    9016             : JSObject*
    9017           0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
    9018             : {
    9019           0 :   return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
    9020             : }
    9021             : 
    9022             : static const js::ClassOps sClassOps = {
    9023             :   _addProperty, /* addProperty */
    9024             :   nullptr,               /* delProperty */
    9025             :   nullptr,               /* getProperty */
    9026             :   nullptr,               /* setProperty */
    9027             :   nullptr,               /* enumerate */
    9028             :   nullptr, /* newEnumerate */
    9029             :   nullptr, /* resolve */
    9030             :   nullptr, /* mayResolve */
    9031             :   _finalize, /* finalize */
    9032             :   nullptr, /* call */
    9033             :   nullptr,               /* hasInstance */
    9034             :   nullptr,               /* construct */
    9035             :   nullptr, /* trace */
    9036             : };
    9037             : 
    9038             : static const js::ClassExtension sClassExtension = {
    9039             :   nullptr, /* weakmapKeyDelegateOp */
    9040             :   _objectMoved /* objectMovedOp */
    9041             : };
    9042             : 
    9043             : static const DOMJSClass sClass = {
    9044             :   { "XULElement",
    9045             :     JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
    9046             :     &sClassOps,
    9047             :     JS_NULL_CLASS_SPEC,
    9048             :     &sClassExtension,
    9049             :     JS_NULL_OBJECT_OPS
    9050             :   },
    9051             :   { prototypes::id::EventTarget, prototypes::id::Node, prototypes::id::Element, prototypes::id::XULElement, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
    9052             :   IsBaseOf<nsISupports, nsXULElement >::value,
    9053             :   sNativePropertyHooks,
    9054             :   FindAssociatedGlobalForNative<nsXULElement>::Get,
    9055             :   GetProtoObjectHandle,
    9056             :   GetCCParticipant<nsXULElement>::Get()
    9057             : };
    9058             : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
    9059             :               "Must have the right minimal number of reserved slots.");
    9060             : static_assert(1 >= 1,
    9061             :               "Must have enough reserved slots.");
    9062             : 
    9063             : const JSClass*
    9064           0 : GetJSClass()
    9065             : {
    9066           0 :   return sClass.ToJSClass();
    9067             : }
    9068             : 
    9069             : bool
    9070         384 : Wrap(JSContext* aCx, nsXULElement* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
    9071             : {
    9072             :   MOZ_ASSERT(static_cast<nsXULElement*>(aObject) ==
    9073             :              reinterpret_cast<nsXULElement*>(aObject),
    9074             :              "Multiple inheritance for nsXULElement is broken.");
    9075             :   MOZ_ASSERT(static_cast<mozilla::dom::Element*>(aObject) ==
    9076             :              reinterpret_cast<mozilla::dom::Element*>(aObject),
    9077             :              "Multiple inheritance for mozilla::dom::Element is broken.");
    9078             :   MOZ_ASSERT(static_cast<nsINode*>(aObject) ==
    9079             :              reinterpret_cast<nsINode*>(aObject),
    9080             :              "Multiple inheritance for nsINode is broken.");
    9081             :   MOZ_ASSERT(static_cast<mozilla::dom::EventTarget*>(aObject) ==
    9082             :              reinterpret_cast<mozilla::dom::EventTarget*>(aObject),
    9083             :              "Multiple inheritance for mozilla::dom::EventTarget is broken.");
    9084         384 :   MOZ_ASSERT(ToSupportsIsCorrect(aObject));
    9085         384 :   MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
    9086         384 :   MOZ_ASSERT(!aCache->GetWrapper(),
    9087             :              "You should probably not be using Wrap() directly; use "
    9088             :              "GetOrCreateDOMReflector instead");
    9089             : 
    9090         384 :   MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
    9091             :              "nsISupports must be on our primary inheritance chain");
    9092             : 
    9093         768 :   JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
    9094         384 :   if (!global) {
    9095           0 :     return false;
    9096             :   }
    9097         384 :   MOZ_ASSERT(JS_IsGlobalObject(global));
    9098         384 :   MOZ_ASSERT(JS::ObjectIsNotGray(global));
    9099             : 
    9100             :   // That might have ended up wrapping us already, due to the wonders
    9101             :   // of XBL.  Check for that, and bail out as needed.
    9102         384 :   aReflector.set(aCache->GetWrapper());
    9103         384 :   if (aReflector) {
    9104             : #ifdef DEBUG
    9105           0 :     binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
    9106             : #endif // DEBUG
    9107           0 :     return true;
    9108             :   }
    9109             : 
    9110         768 :   JSAutoCompartment ac(aCx, global);
    9111         384 :   JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
    9112         384 :   if (!canonicalProto) {
    9113           0 :     return false;
    9114             :   }
    9115         768 :   JS::Rooted<JSObject*> proto(aCx);
    9116         384 :   if (aGivenProto) {
    9117           0 :     proto = aGivenProto;
    9118             :     // Unfortunately, while aGivenProto was in the compartment of aCx
    9119             :     // coming in, we changed compartments to that of "parent" so may need
    9120             :     // to wrap the proto here.
    9121           0 :     if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
    9122           0 :       if (!JS_WrapObject(aCx, &proto)) {
    9123           0 :         return false;
    9124             :       }
    9125             :     }
    9126             :   } else {
    9127         384 :     proto = canonicalProto;
    9128             :   }
    9129             : 
    9130         768 :   BindingJSObjectCreator<nsXULElement> creator(aCx);
    9131         384 :   creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
    9132         384 :   if (!aReflector) {
    9133           0 :     return false;
    9134             :   }
    9135             : 
    9136         384 :   aCache->SetWrapper(aReflector);
    9137         384 :   creator.InitializationSucceeded();
    9138             : 
    9139         384 :   MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
    9140             :              aCache->GetWrapperPreserveColor() == aReflector);
    9141             :   // If proto != canonicalProto, we have to preserve our wrapper;
    9142             :   // otherwise we won't be able to properly recreate it later, since
    9143             :   // we won't know what proto to use.  Note that we don't check
    9144             :   // aGivenProto here, since it's entirely possible (and even
    9145             :   // somewhat common) to have a non-null aGivenProto which is the
    9146             :   // same as canonicalProto.
    9147         384 :   if (proto != canonicalProto) {
    9148           0 :     PreserveWrapper(aObject);
    9149             :   }
    9150             : 
    9151         384 :   return true;
    9152             : }
    9153             : 
    9154             : const NativePropertyHooks sNativePropertyHooks[] = { {
    9155             :   nullptr,
    9156             :   nullptr,
    9157             :   nullptr,
    9158             :   { sNativeProperties.Upcast(), sChromeOnlyNativeProperties.Upcast() },
    9159             :   prototypes::id::XULElement,
    9160             :   constructors::id::XULElement,
    9161             :   ElementBinding::sNativePropertyHooks,
    9162             :   &DefaultXrayExpandoObjectClass
    9163             : } };
    9164             : 
    9165             : void
    9166           1 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
    9167             : {
    9168           1 :   JS::Handle<JSObject*> parentProto(ElementBinding::GetProtoObjectHandle(aCx));
    9169           1 :   if (!parentProto) {
    9170           0 :     return;
    9171             :   }
    9172             : 
    9173           1 :   JS::Handle<JSObject*> constructorProto(ElementBinding::GetConstructorObjectHandle(aCx));
    9174           1 :   if (!constructorProto) {
    9175           0 :     return;
    9176             :   }
    9177             : 
    9178             :   static bool sIdsInited = false;
    9179           1 :   if (!sIdsInited && NS_IsMainThread()) {
    9180           1 :     if (!InitIds(aCx, sNativeProperties.Upcast())) {
    9181           0 :       return;
    9182             :     }
    9183           1 :     if (!InitIds(aCx, sChromeOnlyNativeProperties.Upcast())) {
    9184           0 :       return;
    9185             :     }
    9186           1 :     sIdsInited = true;
    9187             :   }
    9188             : 
    9189             :   static bool sPrefCachesInited = false;
    9190           1 :   if (!sPrefCachesInited && NS_IsMainThread()) {
    9191           1 :     sPrefCachesInited = true;
    9192           1 :     Preferences::AddBoolVarCache(&sAttributes[1].disablers->enabled, "dom.select_events.enabled");
    9193           1 :     Preferences::AddBoolVarCache(&sAttributes[3].disablers->enabled, "dom.w3c_pointer_events.enabled");
    9194             :   }
    9195             : 
    9196           1 :   JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::XULElement);
    9197           1 :   JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::XULElement);
    9198           2 :   dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
    9199             :                               &sPrototypeClass.mBase, protoCache,
    9200             :                               constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
    9201             :                               interfaceCache,
    9202             :                               sNativeProperties.Upcast(),
    9203           1 :                               nsContentUtils::ThreadsafeIsSystemCaller(aCx) ? sChromeOnlyNativeProperties.Upcast() : nullptr,
    9204             :                               "XULElement", aDefineOnGlobal,
    9205             :                               nullptr,
    9206           1 :                               false);
    9207             : }
    9208             : 
    9209             : JS::Handle<JSObject*>
    9210         384 : GetProtoObjectHandle(JSContext* aCx)
    9211             : {
    9212             :   /* Get the interface prototype object for this class.  This will create the
    9213             :      object as needed. */
    9214         384 :   bool aDefineOnGlobal = true;
    9215             : 
    9216             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
    9217         384 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
    9218         384 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
    9219           0 :     return nullptr;
    9220             :   }
    9221             : 
    9222             :   /* Check to see whether the interface objects are already installed */
    9223         384 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
    9224         384 :   if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::XULElement)) {
    9225           2 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
    9226           1 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
    9227             :   }
    9228             : 
    9229             :   /*
    9230             :    * The object might _still_ be null, but that's OK.
    9231             :    *
    9232             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
    9233             :    * traced by TraceProtoAndIfaceCache() and its contents are never
    9234             :    * changed after they have been set.
    9235             :    *
    9236             :    * Calling address() avoids the read read barrier that does gray
    9237             :    * unmarking, but it's not possible for the object to be gray here.
    9238             :    */
    9239             : 
    9240         384 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::XULElement);
    9241         384 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
    9242         384 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
    9243             : }
    9244             : 
    9245             : JS::Handle<JSObject*>
    9246         523 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
    9247             : {
    9248             :   /* Get the interface object for this class.  This will create the object as
    9249             :      needed. */
    9250             : 
    9251             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
    9252         523 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
    9253         523 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
    9254           0 :     return nullptr;
    9255             :   }
    9256             : 
    9257             :   /* Check to see whether the interface objects are already installed */
    9258         523 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
    9259         523 :   if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::XULElement)) {
    9260           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
    9261           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
    9262             :   }
    9263             : 
    9264             :   /*
    9265             :    * The object might _still_ be null, but that's OK.
    9266             :    *
    9267             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
    9268             :    * traced by TraceProtoAndIfaceCache() and its contents are never
    9269             :    * changed after they have been set.
    9270             :    *
    9271             :    * Calling address() avoids the read read barrier that does gray
    9272             :    * unmarking, but it's not possible for the object to be gray here.
    9273             :    */
    9274             : 
    9275         523 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::XULElement);
    9276         523 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
    9277         523 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
    9278             : }
    9279             : 
    9280             : JSObject*
    9281           0 : GetConstructorObject(JSContext* aCx)
    9282             : {
    9283           0 :   return GetConstructorObjectHandle(aCx);
    9284             : }
    9285             : 
    9286             : } // namespace XULElementBinding
    9287             : 
    9288             : 
    9289             : 
    9290             : } // namespace dom
    9291             : } // namespace mozilla

Generated by: LCOV version 1.13