LCOV - code coverage report
Current view: top level - obj-x86_64-pc-linux-gnu/dom/bindings - HTMLElementBinding.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 35 2319 1.5 %
Date: 2017-07-14 16:53:18 Functions: 3 242 1.2 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.13