LCOV - code coverage report
Current view: top level - obj-x86_64-pc-linux-gnu/dom/bindings - HTMLInputElementBinding.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 102 1783 5.7 %
Date: 2017-07-14 16:53:18 Functions: 8 159 5.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* THIS FILE IS AUTOGENERATED FROM HTMLInputElement.webidl BY Codegen.py - DO NOT EDIT */
       2             : 
       3             : #include "AtomList.h"
       4             : #include "AutocompleteInfoBinding.h"
       5             : #include "HTMLElementBinding.h"
       6             : #include "HTMLInputElement.h"
       7             : #include "HTMLInputElementBinding.h"
       8             : #include "WrapperFactory.h"
       9             : #include "XrayWrapper.h"
      10             : #include "imgINotificationObserver.h"
      11             : #include "imgIRequest.h"
      12             : #include "jsapi.h"
      13             : #include "mozilla/FloatingPoint.h"
      14             : #include "mozilla/OwningNonNull.h"
      15             : #include "mozilla/Preferences.h"
      16             : #include "mozilla/dom/BindingUtils.h"
      17             : #include "mozilla/dom/CustomElementRegistry.h"
      18             : #include "mozilla/dom/DOMJSClass.h"
      19             : #include "mozilla/dom/Date.h"
      20             : #include "mozilla/dom/File.h"
      21             : #include "mozilla/dom/FileList.h"
      22             : #include "mozilla/dom/FileSystemEntry.h"
      23             : #include "mozilla/dom/HTMLFormElement.h"
      24             : #include "mozilla/dom/HTMLInputElement.h"
      25             : #include "mozilla/dom/NonRefcountedDOMObject.h"
      26             : #include "mozilla/dom/Nullable.h"
      27             : #include "mozilla/dom/PrimitiveConversions.h"
      28             : #include "mozilla/dom/Promise.h"
      29             : #include "mozilla/dom/ScriptSettings.h"
      30             : #include "mozilla/dom/SimpleGlobalObject.h"
      31             : #include "mozilla/dom/ToJSValue.h"
      32             : #include "mozilla/dom/UnionConversions.h"
      33             : #include "mozilla/dom/UnionTypes.h"
      34             : #include "mozilla/dom/ValidityState.h"
      35             : #include "mozilla/dom/XrayExpandoClass.h"
      36             : #include "nsContentUtils.h"
      37             : #include "nsGenericHTMLElement.h"
      38             : #include "nsIControllers.h"
      39             : #include "nsIEditor.h"
      40             : #include "nsINodeList.h"
      41             : #include "nsIURI.h"
      42             : 
      43             : namespace mozilla {
      44             : namespace dom {
      45             : 
      46             : namespace SelectionModeValues {
      47             : extern const EnumEntry strings[5] = {
      48             :   {"select", 6},
      49             :   {"start", 5},
      50             :   {"end", 3},
      51             :   {"preserve", 8},
      52             :   { nullptr, 0 }
      53             : };
      54             : } // namespace SelectionModeValues
      55             : 
      56             : bool
      57           0 : ToJSValue(JSContext* aCx, SelectionMode aArgument, JS::MutableHandle<JS::Value> aValue)
      58             : {
      59           0 :   MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(SelectionModeValues::strings));
      60             :   JSString* resultStr =
      61           0 :     JS_NewStringCopyN(aCx, SelectionModeValues::strings[uint32_t(aArgument)].value,
      62           0 :                       SelectionModeValues::strings[uint32_t(aArgument)].length);
      63           0 :   if (!resultStr) {
      64           0 :     return false;
      65             :   }
      66           0 :   aValue.setString(resultStr);
      67           0 :   return true;
      68             : }
      69             : 
      70             : 
      71             : 
      72           0 : DateTimeValue::DateTimeValue()
      73             : {
      74             :   // Safe to pass a null context if we pass a null value
      75           0 :   Init(nullptr, JS::NullHandleValue);
      76           0 : }
      77             : 
      78             : 
      79             : 
      80             : bool
      81           0 : DateTimeValue::InitIds(JSContext* cx, DateTimeValueAtoms* atomsCache)
      82             : {
      83           0 :   MOZ_ASSERT(!*reinterpret_cast<jsid**>(atomsCache));
      84             : 
      85             :   // Initialize these in reverse order so that any failure leaves the first one
      86             :   // uninitialized.
      87           0 :   if (!atomsCache->year_id.init(cx, "year") ||
      88           0 :       !atomsCache->month_id.init(cx, "month") ||
      89           0 :       !atomsCache->minute_id.init(cx, "minute") ||
      90           0 :       !atomsCache->hour_id.init(cx, "hour") ||
      91           0 :       !atomsCache->day_id.init(cx, "day")) {
      92           0 :     return false;
      93             :   }
      94           0 :   return true;
      95             : }
      96             : 
      97             : bool
      98           0 : DateTimeValue::Init(JSContext* cx, JS::Handle<JS::Value> val, const char* sourceDescription, bool passedToJSImpl)
      99             : {
     100             :   // Passing a null JSContext is OK only if we're initing from null,
     101             :   // Since in that case we will not have to do any property gets
     102             :   // Also evaluate isNullOrUndefined in order to avoid false-positive
     103             :   // checkers by static analysis tools
     104           0 :   MOZ_ASSERT_IF(!cx, val.isNull() && val.isNullOrUndefined());
     105           0 :   DateTimeValueAtoms* atomsCache = nullptr;
     106           0 :   if (cx) {
     107           0 :     atomsCache = GetAtomCache<DateTimeValueAtoms>(cx);
     108           0 :     if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
     109           0 :       return false;
     110             :     }
     111             :   }
     112             : 
     113           0 :   if (!IsConvertibleToDictionary(val)) {
     114           0 :     return ThrowErrorMessage(cx, MSG_NOT_DICTIONARY, sourceDescription);
     115             :   }
     116             : 
     117           0 :   bool isNull = val.isNullOrUndefined();
     118             :   // We only need these if !isNull, in which case we have |cx|.
     119           0 :   Maybe<JS::Rooted<JSObject *> > object;
     120           0 :   Maybe<JS::Rooted<JS::Value> > temp;
     121           0 :   if (!isNull) {
     122           0 :     MOZ_ASSERT(cx);
     123           0 :     object.emplace(cx, &val.toObject());
     124           0 :     temp.emplace(cx);
     125             :   }
     126           0 :   if (!isNull) {
     127           0 :     if (!JS_GetPropertyById(cx, *object, atomsCache->day_id, temp.ptr())) {
     128           0 :       return false;
     129             :     }
     130             :   }
     131           0 :   if (!isNull && !temp->isUndefined()) {
     132           0 :     mDay.Construct();
     133           0 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, temp.ref(), &(mDay.Value()))) {
     134           0 :       return false;
     135             :     }
     136           0 :     mIsAnyMemberPresent = true;
     137             :   }
     138             : 
     139           0 :   if (!isNull) {
     140           0 :     if (!JS_GetPropertyById(cx, *object, atomsCache->hour_id, temp.ptr())) {
     141           0 :       return false;
     142             :     }
     143             :   }
     144           0 :   if (!isNull && !temp->isUndefined()) {
     145           0 :     mHour.Construct();
     146           0 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, temp.ref(), &(mHour.Value()))) {
     147           0 :       return false;
     148             :     }
     149           0 :     mIsAnyMemberPresent = true;
     150             :   }
     151             : 
     152           0 :   if (!isNull) {
     153           0 :     if (!JS_GetPropertyById(cx, *object, atomsCache->minute_id, temp.ptr())) {
     154           0 :       return false;
     155             :     }
     156             :   }
     157           0 :   if (!isNull && !temp->isUndefined()) {
     158           0 :     mMinute.Construct();
     159           0 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, temp.ref(), &(mMinute.Value()))) {
     160           0 :       return false;
     161             :     }
     162           0 :     mIsAnyMemberPresent = true;
     163             :   }
     164             : 
     165           0 :   if (!isNull) {
     166           0 :     if (!JS_GetPropertyById(cx, *object, atomsCache->month_id, temp.ptr())) {
     167           0 :       return false;
     168             :     }
     169             :   }
     170           0 :   if (!isNull && !temp->isUndefined()) {
     171           0 :     mMonth.Construct();
     172           0 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, temp.ref(), &(mMonth.Value()))) {
     173           0 :       return false;
     174             :     }
     175           0 :     mIsAnyMemberPresent = true;
     176             :   }
     177             : 
     178           0 :   if (!isNull) {
     179           0 :     if (!JS_GetPropertyById(cx, *object, atomsCache->year_id, temp.ptr())) {
     180           0 :       return false;
     181             :     }
     182             :   }
     183           0 :   if (!isNull && !temp->isUndefined()) {
     184           0 :     mYear.Construct();
     185           0 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, temp.ref(), &(mYear.Value()))) {
     186           0 :       return false;
     187             :     }
     188           0 :     mIsAnyMemberPresent = true;
     189             :   }
     190           0 :   return true;
     191             : }
     192             : 
     193             : bool
     194           0 : DateTimeValue::Init(const nsAString& aJSON)
     195             : {
     196           0 :   AutoJSAPI jsapi;
     197           0 :   JSObject* cleanGlobal = SimpleGlobalObject::Create(SimpleGlobalObject::GlobalType::BindingDetail);
     198           0 :   if (!cleanGlobal) {
     199           0 :     return false;
     200             :   }
     201           0 :   if (!jsapi.Init(cleanGlobal)) {
     202           0 :     return false;
     203             :   }
     204           0 :   JSContext* cx = jsapi.cx();
     205           0 :   JS::Rooted<JS::Value> json(cx);
     206           0 :   bool ok = ParseJSON(cx, aJSON, &json);
     207           0 :   NS_ENSURE_TRUE(ok, false);
     208           0 :   return Init(cx, json);
     209             : }
     210             : 
     211             : bool
     212           0 : DateTimeValue::ToObjectInternal(JSContext* cx, JS::MutableHandle<JS::Value> rval) const
     213             : {
     214           0 :   DateTimeValueAtoms* atomsCache = GetAtomCache<DateTimeValueAtoms>(cx);
     215           0 :   if (!*reinterpret_cast<jsid**>(atomsCache) && !InitIds(cx, atomsCache)) {
     216           0 :     return false;
     217             :   }
     218             : 
     219           0 :   JS::Rooted<JSObject*> obj(cx, JS_NewPlainObject(cx));
     220           0 :   if (!obj) {
     221           0 :     return false;
     222             :   }
     223           0 :   rval.set(JS::ObjectValue(*obj));
     224             : 
     225           0 :   if (mDay.WasPassed()) {
     226             :     do {
     227             :       // block for our 'break' successCode and scope for 'temp' and 'currentValue'
     228           0 :       JS::Rooted<JS::Value> temp(cx);
     229           0 :       int32_t const & currentValue = mDay.InternalValue();
     230           0 :       temp.setInt32(int32_t(currentValue));
     231           0 :       if (!JS_DefinePropertyById(cx, obj, atomsCache->day_id, temp, JSPROP_ENUMERATE)) {
     232           0 :         return false;
     233             :       }
     234           0 :       break;
     235             :     } while(0);
     236             :   }
     237             : 
     238           0 :   if (mHour.WasPassed()) {
     239             :     do {
     240             :       // block for our 'break' successCode and scope for 'temp' and 'currentValue'
     241           0 :       JS::Rooted<JS::Value> temp(cx);
     242           0 :       int32_t const & currentValue = mHour.InternalValue();
     243           0 :       temp.setInt32(int32_t(currentValue));
     244           0 :       if (!JS_DefinePropertyById(cx, obj, atomsCache->hour_id, temp, JSPROP_ENUMERATE)) {
     245           0 :         return false;
     246             :       }
     247           0 :       break;
     248             :     } while(0);
     249             :   }
     250             : 
     251           0 :   if (mMinute.WasPassed()) {
     252             :     do {
     253             :       // block for our 'break' successCode and scope for 'temp' and 'currentValue'
     254           0 :       JS::Rooted<JS::Value> temp(cx);
     255           0 :       int32_t const & currentValue = mMinute.InternalValue();
     256           0 :       temp.setInt32(int32_t(currentValue));
     257           0 :       if (!JS_DefinePropertyById(cx, obj, atomsCache->minute_id, temp, JSPROP_ENUMERATE)) {
     258           0 :         return false;
     259             :       }
     260           0 :       break;
     261             :     } while(0);
     262             :   }
     263             : 
     264           0 :   if (mMonth.WasPassed()) {
     265             :     do {
     266             :       // block for our 'break' successCode and scope for 'temp' and 'currentValue'
     267           0 :       JS::Rooted<JS::Value> temp(cx);
     268           0 :       int32_t const & currentValue = mMonth.InternalValue();
     269           0 :       temp.setInt32(int32_t(currentValue));
     270           0 :       if (!JS_DefinePropertyById(cx, obj, atomsCache->month_id, temp, JSPROP_ENUMERATE)) {
     271           0 :         return false;
     272             :       }
     273           0 :       break;
     274             :     } while(0);
     275             :   }
     276             : 
     277           0 :   if (mYear.WasPassed()) {
     278             :     do {
     279             :       // block for our 'break' successCode and scope for 'temp' and 'currentValue'
     280           0 :       JS::Rooted<JS::Value> temp(cx);
     281           0 :       int32_t const & currentValue = mYear.InternalValue();
     282           0 :       temp.setInt32(int32_t(currentValue));
     283           0 :       if (!JS_DefinePropertyById(cx, obj, atomsCache->year_id, temp, JSPROP_ENUMERATE)) {
     284           0 :         return false;
     285             :       }
     286           0 :       break;
     287             :     } while(0);
     288             :   }
     289             : 
     290           0 :   return true;
     291             : }
     292             : 
     293             : bool
     294           0 : DateTimeValue::ToJSON(nsAString& aJSON) const
     295             : {
     296           0 :   AutoJSAPI jsapi;
     297           0 :   jsapi.Init();
     298           0 :   JSContext *cx = jsapi.cx();
     299             :   // It's safe to use UnprivilegedJunkScopeOrWorkerGlobal here
     300             :   // because we'll only be creating objects, in ways that have no
     301             :   // side-effects, followed by a call to JS::ToJSONMaybeSafely,
     302             :   // which likewise guarantees no side-effects for the sorts of
     303             :   // things we will pass it.
     304           0 :   JSAutoCompartment ac(cx, binding_detail::UnprivilegedJunkScopeOrWorkerGlobal());
     305           0 :   JS::Rooted<JS::Value> val(cx);
     306           0 :   if (!ToObjectInternal(cx, &val)) {
     307           0 :     return false;
     308             :   }
     309           0 :   JS::Rooted<JSObject*> obj(cx, &val.toObject());
     310           0 :   return StringifyToJSON(cx, obj, aJSON);
     311             : }
     312             : 
     313             : void
     314           0 : DateTimeValue::TraceDictionary(JSTracer* trc)
     315             : {
     316           0 : }
     317             : 
     318             : DateTimeValue&
     319           0 : DateTimeValue::operator=(const DateTimeValue& aOther)
     320             : {
     321           0 :   mDay.Reset();
     322           0 :   if (aOther.mDay.WasPassed()) {
     323           0 :     mDay.Construct(aOther.mDay.Value());
     324             :   }
     325           0 :   mHour.Reset();
     326           0 :   if (aOther.mHour.WasPassed()) {
     327           0 :     mHour.Construct(aOther.mHour.Value());
     328             :   }
     329           0 :   mMinute.Reset();
     330           0 :   if (aOther.mMinute.WasPassed()) {
     331           0 :     mMinute.Construct(aOther.mMinute.Value());
     332             :   }
     333           0 :   mMonth.Reset();
     334           0 :   if (aOther.mMonth.WasPassed()) {
     335           0 :     mMonth.Construct(aOther.mMonth.Value());
     336             :   }
     337           0 :   mYear.Reset();
     338           0 :   if (aOther.mYear.WasPassed()) {
     339           0 :     mYear.Construct(aOther.mYear.Value());
     340             :   }
     341           0 :   return *this;
     342             : }
     343             : 
     344             : namespace binding_detail {
     345             : } // namespace binding_detail
     346             : 
     347             : 
     348             : namespace HTMLInputElementBinding {
     349             : 
     350             : static_assert(IsRefcounted<NativeType>::value == IsRefcounted<HTMLElementBinding::NativeType>::value,
     351             :               "Can't inherit from an interface with a different ownership model.");
     352             : 
     353             : static bool
     354           0 : get_accept(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
     355             : {
     356           0 :   DOMString result;
     357           0 :   self->GetAccept(result);
     358           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     359           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     360           0 :     return false;
     361             :   }
     362           0 :   return true;
     363             : }
     364             : 
     365             : static bool
     366           0 : set_accept(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
     367             : {
     368           0 :   binding_detail::FakeString arg0;
     369           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     370           0 :     return false;
     371             :   }
     372           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
     373           0 :   Maybe<AutoCEReaction> ceReaction;
     374           0 :   if (reactionsStack) {
     375           0 :     ceReaction.emplace(reactionsStack);
     376             :   }
     377           0 :   binding_detail::FastErrorResult rv;
     378           0 :   self->SetAccept(NonNullHelper(Constify(arg0)), rv);
     379           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     380           0 :     return false;
     381             :   }
     382           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     383             : 
     384           0 :   return true;
     385             : }
     386             : 
     387             : static const JSJitInfo accept_getterinfo = {
     388             :   { (JSJitGetterOp)get_accept },
     389             :   { prototypes::id::HTMLInputElement },
     390             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     391             :   JSJitInfo::Getter,
     392             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     393             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     394             :   false,  /* isInfallible. False in setters. */
     395             :   true,  /* isMovable.  Not relevant for setters. */
     396             :   true, /* isEliminatable.  Not relevant for setters. */
     397             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     398             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     399             :   false,  /* isTypedMethod.  Only relevant for methods. */
     400             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     401             : };
     402             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     403             : static_assert(0 < 2, "There is no slot for us");
     404             : static const JSJitInfo accept_setterinfo = {
     405             :   { (JSJitGetterOp)set_accept },
     406             :   { prototypes::id::HTMLInputElement },
     407             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     408             :   JSJitInfo::Setter,
     409             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     410             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     411             :   false,  /* isInfallible. False in setters. */
     412             :   false,  /* isMovable.  Not relevant for setters. */
     413             :   false, /* isEliminatable.  Not relevant for setters. */
     414             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     415             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     416             :   false,  /* isTypedMethod.  Only relevant for methods. */
     417             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     418             : };
     419             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     420             : static_assert(0 < 2, "There is no slot for us");
     421             : 
     422             : static bool
     423           0 : get_alt(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
     424             : {
     425           0 :   DOMString result;
     426           0 :   self->GetAlt(result);
     427           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     428           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     429           0 :     return false;
     430             :   }
     431           0 :   return true;
     432             : }
     433             : 
     434             : static bool
     435           0 : set_alt(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
     436             : {
     437           0 :   binding_detail::FakeString arg0;
     438           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     439           0 :     return false;
     440             :   }
     441           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
     442           0 :   Maybe<AutoCEReaction> ceReaction;
     443           0 :   if (reactionsStack) {
     444           0 :     ceReaction.emplace(reactionsStack);
     445             :   }
     446           0 :   binding_detail::FastErrorResult rv;
     447           0 :   self->SetAlt(NonNullHelper(Constify(arg0)), rv);
     448           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     449           0 :     return false;
     450             :   }
     451           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     452             : 
     453           0 :   return true;
     454             : }
     455             : 
     456             : static const JSJitInfo alt_getterinfo = {
     457             :   { (JSJitGetterOp)get_alt },
     458             :   { prototypes::id::HTMLInputElement },
     459             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     460             :   JSJitInfo::Getter,
     461             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     462             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     463             :   false,  /* isInfallible. False in setters. */
     464             :   true,  /* isMovable.  Not relevant for setters. */
     465             :   true, /* isEliminatable.  Not relevant for setters. */
     466             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     467             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     468             :   false,  /* isTypedMethod.  Only relevant for methods. */
     469             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     470             : };
     471             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     472             : static_assert(0 < 2, "There is no slot for us");
     473             : static const JSJitInfo alt_setterinfo = {
     474             :   { (JSJitGetterOp)set_alt },
     475             :   { prototypes::id::HTMLInputElement },
     476             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     477             :   JSJitInfo::Setter,
     478             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     479             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     480             :   false,  /* isInfallible. False in setters. */
     481             :   false,  /* isMovable.  Not relevant for setters. */
     482             :   false, /* isEliminatable.  Not relevant for setters. */
     483             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     484             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     485             :   false,  /* isTypedMethod.  Only relevant for methods. */
     486             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     487             : };
     488             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     489             : static_assert(0 < 2, "There is no slot for us");
     490             : 
     491             : static bool
     492           0 : get_autocomplete(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
     493             : {
     494           0 :   DOMString result;
     495           0 :   self->GetAutocomplete(result);
     496           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     497           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     498           0 :     return false;
     499             :   }
     500           0 :   return true;
     501             : }
     502             : 
     503             : static bool
     504           0 : set_autocomplete(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
     505             : {
     506           0 :   binding_detail::FakeString arg0;
     507           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     508           0 :     return false;
     509             :   }
     510           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
     511           0 :   Maybe<AutoCEReaction> ceReaction;
     512           0 :   if (reactionsStack) {
     513           0 :     ceReaction.emplace(reactionsStack);
     514             :   }
     515           0 :   binding_detail::FastErrorResult rv;
     516           0 :   self->SetAutocomplete(NonNullHelper(Constify(arg0)), rv);
     517           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     518           0 :     return false;
     519             :   }
     520           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     521             : 
     522           0 :   return true;
     523             : }
     524             : 
     525             : static const JSJitInfo autocomplete_getterinfo = {
     526             :   { (JSJitGetterOp)get_autocomplete },
     527             :   { prototypes::id::HTMLInputElement },
     528             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     529             :   JSJitInfo::Getter,
     530             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     531             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     532             :   false,  /* isInfallible. False in setters. */
     533             :   true,  /* isMovable.  Not relevant for setters. */
     534             :   true, /* isEliminatable.  Not relevant for setters. */
     535             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     536             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     537             :   false,  /* isTypedMethod.  Only relevant for methods. */
     538             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     539             : };
     540             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     541             : static_assert(0 < 2, "There is no slot for us");
     542             : static const JSJitInfo autocomplete_setterinfo = {
     543             :   { (JSJitGetterOp)set_autocomplete },
     544             :   { prototypes::id::HTMLInputElement },
     545             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     546             :   JSJitInfo::Setter,
     547             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     548             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     549             :   false,  /* isInfallible. False in setters. */
     550             :   false,  /* isMovable.  Not relevant for setters. */
     551             :   false, /* isEliminatable.  Not relevant for setters. */
     552             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     553             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     554             :   false,  /* isTypedMethod.  Only relevant for methods. */
     555             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     556             : };
     557             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     558             : static_assert(0 < 2, "There is no slot for us");
     559             : 
     560             : static bool
     561           0 : get_autofocus(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
     562             : {
     563           0 :   bool result(self->Autofocus());
     564           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     565           0 :   args.rval().setBoolean(result);
     566           0 :   return true;
     567             : }
     568             : 
     569             : static bool
     570           0 : set_autofocus(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
     571             : {
     572             :   bool arg0;
     573           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
     574           0 :     return false;
     575             :   }
     576           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
     577           0 :   Maybe<AutoCEReaction> ceReaction;
     578           0 :   if (reactionsStack) {
     579           0 :     ceReaction.emplace(reactionsStack);
     580             :   }
     581           0 :   binding_detail::FastErrorResult rv;
     582           0 :   self->SetAutofocus(arg0, rv);
     583           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     584           0 :     return false;
     585             :   }
     586           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     587             : 
     588           0 :   return true;
     589             : }
     590             : 
     591             : static const JSJitInfo autofocus_getterinfo = {
     592             :   { (JSJitGetterOp)get_autofocus },
     593             :   { prototypes::id::HTMLInputElement },
     594             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     595             :   JSJitInfo::Getter,
     596             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     597             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
     598             :   true,  /* isInfallible. False in setters. */
     599             :   true,  /* isMovable.  Not relevant for setters. */
     600             :   true, /* isEliminatable.  Not relevant for setters. */
     601             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     602             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     603             :   false,  /* isTypedMethod.  Only relevant for methods. */
     604             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     605             : };
     606             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     607             : static_assert(0 < 2, "There is no slot for us");
     608             : static const JSJitInfo autofocus_setterinfo = {
     609             :   { (JSJitGetterOp)set_autofocus },
     610             :   { prototypes::id::HTMLInputElement },
     611             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     612             :   JSJitInfo::Setter,
     613             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     614             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     615             :   false,  /* isInfallible. False in setters. */
     616             :   false,  /* isMovable.  Not relevant for setters. */
     617             :   false, /* isEliminatable.  Not relevant for setters. */
     618             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     619             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     620             :   false,  /* isTypedMethod.  Only relevant for methods. */
     621             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     622             : };
     623             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     624             : static_assert(0 < 2, "There is no slot for us");
     625             : 
     626             : static bool
     627           0 : get_defaultChecked(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
     628             : {
     629           0 :   bool result(self->DefaultChecked());
     630           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     631           0 :   args.rval().setBoolean(result);
     632           0 :   return true;
     633             : }
     634             : 
     635             : static bool
     636           0 : set_defaultChecked(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
     637             : {
     638             :   bool arg0;
     639           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
     640           0 :     return false;
     641             :   }
     642           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
     643           0 :   Maybe<AutoCEReaction> ceReaction;
     644           0 :   if (reactionsStack) {
     645           0 :     ceReaction.emplace(reactionsStack);
     646             :   }
     647           0 :   binding_detail::FastErrorResult rv;
     648           0 :   self->SetDefaultChecked(arg0, rv);
     649           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     650           0 :     return false;
     651             :   }
     652           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     653             : 
     654           0 :   return true;
     655             : }
     656             : 
     657             : static const JSJitInfo defaultChecked_getterinfo = {
     658             :   { (JSJitGetterOp)get_defaultChecked },
     659             :   { prototypes::id::HTMLInputElement },
     660             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     661             :   JSJitInfo::Getter,
     662             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     663             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
     664             :   true,  /* isInfallible. False in setters. */
     665             :   true,  /* isMovable.  Not relevant for setters. */
     666             :   true, /* isEliminatable.  Not relevant for setters. */
     667             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     668             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     669             :   false,  /* isTypedMethod.  Only relevant for methods. */
     670             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     671             : };
     672             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     673             : static_assert(0 < 2, "There is no slot for us");
     674             : static const JSJitInfo defaultChecked_setterinfo = {
     675             :   { (JSJitGetterOp)set_defaultChecked },
     676             :   { prototypes::id::HTMLInputElement },
     677             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     678             :   JSJitInfo::Setter,
     679             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     680             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     681             :   false,  /* isInfallible. False in setters. */
     682             :   false,  /* isMovable.  Not relevant for setters. */
     683             :   false, /* isEliminatable.  Not relevant for setters. */
     684             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     685             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     686             :   false,  /* isTypedMethod.  Only relevant for methods. */
     687             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     688             : };
     689             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     690             : static_assert(0 < 2, "There is no slot for us");
     691             : 
     692             : static bool
     693           0 : get_checked(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
     694             : {
     695           0 :   bool result(self->Checked());
     696           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     697           0 :   args.rval().setBoolean(result);
     698           0 :   return true;
     699             : }
     700             : 
     701             : static bool
     702           0 : set_checked(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
     703             : {
     704             :   bool arg0;
     705           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
     706           0 :     return false;
     707             :   }
     708           0 :   self->SetChecked(arg0);
     709           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     710             : 
     711           0 :   return true;
     712             : }
     713             : 
     714             : static const JSJitInfo checked_getterinfo = {
     715             :   { (JSJitGetterOp)get_checked },
     716             :   { prototypes::id::HTMLInputElement },
     717             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     718             :   JSJitInfo::Getter,
     719             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     720             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
     721             :   true,  /* isInfallible. False in setters. */
     722             :   true,  /* isMovable.  Not relevant for setters. */
     723             :   true, /* isEliminatable.  Not relevant for setters. */
     724             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     725             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     726             :   false,  /* isTypedMethod.  Only relevant for methods. */
     727             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     728             : };
     729             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     730             : static_assert(0 < 2, "There is no slot for us");
     731             : static const JSJitInfo checked_setterinfo = {
     732             :   { (JSJitGetterOp)set_checked },
     733             :   { prototypes::id::HTMLInputElement },
     734             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     735             :   JSJitInfo::Setter,
     736             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     737             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     738             :   false,  /* isInfallible. False in setters. */
     739             :   false,  /* isMovable.  Not relevant for setters. */
     740             :   false, /* isEliminatable.  Not relevant for setters. */
     741             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     742             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     743             :   false,  /* isTypedMethod.  Only relevant for methods. */
     744             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     745             : };
     746             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     747             : static_assert(0 < 2, "There is no slot for us");
     748             : 
     749             : static bool
     750           0 : get_disabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
     751             : {
     752           0 :   bool result(self->Disabled());
     753           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     754           0 :   args.rval().setBoolean(result);
     755           0 :   return true;
     756             : }
     757             : 
     758             : static bool
     759           0 : set_disabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
     760             : {
     761             :   bool arg0;
     762           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
     763           0 :     return false;
     764             :   }
     765           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
     766           0 :   Maybe<AutoCEReaction> ceReaction;
     767           0 :   if (reactionsStack) {
     768           0 :     ceReaction.emplace(reactionsStack);
     769             :   }
     770           0 :   binding_detail::FastErrorResult rv;
     771           0 :   self->SetDisabled(arg0, rv);
     772           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     773           0 :     return false;
     774             :   }
     775           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     776             : 
     777           0 :   return true;
     778             : }
     779             : 
     780             : static const JSJitInfo disabled_getterinfo = {
     781             :   { (JSJitGetterOp)get_disabled },
     782             :   { prototypes::id::HTMLInputElement },
     783             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     784             :   JSJitInfo::Getter,
     785             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     786             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
     787             :   true,  /* isInfallible. False in setters. */
     788             :   true,  /* isMovable.  Not relevant for setters. */
     789             :   true, /* isEliminatable.  Not relevant for setters. */
     790             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     791             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     792             :   false,  /* isTypedMethod.  Only relevant for methods. */
     793             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     794             : };
     795             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     796             : static_assert(0 < 2, "There is no slot for us");
     797             : static const JSJitInfo disabled_setterinfo = {
     798             :   { (JSJitGetterOp)set_disabled },
     799             :   { prototypes::id::HTMLInputElement },
     800             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     801             :   JSJitInfo::Setter,
     802             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     803             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     804             :   false,  /* isInfallible. False in setters. */
     805             :   false,  /* isMovable.  Not relevant for setters. */
     806             :   false, /* isEliminatable.  Not relevant for setters. */
     807             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     808             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     809             :   false,  /* isTypedMethod.  Only relevant for methods. */
     810             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     811             : };
     812             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     813             : static_assert(0 < 2, "There is no slot for us");
     814             : 
     815             : static bool
     816           0 : get_form(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
     817             : {
     818           0 :   auto result(StrongOrRawPtr<mozilla::dom::HTMLFormElement>(self->GetForm()));
     819           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     820           0 :   if (!result) {
     821           0 :     args.rval().setNull();
     822           0 :     return true;
     823             :   }
     824           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
     825           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
     826           0 :     return false;
     827             :   }
     828           0 :   return true;
     829             : }
     830             : 
     831             : static const JSJitInfo form_getterinfo = {
     832             :   { (JSJitGetterOp)get_form },
     833             :   { prototypes::id::HTMLInputElement },
     834             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     835             :   JSJitInfo::Getter,
     836             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     837             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
     838             :   false,  /* isInfallible. False in setters. */
     839             :   false,  /* isMovable.  Not relevant for setters. */
     840             :   false, /* isEliminatable.  Not relevant for setters. */
     841             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     842             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     843             :   false,  /* isTypedMethod.  Only relevant for methods. */
     844             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     845             : };
     846             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     847             : static_assert(0 < 2, "There is no slot for us");
     848             : 
     849             : static bool
     850           0 : get_files(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
     851             : {
     852           0 :   auto result(StrongOrRawPtr<mozilla::dom::FileList>(self->GetFiles()));
     853           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     854           0 :   if (!result) {
     855           0 :     args.rval().setNull();
     856           0 :     return true;
     857             :   }
     858           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
     859           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
     860           0 :     return false;
     861             :   }
     862           0 :   return true;
     863             : }
     864             : 
     865             : static const JSJitInfo files_getterinfo = {
     866             :   { (JSJitGetterOp)get_files },
     867             :   { prototypes::id::HTMLInputElement },
     868             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     869             :   JSJitInfo::Getter,
     870             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     871             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
     872             :   false,  /* isInfallible. False in setters. */
     873             :   true,  /* isMovable.  Not relevant for setters. */
     874             :   true, /* isEliminatable.  Not relevant for setters. */
     875             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     876             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     877             :   false,  /* isTypedMethod.  Only relevant for methods. */
     878             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     879             : };
     880             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     881             : static_assert(0 < 2, "There is no slot for us");
     882             : 
     883             : static bool
     884           0 : get_formAction(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
     885             : {
     886           0 :   DOMString result;
     887           0 :   self->GetFormAction(result);
     888           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     889           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     890           0 :     return false;
     891             :   }
     892           0 :   return true;
     893             : }
     894             : 
     895             : static bool
     896           0 : set_formAction(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
     897             : {
     898           0 :   binding_detail::FakeString arg0;
     899           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     900           0 :     return false;
     901             :   }
     902           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
     903           0 :   Maybe<AutoCEReaction> ceReaction;
     904           0 :   if (reactionsStack) {
     905           0 :     ceReaction.emplace(reactionsStack);
     906             :   }
     907           0 :   binding_detail::FastErrorResult rv;
     908           0 :   self->SetFormAction(NonNullHelper(Constify(arg0)), rv);
     909           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     910           0 :     return false;
     911             :   }
     912           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     913             : 
     914           0 :   return true;
     915             : }
     916             : 
     917             : static const JSJitInfo formAction_getterinfo = {
     918             :   { (JSJitGetterOp)get_formAction },
     919             :   { prototypes::id::HTMLInputElement },
     920             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     921             :   JSJitInfo::Getter,
     922             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     923             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     924             :   false,  /* isInfallible. False in setters. */
     925             :   true,  /* isMovable.  Not relevant for setters. */
     926             :   true, /* isEliminatable.  Not relevant for setters. */
     927             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     928             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     929             :   false,  /* isTypedMethod.  Only relevant for methods. */
     930             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     931             : };
     932             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     933             : static_assert(0 < 2, "There is no slot for us");
     934             : static const JSJitInfo formAction_setterinfo = {
     935             :   { (JSJitGetterOp)set_formAction },
     936             :   { prototypes::id::HTMLInputElement },
     937             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     938             :   JSJitInfo::Setter,
     939             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
     940             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
     941             :   false,  /* isInfallible. False in setters. */
     942             :   false,  /* isMovable.  Not relevant for setters. */
     943             :   false, /* isEliminatable.  Not relevant for setters. */
     944             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
     945             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
     946             :   false,  /* isTypedMethod.  Only relevant for methods. */
     947             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
     948             : };
     949             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
     950             : static_assert(0 < 2, "There is no slot for us");
     951             : 
     952             : static bool
     953           0 : get_formEnctype(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
     954             : {
     955           0 :   DOMString result;
     956           0 :   self->GetFormEnctype(result);
     957           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     958           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
     959           0 :     return false;
     960             :   }
     961           0 :   return true;
     962             : }
     963             : 
     964             : static bool
     965           0 : set_formEnctype(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
     966             : {
     967           0 :   binding_detail::FakeString arg0;
     968           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
     969           0 :     return false;
     970             :   }
     971           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
     972           0 :   Maybe<AutoCEReaction> ceReaction;
     973           0 :   if (reactionsStack) {
     974           0 :     ceReaction.emplace(reactionsStack);
     975             :   }
     976           0 :   binding_detail::FastErrorResult rv;
     977           0 :   self->SetFormEnctype(NonNullHelper(Constify(arg0)), rv);
     978           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
     979           0 :     return false;
     980             :   }
     981           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
     982             : 
     983           0 :   return true;
     984             : }
     985             : 
     986             : static const JSJitInfo formEnctype_getterinfo = {
     987             :   { (JSJitGetterOp)get_formEnctype },
     988             :   { prototypes::id::HTMLInputElement },
     989             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
     990             :   JSJitInfo::Getter,
     991             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
     992             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
     993             :   false,  /* isInfallible. False in setters. */
     994             :   true,  /* isMovable.  Not relevant for setters. */
     995             :   true, /* 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 < 2, "There is no slot for us");
    1003             : static const JSJitInfo formEnctype_setterinfo = {
    1004             :   { (JSJitGetterOp)set_formEnctype },
    1005             :   { prototypes::id::HTMLInputElement },
    1006             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1007             :   JSJitInfo::Setter,
    1008             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1009             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1010             :   false,  /* isInfallible. False in setters. */
    1011             :   false,  /* isMovable.  Not relevant for setters. */
    1012             :   false, /* isEliminatable.  Not relevant for setters. */
    1013             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1014             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1015             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1016             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1017             : };
    1018             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1019             : static_assert(0 < 2, "There is no slot for us");
    1020             : 
    1021             : static bool
    1022           0 : get_formMethod(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    1023             : {
    1024           0 :   DOMString result;
    1025           0 :   self->GetFormMethod(result);
    1026           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1027           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1028           0 :     return false;
    1029             :   }
    1030           0 :   return true;
    1031             : }
    1032             : 
    1033             : static bool
    1034           0 : set_formMethod(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    1035             : {
    1036           0 :   binding_detail::FakeString arg0;
    1037           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1038           0 :     return false;
    1039             :   }
    1040           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    1041           0 :   Maybe<AutoCEReaction> ceReaction;
    1042           0 :   if (reactionsStack) {
    1043           0 :     ceReaction.emplace(reactionsStack);
    1044             :   }
    1045           0 :   binding_detail::FastErrorResult rv;
    1046           0 :   self->SetFormMethod(NonNullHelper(Constify(arg0)), rv);
    1047           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1048           0 :     return false;
    1049             :   }
    1050           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1051             : 
    1052           0 :   return true;
    1053             : }
    1054             : 
    1055             : static const JSJitInfo formMethod_getterinfo = {
    1056             :   { (JSJitGetterOp)get_formMethod },
    1057             :   { prototypes::id::HTMLInputElement },
    1058             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1059             :   JSJitInfo::Getter,
    1060             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    1061             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1062             :   false,  /* isInfallible. False in setters. */
    1063             :   true,  /* isMovable.  Not relevant for setters. */
    1064             :   true, /* isEliminatable.  Not relevant for setters. */
    1065             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1066             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1067             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1068             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1069             : };
    1070             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1071             : static_assert(0 < 2, "There is no slot for us");
    1072             : static const JSJitInfo formMethod_setterinfo = {
    1073             :   { (JSJitGetterOp)set_formMethod },
    1074             :   { prototypes::id::HTMLInputElement },
    1075             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1076             :   JSJitInfo::Setter,
    1077             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1078             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1079             :   false,  /* isInfallible. False in setters. */
    1080             :   false,  /* isMovable.  Not relevant for setters. */
    1081             :   false, /* isEliminatable.  Not relevant for setters. */
    1082             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1083             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1084             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1085             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1086             : };
    1087             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1088             : static_assert(0 < 2, "There is no slot for us");
    1089             : 
    1090             : static bool
    1091           0 : get_formNoValidate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    1092             : {
    1093           0 :   bool result(self->FormNoValidate());
    1094           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1095           0 :   args.rval().setBoolean(result);
    1096           0 :   return true;
    1097             : }
    1098             : 
    1099             : static bool
    1100           0 : set_formNoValidate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    1101             : {
    1102             :   bool arg0;
    1103           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    1104           0 :     return false;
    1105             :   }
    1106           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    1107           0 :   Maybe<AutoCEReaction> ceReaction;
    1108           0 :   if (reactionsStack) {
    1109           0 :     ceReaction.emplace(reactionsStack);
    1110             :   }
    1111           0 :   binding_detail::FastErrorResult rv;
    1112           0 :   self->SetFormNoValidate(arg0, rv);
    1113           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1114           0 :     return false;
    1115             :   }
    1116           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1117             : 
    1118           0 :   return true;
    1119             : }
    1120             : 
    1121             : static const JSJitInfo formNoValidate_getterinfo = {
    1122             :   { (JSJitGetterOp)get_formNoValidate },
    1123             :   { prototypes::id::HTMLInputElement },
    1124             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1125             :   JSJitInfo::Getter,
    1126             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    1127             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    1128             :   true,  /* isInfallible. False in setters. */
    1129             :   true,  /* isMovable.  Not relevant for setters. */
    1130             :   true, /* isEliminatable.  Not relevant for setters. */
    1131             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1132             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1133             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1134             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1135             : };
    1136             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1137             : static_assert(0 < 2, "There is no slot for us");
    1138             : static const JSJitInfo formNoValidate_setterinfo = {
    1139             :   { (JSJitGetterOp)set_formNoValidate },
    1140             :   { prototypes::id::HTMLInputElement },
    1141             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1142             :   JSJitInfo::Setter,
    1143             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1144             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1145             :   false,  /* isInfallible. False in setters. */
    1146             :   false,  /* isMovable.  Not relevant for setters. */
    1147             :   false, /* isEliminatable.  Not relevant for setters. */
    1148             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1149             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1150             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1151             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1152             : };
    1153             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1154             : static_assert(0 < 2, "There is no slot for us");
    1155             : 
    1156             : static bool
    1157           0 : get_formTarget(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    1158             : {
    1159           0 :   DOMString result;
    1160           0 :   self->GetFormTarget(result);
    1161           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1162           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1163           0 :     return false;
    1164             :   }
    1165           0 :   return true;
    1166             : }
    1167             : 
    1168             : static bool
    1169           0 : set_formTarget(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    1170             : {
    1171           0 :   binding_detail::FakeString arg0;
    1172           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1173           0 :     return false;
    1174             :   }
    1175           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    1176           0 :   Maybe<AutoCEReaction> ceReaction;
    1177           0 :   if (reactionsStack) {
    1178           0 :     ceReaction.emplace(reactionsStack);
    1179             :   }
    1180           0 :   binding_detail::FastErrorResult rv;
    1181           0 :   self->SetFormTarget(NonNullHelper(Constify(arg0)), rv);
    1182           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1183           0 :     return false;
    1184             :   }
    1185           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1186             : 
    1187           0 :   return true;
    1188             : }
    1189             : 
    1190             : static const JSJitInfo formTarget_getterinfo = {
    1191             :   { (JSJitGetterOp)get_formTarget },
    1192             :   { prototypes::id::HTMLInputElement },
    1193             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1194             :   JSJitInfo::Getter,
    1195             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    1196             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1197             :   false,  /* isInfallible. False in setters. */
    1198             :   true,  /* isMovable.  Not relevant for setters. */
    1199             :   true, /* isEliminatable.  Not relevant for setters. */
    1200             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1201             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1202             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1203             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1204             : };
    1205             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1206             : static_assert(0 < 2, "There is no slot for us");
    1207             : static const JSJitInfo formTarget_setterinfo = {
    1208             :   { (JSJitGetterOp)set_formTarget },
    1209             :   { prototypes::id::HTMLInputElement },
    1210             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1211             :   JSJitInfo::Setter,
    1212             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1213             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1214             :   false,  /* isInfallible. False in setters. */
    1215             :   false,  /* isMovable.  Not relevant for setters. */
    1216             :   false, /* isEliminatable.  Not relevant for setters. */
    1217             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1218             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1219             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1220             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1221             : };
    1222             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1223             : static_assert(0 < 2, "There is no slot for us");
    1224             : 
    1225             : static bool
    1226           0 : get_height(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    1227             : {
    1228           0 :   uint32_t result(self->Height());
    1229           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1230           0 :   args.rval().setNumber(result);
    1231           0 :   return true;
    1232             : }
    1233             : 
    1234             : static bool
    1235           0 : set_height(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    1236             : {
    1237             :   uint32_t arg0;
    1238           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    1239           0 :     return false;
    1240             :   }
    1241           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    1242           0 :   Maybe<AutoCEReaction> ceReaction;
    1243           0 :   if (reactionsStack) {
    1244           0 :     ceReaction.emplace(reactionsStack);
    1245             :   }
    1246           0 :   binding_detail::FastErrorResult rv;
    1247           0 :   self->SetHeight(arg0, rv);
    1248           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1249           0 :     return false;
    1250             :   }
    1251           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1252             : 
    1253           0 :   return true;
    1254             : }
    1255             : 
    1256             : static const JSJitInfo height_getterinfo = {
    1257             :   { (JSJitGetterOp)get_height },
    1258             :   { prototypes::id::HTMLInputElement },
    1259             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1260             :   JSJitInfo::Getter,
    1261             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    1262             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    1263             :   true,  /* isInfallible. False in setters. */
    1264             :   true,  /* isMovable.  Not relevant for setters. */
    1265             :   true, /* isEliminatable.  Not relevant for setters. */
    1266             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1267             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1268             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1269             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1270             : };
    1271             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1272             : static_assert(0 < 2, "There is no slot for us");
    1273             : static const JSJitInfo height_setterinfo = {
    1274             :   { (JSJitGetterOp)set_height },
    1275             :   { prototypes::id::HTMLInputElement },
    1276             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1277             :   JSJitInfo::Setter,
    1278             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1279             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1280             :   false,  /* isInfallible. False in setters. */
    1281             :   false,  /* isMovable.  Not relevant for setters. */
    1282             :   false, /* isEliminatable.  Not relevant for setters. */
    1283             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1284             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1285             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1286             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1287             : };
    1288             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1289             : static_assert(0 < 2, "There is no slot for us");
    1290             : 
    1291             : static bool
    1292           0 : get_indeterminate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    1293             : {
    1294           0 :   bool result(self->Indeterminate());
    1295           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1296           0 :   args.rval().setBoolean(result);
    1297           0 :   return true;
    1298             : }
    1299             : 
    1300             : static bool
    1301           0 : set_indeterminate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    1302             : {
    1303             :   bool arg0;
    1304           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    1305           0 :     return false;
    1306             :   }
    1307           0 :   self->SetIndeterminate(arg0);
    1308           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1309             : 
    1310           0 :   return true;
    1311             : }
    1312             : 
    1313             : static const JSJitInfo indeterminate_getterinfo = {
    1314             :   { (JSJitGetterOp)get_indeterminate },
    1315             :   { prototypes::id::HTMLInputElement },
    1316             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1317             :   JSJitInfo::Getter,
    1318             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    1319             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    1320             :   true,  /* isInfallible. False in setters. */
    1321             :   true,  /* isMovable.  Not relevant for setters. */
    1322             :   true, /* isEliminatable.  Not relevant for setters. */
    1323             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1324             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1325             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1326             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1327             : };
    1328             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1329             : static_assert(0 < 2, "There is no slot for us");
    1330             : static const JSJitInfo indeterminate_setterinfo = {
    1331             :   { (JSJitGetterOp)set_indeterminate },
    1332             :   { prototypes::id::HTMLInputElement },
    1333             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1334             :   JSJitInfo::Setter,
    1335             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1336             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1337             :   false,  /* isInfallible. False in setters. */
    1338             :   false,  /* isMovable.  Not relevant for setters. */
    1339             :   false, /* isEliminatable.  Not relevant for setters. */
    1340             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1341             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1342             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1343             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1344             : };
    1345             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1346             : static_assert(0 < 2, "There is no slot for us");
    1347             : 
    1348             : static bool
    1349           0 : get_inputMode(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    1350             : {
    1351           0 :   DOMString result;
    1352           0 :   self->GetInputMode(result);
    1353           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1354           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1355           0 :     return false;
    1356             :   }
    1357           0 :   return true;
    1358             : }
    1359             : 
    1360             : static bool
    1361           0 : set_inputMode(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    1362             : {
    1363           0 :   binding_detail::FakeString arg0;
    1364           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1365           0 :     return false;
    1366             :   }
    1367           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    1368           0 :   Maybe<AutoCEReaction> ceReaction;
    1369           0 :   if (reactionsStack) {
    1370           0 :     ceReaction.emplace(reactionsStack);
    1371             :   }
    1372           0 :   binding_detail::FastErrorResult rv;
    1373           0 :   self->SetInputMode(NonNullHelper(Constify(arg0)), rv);
    1374           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1375           0 :     return false;
    1376             :   }
    1377           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1378             : 
    1379           0 :   return true;
    1380             : }
    1381             : 
    1382             : static const JSJitInfo inputMode_getterinfo = {
    1383             :   { (JSJitGetterOp)get_inputMode },
    1384             :   { prototypes::id::HTMLInputElement },
    1385             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1386             :   JSJitInfo::Getter,
    1387             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    1388             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1389             :   false,  /* isInfallible. False in setters. */
    1390             :   true,  /* isMovable.  Not relevant for setters. */
    1391             :   true, /* isEliminatable.  Not relevant for setters. */
    1392             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1393             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1394             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1395             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1396             : };
    1397             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1398             : static_assert(0 < 2, "There is no slot for us");
    1399             : static const JSJitInfo inputMode_setterinfo = {
    1400             :   { (JSJitGetterOp)set_inputMode },
    1401             :   { prototypes::id::HTMLInputElement },
    1402             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1403             :   JSJitInfo::Setter,
    1404             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1405             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1406             :   false,  /* isInfallible. False in setters. */
    1407             :   false,  /* isMovable.  Not relevant for setters. */
    1408             :   false, /* isEliminatable.  Not relevant for setters. */
    1409             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1410             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1411             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1412             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1413             : };
    1414             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1415             : static_assert(0 < 2, "There is no slot for us");
    1416             : 
    1417             : static bool
    1418           0 : get_list(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    1419             : {
    1420           0 :   auto result(StrongOrRawPtr<nsGenericHTMLElement>(self->GetList()));
    1421           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1422           0 :   if (!result) {
    1423           0 :     args.rval().setNull();
    1424           0 :     return true;
    1425             :   }
    1426           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    1427           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    1428           0 :     return false;
    1429             :   }
    1430           0 :   return true;
    1431             : }
    1432             : 
    1433             : static const JSJitInfo list_getterinfo = {
    1434             :   { (JSJitGetterOp)get_list },
    1435             :   { prototypes::id::HTMLInputElement },
    1436             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1437             :   JSJitInfo::Getter,
    1438             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    1439             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    1440             :   false,  /* isInfallible. False in setters. */
    1441             :   true,  /* isMovable.  Not relevant for setters. */
    1442             :   true, /* isEliminatable.  Not relevant for setters. */
    1443             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1444             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1445             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1446             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1447             : };
    1448             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1449             : static_assert(0 < 2, "There is no slot for us");
    1450             : 
    1451             : static bool
    1452           0 : get_max(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    1453             : {
    1454           0 :   DOMString result;
    1455           0 :   self->GetMax(result);
    1456           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1457           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1458           0 :     return false;
    1459             :   }
    1460           0 :   return true;
    1461             : }
    1462             : 
    1463             : static bool
    1464           0 : set_max(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    1465             : {
    1466           0 :   binding_detail::FakeString arg0;
    1467           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1468           0 :     return false;
    1469             :   }
    1470           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    1471           0 :   Maybe<AutoCEReaction> ceReaction;
    1472           0 :   if (reactionsStack) {
    1473           0 :     ceReaction.emplace(reactionsStack);
    1474             :   }
    1475           0 :   binding_detail::FastErrorResult rv;
    1476           0 :   self->SetMax(NonNullHelper(Constify(arg0)), rv);
    1477           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1478           0 :     return false;
    1479             :   }
    1480           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1481             : 
    1482           0 :   return true;
    1483             : }
    1484             : 
    1485             : static const JSJitInfo max_getterinfo = {
    1486             :   { (JSJitGetterOp)get_max },
    1487             :   { prototypes::id::HTMLInputElement },
    1488             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1489             :   JSJitInfo::Getter,
    1490             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    1491             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1492             :   false,  /* isInfallible. False in setters. */
    1493             :   true,  /* isMovable.  Not relevant for setters. */
    1494             :   true, /* isEliminatable.  Not relevant for setters. */
    1495             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1496             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1497             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1498             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1499             : };
    1500             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1501             : static_assert(0 < 2, "There is no slot for us");
    1502             : static const JSJitInfo max_setterinfo = {
    1503             :   { (JSJitGetterOp)set_max },
    1504             :   { prototypes::id::HTMLInputElement },
    1505             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1506             :   JSJitInfo::Setter,
    1507             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1508             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1509             :   false,  /* isInfallible. False in setters. */
    1510             :   false,  /* isMovable.  Not relevant for setters. */
    1511             :   false, /* isEliminatable.  Not relevant for setters. */
    1512             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1513             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1514             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1515             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1516             : };
    1517             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1518             : static_assert(0 < 2, "There is no slot for us");
    1519             : 
    1520             : static bool
    1521           0 : get_maxLength(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    1522             : {
    1523           0 :   int32_t result(self->MaxLength());
    1524           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1525           0 :   args.rval().setInt32(int32_t(result));
    1526           0 :   return true;
    1527             : }
    1528             : 
    1529             : static bool
    1530           0 : set_maxLength(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    1531             : {
    1532             :   int32_t arg0;
    1533           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
    1534           0 :     return false;
    1535             :   }
    1536           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    1537           0 :   Maybe<AutoCEReaction> ceReaction;
    1538           0 :   if (reactionsStack) {
    1539           0 :     ceReaction.emplace(reactionsStack);
    1540             :   }
    1541           0 :   binding_detail::FastErrorResult rv;
    1542           0 :   self->SetMaxLength(arg0, rv);
    1543           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1544           0 :     return false;
    1545             :   }
    1546           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1547             : 
    1548           0 :   return true;
    1549             : }
    1550             : 
    1551             : static const JSJitInfo maxLength_getterinfo = {
    1552             :   { (JSJitGetterOp)get_maxLength },
    1553             :   { prototypes::id::HTMLInputElement },
    1554             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1555             :   JSJitInfo::Getter,
    1556             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    1557             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
    1558             :   true,  /* isInfallible. False in setters. */
    1559             :   true,  /* isMovable.  Not relevant for setters. */
    1560             :   true, /* isEliminatable.  Not relevant for setters. */
    1561             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1562             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1563             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1564             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1565             : };
    1566             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1567             : static_assert(0 < 2, "There is no slot for us");
    1568             : static const JSJitInfo maxLength_setterinfo = {
    1569             :   { (JSJitGetterOp)set_maxLength },
    1570             :   { prototypes::id::HTMLInputElement },
    1571             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1572             :   JSJitInfo::Setter,
    1573             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1574             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1575             :   false,  /* isInfallible. False in setters. */
    1576             :   false,  /* isMovable.  Not relevant for setters. */
    1577             :   false, /* isEliminatable.  Not relevant for setters. */
    1578             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1579             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1580             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1581             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1582             : };
    1583             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1584             : static_assert(0 < 2, "There is no slot for us");
    1585             : 
    1586             : static bool
    1587           0 : get_min(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    1588             : {
    1589           0 :   DOMString result;
    1590           0 :   self->GetMin(result);
    1591           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1592           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1593           0 :     return false;
    1594             :   }
    1595           0 :   return true;
    1596             : }
    1597             : 
    1598             : static bool
    1599           0 : set_min(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    1600             : {
    1601           0 :   binding_detail::FakeString arg0;
    1602           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1603           0 :     return false;
    1604             :   }
    1605           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    1606           0 :   Maybe<AutoCEReaction> ceReaction;
    1607           0 :   if (reactionsStack) {
    1608           0 :     ceReaction.emplace(reactionsStack);
    1609             :   }
    1610           0 :   binding_detail::FastErrorResult rv;
    1611           0 :   self->SetMin(NonNullHelper(Constify(arg0)), rv);
    1612           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1613           0 :     return false;
    1614             :   }
    1615           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1616             : 
    1617           0 :   return true;
    1618             : }
    1619             : 
    1620             : static const JSJitInfo min_getterinfo = {
    1621             :   { (JSJitGetterOp)get_min },
    1622             :   { prototypes::id::HTMLInputElement },
    1623             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1624             :   JSJitInfo::Getter,
    1625             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    1626             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1627             :   false,  /* isInfallible. False in setters. */
    1628             :   true,  /* isMovable.  Not relevant for setters. */
    1629             :   true, /* isEliminatable.  Not relevant for setters. */
    1630             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1631             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1632             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1633             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1634             : };
    1635             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1636             : static_assert(0 < 2, "There is no slot for us");
    1637             : static const JSJitInfo min_setterinfo = {
    1638             :   { (JSJitGetterOp)set_min },
    1639             :   { prototypes::id::HTMLInputElement },
    1640             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1641             :   JSJitInfo::Setter,
    1642             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1643             :   JSVAL_TYPE_UNDEFINED,  /* 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 < 2, "There is no slot for us");
    1654             : 
    1655             : static bool
    1656           0 : get_minLength(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    1657             : {
    1658           0 :   int32_t result(self->MinLength());
    1659           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1660           0 :   args.rval().setInt32(int32_t(result));
    1661           0 :   return true;
    1662             : }
    1663             : 
    1664             : static bool
    1665           0 : set_minLength(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    1666             : {
    1667             :   int32_t arg0;
    1668           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
    1669           0 :     return false;
    1670             :   }
    1671           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    1672           0 :   Maybe<AutoCEReaction> ceReaction;
    1673           0 :   if (reactionsStack) {
    1674           0 :     ceReaction.emplace(reactionsStack);
    1675             :   }
    1676           0 :   binding_detail::FastErrorResult rv;
    1677           0 :   self->SetMinLength(arg0, rv);
    1678           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1679           0 :     return false;
    1680             :   }
    1681           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1682             : 
    1683           0 :   return true;
    1684             : }
    1685             : 
    1686             : static const JSJitInfo minLength_getterinfo = {
    1687             :   { (JSJitGetterOp)get_minLength },
    1688             :   { prototypes::id::HTMLInputElement },
    1689             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1690             :   JSJitInfo::Getter,
    1691             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    1692             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
    1693             :   true,  /* isInfallible. False in setters. */
    1694             :   true,  /* isMovable.  Not relevant for setters. */
    1695             :   true, /* isEliminatable.  Not relevant for setters. */
    1696             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1697             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1698             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1699             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1700             : };
    1701             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1702             : static_assert(0 < 2, "There is no slot for us");
    1703             : static const JSJitInfo minLength_setterinfo = {
    1704             :   { (JSJitGetterOp)set_minLength },
    1705             :   { prototypes::id::HTMLInputElement },
    1706             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1707             :   JSJitInfo::Setter,
    1708             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1709             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1710             :   false,  /* isInfallible. False in setters. */
    1711             :   false,  /* isMovable.  Not relevant for setters. */
    1712             :   false, /* isEliminatable.  Not relevant for setters. */
    1713             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1714             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1715             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1716             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1717             : };
    1718             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1719             : static_assert(0 < 2, "There is no slot for us");
    1720             : 
    1721             : static bool
    1722           0 : get_multiple(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    1723             : {
    1724           0 :   bool result(self->Multiple());
    1725           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1726           0 :   args.rval().setBoolean(result);
    1727           0 :   return true;
    1728             : }
    1729             : 
    1730             : static bool
    1731           0 : set_multiple(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    1732             : {
    1733             :   bool arg0;
    1734           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    1735           0 :     return false;
    1736             :   }
    1737           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    1738           0 :   Maybe<AutoCEReaction> ceReaction;
    1739           0 :   if (reactionsStack) {
    1740           0 :     ceReaction.emplace(reactionsStack);
    1741             :   }
    1742           0 :   binding_detail::FastErrorResult rv;
    1743           0 :   self->SetMultiple(arg0, rv);
    1744           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1745           0 :     return false;
    1746             :   }
    1747           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1748             : 
    1749           0 :   return true;
    1750             : }
    1751             : 
    1752             : static const JSJitInfo multiple_getterinfo = {
    1753             :   { (JSJitGetterOp)get_multiple },
    1754             :   { prototypes::id::HTMLInputElement },
    1755             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1756             :   JSJitInfo::Getter,
    1757             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    1758             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    1759             :   true,  /* isInfallible. False in setters. */
    1760             :   true,  /* isMovable.  Not relevant for setters. */
    1761             :   true, /* isEliminatable.  Not relevant for setters. */
    1762             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1763             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1764             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1765             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1766             : };
    1767             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1768             : static_assert(0 < 2, "There is no slot for us");
    1769             : static const JSJitInfo multiple_setterinfo = {
    1770             :   { (JSJitGetterOp)set_multiple },
    1771             :   { prototypes::id::HTMLInputElement },
    1772             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1773             :   JSJitInfo::Setter,
    1774             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1775             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1776             :   false,  /* isInfallible. False in setters. */
    1777             :   false,  /* isMovable.  Not relevant for setters. */
    1778             :   false, /* isEliminatable.  Not relevant for setters. */
    1779             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1780             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1781             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1782             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1783             : };
    1784             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1785             : static_assert(0 < 2, "There is no slot for us");
    1786             : 
    1787             : static bool
    1788           0 : get_name(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    1789             : {
    1790           0 :   DOMString result;
    1791           0 :   self->GetName(result);
    1792           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1793           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1794           0 :     return false;
    1795             :   }
    1796           0 :   return true;
    1797             : }
    1798             : 
    1799             : static bool
    1800           0 : set_name(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    1801             : {
    1802           0 :   binding_detail::FakeString arg0;
    1803           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1804           0 :     return false;
    1805             :   }
    1806           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    1807           0 :   Maybe<AutoCEReaction> ceReaction;
    1808           0 :   if (reactionsStack) {
    1809           0 :     ceReaction.emplace(reactionsStack);
    1810             :   }
    1811           0 :   binding_detail::FastErrorResult rv;
    1812           0 :   self->SetName(NonNullHelper(Constify(arg0)), rv);
    1813           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1814           0 :     return false;
    1815             :   }
    1816           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1817             : 
    1818           0 :   return true;
    1819             : }
    1820             : 
    1821             : static const JSJitInfo name_getterinfo = {
    1822             :   { (JSJitGetterOp)get_name },
    1823             :   { prototypes::id::HTMLInputElement },
    1824             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1825             :   JSJitInfo::Getter,
    1826             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    1827             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1828             :   false,  /* isInfallible. False in setters. */
    1829             :   true,  /* isMovable.  Not relevant for setters. */
    1830             :   true, /* isEliminatable.  Not relevant for setters. */
    1831             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1832             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1833             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1834             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1835             : };
    1836             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1837             : static_assert(0 < 2, "There is no slot for us");
    1838             : static const JSJitInfo name_setterinfo = {
    1839             :   { (JSJitGetterOp)set_name },
    1840             :   { prototypes::id::HTMLInputElement },
    1841             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1842             :   JSJitInfo::Setter,
    1843             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1844             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1845             :   false,  /* isInfallible. False in setters. */
    1846             :   false,  /* isMovable.  Not relevant for setters. */
    1847             :   false, /* isEliminatable.  Not relevant for setters. */
    1848             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1849             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1850             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1851             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1852             : };
    1853             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1854             : static_assert(0 < 2, "There is no slot for us");
    1855             : 
    1856             : static bool
    1857           0 : get_pattern(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    1858             : {
    1859           0 :   DOMString result;
    1860           0 :   self->GetPattern(result);
    1861           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1862           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1863           0 :     return false;
    1864             :   }
    1865           0 :   return true;
    1866             : }
    1867             : 
    1868             : static bool
    1869           0 : set_pattern(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    1870             : {
    1871           0 :   binding_detail::FakeString arg0;
    1872           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1873           0 :     return false;
    1874             :   }
    1875           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    1876           0 :   Maybe<AutoCEReaction> ceReaction;
    1877           0 :   if (reactionsStack) {
    1878           0 :     ceReaction.emplace(reactionsStack);
    1879             :   }
    1880           0 :   binding_detail::FastErrorResult rv;
    1881           0 :   self->SetPattern(NonNullHelper(Constify(arg0)), rv);
    1882           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1883           0 :     return false;
    1884             :   }
    1885           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1886             : 
    1887           0 :   return true;
    1888             : }
    1889             : 
    1890             : static const JSJitInfo pattern_getterinfo = {
    1891             :   { (JSJitGetterOp)get_pattern },
    1892             :   { prototypes::id::HTMLInputElement },
    1893             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1894             :   JSJitInfo::Getter,
    1895             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    1896             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1897             :   false,  /* isInfallible. False in setters. */
    1898             :   true,  /* isMovable.  Not relevant for setters. */
    1899             :   true, /* isEliminatable.  Not relevant for setters. */
    1900             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1901             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1902             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1903             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1904             : };
    1905             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1906             : static_assert(0 < 2, "There is no slot for us");
    1907             : static const JSJitInfo pattern_setterinfo = {
    1908             :   { (JSJitGetterOp)set_pattern },
    1909             :   { prototypes::id::HTMLInputElement },
    1910             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1911             :   JSJitInfo::Setter,
    1912             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1913             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1914             :   false,  /* isInfallible. False in setters. */
    1915             :   false,  /* isMovable.  Not relevant for setters. */
    1916             :   false, /* isEliminatable.  Not relevant for setters. */
    1917             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1918             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1919             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1920             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1921             : };
    1922             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1923             : static_assert(0 < 2, "There is no slot for us");
    1924             : 
    1925             : static bool
    1926           0 : get_placeholder(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    1927             : {
    1928           0 :   DOMString result;
    1929           0 :   self->GetPlaceholder(result);
    1930           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1931           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    1932           0 :     return false;
    1933             :   }
    1934           0 :   return true;
    1935             : }
    1936             : 
    1937             : static bool
    1938           0 : set_placeholder(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    1939             : {
    1940           0 :   binding_detail::FakeString arg0;
    1941           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    1942           0 :     return false;
    1943             :   }
    1944           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    1945           0 :   Maybe<AutoCEReaction> ceReaction;
    1946           0 :   if (reactionsStack) {
    1947           0 :     ceReaction.emplace(reactionsStack);
    1948             :   }
    1949           0 :   binding_detail::FastErrorResult rv;
    1950           0 :   self->SetPlaceholder(NonNullHelper(Constify(arg0)), rv);
    1951           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    1952           0 :     return false;
    1953             :   }
    1954           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1955             : 
    1956           0 :   return true;
    1957             : }
    1958             : 
    1959             : static const JSJitInfo placeholder_getterinfo = {
    1960             :   { (JSJitGetterOp)get_placeholder },
    1961             :   { prototypes::id::HTMLInputElement },
    1962             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1963             :   JSJitInfo::Getter,
    1964             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    1965             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    1966             :   false,  /* isInfallible. False in setters. */
    1967             :   true,  /* isMovable.  Not relevant for setters. */
    1968             :   true, /* isEliminatable.  Not relevant for setters. */
    1969             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1970             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1971             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1972             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1973             : };
    1974             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1975             : static_assert(0 < 2, "There is no slot for us");
    1976             : static const JSJitInfo placeholder_setterinfo = {
    1977             :   { (JSJitGetterOp)set_placeholder },
    1978             :   { prototypes::id::HTMLInputElement },
    1979             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    1980             :   JSJitInfo::Setter,
    1981             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    1982             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    1983             :   false,  /* isInfallible. False in setters. */
    1984             :   false,  /* isMovable.  Not relevant for setters. */
    1985             :   false, /* isEliminatable.  Not relevant for setters. */
    1986             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    1987             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    1988             :   false,  /* isTypedMethod.  Only relevant for methods. */
    1989             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    1990             : };
    1991             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    1992             : static_assert(0 < 2, "There is no slot for us");
    1993             : 
    1994             : static bool
    1995           0 : get_readOnly(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    1996             : {
    1997           0 :   bool result(self->ReadOnly());
    1998           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    1999           0 :   args.rval().setBoolean(result);
    2000           0 :   return true;
    2001             : }
    2002             : 
    2003             : static bool
    2004           0 : set_readOnly(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    2005             : {
    2006             :   bool arg0;
    2007           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    2008           0 :     return false;
    2009             :   }
    2010           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    2011           0 :   Maybe<AutoCEReaction> ceReaction;
    2012           0 :   if (reactionsStack) {
    2013           0 :     ceReaction.emplace(reactionsStack);
    2014             :   }
    2015           0 :   binding_detail::FastErrorResult rv;
    2016           0 :   self->SetReadOnly(arg0, rv);
    2017           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2018           0 :     return false;
    2019             :   }
    2020           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2021             : 
    2022           0 :   return true;
    2023             : }
    2024             : 
    2025             : static const JSJitInfo readOnly_getterinfo = {
    2026             :   { (JSJitGetterOp)get_readOnly },
    2027             :   { prototypes::id::HTMLInputElement },
    2028             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2029             :   JSJitInfo::Getter,
    2030             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    2031             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    2032             :   true,  /* isInfallible. False in setters. */
    2033             :   true,  /* isMovable.  Not relevant for setters. */
    2034             :   true, /* isEliminatable.  Not relevant for setters. */
    2035             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2036             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2037             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2038             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2039             : };
    2040             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2041             : static_assert(0 < 2, "There is no slot for us");
    2042             : static const JSJitInfo readOnly_setterinfo = {
    2043             :   { (JSJitGetterOp)set_readOnly },
    2044             :   { prototypes::id::HTMLInputElement },
    2045             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2046             :   JSJitInfo::Setter,
    2047             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2048             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2049             :   false,  /* isInfallible. False in setters. */
    2050             :   false,  /* isMovable.  Not relevant for setters. */
    2051             :   false, /* isEliminatable.  Not relevant for setters. */
    2052             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2053             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2054             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2055             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2056             : };
    2057             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2058             : static_assert(0 < 2, "There is no slot for us");
    2059             : 
    2060             : static bool
    2061           0 : get_required(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    2062             : {
    2063           0 :   bool result(self->Required());
    2064           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2065           0 :   args.rval().setBoolean(result);
    2066           0 :   return true;
    2067             : }
    2068             : 
    2069             : static bool
    2070           0 : set_required(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    2071             : {
    2072             :   bool arg0;
    2073           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    2074           0 :     return false;
    2075             :   }
    2076           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    2077           0 :   Maybe<AutoCEReaction> ceReaction;
    2078           0 :   if (reactionsStack) {
    2079           0 :     ceReaction.emplace(reactionsStack);
    2080             :   }
    2081           0 :   binding_detail::FastErrorResult rv;
    2082           0 :   self->SetRequired(arg0, rv);
    2083           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2084           0 :     return false;
    2085             :   }
    2086           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2087             : 
    2088           0 :   return true;
    2089             : }
    2090             : 
    2091             : static const JSJitInfo required_getterinfo = {
    2092             :   { (JSJitGetterOp)get_required },
    2093             :   { prototypes::id::HTMLInputElement },
    2094             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2095             :   JSJitInfo::Getter,
    2096             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    2097             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    2098             :   true,  /* isInfallible. False in setters. */
    2099             :   true,  /* isMovable.  Not relevant for setters. */
    2100             :   true, /* isEliminatable.  Not relevant for setters. */
    2101             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2102             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2103             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2104             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2105             : };
    2106             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2107             : static_assert(0 < 2, "There is no slot for us");
    2108             : static const JSJitInfo required_setterinfo = {
    2109             :   { (JSJitGetterOp)set_required },
    2110             :   { prototypes::id::HTMLInputElement },
    2111             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2112             :   JSJitInfo::Setter,
    2113             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2114             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2115             :   false,  /* isInfallible. False in setters. */
    2116             :   false,  /* isMovable.  Not relevant for setters. */
    2117             :   false, /* isEliminatable.  Not relevant for setters. */
    2118             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2119             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2120             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2121             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2122             : };
    2123             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2124             : static_assert(0 < 2, "There is no slot for us");
    2125             : 
    2126             : static bool
    2127           0 : get_size(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    2128             : {
    2129           0 :   uint32_t result(self->Size());
    2130           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2131           0 :   args.rval().setNumber(result);
    2132           0 :   return true;
    2133             : }
    2134             : 
    2135             : static bool
    2136           0 : set_size(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    2137             : {
    2138             :   uint32_t arg0;
    2139           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    2140           0 :     return false;
    2141             :   }
    2142           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    2143           0 :   Maybe<AutoCEReaction> ceReaction;
    2144           0 :   if (reactionsStack) {
    2145           0 :     ceReaction.emplace(reactionsStack);
    2146             :   }
    2147           0 :   binding_detail::FastErrorResult rv;
    2148           0 :   self->SetSize(arg0, rv);
    2149           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2150           0 :     return false;
    2151             :   }
    2152           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2153             : 
    2154           0 :   return true;
    2155             : }
    2156             : 
    2157             : static const JSJitInfo size_getterinfo = {
    2158             :   { (JSJitGetterOp)get_size },
    2159             :   { prototypes::id::HTMLInputElement },
    2160             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2161             :   JSJitInfo::Getter,
    2162             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    2163             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2164             :   true,  /* isInfallible. False in setters. */
    2165             :   true,  /* isMovable.  Not relevant for setters. */
    2166             :   true, /* isEliminatable.  Not relevant for setters. */
    2167             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2168             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2169             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2170             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2171             : };
    2172             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2173             : static_assert(0 < 2, "There is no slot for us");
    2174             : static const JSJitInfo size_setterinfo = {
    2175             :   { (JSJitGetterOp)set_size },
    2176             :   { prototypes::id::HTMLInputElement },
    2177             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2178             :   JSJitInfo::Setter,
    2179             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2180             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2181             :   false,  /* isInfallible. False in setters. */
    2182             :   false,  /* isMovable.  Not relevant for setters. */
    2183             :   false, /* isEliminatable.  Not relevant for setters. */
    2184             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2185             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2186             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2187             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2188             : };
    2189             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2190             : static_assert(0 < 2, "There is no slot for us");
    2191             : 
    2192             : static bool
    2193           0 : get_src(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    2194             : {
    2195           0 :   DOMString result;
    2196           0 :   self->GetSrc(result);
    2197           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2198           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    2199           0 :     return false;
    2200             :   }
    2201           0 :   return true;
    2202             : }
    2203             : 
    2204             : static bool
    2205           0 : set_src(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    2206             : {
    2207           0 :   binding_detail::FakeString arg0;
    2208           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    2209           0 :     return false;
    2210             :   }
    2211           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    2212           0 :   Maybe<AutoCEReaction> ceReaction;
    2213           0 :   if (reactionsStack) {
    2214           0 :     ceReaction.emplace(reactionsStack);
    2215             :   }
    2216           0 :   binding_detail::FastErrorResult rv;
    2217           0 :   self->SetSrc(NonNullHelper(Constify(arg0)), rv);
    2218           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2219           0 :     return false;
    2220             :   }
    2221           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2222             : 
    2223           0 :   return true;
    2224             : }
    2225             : 
    2226             : static const JSJitInfo src_getterinfo = {
    2227             :   { (JSJitGetterOp)get_src },
    2228             :   { prototypes::id::HTMLInputElement },
    2229             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2230             :   JSJitInfo::Getter,
    2231             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    2232             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    2233             :   false,  /* isInfallible. False in setters. */
    2234             :   true,  /* isMovable.  Not relevant for setters. */
    2235             :   true, /* isEliminatable.  Not relevant for setters. */
    2236             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2237             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2238             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2239             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2240             : };
    2241             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2242             : static_assert(0 < 2, "There is no slot for us");
    2243             : static const JSJitInfo src_setterinfo = {
    2244             :   { (JSJitGetterOp)set_src },
    2245             :   { prototypes::id::HTMLInputElement },
    2246             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2247             :   JSJitInfo::Setter,
    2248             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2249             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2250             :   false,  /* isInfallible. False in setters. */
    2251             :   false,  /* isMovable.  Not relevant for setters. */
    2252             :   false, /* isEliminatable.  Not relevant for setters. */
    2253             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2254             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2255             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2256             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2257             : };
    2258             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2259             : static_assert(0 < 2, "There is no slot for us");
    2260             : 
    2261             : static bool
    2262           0 : get_step(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    2263             : {
    2264           0 :   DOMString result;
    2265           0 :   self->GetStep(result);
    2266           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2267           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    2268           0 :     return false;
    2269             :   }
    2270           0 :   return true;
    2271             : }
    2272             : 
    2273             : static bool
    2274           0 : set_step(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    2275             : {
    2276           0 :   binding_detail::FakeString arg0;
    2277           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    2278           0 :     return false;
    2279             :   }
    2280           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    2281           0 :   Maybe<AutoCEReaction> ceReaction;
    2282           0 :   if (reactionsStack) {
    2283           0 :     ceReaction.emplace(reactionsStack);
    2284             :   }
    2285           0 :   binding_detail::FastErrorResult rv;
    2286           0 :   self->SetStep(NonNullHelper(Constify(arg0)), rv);
    2287           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2288           0 :     return false;
    2289             :   }
    2290           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2291             : 
    2292           0 :   return true;
    2293             : }
    2294             : 
    2295             : static const JSJitInfo step_getterinfo = {
    2296             :   { (JSJitGetterOp)get_step },
    2297             :   { prototypes::id::HTMLInputElement },
    2298             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2299             :   JSJitInfo::Getter,
    2300             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    2301             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    2302             :   false,  /* isInfallible. False in setters. */
    2303             :   true,  /* isMovable.  Not relevant for setters. */
    2304             :   true, /* isEliminatable.  Not relevant for setters. */
    2305             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2306             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2307             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2308             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2309             : };
    2310             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2311             : static_assert(0 < 2, "There is no slot for us");
    2312             : static const JSJitInfo step_setterinfo = {
    2313             :   { (JSJitGetterOp)set_step },
    2314             :   { prototypes::id::HTMLInputElement },
    2315             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2316             :   JSJitInfo::Setter,
    2317             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2318             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2319             :   false,  /* isInfallible. False in setters. */
    2320             :   false,  /* isMovable.  Not relevant for setters. */
    2321             :   false, /* isEliminatable.  Not relevant for setters. */
    2322             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2323             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2324             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2325             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2326             : };
    2327             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2328             : static_assert(0 < 2, "There is no slot for us");
    2329             : 
    2330             : static bool
    2331           0 : get_type(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    2332             : {
    2333           0 :   DOMString result;
    2334           0 :   self->GetType(result);
    2335           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2336           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    2337           0 :     return false;
    2338             :   }
    2339           0 :   return true;
    2340             : }
    2341             : 
    2342             : static bool
    2343           0 : set_type(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    2344             : {
    2345           0 :   binding_detail::FakeString arg0;
    2346           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    2347           0 :     return false;
    2348             :   }
    2349           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    2350           0 :   Maybe<AutoCEReaction> ceReaction;
    2351           0 :   if (reactionsStack) {
    2352           0 :     ceReaction.emplace(reactionsStack);
    2353             :   }
    2354           0 :   binding_detail::FastErrorResult rv;
    2355           0 :   self->SetType(NonNullHelper(Constify(arg0)), rv);
    2356           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2357           0 :     return false;
    2358             :   }
    2359           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2360             : 
    2361           0 :   return true;
    2362             : }
    2363             : 
    2364             : static const JSJitInfo type_getterinfo = {
    2365             :   { (JSJitGetterOp)get_type },
    2366             :   { prototypes::id::HTMLInputElement },
    2367             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2368             :   JSJitInfo::Getter,
    2369             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    2370             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    2371             :   false,  /* isInfallible. False in setters. */
    2372             :   true,  /* isMovable.  Not relevant for setters. */
    2373             :   true, /* isEliminatable.  Not relevant for setters. */
    2374             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2375             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2376             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2377             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2378             : };
    2379             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2380             : static_assert(0 < 2, "There is no slot for us");
    2381             : static const JSJitInfo type_setterinfo = {
    2382             :   { (JSJitGetterOp)set_type },
    2383             :   { prototypes::id::HTMLInputElement },
    2384             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2385             :   JSJitInfo::Setter,
    2386             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2387             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2388             :   false,  /* isInfallible. False in setters. */
    2389             :   false,  /* isMovable.  Not relevant for setters. */
    2390             :   false, /* isEliminatable.  Not relevant for setters. */
    2391             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2392             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2393             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2394             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2395             : };
    2396             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2397             : static_assert(0 < 2, "There is no slot for us");
    2398             : 
    2399             : static bool
    2400           0 : get_defaultValue(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    2401             : {
    2402           0 :   DOMString result;
    2403           0 :   self->GetDefaultValue(result);
    2404           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2405           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    2406           0 :     return false;
    2407             :   }
    2408           0 :   return true;
    2409             : }
    2410             : 
    2411             : static bool
    2412           0 : set_defaultValue(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    2413             : {
    2414           0 :   binding_detail::FakeString arg0;
    2415           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    2416           0 :     return false;
    2417             :   }
    2418           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    2419           0 :   Maybe<AutoCEReaction> ceReaction;
    2420           0 :   if (reactionsStack) {
    2421           0 :     ceReaction.emplace(reactionsStack);
    2422             :   }
    2423           0 :   binding_detail::FastErrorResult rv;
    2424           0 :   self->SetDefaultValue(NonNullHelper(Constify(arg0)), rv);
    2425           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2426           0 :     return false;
    2427             :   }
    2428           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2429             : 
    2430           0 :   return true;
    2431             : }
    2432             : 
    2433             : static const JSJitInfo defaultValue_getterinfo = {
    2434             :   { (JSJitGetterOp)get_defaultValue },
    2435             :   { prototypes::id::HTMLInputElement },
    2436             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2437             :   JSJitInfo::Getter,
    2438             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    2439             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    2440             :   false,  /* isInfallible. False in setters. */
    2441             :   true,  /* isMovable.  Not relevant for setters. */
    2442             :   true, /* isEliminatable.  Not relevant for setters. */
    2443             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2444             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2445             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2446             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2447             : };
    2448             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2449             : static_assert(0 < 2, "There is no slot for us");
    2450             : static const JSJitInfo defaultValue_setterinfo = {
    2451             :   { (JSJitGetterOp)set_defaultValue },
    2452             :   { prototypes::id::HTMLInputElement },
    2453             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2454             :   JSJitInfo::Setter,
    2455             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2456             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2457             :   false,  /* isInfallible. False in setters. */
    2458             :   false,  /* isMovable.  Not relevant for setters. */
    2459             :   false, /* isEliminatable.  Not relevant for setters. */
    2460             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2461             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2462             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2463             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2464             : };
    2465             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2466             : static_assert(0 < 2, "There is no slot for us");
    2467             : 
    2468             : static bool
    2469           0 : get_value(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    2470             : {
    2471           0 :   DOMString result;
    2472           0 :   self->GetValue(result, nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem);
    2473           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2474           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    2475           0 :     return false;
    2476             :   }
    2477           0 :   return true;
    2478             : }
    2479             : 
    2480             : static bool
    2481           1 : set_value(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    2482             : {
    2483           2 :   binding_detail::FakeString arg0;
    2484           1 :   if (!ConvertJSValueToString(cx, args[0], eEmpty, eStringify, arg0)) {
    2485           0 :     return false;
    2486             :   }
    2487           1 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    2488           2 :   Maybe<AutoCEReaction> ceReaction;
    2489           1 :   if (reactionsStack) {
    2490           1 :     ceReaction.emplace(reactionsStack);
    2491             :   }
    2492           2 :   binding_detail::FastErrorResult rv;
    2493           1 :   self->SetValue(NonNullHelper(Constify(arg0)), nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem, rv);
    2494           1 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2495           0 :     return false;
    2496             :   }
    2497           1 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2498             : 
    2499           1 :   return true;
    2500             : }
    2501             : 
    2502             : static const JSJitInfo value_getterinfo = {
    2503             :   { (JSJitGetterOp)get_value },
    2504             :   { prototypes::id::HTMLInputElement },
    2505             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2506             :   JSJitInfo::Getter,
    2507             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    2508             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    2509             :   false,  /* isInfallible. False in setters. */
    2510             :   true,  /* isMovable.  Not relevant for setters. */
    2511             :   true, /* isEliminatable.  Not relevant for setters. */
    2512             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2513             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2514             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2515             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2516             : };
    2517             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2518             : static_assert(0 < 2, "There is no slot for us");
    2519             : static const JSJitInfo value_setterinfo = {
    2520             :   { (JSJitGetterOp)set_value },
    2521             :   { prototypes::id::HTMLInputElement },
    2522             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2523             :   JSJitInfo::Setter,
    2524             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2525             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2526             :   false,  /* isInfallible. False in setters. */
    2527             :   false,  /* isMovable.  Not relevant for setters. */
    2528             :   false, /* isEliminatable.  Not relevant for setters. */
    2529             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2530             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2531             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2532             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2533             : };
    2534             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2535             : static_assert(0 < 2, "There is no slot for us");
    2536             : 
    2537             : static bool
    2538           0 : get_valueAsDate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    2539             : {
    2540           0 :   binding_detail::FastErrorResult rv;
    2541           0 :   Nullable<Date> result(self->GetValueAsDate(rv));
    2542           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2543           0 :     return false;
    2544             :   }
    2545           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2546           0 :   if (result.IsNull()) {
    2547           0 :     args.rval().setNull();
    2548           0 :     return true;
    2549             :   }
    2550           0 :   if (!result.Value().ToDateObject(cx, args.rval())) {
    2551           0 :     return false;
    2552             :   }
    2553           0 :   return true;
    2554             : }
    2555             : 
    2556             : static bool
    2557           0 : set_valueAsDate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    2558             : {
    2559           0 :   Nullable<Date> arg0;
    2560           0 :   if (args[0].isObject()) {
    2561           0 :     JS::Rooted<JSObject*> possibleDateObject(cx, &args[0].toObject());
    2562             :     { // scope for isDate
    2563             :       bool isDate;
    2564           0 :       if (!JS_ObjectIsDate(cx, possibleDateObject, &isDate)) {
    2565           0 :         return false;
    2566             :       }
    2567           0 :       if (!isDate) {
    2568           0 :         ThrowErrorMessage(cx, MSG_NOT_DATE, "Value being assigned to HTMLInputElement.valueAsDate");
    2569           0 :         return false;
    2570             :       }
    2571           0 :       if (!arg0.SetValue().SetTimeStamp(cx, possibleDateObject)) {
    2572           0 :         return false;
    2573             :       }
    2574             :     }
    2575           0 :   } else if (args[0].isNullOrUndefined()) {
    2576           0 :     arg0.SetNull();
    2577             :   } else {
    2578           0 :     ThrowErrorMessage(cx, MSG_NOT_DATE, "Value being assigned to HTMLInputElement.valueAsDate");
    2579           0 :     return false;
    2580             :   }
    2581           0 :   binding_detail::FastErrorResult rv;
    2582           0 :   self->SetValueAsDate(Constify(arg0), rv);
    2583           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2584           0 :     return false;
    2585             :   }
    2586           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2587             : 
    2588           0 :   return true;
    2589             : }
    2590             : 
    2591             : static const JSJitInfo valueAsDate_getterinfo = {
    2592             :   { (JSJitGetterOp)get_valueAsDate },
    2593             :   { prototypes::id::HTMLInputElement },
    2594             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2595             :   JSJitInfo::Getter,
    2596             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2597             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    2598             :   false,  /* isInfallible. False in setters. */
    2599             :   false,  /* isMovable.  Not relevant for setters. */
    2600             :   false, /* isEliminatable.  Not relevant for setters. */
    2601             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2602             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2603             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2604             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2605             : };
    2606             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2607             : static_assert(0 < 2, "There is no slot for us");
    2608             : static const JSJitInfo valueAsDate_setterinfo = {
    2609             :   { (JSJitGetterOp)set_valueAsDate },
    2610             :   { prototypes::id::HTMLInputElement },
    2611             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2612             :   JSJitInfo::Setter,
    2613             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2614             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2615             :   false,  /* isInfallible. False in setters. */
    2616             :   false,  /* isMovable.  Not relevant for setters. */
    2617             :   false, /* isEliminatable.  Not relevant for setters. */
    2618             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2619             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2620             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2621             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2622             : };
    2623             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2624             : static_assert(0 < 2, "There is no slot for us");
    2625             : 
    2626             : static bool
    2627           0 : get_valueAsNumber(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    2628             : {
    2629           0 :   double result(self->ValueAsNumber());
    2630           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2631           0 :   args.rval().set(JS_NumberValue(double(result)));
    2632           0 :   return true;
    2633             : }
    2634             : 
    2635             : static bool
    2636           0 : set_valueAsNumber(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    2637             : {
    2638             :   double arg0;
    2639           0 :   if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
    2640           0 :     return false;
    2641             :   }
    2642           0 :   binding_detail::FastErrorResult rv;
    2643           0 :   self->SetValueAsNumber(arg0, rv);
    2644           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2645           0 :     return false;
    2646             :   }
    2647           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2648             : 
    2649           0 :   return true;
    2650             : }
    2651             : 
    2652             : static const JSJitInfo valueAsNumber_getterinfo = {
    2653             :   { (JSJitGetterOp)get_valueAsNumber },
    2654             :   { prototypes::id::HTMLInputElement },
    2655             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2656             :   JSJitInfo::Getter,
    2657             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    2658             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2659             :   true,  /* isInfallible. False in setters. */
    2660             :   true,  /* isMovable.  Not relevant for setters. */
    2661             :   true, /* isEliminatable.  Not relevant for setters. */
    2662             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2663             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2664             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2665             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2666             : };
    2667             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2668             : static_assert(0 < 2, "There is no slot for us");
    2669             : static const JSJitInfo valueAsNumber_setterinfo = {
    2670             :   { (JSJitGetterOp)set_valueAsNumber },
    2671             :   { prototypes::id::HTMLInputElement },
    2672             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2673             :   JSJitInfo::Setter,
    2674             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2675             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2676             :   false,  /* isInfallible. False in setters. */
    2677             :   false,  /* isMovable.  Not relevant for setters. */
    2678             :   false, /* isEliminatable.  Not relevant for setters. */
    2679             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2680             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2681             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2682             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2683             : };
    2684             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2685             : static_assert(0 < 2, "There is no slot for us");
    2686             : 
    2687             : static bool
    2688           0 : get_width(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    2689             : {
    2690           0 :   uint32_t result(self->Width());
    2691           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2692           0 :   args.rval().setNumber(result);
    2693           0 :   return true;
    2694             : }
    2695             : 
    2696             : static bool
    2697           0 : set_width(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    2698             : {
    2699             :   uint32_t arg0;
    2700           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    2701           0 :     return false;
    2702             :   }
    2703           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    2704           0 :   Maybe<AutoCEReaction> ceReaction;
    2705           0 :   if (reactionsStack) {
    2706           0 :     ceReaction.emplace(reactionsStack);
    2707             :   }
    2708           0 :   self->SetWidth(arg0);
    2709           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2710             : 
    2711           0 :   return true;
    2712             : }
    2713             : 
    2714             : static const JSJitInfo width_getterinfo = {
    2715             :   { (JSJitGetterOp)get_width },
    2716             :   { prototypes::id::HTMLInputElement },
    2717             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2718             :   JSJitInfo::Getter,
    2719             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2720             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    2721             :   true,  /* isInfallible. False in setters. */
    2722             :   false,  /* isMovable.  Not relevant for setters. */
    2723             :   false, /* isEliminatable.  Not relevant for setters. */
    2724             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2725             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2726             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2727             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2728             : };
    2729             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2730             : static_assert(0 < 2, "There is no slot for us");
    2731             : static const JSJitInfo width_setterinfo = {
    2732             :   { (JSJitGetterOp)set_width },
    2733             :   { prototypes::id::HTMLInputElement },
    2734             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2735             :   JSJitInfo::Setter,
    2736             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2737             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2738             :   false,  /* isInfallible. False in setters. */
    2739             :   false,  /* isMovable.  Not relevant for setters. */
    2740             :   false, /* isEliminatable.  Not relevant for setters. */
    2741             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2742             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2743             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2744             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2745             : };
    2746             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2747             : static_assert(0 < 2, "There is no slot for us");
    2748             : 
    2749             : static bool
    2750           0 : stepUp(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    2751             : {
    2752             :   int32_t arg0;
    2753           0 :   if (args.hasDefined(0)) {
    2754           0 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
    2755           0 :       return false;
    2756             :     }
    2757             :   } else {
    2758           0 :     arg0 = 1;
    2759             :   }
    2760           0 :   binding_detail::FastErrorResult rv;
    2761           0 :   self->StepUp(arg0, rv);
    2762           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2763           0 :     return false;
    2764             :   }
    2765           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2766           0 :   args.rval().setUndefined();
    2767           0 :   return true;
    2768             : }
    2769             : 
    2770             : static const JSJitInfo stepUp_methodinfo = {
    2771             :   { (JSJitGetterOp)stepUp },
    2772             :   { prototypes::id::HTMLInputElement },
    2773             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2774             :   JSJitInfo::Method,
    2775             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2776             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2777             :   false,  /* isInfallible. False in setters. */
    2778             :   false,  /* isMovable.  Not relevant for setters. */
    2779             :   false, /* isEliminatable.  Not relevant for setters. */
    2780             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2781             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2782             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2783             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2784             : };
    2785             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2786             : static_assert(0 < 2, "There is no slot for us");
    2787             : 
    2788             : static bool
    2789           0 : stepDown(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    2790             : {
    2791             :   int32_t arg0;
    2792           0 :   if (args.hasDefined(0)) {
    2793           0 :     if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
    2794           0 :       return false;
    2795             :     }
    2796             :   } else {
    2797           0 :     arg0 = 1;
    2798             :   }
    2799           0 :   binding_detail::FastErrorResult rv;
    2800           0 :   self->StepDown(arg0, rv);
    2801           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2802           0 :     return false;
    2803             :   }
    2804           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2805           0 :   args.rval().setUndefined();
    2806           0 :   return true;
    2807             : }
    2808             : 
    2809             : static const JSJitInfo stepDown_methodinfo = {
    2810             :   { (JSJitGetterOp)stepDown },
    2811             :   { prototypes::id::HTMLInputElement },
    2812             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2813             :   JSJitInfo::Method,
    2814             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2815             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2816             :   false,  /* isInfallible. False in setters. */
    2817             :   false,  /* isMovable.  Not relevant for setters. */
    2818             :   false, /* isEliminatable.  Not relevant for setters. */
    2819             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2820             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2821             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2822             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2823             : };
    2824             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2825             : static_assert(0 < 2, "There is no slot for us");
    2826             : 
    2827             : static bool
    2828           0 : get_willValidate(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    2829             : {
    2830           0 :   bool result(self->WillValidate());
    2831           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2832           0 :   args.rval().setBoolean(result);
    2833           0 :   return true;
    2834             : }
    2835             : 
    2836             : static const JSJitInfo willValidate_getterinfo = {
    2837             :   { (JSJitGetterOp)get_willValidate },
    2838             :   { prototypes::id::HTMLInputElement },
    2839             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2840             :   JSJitInfo::Getter,
    2841             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    2842             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    2843             :   true,  /* isInfallible. False in setters. */
    2844             :   true,  /* isMovable.  Not relevant for setters. */
    2845             :   true, /* isEliminatable.  Not relevant for setters. */
    2846             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2847             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2848             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2849             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2850             : };
    2851             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2852             : static_assert(0 < 2, "There is no slot for us");
    2853             : 
    2854             : static bool
    2855           0 : get_validity(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    2856             : {
    2857           0 :   auto result(StrongOrRawPtr<mozilla::dom::ValidityState>(self->Validity()));
    2858           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2859           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    2860           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    2861           0 :     return false;
    2862             :   }
    2863           0 :   return true;
    2864             : }
    2865             : 
    2866             : static const JSJitInfo validity_getterinfo = {
    2867             :   { (JSJitGetterOp)get_validity },
    2868             :   { prototypes::id::HTMLInputElement },
    2869             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2870             :   JSJitInfo::Getter,
    2871             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    2872             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    2873             :   false,  /* isInfallible. False in setters. */
    2874             :   true,  /* isMovable.  Not relevant for setters. */
    2875             :   true, /* isEliminatable.  Not relevant for setters. */
    2876             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2877             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2878             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2879             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2880             : };
    2881             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2882             : static_assert(0 < 2, "There is no slot for us");
    2883             : 
    2884             : static bool
    2885           0 : get_validationMessage(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    2886             : {
    2887           0 :   binding_detail::FastErrorResult rv;
    2888           0 :   DOMString result;
    2889           0 :   self->GetValidationMessage(result, rv);
    2890           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    2891           0 :     return false;
    2892             :   }
    2893           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2894           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    2895           0 :     return false;
    2896             :   }
    2897           0 :   return true;
    2898             : }
    2899             : 
    2900             : static const JSJitInfo validationMessage_getterinfo = {
    2901             :   { (JSJitGetterOp)get_validationMessage },
    2902             :   { prototypes::id::HTMLInputElement },
    2903             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2904             :   JSJitInfo::Getter,
    2905             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2906             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    2907             :   false,  /* isInfallible. False in setters. */
    2908             :   false,  /* isMovable.  Not relevant for setters. */
    2909             :   false, /* isEliminatable.  Not relevant for setters. */
    2910             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2911             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2912             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2913             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2914             : };
    2915             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2916             : static_assert(0 < 2, "There is no slot for us");
    2917             : 
    2918             : static bool
    2919           0 : checkValidity(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    2920             : {
    2921           0 :   bool result(self->CheckValidity());
    2922           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2923           0 :   args.rval().setBoolean(result);
    2924           0 :   return true;
    2925             : }
    2926             : 
    2927             : static const JSJitInfo checkValidity_methodinfo = {
    2928             :   { (JSJitGetterOp)checkValidity },
    2929             :   { prototypes::id::HTMLInputElement },
    2930             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2931             :   JSJitInfo::Method,
    2932             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2933             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    2934             :   true,  /* isInfallible. False in setters. */
    2935             :   false,  /* isMovable.  Not relevant for setters. */
    2936             :   false, /* isEliminatable.  Not relevant for setters. */
    2937             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2938             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2939             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2940             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2941             : };
    2942             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2943             : static_assert(0 < 2, "There is no slot for us");
    2944             : 
    2945             : static bool
    2946           0 : reportValidity(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    2947             : {
    2948           0 :   bool result(self->ReportValidity());
    2949           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2950           0 :   args.rval().setBoolean(result);
    2951           0 :   return true;
    2952             : }
    2953             : 
    2954             : static const JSJitInfo reportValidity_methodinfo = {
    2955             :   { (JSJitGetterOp)reportValidity },
    2956             :   { prototypes::id::HTMLInputElement },
    2957             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2958             :   JSJitInfo::Method,
    2959             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2960             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    2961             :   true,  /* isInfallible. False in setters. */
    2962             :   false,  /* isMovable.  Not relevant for setters. */
    2963             :   false, /* isEliminatable.  Not relevant for setters. */
    2964             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2965             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    2966             :   false,  /* isTypedMethod.  Only relevant for methods. */
    2967             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    2968             : };
    2969             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    2970             : static_assert(0 < 2, "There is no slot for us");
    2971             : 
    2972             : static bool
    2973           0 : setCustomValidity(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    2974             : {
    2975           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    2976           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.setCustomValidity");
    2977             :   }
    2978           0 :   binding_detail::FakeString arg0;
    2979           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    2980           0 :     return false;
    2981             :   }
    2982           0 :   self->SetCustomValidity(NonNullHelper(Constify(arg0)));
    2983           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    2984           0 :   args.rval().setUndefined();
    2985           0 :   return true;
    2986             : }
    2987             : 
    2988             : static const JSJitInfo setCustomValidity_methodinfo = {
    2989             :   { (JSJitGetterOp)setCustomValidity },
    2990             :   { prototypes::id::HTMLInputElement },
    2991             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    2992             :   JSJitInfo::Method,
    2993             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    2994             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    2995             :   false,  /* isInfallible. False in setters. */
    2996             :   false,  /* isMovable.  Not relevant for setters. */
    2997             :   false, /* isEliminatable.  Not relevant for setters. */
    2998             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    2999             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3000             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3001             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3002             : };
    3003             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3004             : static_assert(0 < 2, "There is no slot for us");
    3005             : 
    3006             : static bool
    3007           0 : get_labels(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    3008             : {
    3009           0 :   auto result(StrongOrRawPtr<nsINodeList>(self->GetLabels()));
    3010           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3011           0 :   if (!result) {
    3012           0 :     args.rval().setNull();
    3013           0 :     return true;
    3014             :   }
    3015           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3016           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3017           0 :     return false;
    3018             :   }
    3019           0 :   return true;
    3020             : }
    3021             : 
    3022             : static const JSJitInfo labels_getterinfo = {
    3023             :   { (JSJitGetterOp)get_labels },
    3024             :   { prototypes::id::HTMLInputElement },
    3025             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3026             :   JSJitInfo::Getter,
    3027             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3028             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3029             :   false,  /* isInfallible. False in setters. */
    3030             :   false,  /* isMovable.  Not relevant for setters. */
    3031             :   false, /* isEliminatable.  Not relevant for setters. */
    3032             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3033             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3034             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3035             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3036             : };
    3037             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3038             : static_assert(0 < 2, "There is no slot for us");
    3039             : 
    3040             : static bool
    3041           0 : select(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    3042             : {
    3043           0 :   self->Select();
    3044           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3045           0 :   args.rval().setUndefined();
    3046           0 :   return true;
    3047             : }
    3048             : 
    3049             : static const JSJitInfo select_methodinfo = {
    3050             :   { (JSJitGetterOp)select },
    3051             :   { prototypes::id::HTMLInputElement },
    3052             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3053             :   JSJitInfo::Method,
    3054             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3055             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3056             :   true,  /* isInfallible. False in setters. */
    3057             :   false,  /* isMovable.  Not relevant for setters. */
    3058             :   false, /* isEliminatable.  Not relevant for setters. */
    3059             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3060             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3061             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3062             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3063             : };
    3064             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3065             : static_assert(0 < 2, "There is no slot for us");
    3066             : 
    3067             : static bool
    3068           0 : get_selectionStart(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    3069             : {
    3070           0 :   binding_detail::FastErrorResult rv;
    3071           0 :   Nullable<uint32_t> result(self->GetSelectionStart(rv));
    3072           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3073           0 :     return false;
    3074             :   }
    3075           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3076           0 :   if (result.IsNull()) {
    3077           0 :     args.rval().setNull();
    3078           0 :     return true;
    3079             :   }
    3080           0 :   args.rval().setNumber(result.Value());
    3081           0 :   return true;
    3082             : }
    3083             : 
    3084             : static bool
    3085           1 : set_selectionStart(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    3086             : {
    3087           2 :   Nullable<uint32_t> arg0;
    3088           1 :   if (args[0].isNullOrUndefined()) {
    3089           0 :     arg0.SetNull();
    3090           1 :   } else if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0.SetValue())) {
    3091           0 :     return false;
    3092             :   }
    3093           2 :   binding_detail::FastErrorResult rv;
    3094           1 :   self->SetSelectionStart(Constify(arg0), rv);
    3095           1 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3096           0 :     return false;
    3097             :   }
    3098           1 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3099             : 
    3100           1 :   return true;
    3101             : }
    3102             : 
    3103             : static const JSJitInfo selectionStart_getterinfo = {
    3104             :   { (JSJitGetterOp)get_selectionStart },
    3105             :   { prototypes::id::HTMLInputElement },
    3106             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3107             :   JSJitInfo::Getter,
    3108             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3109             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3110             :   false,  /* isInfallible. False in setters. */
    3111             :   false,  /* isMovable.  Not relevant for setters. */
    3112             :   false, /* isEliminatable.  Not relevant for setters. */
    3113             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3114             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3115             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3116             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3117             : };
    3118             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3119             : static_assert(0 < 2, "There is no slot for us");
    3120             : static const JSJitInfo selectionStart_setterinfo = {
    3121             :   { (JSJitGetterOp)set_selectionStart },
    3122             :   { prototypes::id::HTMLInputElement },
    3123             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3124             :   JSJitInfo::Setter,
    3125             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3126             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3127             :   false,  /* isInfallible. False in setters. */
    3128             :   false,  /* isMovable.  Not relevant for setters. */
    3129             :   false, /* isEliminatable.  Not relevant for setters. */
    3130             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3131             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3132             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3133             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3134             : };
    3135             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3136             : static_assert(0 < 2, "There is no slot for us");
    3137             : 
    3138             : static bool
    3139           0 : get_selectionEnd(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    3140             : {
    3141           0 :   binding_detail::FastErrorResult rv;
    3142           0 :   Nullable<uint32_t> result(self->GetSelectionEnd(rv));
    3143           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3144           0 :     return false;
    3145             :   }
    3146           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3147           0 :   if (result.IsNull()) {
    3148           0 :     args.rval().setNull();
    3149           0 :     return true;
    3150             :   }
    3151           0 :   args.rval().setNumber(result.Value());
    3152           0 :   return true;
    3153             : }
    3154             : 
    3155             : static bool
    3156           1 : set_selectionEnd(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    3157             : {
    3158           2 :   Nullable<uint32_t> arg0;
    3159           1 :   if (args[0].isNullOrUndefined()) {
    3160           0 :     arg0.SetNull();
    3161           1 :   } else if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0.SetValue())) {
    3162           0 :     return false;
    3163             :   }
    3164           2 :   binding_detail::FastErrorResult rv;
    3165           1 :   self->SetSelectionEnd(Constify(arg0), rv);
    3166           1 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3167           0 :     return false;
    3168             :   }
    3169           1 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3170             : 
    3171           1 :   return true;
    3172             : }
    3173             : 
    3174             : static const JSJitInfo selectionEnd_getterinfo = {
    3175             :   { (JSJitGetterOp)get_selectionEnd },
    3176             :   { prototypes::id::HTMLInputElement },
    3177             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3178             :   JSJitInfo::Getter,
    3179             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3180             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3181             :   false,  /* isInfallible. False in setters. */
    3182             :   false,  /* isMovable.  Not relevant for setters. */
    3183             :   false, /* isEliminatable.  Not relevant for setters. */
    3184             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3185             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3186             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3187             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3188             : };
    3189             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3190             : static_assert(0 < 2, "There is no slot for us");
    3191             : static const JSJitInfo selectionEnd_setterinfo = {
    3192             :   { (JSJitGetterOp)set_selectionEnd },
    3193             :   { prototypes::id::HTMLInputElement },
    3194             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3195             :   JSJitInfo::Setter,
    3196             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3197             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3198             :   false,  /* isInfallible. False in setters. */
    3199             :   false,  /* isMovable.  Not relevant for setters. */
    3200             :   false, /* isEliminatable.  Not relevant for setters. */
    3201             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3202             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3203             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3204             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3205             : };
    3206             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3207             : static_assert(0 < 2, "There is no slot for us");
    3208             : 
    3209             : static bool
    3210           0 : get_selectionDirection(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    3211             : {
    3212           0 :   binding_detail::FastErrorResult rv;
    3213           0 :   DOMString result;
    3214           0 :   self->GetSelectionDirection(result, rv);
    3215           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3216           0 :     return false;
    3217             :   }
    3218           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3219           0 :   if (!xpc::StringToJsval(cx, result, args.rval())) {
    3220           0 :     return false;
    3221             :   }
    3222           0 :   return true;
    3223             : }
    3224             : 
    3225             : static bool
    3226           0 : set_selectionDirection(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    3227             : {
    3228           0 :   binding_detail::FakeString arg0;
    3229           0 :   if (!ConvertJSValueToString(cx, args[0], eNull, eNull, arg0)) {
    3230           0 :     return false;
    3231             :   }
    3232           0 :   binding_detail::FastErrorResult rv;
    3233           0 :   self->SetSelectionDirection(NonNullHelper(Constify(arg0)), rv);
    3234           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3235           0 :     return false;
    3236             :   }
    3237           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3238             : 
    3239           0 :   return true;
    3240             : }
    3241             : 
    3242             : static const JSJitInfo selectionDirection_getterinfo = {
    3243             :   { (JSJitGetterOp)get_selectionDirection },
    3244             :   { prototypes::id::HTMLInputElement },
    3245             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3246             :   JSJitInfo::Getter,
    3247             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3248             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3249             :   false,  /* isInfallible. False in setters. */
    3250             :   false,  /* isMovable.  Not relevant for setters. */
    3251             :   false, /* isEliminatable.  Not relevant for setters. */
    3252             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3253             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3254             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3255             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3256             : };
    3257             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3258             : static_assert(0 < 2, "There is no slot for us");
    3259             : static const JSJitInfo selectionDirection_setterinfo = {
    3260             :   { (JSJitGetterOp)set_selectionDirection },
    3261             :   { prototypes::id::HTMLInputElement },
    3262             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3263             :   JSJitInfo::Setter,
    3264             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3265             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3266             :   false,  /* isInfallible. False in setters. */
    3267             :   false,  /* isMovable.  Not relevant for setters. */
    3268             :   false, /* isEliminatable.  Not relevant for setters. */
    3269             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3270             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3271             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3272             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3273             : };
    3274             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3275             : static_assert(0 < 2, "There is no slot for us");
    3276             : 
    3277             : static bool
    3278           0 : setRangeText(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    3279             : {
    3280           0 :   unsigned argcount = std::min(args.length(), 4u);
    3281           0 :   switch (argcount) {
    3282             :     case 1: {
    3283           0 :       binding_detail::FakeString arg0;
    3284           0 :       if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    3285           0 :         return false;
    3286             :       }
    3287           0 :       binding_detail::FastErrorResult rv;
    3288           0 :       self->SetRangeText(NonNullHelper(Constify(arg0)), rv);
    3289           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3290           0 :         return false;
    3291             :       }
    3292           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3293           0 :       args.rval().setUndefined();
    3294           0 :       return true;
    3295             :       break;
    3296             :     }
    3297             :     case 3: {
    3298             :       MOZ_FALLTHROUGH;
    3299             :     }
    3300             :     case 4: {
    3301           0 :       binding_detail::FakeString arg0;
    3302           0 :       if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    3303           0 :         return false;
    3304             :       }
    3305             :       uint32_t arg1;
    3306           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    3307           0 :         return false;
    3308             :       }
    3309             :       uint32_t arg2;
    3310           0 :       if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[2], &arg2)) {
    3311           0 :         return false;
    3312             :       }
    3313             :       SelectionMode arg3;
    3314           0 :       if (args.hasDefined(3)) {
    3315             :         {
    3316             :           int index;
    3317           0 :           if (!FindEnumStringIndex<true>(cx, args[3], SelectionModeValues::strings, "SelectionMode", "Argument 4 of HTMLInputElement.setRangeText", &index)) {
    3318           0 :             return false;
    3319             :           }
    3320           0 :           MOZ_ASSERT(index >= 0);
    3321           0 :           arg3 = static_cast<SelectionMode>(index);
    3322             :         }
    3323             :       } else {
    3324           0 :         arg3 = SelectionMode::Preserve;
    3325             :       }
    3326           0 :       binding_detail::FastErrorResult rv;
    3327           0 :       self->SetRangeText(NonNullHelper(Constify(arg0)), arg1, arg2, arg3, rv);
    3328           0 :       if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3329           0 :         return false;
    3330             :       }
    3331           0 :       MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3332           0 :       args.rval().setUndefined();
    3333           0 :       return true;
    3334             :       break;
    3335             :     }
    3336             :     default: {
    3337           0 :       return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.setRangeText");
    3338             :       break;
    3339             :     }
    3340             :   }
    3341             :   MOZ_CRASH("We have an always-returning default case");
    3342             :   return false;
    3343             : }
    3344             : 
    3345             : static const JSJitInfo setRangeText_methodinfo = {
    3346             :   { (JSJitGetterOp)setRangeText },
    3347             :   { prototypes::id::HTMLInputElement },
    3348             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3349             :   JSJitInfo::Method,
    3350             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3351             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3352             :   false,  /* isInfallible. False in setters. */
    3353             :   false,  /* isMovable.  Not relevant for setters. */
    3354             :   false, /* isEliminatable.  Not relevant for setters. */
    3355             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3356             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3357             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3358             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3359             : };
    3360             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3361             : static_assert(0 < 2, "There is no slot for us");
    3362             : 
    3363             : static bool
    3364           0 : setSelectionRange(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    3365             : {
    3366           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    3367           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.setSelectionRange");
    3368             :   }
    3369             :   uint32_t arg0;
    3370           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[0], &arg0)) {
    3371           0 :     return false;
    3372             :   }
    3373             :   uint32_t arg1;
    3374           0 :   if (!ValueToPrimitive<uint32_t, eDefault>(cx, args[1], &arg1)) {
    3375           0 :     return false;
    3376             :   }
    3377           0 :   Optional<nsAString> arg2;
    3378           0 :   binding_detail::FakeString arg2_holder;
    3379           0 :   if (args.hasDefined(2)) {
    3380           0 :     if (!ConvertJSValueToString(cx, args[2], eStringify, eStringify, arg2_holder)) {
    3381           0 :       return false;
    3382             :     }
    3383           0 :     arg2 = &arg2_holder;
    3384             :   }
    3385           0 :   binding_detail::FastErrorResult rv;
    3386           0 :   self->SetSelectionRange(arg0, arg1, NonNullHelper(Constify(arg2)), rv);
    3387           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3388           0 :     return false;
    3389             :   }
    3390           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3391           0 :   args.rval().setUndefined();
    3392           0 :   return true;
    3393             : }
    3394             : 
    3395             : static const JSJitInfo setSelectionRange_methodinfo = {
    3396             :   { (JSJitGetterOp)setSelectionRange },
    3397             :   { prototypes::id::HTMLInputElement },
    3398             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3399             :   JSJitInfo::Method,
    3400             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3401             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3402             :   false,  /* isInfallible. False in setters. */
    3403             :   false,  /* isMovable.  Not relevant for setters. */
    3404             :   false, /* isEliminatable.  Not relevant for setters. */
    3405             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3406             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3407             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3408             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3409             : };
    3410             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3411             : static_assert(0 < 2, "There is no slot for us");
    3412             : 
    3413             : static bool
    3414           0 : get_align(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    3415             : {
    3416           0 :   DOMString result;
    3417           0 :   self->GetAlign(result);
    3418           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3419           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    3420           0 :     return false;
    3421             :   }
    3422           0 :   return true;
    3423             : }
    3424             : 
    3425             : static bool
    3426           0 : set_align(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    3427             : {
    3428           0 :   binding_detail::FakeString arg0;
    3429           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    3430           0 :     return false;
    3431             :   }
    3432           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    3433           0 :   Maybe<AutoCEReaction> ceReaction;
    3434           0 :   if (reactionsStack) {
    3435           0 :     ceReaction.emplace(reactionsStack);
    3436             :   }
    3437           0 :   binding_detail::FastErrorResult rv;
    3438           0 :   self->SetAlign(NonNullHelper(Constify(arg0)), rv);
    3439           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3440           0 :     return false;
    3441             :   }
    3442           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3443             : 
    3444           0 :   return true;
    3445             : }
    3446             : 
    3447             : static const JSJitInfo align_getterinfo = {
    3448             :   { (JSJitGetterOp)get_align },
    3449             :   { prototypes::id::HTMLInputElement },
    3450             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3451             :   JSJitInfo::Getter,
    3452             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    3453             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    3454             :   false,  /* isInfallible. False in setters. */
    3455             :   true,  /* isMovable.  Not relevant for setters. */
    3456             :   true, /* isEliminatable.  Not relevant for setters. */
    3457             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3458             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3459             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3460             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3461             : };
    3462             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3463             : static_assert(0 < 2, "There is no slot for us");
    3464             : static const JSJitInfo align_setterinfo = {
    3465             :   { (JSJitGetterOp)set_align },
    3466             :   { prototypes::id::HTMLInputElement },
    3467             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3468             :   JSJitInfo::Setter,
    3469             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3470             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3471             :   false,  /* isInfallible. False in setters. */
    3472             :   false,  /* isMovable.  Not relevant for setters. */
    3473             :   false, /* isEliminatable.  Not relevant for setters. */
    3474             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3475             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3476             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3477             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3478             : };
    3479             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3480             : static_assert(0 < 2, "There is no slot for us");
    3481             : 
    3482             : static bool
    3483           0 : get_useMap(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    3484             : {
    3485           0 :   DOMString result;
    3486           0 :   self->GetUseMap(result);
    3487           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3488           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    3489           0 :     return false;
    3490             :   }
    3491           0 :   return true;
    3492             : }
    3493             : 
    3494             : static bool
    3495           0 : set_useMap(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    3496             : {
    3497           0 :   binding_detail::FakeString arg0;
    3498           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    3499           0 :     return false;
    3500             :   }
    3501           0 :   CustomElementReactionsStack* reactionsStack = GetCustomElementReactionsStack(obj);
    3502           0 :   Maybe<AutoCEReaction> ceReaction;
    3503           0 :   if (reactionsStack) {
    3504           0 :     ceReaction.emplace(reactionsStack);
    3505             :   }
    3506           0 :   binding_detail::FastErrorResult rv;
    3507           0 :   self->SetUseMap(NonNullHelper(Constify(arg0)), rv);
    3508           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3509           0 :     return false;
    3510             :   }
    3511           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3512             : 
    3513           0 :   return true;
    3514             : }
    3515             : 
    3516             : static const JSJitInfo useMap_getterinfo = {
    3517             :   { (JSJitGetterOp)get_useMap },
    3518             :   { prototypes::id::HTMLInputElement },
    3519             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3520             :   JSJitInfo::Getter,
    3521             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    3522             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    3523             :   false,  /* isInfallible. False in setters. */
    3524             :   true,  /* isMovable.  Not relevant for setters. */
    3525             :   true, /* isEliminatable.  Not relevant for setters. */
    3526             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3527             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3528             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3529             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3530             : };
    3531             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3532             : static_assert(0 < 2, "There is no slot for us");
    3533             : static const JSJitInfo useMap_setterinfo = {
    3534             :   { (JSJitGetterOp)set_useMap },
    3535             :   { prototypes::id::HTMLInputElement },
    3536             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3537             :   JSJitInfo::Setter,
    3538             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3539             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3540             :   false,  /* isInfallible. False in setters. */
    3541             :   false,  /* isMovable.  Not relevant for setters. */
    3542             :   false, /* isEliminatable.  Not relevant for setters. */
    3543             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3544             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3545             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3546             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3547             : };
    3548             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3549             : static_assert(0 < 2, "There is no slot for us");
    3550             : 
    3551             : static bool
    3552           3 : get_controllers(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    3553             : {
    3554           6 :   binding_detail::FastErrorResult rv;
    3555           3 :   auto result(StrongOrRawPtr<nsIControllers>(self->GetControllers(rv)));
    3556           3 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3557           0 :     return false;
    3558             :   }
    3559           3 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3560           3 :   if (!WrapObject(cx, result, &NS_GET_IID(nsIControllers), args.rval())) {
    3561           0 :     return false;
    3562             :   }
    3563           3 :   return true;
    3564             : }
    3565             : 
    3566             : static const JSJitInfo controllers_getterinfo = {
    3567             :   { (JSJitGetterOp)get_controllers },
    3568             :   { prototypes::id::HTMLInputElement },
    3569             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3570             :   JSJitInfo::Getter,
    3571             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3572             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3573             :   false,  /* isInfallible. False in setters. */
    3574             :   false,  /* isMovable.  Not relevant for setters. */
    3575             :   false, /* isEliminatable.  Not relevant for setters. */
    3576             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3577             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3578             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3579             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3580             : };
    3581             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3582             : static_assert(0 < 2, "There is no slot for us");
    3583             : 
    3584             : static bool
    3585           0 : get_textLength(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    3586             : {
    3587           0 :   int32_t result(self->InputTextLength(nsContentUtils::IsSystemCaller(cx) ? CallerType::System : CallerType::NonSystem));
    3588           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3589           0 :   args.rval().setInt32(int32_t(result));
    3590           0 :   return true;
    3591             : }
    3592             : 
    3593             : static const JSJitInfo textLength_getterinfo = {
    3594             :   { (JSJitGetterOp)get_textLength },
    3595             :   { prototypes::id::HTMLInputElement },
    3596             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3597             :   JSJitInfo::Getter,
    3598             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3599             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
    3600             :   true,  /* isInfallible. False in setters. */
    3601             :   false,  /* isMovable.  Not relevant for setters. */
    3602             :   false, /* isEliminatable.  Not relevant for setters. */
    3603             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3604             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3605             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3606             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3607             : };
    3608             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3609             : static_assert(0 < 2, "There is no slot for us");
    3610             : 
    3611             : static bool
    3612           0 : mozGetFileNameArray(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    3613             : {
    3614           0 :   binding_detail::FastErrorResult rv;
    3615           0 :   nsTArray<nsString> result;
    3616           0 :   self->MozGetFileNameArray(result, rv);
    3617           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3618           0 :     return false;
    3619             :   }
    3620           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3621             : 
    3622           0 :   uint32_t length = result.Length();
    3623           0 :   JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
    3624           0 :   if (!returnArray) {
    3625           0 :     return false;
    3626             :   }
    3627             :   // Scope for 'tmp'
    3628             :   {
    3629           0 :     JS::Rooted<JS::Value> tmp(cx);
    3630           0 :     for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
    3631             :       // Control block to let us common up the JS_DefineElement calls when there
    3632             :       // are different ways to succeed at wrapping the object.
    3633             :       do {
    3634           0 :         if (!xpc::NonVoidStringToJsval(cx, result[sequenceIdx0], &tmp)) {
    3635           0 :           return false;
    3636             :         }
    3637           0 :         break;
    3638             :       } while (0);
    3639           0 :       if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
    3640             :                             JSPROP_ENUMERATE)) {
    3641           0 :         return false;
    3642             :       }
    3643             :     }
    3644             :   }
    3645           0 :   args.rval().setObject(*returnArray);
    3646           0 :   return true;
    3647             : }
    3648             : 
    3649             : static const JSJitInfo mozGetFileNameArray_methodinfo = {
    3650             :   { (JSJitGetterOp)mozGetFileNameArray },
    3651             :   { prototypes::id::HTMLInputElement },
    3652             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3653             :   JSJitInfo::Method,
    3654             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3655             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    3656             :   false,  /* isInfallible. False in setters. */
    3657             :   false,  /* isMovable.  Not relevant for setters. */
    3658             :   false, /* isEliminatable.  Not relevant for setters. */
    3659             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3660             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3661             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3662             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3663             : };
    3664             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3665             : static_assert(0 < 2, "There is no slot for us");
    3666             : 
    3667             : static bool
    3668           0 : mozSetFileNameArray(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    3669             : {
    3670           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3671           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.mozSetFileNameArray");
    3672             :   }
    3673           0 :   binding_detail::AutoSequence<nsString> arg0;
    3674           0 :   if (args[0].isObject()) {
    3675           0 :     JS::ForOfIterator iter(cx);
    3676           0 :     if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) {
    3677           0 :       return false;
    3678             :     }
    3679           0 :     if (!iter.valueIsIterable()) {
    3680           0 :       ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 1 of HTMLInputElement.mozSetFileNameArray");
    3681           0 :       return false;
    3682             :     }
    3683           0 :     binding_detail::AutoSequence<nsString> &arr = arg0;
    3684           0 :     JS::Rooted<JS::Value> temp(cx);
    3685             :     while (true) {
    3686             :       bool done;
    3687           0 :       if (!iter.next(&temp, &done)) {
    3688           0 :         return false;
    3689             :       }
    3690           0 :       if (done) {
    3691           0 :         break;
    3692             :       }
    3693           0 :       nsString* slotPtr = arr.AppendElement(mozilla::fallible);
    3694           0 :       if (!slotPtr) {
    3695           0 :         JS_ReportOutOfMemory(cx);
    3696           0 :         return false;
    3697             :       }
    3698           0 :       nsString& slot = *slotPtr;
    3699           0 :       if (!ConvertJSValueToString(cx, temp, eStringify, eStringify, slot)) {
    3700           0 :         return false;
    3701             :       }
    3702           0 :     }
    3703             :   } else {
    3704           0 :     ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 1 of HTMLInputElement.mozSetFileNameArray");
    3705           0 :     return false;
    3706             :   }
    3707           0 :   binding_detail::FastErrorResult rv;
    3708           0 :   self->MozSetFileNameArray(Constify(arg0), rv);
    3709           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3710           0 :     return false;
    3711             :   }
    3712           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3713           0 :   args.rval().setUndefined();
    3714           0 :   return true;
    3715             : }
    3716             : 
    3717             : static const JSJitInfo mozSetFileNameArray_methodinfo = {
    3718             :   { (JSJitGetterOp)mozSetFileNameArray },
    3719             :   { prototypes::id::HTMLInputElement },
    3720             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3721             :   JSJitInfo::Method,
    3722             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3723             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3724             :   false,  /* isInfallible. False in setters. */
    3725             :   false,  /* isMovable.  Not relevant for setters. */
    3726             :   false, /* isEliminatable.  Not relevant for setters. */
    3727             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3728             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3729             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3730             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3731             : };
    3732             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3733             : static_assert(0 < 2, "There is no slot for us");
    3734             : 
    3735             : static bool
    3736           0 : mozSetFileArray(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    3737             : {
    3738           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3739           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.mozSetFileArray");
    3740             :   }
    3741           0 :   binding_detail::AutoSequence<OwningNonNull<mozilla::dom::File>> arg0;
    3742           0 :   if (args[0].isObject()) {
    3743           0 :     JS::ForOfIterator iter(cx);
    3744           0 :     if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) {
    3745           0 :       return false;
    3746             :     }
    3747           0 :     if (!iter.valueIsIterable()) {
    3748           0 :       ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 1 of HTMLInputElement.mozSetFileArray");
    3749           0 :       return false;
    3750             :     }
    3751           0 :     binding_detail::AutoSequence<OwningNonNull<mozilla::dom::File>> &arr = arg0;
    3752           0 :     JS::Rooted<JS::Value> temp(cx);
    3753             :     while (true) {
    3754             :       bool done;
    3755           0 :       if (!iter.next(&temp, &done)) {
    3756           0 :         return false;
    3757             :       }
    3758           0 :       if (done) {
    3759           0 :         break;
    3760             :       }
    3761           0 :       OwningNonNull<mozilla::dom::File>* slotPtr = arr.AppendElement(mozilla::fallible);
    3762           0 :       if (!slotPtr) {
    3763           0 :         JS_ReportOutOfMemory(cx);
    3764           0 :         return false;
    3765             :       }
    3766           0 :       OwningNonNull<mozilla::dom::File>& slot = *slotPtr;
    3767           0 :       if (temp.isObject()) {
    3768             :         static_assert(IsRefcounted<mozilla::dom::File>::value, "We can only store refcounted classes.");{
    3769           0 :           nsresult rv = UnwrapObject<prototypes::id::File, mozilla::dom::File>(&temp, slot);
    3770           0 :           if (NS_FAILED(rv)) {
    3771           0 :             ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Element of argument 1 of HTMLInputElement.mozSetFileArray", "File");
    3772           0 :             return false;
    3773             :           }
    3774             :         }
    3775             :       } else {
    3776           0 :         ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Element of argument 1 of HTMLInputElement.mozSetFileArray");
    3777           0 :         return false;
    3778             :       }
    3779           0 :     }
    3780             :   } else {
    3781           0 :     ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 1 of HTMLInputElement.mozSetFileArray");
    3782           0 :     return false;
    3783             :   }
    3784           0 :   self->MozSetFileArray(Constify(arg0));
    3785           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3786           0 :   args.rval().setUndefined();
    3787           0 :   return true;
    3788             : }
    3789             : 
    3790             : static const JSJitInfo mozSetFileArray_methodinfo = {
    3791             :   { (JSJitGetterOp)mozSetFileArray },
    3792             :   { prototypes::id::HTMLInputElement },
    3793             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3794             :   JSJitInfo::Method,
    3795             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3796             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3797             :   false,  /* isInfallible. False in setters. */
    3798             :   false,  /* isMovable.  Not relevant for setters. */
    3799             :   false, /* isEliminatable.  Not relevant for setters. */
    3800             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3801             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3802             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3803             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3804             : };
    3805             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3806             : static_assert(0 < 2, "There is no slot for us");
    3807             : 
    3808             : static bool
    3809           0 : mozSetDirectory(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    3810             : {
    3811           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3812           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.mozSetDirectory");
    3813             :   }
    3814           0 :   binding_detail::FakeString arg0;
    3815           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    3816           0 :     return false;
    3817             :   }
    3818           0 :   binding_detail::FastErrorResult rv;
    3819           0 :   self->MozSetDirectory(NonNullHelper(Constify(arg0)), rv);
    3820           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    3821           0 :     return false;
    3822             :   }
    3823           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3824           0 :   args.rval().setUndefined();
    3825           0 :   return true;
    3826             : }
    3827             : 
    3828             : static const JSJitInfo mozSetDirectory_methodinfo = {
    3829             :   { (JSJitGetterOp)mozSetDirectory },
    3830             :   { prototypes::id::HTMLInputElement },
    3831             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3832             :   JSJitInfo::Method,
    3833             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3834             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3835             :   false,  /* isInfallible. False in setters. */
    3836             :   false,  /* isMovable.  Not relevant for setters. */
    3837             :   false, /* isEliminatable.  Not relevant for setters. */
    3838             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3839             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3840             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3841             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3842             : };
    3843             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3844             : static_assert(0 < 2, "There is no slot for us");
    3845             : 
    3846             : static bool
    3847           0 : mozSetDndFilesAndDirectories(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    3848             : {
    3849           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3850           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.mozSetDndFilesAndDirectories");
    3851             :   }
    3852           0 :   binding_detail::AutoSequence<OwningFileOrDirectory> arg0;
    3853           0 :   if (args[0].isObject()) {
    3854           0 :     JS::ForOfIterator iter(cx);
    3855           0 :     if (!iter.init(args[0], JS::ForOfIterator::AllowNonIterable)) {
    3856           0 :       return false;
    3857             :     }
    3858           0 :     if (!iter.valueIsIterable()) {
    3859           0 :       ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 1 of HTMLInputElement.mozSetDndFilesAndDirectories");
    3860           0 :       return false;
    3861             :     }
    3862           0 :     binding_detail::AutoSequence<OwningFileOrDirectory> &arr = arg0;
    3863           0 :     JS::Rooted<JS::Value> temp(cx);
    3864             :     while (true) {
    3865             :       bool done;
    3866           0 :       if (!iter.next(&temp, &done)) {
    3867           0 :         return false;
    3868             :       }
    3869           0 :       if (done) {
    3870           0 :         break;
    3871             :       }
    3872           0 :       OwningFileOrDirectory* slotPtr = arr.AppendElement(mozilla::fallible);
    3873           0 :       if (!slotPtr) {
    3874           0 :         JS_ReportOutOfMemory(cx);
    3875           0 :         return false;
    3876             :       }
    3877           0 :       OwningFileOrDirectory& slot = *slotPtr;
    3878             :       {
    3879           0 :         bool done = false, failed = false, tryNext;
    3880           0 :         if (temp.isObject()) {
    3881           0 :           done = (failed = !slot.TrySetToFile(cx, temp, tryNext, false)) || !tryNext ||
    3882           0 :                  (failed = !slot.TrySetToDirectory(cx, temp, tryNext, false)) || !tryNext;
    3883             : 
    3884             :         }
    3885           0 :         if (failed) {
    3886           0 :           return false;
    3887             :         }
    3888           0 :         if (!done) {
    3889           0 :           ThrowErrorMessage(cx, MSG_NOT_IN_UNION, "Element of argument 1 of HTMLInputElement.mozSetDndFilesAndDirectories", "File, Directory");
    3890           0 :           return false;
    3891             :         }
    3892             :       }
    3893           0 :     }
    3894             :   } else {
    3895           0 :     ThrowErrorMessage(cx, MSG_NOT_SEQUENCE, "Argument 1 of HTMLInputElement.mozSetDndFilesAndDirectories");
    3896           0 :     return false;
    3897             :   }
    3898           0 :   self->MozSetDndFilesAndDirectories(Constify(arg0));
    3899           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3900           0 :   args.rval().setUndefined();
    3901           0 :   return true;
    3902             : }
    3903             : 
    3904             : static const JSJitInfo mozSetDndFilesAndDirectories_methodinfo = {
    3905             :   { (JSJitGetterOp)mozSetDndFilesAndDirectories },
    3906             :   { prototypes::id::HTMLInputElement },
    3907             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3908             :   JSJitInfo::Method,
    3909             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3910             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    3911             :   false,  /* isInfallible. False in setters. */
    3912             :   false,  /* isMovable.  Not relevant for setters. */
    3913             :   false, /* isEliminatable.  Not relevant for setters. */
    3914             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3915             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3916             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3917             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3918             : };
    3919             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3920             : static_assert(0 < 2, "There is no slot for us");
    3921             : 
    3922             : static bool
    3923           0 : get_ownerNumberControl(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    3924             : {
    3925           0 :   auto result(StrongOrRawPtr<mozilla::dom::HTMLInputElement>(self->GetOwnerNumberControl()));
    3926           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3927           0 :   if (!result) {
    3928           0 :     args.rval().setNull();
    3929           0 :     return true;
    3930             :   }
    3931           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval())) {
    3932           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    3933           0 :     return false;
    3934             :   }
    3935           0 :   return true;
    3936             : }
    3937             : 
    3938             : static const JSJitInfo ownerNumberControl_getterinfo = {
    3939             :   { (JSJitGetterOp)get_ownerNumberControl },
    3940             :   { prototypes::id::HTMLInputElement },
    3941             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3942             :   JSJitInfo::Getter,
    3943             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3944             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    3945             :   false,  /* isInfallible. False in setters. */
    3946             :   false,  /* isMovable.  Not relevant for setters. */
    3947             :   false, /* isEliminatable.  Not relevant for setters. */
    3948             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3949             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3950             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3951             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3952             : };
    3953             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3954             : static_assert(0 < 2, "There is no slot for us");
    3955             : 
    3956             : static bool
    3957           0 : mozIsTextField(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    3958             : {
    3959           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    3960           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.mozIsTextField");
    3961             :   }
    3962             :   bool arg0;
    3963           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    3964           0 :     return false;
    3965             :   }
    3966           0 :   bool result(self->MozIsTextField(arg0));
    3967           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3968           0 :   args.rval().setBoolean(result);
    3969           0 :   return true;
    3970             : }
    3971             : 
    3972             : static const JSJitInfo mozIsTextField_methodinfo = {
    3973             :   { (JSJitGetterOp)mozIsTextField },
    3974             :   { prototypes::id::HTMLInputElement },
    3975             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    3976             :   JSJitInfo::Method,
    3977             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    3978             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    3979             :   false,  /* isInfallible. False in setters. */
    3980             :   false,  /* isMovable.  Not relevant for setters. */
    3981             :   false, /* isEliminatable.  Not relevant for setters. */
    3982             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    3983             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    3984             :   false,  /* isTypedMethod.  Only relevant for methods. */
    3985             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    3986             : };
    3987             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    3988             : static_assert(0 < 2, "There is no slot for us");
    3989             : 
    3990             : static bool
    3991           0 : getAutocompleteInfo(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    3992             : {
    3993           0 :   Nullable<AutocompleteInfo> result;
    3994           0 :   self->GetAutocompleteInfo(result);
    3995           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    3996           0 :   if (result.IsNull()) {
    3997           0 :     args.rval().setNull();
    3998           0 :     return true;
    3999             :   }
    4000           0 :   if (!result.Value().ToObjectInternal(cx, args.rval())) {
    4001           0 :     return false;
    4002             :   }
    4003           0 :   return true;
    4004             : }
    4005             : 
    4006             : static const JSJitInfo getAutocompleteInfo_methodinfo = {
    4007             :   { (JSJitGetterOp)getAutocompleteInfo },
    4008             :   { prototypes::id::HTMLInputElement },
    4009             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4010             :   JSJitInfo::Method,
    4011             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4012             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4013             :   false,  /* isInfallible. False in setters. */
    4014             :   false,  /* isMovable.  Not relevant for setters. */
    4015             :   false, /* isEliminatable.  Not relevant for setters. */
    4016             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4017             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4018             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4019             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4020             : };
    4021             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4022             : static_assert(0 < 2, "There is no slot for us");
    4023             : 
    4024             : static bool
    4025           1 : get_editor(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    4026             : {
    4027           1 :   auto result(StrongOrRawPtr<nsIEditor>(self->GetEditor()));
    4028           1 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4029           1 :   if (!result) {
    4030           0 :     args.rval().setNull();
    4031           0 :     return true;
    4032             :   }
    4033           1 :   if (!WrapObject(cx, result, &NS_GET_IID(nsIEditor), args.rval())) {
    4034           0 :     return false;
    4035             :   }
    4036           1 :   return true;
    4037             : }
    4038             : 
    4039             : static const JSJitInfo editor_getterinfo = {
    4040             :   { (JSJitGetterOp)get_editor },
    4041             :   { prototypes::id::HTMLInputElement },
    4042             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4043             :   JSJitInfo::Getter,
    4044             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    4045             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    4046             :   false,  /* isInfallible. False in setters. */
    4047             :   true,  /* isMovable.  Not relevant for setters. */
    4048             :   true, /* isEliminatable.  Not relevant for setters. */
    4049             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4050             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4051             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4052             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4053             : };
    4054             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4055             : static_assert(0 < 2, "There is no slot for us");
    4056             : 
    4057             : static bool
    4058           0 : setUserInput(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4059             : {
    4060           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    4061           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.setUserInput");
    4062             :   }
    4063           0 :   binding_detail::FakeString arg0;
    4064           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    4065           0 :     return false;
    4066             :   }
    4067           0 :   JSCompartment* compartment = js::GetContextCompartment(cx);
    4068           0 :   MOZ_ASSERT(compartment);
    4069           0 :   JSPrincipals* principals = JS_GetCompartmentPrincipals(compartment);
    4070             :   // Initializing a nonnull is pretty darn annoying...
    4071           0 :   NonNull<nsIPrincipal> subjectPrincipal;
    4072           0 :   subjectPrincipal = static_cast<nsIPrincipal*>(nsJSPrincipals::get(principals));
    4073           0 :   self->SetUserInput(NonNullHelper(Constify(arg0)), subjectPrincipal);
    4074           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4075           0 :   args.rval().setUndefined();
    4076           0 :   return true;
    4077             : }
    4078             : 
    4079             : static const JSJitInfo setUserInput_methodinfo = {
    4080             :   { (JSJitGetterOp)setUserInput },
    4081             :   { prototypes::id::HTMLInputElement },
    4082             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4083             :   JSJitInfo::Method,
    4084             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4085             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4086             :   false,  /* isInfallible. False in setters. */
    4087             :   false,  /* isMovable.  Not relevant for setters. */
    4088             :   false, /* isEliminatable.  Not relevant for setters. */
    4089             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4090             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4091             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4092             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4093             : };
    4094             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4095             : static_assert(0 < 2, "There is no slot for us");
    4096             : 
    4097             : static bool
    4098           0 : get_allowdirs(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    4099             : {
    4100           0 :   bool result(self->Allowdirs());
    4101           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4102           0 :   args.rval().setBoolean(result);
    4103           0 :   return true;
    4104             : }
    4105             : 
    4106             : static bool
    4107           0 : set_allowdirs(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    4108             : {
    4109             :   bool arg0;
    4110           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    4111           0 :     return false;
    4112             :   }
    4113           0 :   binding_detail::FastErrorResult rv;
    4114           0 :   self->SetAllowdirs(arg0, rv);
    4115           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4116           0 :     return false;
    4117             :   }
    4118           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4119             : 
    4120           0 :   return true;
    4121             : }
    4122             : 
    4123             : static const JSJitInfo allowdirs_getterinfo = {
    4124             :   { (JSJitGetterOp)get_allowdirs },
    4125             :   { prototypes::id::HTMLInputElement },
    4126             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4127             :   JSJitInfo::Getter,
    4128             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4129             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    4130             :   true,  /* isInfallible. False in setters. */
    4131             :   false,  /* isMovable.  Not relevant for setters. */
    4132             :   false, /* isEliminatable.  Not relevant for setters. */
    4133             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4134             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4135             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4136             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4137             : };
    4138             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4139             : static_assert(0 < 2, "There is no slot for us");
    4140             : static const JSJitInfo allowdirs_setterinfo = {
    4141             :   { (JSJitGetterOp)set_allowdirs },
    4142             :   { prototypes::id::HTMLInputElement },
    4143             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4144             :   JSJitInfo::Setter,
    4145             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4146             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4147             :   false,  /* isInfallible. False in setters. */
    4148             :   false,  /* isMovable.  Not relevant for setters. */
    4149             :   false, /* isEliminatable.  Not relevant for setters. */
    4150             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4151             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4152             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4153             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4154             : };
    4155             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4156             : static_assert(0 < 2, "There is no slot for us");
    4157             : 
    4158             : static bool
    4159           0 : get_isFilesAndDirectoriesSupported(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    4160             : {
    4161           0 :   bool result(self->IsFilesAndDirectoriesSupported());
    4162           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4163           0 :   args.rval().setBoolean(result);
    4164           0 :   return true;
    4165             : }
    4166             : 
    4167             : static const JSJitInfo isFilesAndDirectoriesSupported_getterinfo = {
    4168             :   { (JSJitGetterOp)get_isFilesAndDirectoriesSupported },
    4169             :   { prototypes::id::HTMLInputElement },
    4170             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4171             :   JSJitInfo::Getter,
    4172             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4173             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    4174             :   true,  /* isInfallible. False in setters. */
    4175             :   false,  /* isMovable.  Not relevant for setters. */
    4176             :   false, /* isEliminatable.  Not relevant for setters. */
    4177             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4178             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4179             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4180             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4181             : };
    4182             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4183             : static_assert(0 < 2, "There is no slot for us");
    4184             : 
    4185             : static bool
    4186           0 : getFilesAndDirectories(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4187             : {
    4188           0 :   binding_detail::FastErrorResult rv;
    4189           0 :   auto result(StrongOrRawPtr<Promise>(self->GetFilesAndDirectories(rv)));
    4190           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4191           0 :     return false;
    4192             :   }
    4193           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4194           0 :   if (!ToJSValue(cx, result, args.rval())) {
    4195           0 :     return false;
    4196             :   }
    4197           0 :   return true;
    4198             : }
    4199             : 
    4200             : static bool
    4201           0 : getFilesAndDirectories_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4202             : {
    4203             :   // Make sure to save the callee before someone maybe messes
    4204             :   // with rval().
    4205           0 :   JS::Rooted<JSObject*> callee(cx, &args.callee());
    4206           0 :   bool ok = getFilesAndDirectories(cx, obj, self, args);
    4207           0 :   if (ok) {
    4208           0 :     return true;
    4209             :   }
    4210           0 :   return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
    4211           0 :                                    args.rval());
    4212             : }
    4213             : 
    4214             : static const JSJitInfo getFilesAndDirectories_methodinfo = {
    4215             :   { (JSJitGetterOp)getFilesAndDirectories_promiseWrapper },
    4216             :   { prototypes::id::HTMLInputElement },
    4217             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4218             :   JSJitInfo::Method,
    4219             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4220             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    4221             :   false,  /* isInfallible. False in setters. */
    4222             :   false,  /* isMovable.  Not relevant for setters. */
    4223             :   false, /* isEliminatable.  Not relevant for setters. */
    4224             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4225             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4226             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4227             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4228             : };
    4229             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4230             : static_assert(0 < 2, "There is no slot for us");
    4231             : 
    4232             : static bool
    4233           0 : getFiles(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4234             : {
    4235             :   bool arg0;
    4236           0 :   if (args.hasDefined(0)) {
    4237           0 :     if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    4238           0 :       return false;
    4239             :     }
    4240             :   } else {
    4241           0 :     arg0 = false;
    4242             :   }
    4243           0 :   binding_detail::FastErrorResult rv;
    4244           0 :   auto result(StrongOrRawPtr<Promise>(self->GetFiles(arg0, rv)));
    4245           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4246           0 :     return false;
    4247             :   }
    4248           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4249           0 :   if (!ToJSValue(cx, result, args.rval())) {
    4250           0 :     return false;
    4251             :   }
    4252           0 :   return true;
    4253             : }
    4254             : 
    4255             : static bool
    4256           0 : getFiles_promiseWrapper(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4257             : {
    4258             :   // Make sure to save the callee before someone maybe messes
    4259             :   // with rval().
    4260           0 :   JS::Rooted<JSObject*> callee(cx, &args.callee());
    4261           0 :   bool ok = getFiles(cx, obj, self, args);
    4262           0 :   if (ok) {
    4263           0 :     return true;
    4264             :   }
    4265           0 :   return ConvertExceptionToPromise(cx, xpc::XrayAwareCalleeGlobal(callee),
    4266           0 :                                    args.rval());
    4267             : }
    4268             : 
    4269             : static const JSJitInfo getFiles_methodinfo = {
    4270             :   { (JSJitGetterOp)getFiles_promiseWrapper },
    4271             :   { prototypes::id::HTMLInputElement },
    4272             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4273             :   JSJitInfo::Method,
    4274             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4275             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    4276             :   false,  /* isInfallible. False in setters. */
    4277             :   false,  /* isMovable.  Not relevant for setters. */
    4278             :   false, /* isEliminatable.  Not relevant for setters. */
    4279             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4280             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4281             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4282             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4283             : };
    4284             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4285             : static_assert(0 < 2, "There is no slot for us");
    4286             : 
    4287             : static bool
    4288           0 : chooseDirectory(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4289             : {
    4290           0 :   binding_detail::FastErrorResult rv;
    4291           0 :   self->ChooseDirectory(rv);
    4292           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4293           0 :     return false;
    4294             :   }
    4295           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4296           0 :   args.rval().setUndefined();
    4297           0 :   return true;
    4298             : }
    4299             : 
    4300             : static const JSJitInfo chooseDirectory_methodinfo = {
    4301             :   { (JSJitGetterOp)chooseDirectory },
    4302             :   { prototypes::id::HTMLInputElement },
    4303             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4304             :   JSJitInfo::Method,
    4305             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4306             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4307             :   false,  /* isInfallible. False in setters. */
    4308             :   false,  /* isMovable.  Not relevant for setters. */
    4309             :   false, /* isEliminatable.  Not relevant for setters. */
    4310             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4311             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4312             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4313             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4314             : };
    4315             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4316             : static_assert(0 < 2, "There is no slot for us");
    4317             : 
    4318             : static bool
    4319           0 : get_webkitEntries(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    4320             : {
    4321             :   // Have to either root across the getter call or reget after.
    4322             :   bool isXray;
    4323           0 :   JS::Rooted<JSObject*> slotStorage(cx, GetCachedSlotStorageObject(cx, obj, &isXray));
    4324           0 :   if (!slotStorage) {
    4325           0 :     return false;
    4326             :   }
    4327           0 :   const size_t slotIndex = isXray ? (xpc::JSSLOT_EXPANDO_COUNT + 0) : (DOM_INSTANCE_RESERVED_SLOTS + 0);
    4328           0 :   MOZ_ASSERT(JSCLASS_RESERVED_SLOTS(js::GetObjectClass(slotStorage)) > slotIndex);
    4329             :   {
    4330             :     // Scope for cachedVal
    4331           0 :     JS::Value cachedVal = js::GetReservedSlot(slotStorage, slotIndex);
    4332           0 :     if (!cachedVal.isUndefined()) {
    4333           0 :       args.rval().set(cachedVal);
    4334             :       // The cached value is in the compartment of slotStorage,
    4335             :       // so wrap into the caller compartment as needed.
    4336           0 :       return MaybeWrapNonDOMObjectValue(cx, args.rval());
    4337             :     }
    4338             :   }
    4339             : 
    4340           0 :   nsTArray<StrongPtrForMember<mozilla::dom::FileSystemEntry>::Type> result;
    4341           0 :   self->GetWebkitEntries(result);
    4342           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4343             :   {
    4344           0 :     JS::Rooted<JSObject*> conversionScope(cx, isXray ? obj : slotStorage);
    4345           0 :     JSAutoCompartment ac(cx, conversionScope);
    4346             :     do { // block we break out of when done wrapping
    4347             : 
    4348           0 :       uint32_t length = result.Length();
    4349           0 :       JS::Rooted<JSObject*> returnArray(cx, JS_NewArrayObject(cx, length));
    4350           0 :       if (!returnArray) {
    4351           0 :         return false;
    4352             :       }
    4353             :       // Scope for 'tmp'
    4354             :       {
    4355           0 :         JS::Rooted<JS::Value> tmp(cx);
    4356           0 :         for (uint32_t sequenceIdx0 = 0; sequenceIdx0 < length; ++sequenceIdx0) {
    4357             :           // Control block to let us common up the JS_DefineElement calls when there
    4358             :           // are different ways to succeed at wrapping the object.
    4359             :           do {
    4360           0 :             if (!GetOrCreateDOMReflector(cx, result[sequenceIdx0], &tmp)) {
    4361           0 :               MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    4362           0 :               return false;
    4363             :             }
    4364           0 :             break;
    4365             :           } while (0);
    4366           0 :           if (!JS_DefineElement(cx, returnArray, sequenceIdx0, tmp,
    4367             :                                 JSPROP_ENUMERATE)) {
    4368           0 :             return false;
    4369             :           }
    4370             :         }
    4371             :       }
    4372           0 :       args.rval().setObject(*returnArray);
    4373           0 :       break;
    4374             :     } while (0);
    4375           0 :     JS::Rooted<JSObject*> rvalObj(cx, &args.rval().toObject());
    4376           0 :     if (!JS_FreezeObject(cx, rvalObj)) {
    4377           0 :       return false;
    4378             :     }
    4379             :   }
    4380             :   { // And now store things in the compartment of our slotStorage.
    4381           0 :     JSAutoCompartment ac(cx, slotStorage);
    4382             :     // Make a copy so that we don't do unnecessary wrapping on args.rval().
    4383           0 :     JS::Rooted<JS::Value> storedVal(cx, args.rval());
    4384           0 :     if (!MaybeWrapNonDOMObjectValue(cx, &storedVal)) {
    4385           0 :       return false;
    4386             :     }
    4387           0 :     js::SetReservedSlot(slotStorage, slotIndex, storedVal);
    4388           0 :     if (!isXray) {
    4389             :       // In the Xray case we don't need to do this, because getting the
    4390             :       // expando object already preserved our wrapper.
    4391           0 :       PreserveWrapper(self);
    4392             :     }
    4393             :   }
    4394             :   // And now make sure args.rval() is in the caller compartment
    4395           0 :   return MaybeWrapNonDOMObjectValue(cx, args.rval());
    4396             : }
    4397             : 
    4398             : static const JSJitInfo webkitEntries_getterinfo = {
    4399             :   { (JSJitGetterOp)get_webkitEntries },
    4400             :   { prototypes::id::HTMLInputElement },
    4401             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4402             :   JSJitInfo::Getter,
    4403             :   JSJitInfo::AliasDOMSets, /* aliasSet.  Not relevant for setters. */
    4404             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    4405             :   false,  /* isInfallible. False in setters. */
    4406             :   true,  /* isMovable.  Not relevant for setters. */
    4407             :   true, /* isEliminatable.  Not relevant for setters. */
    4408             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4409             :   true, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4410             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4411             :   (DOM_INSTANCE_RESERVED_SLOTS + 0)   /* Reserved slot index, if we're stored in a slot, else 0. */
    4412             : };
    4413             : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 0) <= JSJitInfo::maxSlotIndex, "We won't fit");
    4414             : static_assert((DOM_INSTANCE_RESERVED_SLOTS + 0) < 2, "There is no slot for us");
    4415             : 
    4416             : static bool
    4417           0 : get_webkitdirectory(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    4418             : {
    4419           0 :   bool result(self->WebkitDirectoryAttr());
    4420           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4421           0 :   args.rval().setBoolean(result);
    4422           0 :   return true;
    4423             : }
    4424             : 
    4425             : static bool
    4426           0 : set_webkitdirectory(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    4427             : {
    4428             :   bool arg0;
    4429           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    4430           0 :     return false;
    4431             :   }
    4432           0 :   binding_detail::FastErrorResult rv;
    4433           0 :   self->SetWebkitDirectoryAttr(arg0, rv);
    4434           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    4435           0 :     return false;
    4436             :   }
    4437           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4438             : 
    4439           0 :   return true;
    4440             : }
    4441             : 
    4442             : static const JSJitInfo webkitdirectory_getterinfo = {
    4443             :   { (JSJitGetterOp)get_webkitdirectory },
    4444             :   { prototypes::id::HTMLInputElement },
    4445             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4446             :   JSJitInfo::Getter,
    4447             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4448             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    4449             :   true,  /* isInfallible. False in setters. */
    4450             :   false,  /* isMovable.  Not relevant for setters. */
    4451             :   false, /* isEliminatable.  Not relevant for setters. */
    4452             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4453             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4454             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4455             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4456             : };
    4457             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4458             : static_assert(0 < 2, "There is no slot for us");
    4459             : static const JSJitInfo webkitdirectory_setterinfo = {
    4460             :   { (JSJitGetterOp)set_webkitdirectory },
    4461             :   { prototypes::id::HTMLInputElement },
    4462             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4463             :   JSJitInfo::Setter,
    4464             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4465             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4466             :   false,  /* isInfallible. False in setters. */
    4467             :   false,  /* isMovable.  Not relevant for setters. */
    4468             :   false, /* isEliminatable.  Not relevant for setters. */
    4469             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4470             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4471             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4472             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4473             : };
    4474             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4475             : static_assert(0 < 2, "There is no slot for us");
    4476             : 
    4477             : static bool
    4478           0 : getDateTimeInputBoxValue(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4479             : {
    4480           0 :   DateTimeValue result;
    4481           0 :   self->GetDateTimeInputBoxValue(result);
    4482           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4483           0 :   if (!result.ToObjectInternal(cx, args.rval())) {
    4484           0 :     return false;
    4485             :   }
    4486           0 :   return true;
    4487             : }
    4488             : 
    4489             : static const JSJitInfo getDateTimeInputBoxValue_methodinfo = {
    4490             :   { (JSJitGetterOp)getDateTimeInputBoxValue },
    4491             :   { prototypes::id::HTMLInputElement },
    4492             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4493             :   JSJitInfo::Method,
    4494             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4495             :   JSVAL_TYPE_OBJECT,  /* returnType.  Not relevant for setters. */
    4496             :   false,  /* isInfallible. False in setters. */
    4497             :   false,  /* isMovable.  Not relevant for setters. */
    4498             :   false, /* isEliminatable.  Not relevant for setters. */
    4499             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4500             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4501             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4502             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4503             : };
    4504             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4505             : static_assert(0 < 2, "There is no slot for us");
    4506             : 
    4507             : static bool
    4508           0 : updateDateTimeInputBox(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4509             : {
    4510           0 :   binding_detail::FastDateTimeValue arg0;
    4511           0 :   if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue,  "Argument 1 of HTMLInputElement.updateDateTimeInputBox", false)) {
    4512           0 :     return false;
    4513             :   }
    4514           0 :   self->UpdateDateTimeInputBox(Constify(arg0));
    4515           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4516           0 :   args.rval().setUndefined();
    4517           0 :   return true;
    4518             : }
    4519             : 
    4520             : static const JSJitInfo updateDateTimeInputBox_methodinfo = {
    4521             :   { (JSJitGetterOp)updateDateTimeInputBox },
    4522             :   { prototypes::id::HTMLInputElement },
    4523             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4524             :   JSJitInfo::Method,
    4525             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4526             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4527             :   false,  /* isInfallible. False in setters. */
    4528             :   false,  /* isMovable.  Not relevant for setters. */
    4529             :   false, /* isEliminatable.  Not relevant for setters. */
    4530             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4531             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4532             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4533             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4534             : };
    4535             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4536             : static_assert(0 < 2, "There is no slot for us");
    4537             : 
    4538             : static bool
    4539           0 : setDateTimePickerState(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4540             : {
    4541           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    4542           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.setDateTimePickerState");
    4543             :   }
    4544             :   bool arg0;
    4545           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    4546           0 :     return false;
    4547             :   }
    4548           0 :   self->SetDateTimePickerState(arg0);
    4549           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4550           0 :   args.rval().setUndefined();
    4551           0 :   return true;
    4552             : }
    4553             : 
    4554             : static const JSJitInfo setDateTimePickerState_methodinfo = {
    4555             :   { (JSJitGetterOp)setDateTimePickerState },
    4556             :   { prototypes::id::HTMLInputElement },
    4557             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4558             :   JSJitInfo::Method,
    4559             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4560             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4561             :   false,  /* isInfallible. False in setters. */
    4562             :   false,  /* isMovable.  Not relevant for setters. */
    4563             :   false, /* isEliminatable.  Not relevant for setters. */
    4564             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4565             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4566             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4567             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4568             : };
    4569             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4570             : static_assert(0 < 2, "There is no slot for us");
    4571             : 
    4572             : static bool
    4573           0 : openDateTimePicker(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4574             : {
    4575           0 :   binding_detail::FastDateTimeValue arg0;
    4576           0 :   if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue,  "Argument 1 of HTMLInputElement.openDateTimePicker", false)) {
    4577           0 :     return false;
    4578             :   }
    4579           0 :   self->OpenDateTimePicker(Constify(arg0));
    4580           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4581           0 :   args.rval().setUndefined();
    4582           0 :   return true;
    4583             : }
    4584             : 
    4585             : static const JSJitInfo openDateTimePicker_methodinfo = {
    4586             :   { (JSJitGetterOp)openDateTimePicker },
    4587             :   { prototypes::id::HTMLInputElement },
    4588             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4589             :   JSJitInfo::Method,
    4590             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4591             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4592             :   false,  /* isInfallible. False in setters. */
    4593             :   false,  /* isMovable.  Not relevant for setters. */
    4594             :   false, /* isEliminatable.  Not relevant for setters. */
    4595             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4596             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4597             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4598             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4599             : };
    4600             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4601             : static_assert(0 < 2, "There is no slot for us");
    4602             : 
    4603             : static bool
    4604           0 : updateDateTimePicker(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4605             : {
    4606           0 :   binding_detail::FastDateTimeValue arg0;
    4607           0 :   if (!arg0.Init(cx, (args.hasDefined(0)) ? args[0] : JS::NullHandleValue,  "Argument 1 of HTMLInputElement.updateDateTimePicker", false)) {
    4608           0 :     return false;
    4609             :   }
    4610           0 :   self->UpdateDateTimePicker(Constify(arg0));
    4611           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4612           0 :   args.rval().setUndefined();
    4613           0 :   return true;
    4614             : }
    4615             : 
    4616             : static const JSJitInfo updateDateTimePicker_methodinfo = {
    4617             :   { (JSJitGetterOp)updateDateTimePicker },
    4618             :   { prototypes::id::HTMLInputElement },
    4619             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4620             :   JSJitInfo::Method,
    4621             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4622             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4623             :   false,  /* isInfallible. False in setters. */
    4624             :   false,  /* isMovable.  Not relevant for setters. */
    4625             :   false, /* isEliminatable.  Not relevant for setters. */
    4626             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4627             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4628             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4629             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4630             : };
    4631             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4632             : static_assert(0 < 2, "There is no slot for us");
    4633             : 
    4634             : static bool
    4635           0 : closeDateTimePicker(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4636             : {
    4637           0 :   self->CloseDateTimePicker();
    4638           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4639           0 :   args.rval().setUndefined();
    4640           0 :   return true;
    4641             : }
    4642             : 
    4643             : static const JSJitInfo closeDateTimePicker_methodinfo = {
    4644             :   { (JSJitGetterOp)closeDateTimePicker },
    4645             :   { prototypes::id::HTMLInputElement },
    4646             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4647             :   JSJitInfo::Method,
    4648             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4649             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4650             :   true,  /* isInfallible. False in setters. */
    4651             :   false,  /* isMovable.  Not relevant for setters. */
    4652             :   false, /* isEliminatable.  Not relevant for setters. */
    4653             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4654             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4655             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4656             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4657             : };
    4658             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4659             : static_assert(0 < 2, "There is no slot for us");
    4660             : 
    4661             : static bool
    4662           0 : setFocusState(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4663             : {
    4664           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    4665           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.setFocusState");
    4666             :   }
    4667             :   bool arg0;
    4668           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    4669           0 :     return false;
    4670             :   }
    4671           0 :   self->SetFocusState(arg0);
    4672           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4673           0 :   args.rval().setUndefined();
    4674           0 :   return true;
    4675             : }
    4676             : 
    4677             : static const JSJitInfo setFocusState_methodinfo = {
    4678             :   { (JSJitGetterOp)setFocusState },
    4679             :   { prototypes::id::HTMLInputElement },
    4680             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4681             :   JSJitInfo::Method,
    4682             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4683             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4684             :   false,  /* isInfallible. False in setters. */
    4685             :   false,  /* isMovable.  Not relevant for setters. */
    4686             :   false, /* isEliminatable.  Not relevant for setters. */
    4687             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4688             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4689             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4690             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4691             : };
    4692             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4693             : static_assert(0 < 2, "There is no slot for us");
    4694             : 
    4695             : static bool
    4696           0 : updateValidityState(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4697             : {
    4698           0 :   self->UpdateValidityState();
    4699           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4700           0 :   args.rval().setUndefined();
    4701           0 :   return true;
    4702             : }
    4703             : 
    4704             : static const JSJitInfo updateValidityState_methodinfo = {
    4705             :   { (JSJitGetterOp)updateValidityState },
    4706             :   { prototypes::id::HTMLInputElement },
    4707             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4708             :   JSJitInfo::Method,
    4709             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4710             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4711             :   true,  /* isInfallible. False in setters. */
    4712             :   false,  /* isMovable.  Not relevant for setters. */
    4713             :   false, /* isEliminatable.  Not relevant for setters. */
    4714             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4715             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4716             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4717             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4718             : };
    4719             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4720             : static_assert(0 < 2, "There is no slot for us");
    4721             : 
    4722             : static bool
    4723           0 : getStep(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4724             : {
    4725           0 :   double result(self->GetStepAsDouble());
    4726           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4727           0 :   args.rval().set(JS_NumberValue(double(result)));
    4728           0 :   return true;
    4729             : }
    4730             : 
    4731             : static const JSJitInfo getStep_methodinfo = {
    4732             :   { (JSJitGetterOp)getStep },
    4733             :   { prototypes::id::HTMLInputElement },
    4734             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4735             :   JSJitInfo::Method,
    4736             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4737             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    4738             :   true,  /* isInfallible. False in setters. */
    4739             :   false,  /* isMovable.  Not relevant for setters. */
    4740             :   false, /* isEliminatable.  Not relevant for setters. */
    4741             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4742             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4743             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4744             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4745             : };
    4746             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4747             : static_assert(0 < 2, "There is no slot for us");
    4748             : 
    4749             : static bool
    4750           0 : getStepBase(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4751             : {
    4752           0 :   double result(self->GetStepBaseAsDouble());
    4753           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4754           0 :   args.rval().set(JS_NumberValue(double(result)));
    4755           0 :   return true;
    4756             : }
    4757             : 
    4758             : static const JSJitInfo getStepBase_methodinfo = {
    4759             :   { (JSJitGetterOp)getStepBase },
    4760             :   { prototypes::id::HTMLInputElement },
    4761             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4762             :   JSJitInfo::Method,
    4763             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4764             :   JSVAL_TYPE_DOUBLE,  /* returnType.  Not relevant for setters. */
    4765             :   true,  /* isInfallible. False in setters. */
    4766             :   false,  /* isMovable.  Not relevant for setters. */
    4767             :   false, /* isEliminatable.  Not relevant for setters. */
    4768             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4769             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4770             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4771             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4772             : };
    4773             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4774             : static_assert(0 < 2, "There is no slot for us");
    4775             : 
    4776             : static bool
    4777           0 : get_previewValue(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    4778             : {
    4779           0 :   DOMString result;
    4780           0 :   self->GetPreviewValue(result);
    4781           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4782           0 :   if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
    4783           0 :     return false;
    4784             :   }
    4785           0 :   return true;
    4786             : }
    4787             : 
    4788             : static bool
    4789           0 : set_previewValue(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    4790             : {
    4791           0 :   binding_detail::FakeString arg0;
    4792           0 :   if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
    4793           0 :     return false;
    4794             :   }
    4795           0 :   self->SetPreviewValue(NonNullHelper(Constify(arg0)));
    4796           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4797             : 
    4798           0 :   return true;
    4799             : }
    4800             : 
    4801             : static const JSJitInfo previewValue_getterinfo = {
    4802             :   { (JSJitGetterOp)get_previewValue },
    4803             :   { prototypes::id::HTMLInputElement },
    4804             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4805             :   JSJitInfo::Getter,
    4806             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4807             :   JSVAL_TYPE_STRING,  /* returnType.  Not relevant for setters. */
    4808             :   false,  /* isInfallible. False in setters. */
    4809             :   false,  /* isMovable.  Not relevant for setters. */
    4810             :   false, /* isEliminatable.  Not relevant for setters. */
    4811             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4812             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4813             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4814             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4815             : };
    4816             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4817             : static_assert(0 < 2, "There is no slot for us");
    4818             : static const JSJitInfo previewValue_setterinfo = {
    4819             :   { (JSJitGetterOp)set_previewValue },
    4820             :   { prototypes::id::HTMLInputElement },
    4821             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4822             :   JSJitInfo::Setter,
    4823             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4824             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4825             :   false,  /* isInfallible. False in setters. */
    4826             :   false,  /* isMovable.  Not relevant for setters. */
    4827             :   false, /* isEliminatable.  Not relevant for setters. */
    4828             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4829             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4830             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4831             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4832             : };
    4833             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4834             : static_assert(0 < 2, "There is no slot for us");
    4835             : 
    4836             : static bool
    4837           0 : get_loadingEnabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    4838             : {
    4839           0 :   bool result(self->LoadingEnabled());
    4840           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4841           0 :   args.rval().setBoolean(result);
    4842           0 :   return true;
    4843             : }
    4844             : 
    4845             : static bool
    4846           0 : set_loadingEnabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitSetterCallArgs args)
    4847             : {
    4848             :   bool arg0;
    4849           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    4850           0 :     return false;
    4851             :   }
    4852           0 :   self->SetLoadingEnabled(arg0);
    4853           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4854             : 
    4855           0 :   return true;
    4856             : }
    4857             : 
    4858             : static const JSJitInfo loadingEnabled_getterinfo = {
    4859             :   { (JSJitGetterOp)get_loadingEnabled },
    4860             :   { prototypes::id::HTMLInputElement },
    4861             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4862             :   JSJitInfo::Getter,
    4863             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4864             :   JSVAL_TYPE_BOOLEAN,  /* returnType.  Not relevant for setters. */
    4865             :   true,  /* isInfallible. False in setters. */
    4866             :   false,  /* isMovable.  Not relevant for setters. */
    4867             :   false, /* isEliminatable.  Not relevant for setters. */
    4868             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4869             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4870             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4871             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4872             : };
    4873             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4874             : static_assert(0 < 2, "There is no slot for us");
    4875             : static const JSJitInfo loadingEnabled_setterinfo = {
    4876             :   { (JSJitGetterOp)set_loadingEnabled },
    4877             :   { prototypes::id::HTMLInputElement },
    4878             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4879             :   JSJitInfo::Setter,
    4880             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4881             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4882             :   false,  /* isInfallible. False in setters. */
    4883             :   false,  /* isMovable.  Not relevant for setters. */
    4884             :   false, /* isEliminatable.  Not relevant for setters. */
    4885             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4886             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4887             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4888             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4889             : };
    4890             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4891             : static_assert(0 < 2, "There is no slot for us");
    4892             : 
    4893             : static bool
    4894           0 : get_imageBlockingStatus(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    4895             : {
    4896           0 :   int16_t result(self->ImageBlockingStatus());
    4897           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4898           0 :   args.rval().setInt32(int32_t(result));
    4899           0 :   return true;
    4900             : }
    4901             : 
    4902             : static const JSJitInfo imageBlockingStatus_getterinfo = {
    4903             :   { (JSJitGetterOp)get_imageBlockingStatus },
    4904             :   { prototypes::id::HTMLInputElement },
    4905             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4906             :   JSJitInfo::Getter,
    4907             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4908             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
    4909             :   true,  /* isInfallible. False in setters. */
    4910             :   false,  /* isMovable.  Not relevant for setters. */
    4911             :   false, /* isEliminatable.  Not relevant for setters. */
    4912             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4913             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4914             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4915             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4916             : };
    4917             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4918             : static_assert(0 < 2, "There is no slot for us");
    4919             : 
    4920             : static bool
    4921           0 : addObserver(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4922             : {
    4923           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    4924           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.addObserver");
    4925             :   }
    4926             :   imgINotificationObserver* arg0;
    4927           0 :   RefPtr<imgINotificationObserver> arg0_holder;
    4928           0 :   if (args[0].isObject()) {
    4929           0 :     JS::Rooted<JSObject*> source(cx, &args[0].toObject());
    4930           0 :     if (NS_FAILED(UnwrapArg<imgINotificationObserver>(cx, source, getter_AddRefs(arg0_holder)))) {
    4931           0 :       ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of HTMLInputElement.addObserver", "imgINotificationObserver");
    4932           0 :       return false;
    4933             :     }
    4934           0 :     MOZ_ASSERT(arg0_holder);
    4935           0 :     arg0 = arg0_holder;
    4936             :   } else {
    4937           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of HTMLInputElement.addObserver");
    4938           0 :     return false;
    4939             :   }
    4940           0 :   self->AddObserver(NonNullHelper(arg0));
    4941           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4942           0 :   args.rval().setUndefined();
    4943           0 :   return true;
    4944             : }
    4945             : 
    4946             : static const JSJitInfo addObserver_methodinfo = {
    4947             :   { (JSJitGetterOp)addObserver },
    4948             :   { prototypes::id::HTMLInputElement },
    4949             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4950             :   JSJitInfo::Method,
    4951             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4952             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4953             :   false,  /* isInfallible. False in setters. */
    4954             :   false,  /* isMovable.  Not relevant for setters. */
    4955             :   false, /* isEliminatable.  Not relevant for setters. */
    4956             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    4957             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    4958             :   false,  /* isTypedMethod.  Only relevant for methods. */
    4959             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    4960             : };
    4961             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    4962             : static_assert(0 < 2, "There is no slot for us");
    4963             : 
    4964             : static bool
    4965           0 : removeObserver(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    4966             : {
    4967           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    4968           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.removeObserver");
    4969             :   }
    4970             :   imgINotificationObserver* arg0;
    4971           0 :   RefPtr<imgINotificationObserver> arg0_holder;
    4972           0 :   if (args[0].isObject()) {
    4973           0 :     JS::Rooted<JSObject*> source(cx, &args[0].toObject());
    4974           0 :     if (NS_FAILED(UnwrapArg<imgINotificationObserver>(cx, source, getter_AddRefs(arg0_holder)))) {
    4975           0 :       ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of HTMLInputElement.removeObserver", "imgINotificationObserver");
    4976           0 :       return false;
    4977             :     }
    4978           0 :     MOZ_ASSERT(arg0_holder);
    4979           0 :     arg0 = arg0_holder;
    4980             :   } else {
    4981           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of HTMLInputElement.removeObserver");
    4982           0 :     return false;
    4983             :   }
    4984           0 :   self->RemoveObserver(NonNullHelper(arg0));
    4985           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    4986           0 :   args.rval().setUndefined();
    4987           0 :   return true;
    4988             : }
    4989             : 
    4990             : static const JSJitInfo removeObserver_methodinfo = {
    4991             :   { (JSJitGetterOp)removeObserver },
    4992             :   { prototypes::id::HTMLInputElement },
    4993             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    4994             :   JSJitInfo::Method,
    4995             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    4996             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    4997             :   false,  /* isInfallible. False in setters. */
    4998             :   false,  /* isMovable.  Not relevant for setters. */
    4999             :   false, /* isEliminatable.  Not relevant for setters. */
    5000             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5001             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5002             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5003             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5004             : };
    5005             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5006             : static_assert(0 < 2, "There is no slot for us");
    5007             : 
    5008             : static bool
    5009           0 : getRequest(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    5010             : {
    5011           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    5012           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.getRequest");
    5013             :   }
    5014             :   int32_t arg0;
    5015           0 :   if (!ValueToPrimitive<int32_t, eDefault>(cx, args[0], &arg0)) {
    5016           0 :     return false;
    5017             :   }
    5018           0 :   binding_detail::FastErrorResult rv;
    5019           0 :   auto result(StrongOrRawPtr<imgIRequest>(self->GetRequest(arg0, rv)));
    5020           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5021           0 :     return false;
    5022             :   }
    5023           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5024           0 :   if (!result) {
    5025           0 :     args.rval().setNull();
    5026           0 :     return true;
    5027             :   }
    5028           0 :   if (!WrapObject(cx, result, &NS_GET_IID(imgIRequest), args.rval())) {
    5029           0 :     return false;
    5030             :   }
    5031           0 :   return true;
    5032             : }
    5033             : 
    5034             : static const JSJitInfo getRequest_methodinfo = {
    5035             :   { (JSJitGetterOp)getRequest },
    5036             :   { prototypes::id::HTMLInputElement },
    5037             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    5038             :   JSJitInfo::Method,
    5039             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5040             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5041             :   false,  /* isInfallible. False in setters. */
    5042             :   false,  /* isMovable.  Not relevant for setters. */
    5043             :   false, /* isEliminatable.  Not relevant for setters. */
    5044             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5045             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5046             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5047             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5048             : };
    5049             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5050             : static_assert(0 < 2, "There is no slot for us");
    5051             : 
    5052             : static bool
    5053           0 : getRequestType(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    5054             : {
    5055           0 :   if (MOZ_UNLIKELY(args.length() < 1)) {
    5056           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.getRequestType");
    5057             :   }
    5058             :   imgIRequest* arg0;
    5059           0 :   RefPtr<imgIRequest> arg0_holder;
    5060           0 :   if (args[0].isObject()) {
    5061           0 :     JS::Rooted<JSObject*> source(cx, &args[0].toObject());
    5062           0 :     if (NS_FAILED(UnwrapArg<imgIRequest>(cx, source, getter_AddRefs(arg0_holder)))) {
    5063           0 :       ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of HTMLInputElement.getRequestType", "imgIRequest");
    5064           0 :       return false;
    5065             :     }
    5066           0 :     MOZ_ASSERT(arg0_holder);
    5067           0 :     arg0 = arg0_holder;
    5068             :   } else {
    5069           0 :     ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of HTMLInputElement.getRequestType");
    5070           0 :     return false;
    5071             :   }
    5072           0 :   binding_detail::FastErrorResult rv;
    5073           0 :   int32_t result(self->GetRequestType(NonNullHelper(arg0), rv));
    5074           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5075           0 :     return false;
    5076             :   }
    5077           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5078           0 :   args.rval().setInt32(int32_t(result));
    5079           0 :   return true;
    5080             : }
    5081             : 
    5082             : static const JSJitInfo getRequestType_methodinfo = {
    5083             :   { (JSJitGetterOp)getRequestType },
    5084             :   { prototypes::id::HTMLInputElement },
    5085             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    5086             :   JSJitInfo::Method,
    5087             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5088             :   JSVAL_TYPE_INT32,  /* returnType.  Not relevant for setters. */
    5089             :   false,  /* isInfallible. False in setters. */
    5090             :   false,  /* isMovable.  Not relevant for setters. */
    5091             :   false, /* isEliminatable.  Not relevant for setters. */
    5092             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5093             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5094             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5095             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5096             : };
    5097             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5098             : static_assert(0 < 2, "There is no slot for us");
    5099             : 
    5100             : static bool
    5101           0 : get_currentURI(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, JSJitGetterCallArgs args)
    5102             : {
    5103           0 :   binding_detail::FastErrorResult rv;
    5104           0 :   auto result(StrongOrRawPtr<nsIURI>(self->GetCurrentURI(rv)));
    5105           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5106           0 :     return false;
    5107             :   }
    5108           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5109           0 :   if (!result) {
    5110           0 :     args.rval().setNull();
    5111           0 :     return true;
    5112             :   }
    5113           0 :   if (!WrapObject(cx, result, &NS_GET_IID(nsIURI), args.rval())) {
    5114           0 :     return false;
    5115             :   }
    5116           0 :   return true;
    5117             : }
    5118             : 
    5119             : static const JSJitInfo currentURI_getterinfo = {
    5120             :   { (JSJitGetterOp)get_currentURI },
    5121             :   { prototypes::id::HTMLInputElement },
    5122             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    5123             :   JSJitInfo::Getter,
    5124             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5125             :   JSVAL_TYPE_UNKNOWN,  /* returnType.  Not relevant for setters. */
    5126             :   false,  /* isInfallible. False in setters. */
    5127             :   false,  /* isMovable.  Not relevant for setters. */
    5128             :   false, /* isEliminatable.  Not relevant for setters. */
    5129             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5130             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5131             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5132             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5133             : };
    5134             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5135             : static_assert(0 < 2, "There is no slot for us");
    5136             : 
    5137             : static bool
    5138           0 : forceReload(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    5139             : {
    5140           0 :   Optional<bool> arg0;
    5141           0 :   if (args.hasDefined(0)) {
    5142           0 :     arg0.Construct();
    5143           0 :     if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0.Value())) {
    5144           0 :       return false;
    5145             :     }
    5146             :   }
    5147           0 :   binding_detail::FastErrorResult rv;
    5148           0 :   self->ForceReload(Constify(arg0), rv);
    5149           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5150           0 :     return false;
    5151             :   }
    5152           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5153           0 :   args.rval().setUndefined();
    5154           0 :   return true;
    5155             : }
    5156             : 
    5157             : static const JSJitInfo forceReload_methodinfo = {
    5158             :   { (JSJitGetterOp)forceReload },
    5159             :   { prototypes::id::HTMLInputElement },
    5160             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    5161             :   JSJitInfo::Method,
    5162             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5163             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5164             :   false,  /* isInfallible. False in setters. */
    5165             :   false,  /* isMovable.  Not relevant for setters. */
    5166             :   false, /* isEliminatable.  Not relevant for setters. */
    5167             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5168             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5169             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5170             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5171             : };
    5172             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5173             : static_assert(0 < 2, "There is no slot for us");
    5174             : 
    5175             : static bool
    5176           0 : forceImageState(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::HTMLInputElement* self, const JSJitMethodCallArgs& args)
    5177             : {
    5178           0 :   if (MOZ_UNLIKELY(args.length() < 2)) {
    5179           0 :     return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "HTMLInputElement.forceImageState");
    5180             :   }
    5181             :   bool arg0;
    5182           0 :   if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
    5183           0 :     return false;
    5184             :   }
    5185             :   uint64_t arg1;
    5186           0 :   if (!ValueToPrimitive<uint64_t, eDefault>(cx, args[1], &arg1)) {
    5187           0 :     return false;
    5188             :   }
    5189           0 :   self->ForceImageState(arg0, arg1);
    5190           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5191           0 :   args.rval().setUndefined();
    5192           0 :   return true;
    5193             : }
    5194             : 
    5195             : static const JSJitInfo forceImageState_methodinfo = {
    5196             :   { (JSJitGetterOp)forceImageState },
    5197             :   { prototypes::id::HTMLInputElement },
    5198             :   { PrototypeTraits<prototypes::id::HTMLInputElement>::Depth },
    5199             :   JSJitInfo::Method,
    5200             :   JSJitInfo::AliasEverything, /* aliasSet.  Not relevant for setters. */
    5201             :   JSVAL_TYPE_UNDEFINED,  /* returnType.  Not relevant for setters. */
    5202             :   false,  /* isInfallible. False in setters. */
    5203             :   false,  /* isMovable.  Not relevant for setters. */
    5204             :   false, /* isEliminatable.  Not relevant for setters. */
    5205             :   false, /* isAlwaysInSlot.  Only relevant for getters. */
    5206             :   false, /* isLazilyCachedInSlot.  Only relevant for getters. */
    5207             :   false,  /* isTypedMethod.  Only relevant for methods. */
    5208             :   0   /* Reserved slot index, if we're stored in a slot, else 0. */
    5209             : };
    5210             : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
    5211             : static_assert(0 < 2, "There is no slot for us");
    5212             : 
    5213             : static bool
    5214           0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
    5215             : {
    5216           0 :   mozilla::dom::HTMLInputElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLInputElement>(obj);
    5217             :   // We don't want to preserve if we don't have a wrapper, and we
    5218             :   // obviously can't preserve if we're not initialized.
    5219           0 :   if (self && self->GetWrapperPreserveColor()) {
    5220           0 :     PreserveWrapper(self);
    5221             :   }
    5222           0 :   return true;
    5223             : }
    5224             : 
    5225             : static void
    5226           0 : _finalize(js::FreeOp* fop, JSObject* obj)
    5227             : {
    5228           0 :   mozilla::dom::HTMLInputElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLInputElement>(obj);
    5229           0 :   if (self) {
    5230           0 :     ClearWrapper(self, self, obj);
    5231           0 :     AddForDeferredFinalization<mozilla::dom::HTMLInputElement>(self);
    5232             :   }
    5233           0 : }
    5234             : 
    5235             : static void
    5236           0 : _objectMoved(JSObject* obj, const JSObject* old)
    5237             : {
    5238           0 :   mozilla::dom::HTMLInputElement* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::HTMLInputElement>(obj);
    5239           0 :   if (self) {
    5240           0 :     UpdateWrapper(self, self, obj, old);
    5241             :   }
    5242           0 : }
    5243             : 
    5244             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    5245             : #if defined(__clang__)
    5246             : #pragma clang diagnostic push
    5247             : #pragma clang diagnostic ignored "-Wmissing-braces"
    5248             : #endif
    5249             : static const JSFunctionSpec sMethods_specs[] = {
    5250             :   JS_FNSPEC("stepUp", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&stepUp_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5251             :   JS_FNSPEC("stepDown", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&stepDown_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5252             :   JS_FNSPEC("checkValidity", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&checkValidity_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5253             :   JS_FNSPEC("reportValidity", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&reportValidity_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5254             :   JS_FNSPEC("setCustomValidity", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setCustomValidity_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    5255             :   JS_FNSPEC("select", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&select_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5256             :   JS_FNSPEC("setRangeText", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setRangeText_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    5257             :   JS_FNSPEC("setSelectionRange", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setSelectionRange_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
    5258             :   JS_FNSPEC("mozIsTextField", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozIsTextField_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    5259             :   JS_FS_END,
    5260             :   JS_FNSPEC("setUserInput", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setUserInput_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    5261             :   JS_FS_END,
    5262             :   JS_FNSPEC("getFilesAndDirectories", GenericPromiseReturningBindingMethod, reinterpret_cast<const JSJitInfo*>(&getFilesAndDirectories_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5263             :   JS_FNSPEC("getFiles", GenericPromiseReturningBindingMethod, reinterpret_cast<const JSJitInfo*>(&getFiles_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5264             :   JS_FNSPEC("chooseDirectory", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&chooseDirectory_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5265             :   JS_FS_END,
    5266             :   JS_FNSPEC("openDateTimePicker", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&openDateTimePicker_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5267             :   JS_FNSPEC("updateDateTimePicker", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&updateDateTimePicker_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5268             :   JS_FNSPEC("closeDateTimePicker", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&closeDateTimePicker_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5269             :   JS_FNSPEC("setFocusState", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setFocusState_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    5270             :   JS_FNSPEC("updateValidityState", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&updateValidityState_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5271             :   JS_FNSPEC("getStep", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getStep_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5272             :   JS_FNSPEC("getStepBase", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getStepBase_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5273             :   JS_FS_END
    5274             : };
    5275             : #if defined(__clang__)
    5276             : #pragma clang diagnostic pop
    5277             : #endif
    5278             : 
    5279             : static PrefableDisablers sMethods_disablers10 = {
    5280             :   true, false, 0, &IsChromeOrXBL
    5281             : };
    5282             : 
    5283             : static PrefableDisablers sMethods_disablers12 = {
    5284             :   true, false, 0, nullptr
    5285             : };
    5286             : 
    5287             : static PrefableDisablers sMethods_disablers16 = {
    5288             :   true, false, 0, &IsChromeOrXBL
    5289             : };
    5290             : 
    5291             : // Can't be const because the pref-enabled boolean needs to be writable
    5292             : static Prefable<const JSFunctionSpec> sMethods[] = {
    5293             :   { nullptr, &sMethods_specs[0] },
    5294             :   { &sMethods_disablers10, &sMethods_specs[10] },
    5295             :   { &sMethods_disablers12, &sMethods_specs[12] },
    5296             :   { &sMethods_disablers16, &sMethods_specs[16] },
    5297             :   { nullptr, nullptr }
    5298             : };
    5299             : 
    5300             : static_assert(4 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    5301             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    5302             : static_assert(9 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    5303             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    5304             : 
    5305             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    5306             : #if defined(__clang__)
    5307             : #pragma clang diagnostic push
    5308             : #pragma clang diagnostic ignored "-Wmissing-braces"
    5309             : #endif
    5310             : static const JSFunctionSpec sChromeMethods_specs[] = {
    5311             :   JS_FNSPEC("mozGetFileNameArray", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozGetFileNameArray_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5312             :   JS_FNSPEC("mozSetFileNameArray", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozSetFileNameArray_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    5313             :   JS_FNSPEC("mozSetFileArray", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozSetFileArray_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    5314             :   JS_FNSPEC("mozSetDirectory", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozSetDirectory_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    5315             :   JS_FNSPEC("mozSetDndFilesAndDirectories", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&mozSetDndFilesAndDirectories_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    5316             :   JS_FNSPEC("getAutocompleteInfo", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getAutocompleteInfo_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5317             :   JS_FS_END,
    5318             :   JS_FNSPEC("getDateTimeInputBoxValue", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getDateTimeInputBoxValue_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5319             :   JS_FNSPEC("updateDateTimeInputBox", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&updateDateTimeInputBox_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5320             :   JS_FNSPEC("setDateTimePickerState", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&setDateTimePickerState_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    5321             :   JS_FS_END,
    5322             :   JS_FNSPEC("addObserver", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&addObserver_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    5323             :   JS_FNSPEC("removeObserver", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&removeObserver_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    5324             :   JS_FNSPEC("getRequest", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getRequest_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    5325             :   JS_FNSPEC("getRequestType", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getRequestType_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
    5326             :   JS_FNSPEC("forceReload", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&forceReload_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
    5327             :   JS_FNSPEC("forceImageState", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&forceImageState_methodinfo), 2, JSPROP_ENUMERATE, nullptr),
    5328             :   JS_FS_END
    5329             : };
    5330             : #if defined(__clang__)
    5331             : #pragma clang diagnostic pop
    5332             : #endif
    5333             : 
    5334             : static PrefableDisablers sChromeMethods_disablers7 = {
    5335             :   true, false, 0, nullptr
    5336             : };
    5337             : 
    5338             : // Can't be const because the pref-enabled boolean needs to be writable
    5339             : static Prefable<const JSFunctionSpec> sChromeMethods[] = {
    5340             :   { nullptr, &sChromeMethods_specs[0] },
    5341             :   { &sChromeMethods_disablers7, &sChromeMethods_specs[7] },
    5342             :   { nullptr, &sChromeMethods_specs[11] },
    5343             :   { nullptr, nullptr }
    5344             : };
    5345             : 
    5346             : static_assert(3 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    5347             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    5348             : static_assert(6 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    5349             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    5350             : 
    5351             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    5352             : #if defined(__clang__)
    5353             : #pragma clang diagnostic push
    5354             : #pragma clang diagnostic ignored "-Wmissing-braces"
    5355             : #endif
    5356             : static const JSPropertySpec sAttributes_specs[] = {
    5357             :   { "accept", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &accept_getterinfo, GenericBindingSetter, &accept_setterinfo },
    5358             :   { "alt", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &alt_getterinfo, GenericBindingSetter, &alt_setterinfo },
    5359             :   { "autocomplete", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &autocomplete_getterinfo, GenericBindingSetter, &autocomplete_setterinfo },
    5360             :   { "autofocus", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &autofocus_getterinfo, GenericBindingSetter, &autofocus_setterinfo },
    5361             :   { "defaultChecked", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &defaultChecked_getterinfo, GenericBindingSetter, &defaultChecked_setterinfo },
    5362             :   { "checked", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &checked_getterinfo, GenericBindingSetter, &checked_setterinfo },
    5363             :   { "disabled", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &disabled_getterinfo, GenericBindingSetter, &disabled_setterinfo },
    5364             :   { "form", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &form_getterinfo, nullptr, nullptr },
    5365             :   { "files", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &files_getterinfo, nullptr, nullptr },
    5366             :   { "formAction", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &formAction_getterinfo, GenericBindingSetter, &formAction_setterinfo },
    5367             :   { "formEnctype", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &formEnctype_getterinfo, GenericBindingSetter, &formEnctype_setterinfo },
    5368             :   { "formMethod", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &formMethod_getterinfo, GenericBindingSetter, &formMethod_setterinfo },
    5369             :   { "formNoValidate", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &formNoValidate_getterinfo, GenericBindingSetter, &formNoValidate_setterinfo },
    5370             :   { "formTarget", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &formTarget_getterinfo, GenericBindingSetter, &formTarget_setterinfo },
    5371             :   { "height", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &height_getterinfo, GenericBindingSetter, &height_setterinfo },
    5372             :   { "indeterminate", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &indeterminate_getterinfo, GenericBindingSetter, &indeterminate_setterinfo },
    5373             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    5374             :   { "inputMode", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &inputMode_getterinfo, GenericBindingSetter, &inputMode_setterinfo },
    5375             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    5376             :   { "list", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &list_getterinfo, nullptr, nullptr },
    5377             :   { "max", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &max_getterinfo, GenericBindingSetter, &max_setterinfo },
    5378             :   { "maxLength", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &maxLength_getterinfo, GenericBindingSetter, &maxLength_setterinfo },
    5379             :   { "min", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &min_getterinfo, GenericBindingSetter, &min_setterinfo },
    5380             :   { "minLength", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &minLength_getterinfo, GenericBindingSetter, &minLength_setterinfo },
    5381             :   { "multiple", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &multiple_getterinfo, GenericBindingSetter, &multiple_setterinfo },
    5382             :   { "name", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &name_getterinfo, GenericBindingSetter, &name_setterinfo },
    5383             :   { "pattern", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &pattern_getterinfo, GenericBindingSetter, &pattern_setterinfo },
    5384             :   { "placeholder", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &placeholder_getterinfo, GenericBindingSetter, &placeholder_setterinfo },
    5385             :   { "readOnly", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &readOnly_getterinfo, GenericBindingSetter, &readOnly_setterinfo },
    5386             :   { "required", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &required_getterinfo, GenericBindingSetter, &required_setterinfo },
    5387             :   { "size", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &size_getterinfo, GenericBindingSetter, &size_setterinfo },
    5388             :   { "src", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &src_getterinfo, GenericBindingSetter, &src_setterinfo },
    5389             :   { "step", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &step_getterinfo, GenericBindingSetter, &step_setterinfo },
    5390             :   { "type", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &type_getterinfo, GenericBindingSetter, &type_setterinfo },
    5391             :   { "defaultValue", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &defaultValue_getterinfo, GenericBindingSetter, &defaultValue_setterinfo },
    5392             :   { "value", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &value_getterinfo, GenericBindingSetter, &value_setterinfo },
    5393             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    5394             :   { "valueAsDate", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &valueAsDate_getterinfo, GenericBindingSetter, &valueAsDate_setterinfo },
    5395             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    5396             :   { "valueAsNumber", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &valueAsNumber_getterinfo, GenericBindingSetter, &valueAsNumber_setterinfo },
    5397             :   { "width", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &width_getterinfo, GenericBindingSetter, &width_setterinfo },
    5398             :   { "willValidate", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &willValidate_getterinfo, nullptr, nullptr },
    5399             :   { "validity", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &validity_getterinfo, nullptr, nullptr },
    5400             :   { "validationMessage", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &validationMessage_getterinfo, nullptr, nullptr },
    5401             :   { "labels", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &labels_getterinfo, nullptr, nullptr },
    5402             :   { "selectionStart", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &selectionStart_getterinfo, GenericBindingSetter, &selectionStart_setterinfo },
    5403             :   { "selectionEnd", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &selectionEnd_getterinfo, GenericBindingSetter, &selectionEnd_setterinfo },
    5404             :   { "selectionDirection", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &selectionDirection_getterinfo, GenericBindingSetter, &selectionDirection_setterinfo },
    5405             :   { "align", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &align_getterinfo, GenericBindingSetter, &align_setterinfo },
    5406             :   { "useMap", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &useMap_getterinfo, GenericBindingSetter, &useMap_setterinfo },
    5407             :   { "textLength", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &textLength_getterinfo, nullptr, nullptr },
    5408             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    5409             :   { "allowdirs", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &allowdirs_getterinfo, GenericBindingSetter, &allowdirs_setterinfo },
    5410             :   { "isFilesAndDirectoriesSupported", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &isFilesAndDirectoriesSupported_getterinfo, nullptr, nullptr },
    5411             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    5412             :   { "webkitEntries", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &webkitEntries_getterinfo, nullptr, nullptr },
    5413             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr },
    5414             :   { "webkitdirectory", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &webkitdirectory_getterinfo, GenericBindingSetter, &webkitdirectory_setterinfo },
    5415             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
    5416             : };
    5417             : #if defined(__clang__)
    5418             : #pragma clang diagnostic pop
    5419             : #endif
    5420             : 
    5421             : static PrefableDisablers sAttributes_disablers17 = {
    5422             :   true, false, 0, nullptr
    5423             : };
    5424             : 
    5425             : static PrefableDisablers sAttributes_disablers37 = {
    5426             :   true, false, 0, &HTMLInputElement::ValueAsDateEnabled
    5427             : };
    5428             : 
    5429             : static PrefableDisablers sAttributes_disablers52 = {
    5430             :   true, false, 0, nullptr
    5431             : };
    5432             : 
    5433             : static PrefableDisablers sAttributes_disablers55 = {
    5434             :   true, false, 0, nullptr
    5435             : };
    5436             : 
    5437             : static PrefableDisablers sAttributes_disablers57 = {
    5438             :   true, false, 0, nullptr
    5439             : };
    5440             : 
    5441             : // Can't be const because the pref-enabled boolean needs to be writable
    5442             : static Prefable<const JSPropertySpec> sAttributes[] = {
    5443             :   { nullptr, &sAttributes_specs[0] },
    5444             :   { &sAttributes_disablers17, &sAttributes_specs[17] },
    5445             :   { nullptr, &sAttributes_specs[19] },
    5446             :   { &sAttributes_disablers37, &sAttributes_specs[37] },
    5447             :   { nullptr, &sAttributes_specs[39] },
    5448             :   { &sAttributes_disablers52, &sAttributes_specs[52] },
    5449             :   { &sAttributes_disablers55, &sAttributes_specs[55] },
    5450             :   { &sAttributes_disablers57, &sAttributes_specs[57] },
    5451             :   { nullptr, nullptr }
    5452             : };
    5453             : 
    5454             : static_assert(8 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    5455             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    5456             : static_assert(17 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    5457             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    5458             : 
    5459             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    5460             : #if defined(__clang__)
    5461             : #pragma clang diagnostic push
    5462             : #pragma clang diagnostic ignored "-Wmissing-braces"
    5463             : #endif
    5464             : static const JSPropertySpec sChromeAttributes_specs[] = {
    5465             :   { "controllers", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &controllers_getterinfo, nullptr, nullptr },
    5466             :   { "ownerNumberControl", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &ownerNumberControl_getterinfo, nullptr, nullptr },
    5467             :   { "editor", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &editor_getterinfo, nullptr, nullptr },
    5468             :   { "previewValue", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &previewValue_getterinfo, GenericBindingSetter, &previewValue_setterinfo },
    5469             :   { "loadingEnabled", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &loadingEnabled_getterinfo, GenericBindingSetter, &loadingEnabled_setterinfo },
    5470             :   { "imageBlockingStatus", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &imageBlockingStatus_getterinfo, nullptr, nullptr },
    5471             :   { "currentURI", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &currentURI_getterinfo, nullptr, nullptr },
    5472             :   { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
    5473             : };
    5474             : #if defined(__clang__)
    5475             : #pragma clang diagnostic pop
    5476             : #endif
    5477             : 
    5478             : 
    5479             : // Can't be const because the pref-enabled boolean needs to be writable
    5480             : static Prefable<const JSPropertySpec> sChromeAttributes[] = {
    5481             :   { nullptr, &sChromeAttributes_specs[0] },
    5482             :   { nullptr, nullptr }
    5483             : };
    5484             : 
    5485             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    5486             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    5487             : static_assert(7 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    5488             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    5489             : 
    5490             : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
    5491             : #if defined(__clang__)
    5492             : #pragma clang diagnostic push
    5493             : #pragma clang diagnostic ignored "-Wmissing-braces"
    5494             : #endif
    5495             : static const ConstantSpec sChromeConstants_specs[] = {
    5496             :   { "UNKNOWN_REQUEST", JS::Int32Value(-1) },
    5497             :   { "CURRENT_REQUEST", JS::Int32Value(0) },
    5498             :   { "PENDING_REQUEST", JS::Int32Value(1) },
    5499             :   { 0, JS::UndefinedValue() }
    5500             : };
    5501             : #if defined(__clang__)
    5502             : #pragma clang diagnostic pop
    5503             : #endif
    5504             : 
    5505             : 
    5506             : // Can't be const because the pref-enabled boolean needs to be writable
    5507             : static Prefable<const ConstantSpec> sChromeConstants[] = {
    5508             :   { nullptr, &sChromeConstants_specs[0] },
    5509             :   { nullptr, nullptr }
    5510             : };
    5511             : 
    5512             : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
    5513             :     "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
    5514             : static_assert(3 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
    5515             :     "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
    5516             : 
    5517             : 
    5518             : static uint16_t sNativeProperties_sortedPropertyIndices[71];
    5519             : static PropertyInfo sNativeProperties_propertyInfos[71];
    5520             : 
    5521             : static const NativePropertiesN<2> sNativeProperties = {
    5522             :   false, 0,
    5523             :   false, 0,
    5524             :   true,  0 /* sMethods */,
    5525             :   true,  1 /* sAttributes */,
    5526             :   false, 0,
    5527             :   false, 0,
    5528             :   false, 0,
    5529             :   -1,
    5530             :   71,
    5531             :   sNativeProperties_sortedPropertyIndices,
    5532             :   {
    5533             :     { sMethods, &sNativeProperties_propertyInfos[0] },
    5534             :     { sAttributes, &sNativeProperties_propertyInfos[20] }
    5535             :   }
    5536             : };
    5537             : static_assert(71 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
    5538             :     "We have a property info count that is oversized");
    5539             : 
    5540             : static uint16_t sChromeOnlyNativeProperties_sortedPropertyIndices[25];
    5541             : static PropertyInfo sChromeOnlyNativeProperties_propertyInfos[25];
    5542             : 
    5543             : static const NativePropertiesN<3> sChromeOnlyNativeProperties = {
    5544             :   false, 0,
    5545             :   false, 0,
    5546             :   true,  0 /* sChromeMethods */,
    5547             :   true,  1 /* sChromeAttributes */,
    5548             :   false, 0,
    5549             :   false, 0,
    5550             :   true,  2 /* sChromeConstants */,
    5551             :   -1,
    5552             :   25,
    5553             :   sChromeOnlyNativeProperties_sortedPropertyIndices,
    5554             :   {
    5555             :     { sChromeMethods, &sChromeOnlyNativeProperties_propertyInfos[0] },
    5556             :     { sChromeAttributes, &sChromeOnlyNativeProperties_propertyInfos[15] },
    5557             :     { sChromeConstants, &sChromeOnlyNativeProperties_propertyInfos[22] }
    5558             :   }
    5559             : };
    5560             : static_assert(25 < 1ull << CHAR_BIT * sizeof(sChromeOnlyNativeProperties.propertyInfoCount),
    5561             :     "We have a property info count that is oversized");
    5562             : 
    5563             : static bool
    5564           0 : _constructor(JSContext* cx, unsigned argc, JS::Value* vp)
    5565             : {
    5566           0 :   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
    5567           0 :   JS::Rooted<JSObject*> obj(cx, &args.callee());
    5568           0 :   if (!args.isConstructing()) {
    5569             :     // XXXbz wish I could get the name from the callee instead of
    5570             :     // Adding more relocations
    5571           0 :     return ThrowConstructorWithoutNew(cx, "HTMLInputElement");
    5572             :   }
    5573             : 
    5574           0 :   GlobalObject global(cx, obj);
    5575           0 :   if (global.Failed()) {
    5576           0 :     return false;
    5577             :   }
    5578             : 
    5579             :   // The newTarget might be a cross-compartment wrapper. Get the underlying object
    5580             :   // so we can do the spec's object-identity checks.
    5581           0 :   JS::Rooted<JSObject*> newTarget(cx, js::CheckedUnwrap(&args.newTarget().toObject()));
    5582           0 :   if (!newTarget) {
    5583           0 :     return ThrowErrorMessage(cx, MSG_ILLEGAL_CONSTRUCTOR);
    5584             :   }
    5585             : 
    5586             :   // Step 2 of https://html.spec.whatwg.org/multipage/dom.html#htmlconstructor.
    5587             :   // Enter the compartment of our underlying newTarget object, so we end
    5588             :   // up comparing to the constructor object for our interface from that global.
    5589             :   {
    5590           0 :     JSAutoCompartment ac(cx, newTarget);
    5591           0 :     JS::Handle<JSObject*> constructor(GetConstructorObjectHandle(cx));
    5592           0 :     if (!constructor) {
    5593           0 :       return false;
    5594             :     }
    5595           0 :     if (newTarget == constructor) {
    5596           0 :       return ThrowErrorMessage(cx, MSG_ILLEGAL_CONSTRUCTOR);
    5597             :     }
    5598             :   }
    5599             : 
    5600           0 :   JS::Rooted<JSObject*> desiredProto(cx);
    5601           0 :   if (!GetDesiredProto(cx, args, &desiredProto)) {
    5602           0 :     return false;
    5603             :   }
    5604           0 :   if (!desiredProto) {
    5605             :     // Step 7 of https://html.spec.whatwg.org/multipage/dom.html#htmlconstructor.
    5606             :     // This fallback behavior is designed to match analogous behavior for the
    5607             :     // JavaScript built-ins. So we enter the compartment of our underlying
    5608             :     // newTarget object and fall back to the prototype object from that global.
    5609             :     // XXX The spec says to use GetFunctionRealm(), which is not actually
    5610             :     // the same thing as what we have here (e.g. in the case of scripted callable proxies
    5611             :     // whose target is not same-compartment with the proxy, or bound functions, etc).
    5612             :     // https://bugzilla.mozilla.org/show_bug.cgi?id=1317658
    5613             :     {
    5614           0 :       JSAutoCompartment ac(cx, newTarget);
    5615           0 :       desiredProto = GetProtoObjectHandle(cx);
    5616           0 :       if (!desiredProto) {
    5617           0 :           return false;
    5618             :       }
    5619             :     }
    5620             : 
    5621             :     // desiredProto is in the compartment of the underlying newTarget object.
    5622             :     // Wrap it into the context compartment.
    5623           0 :     if (!JS_WrapObject(cx, &desiredProto)) {
    5624           0 :       return false;
    5625             :     }
    5626             :   }
    5627             : 
    5628           0 :   bool objIsXray = xpc::WrapperFactory::IsXrayWrapper(obj);
    5629           0 :   Maybe<JSAutoCompartment> ac;
    5630           0 :   if (objIsXray) {
    5631           0 :     obj = js::CheckedUnwrap(obj);
    5632           0 :     if (!obj) {
    5633           0 :       return false;
    5634             :     }
    5635           0 :     ac.emplace(cx, obj);
    5636           0 :     if (!JS_WrapObject(cx, &desiredProto)) {
    5637           0 :       return false;
    5638             :     }
    5639             :   }
    5640           0 :   binding_detail::FastErrorResult rv;
    5641           0 :   auto result(StrongOrRawPtr<mozilla::dom::HTMLInputElement>(CreateHTMLElement(global, args, rv)));
    5642           0 :   if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
    5643           0 :     return false;
    5644             :   }
    5645           0 :   MOZ_ASSERT(!JS_IsExceptionPending(cx));
    5646             :   static_assert(!IsPointer<decltype(result)>::value,
    5647             :                 "NewObject implies that we need to keep the object alive with a strong reference.");
    5648           0 :   if (!GetOrCreateDOMReflector(cx, result, args.rval(), desiredProto)) {
    5649           0 :     MOZ_ASSERT(true || JS_IsExceptionPending(cx));
    5650           0 :     return false;
    5651             :   }
    5652           0 :   return true;
    5653             : }
    5654             : 
    5655             : static const js::ClassOps sInterfaceObjectClassOps = {
    5656             :     nullptr,               /* addProperty */
    5657             :     nullptr,               /* delProperty */
    5658             :     nullptr,               /* getProperty */
    5659             :     nullptr,               /* setProperty */
    5660             :     nullptr,               /* enumerate */
    5661             :     nullptr,               /* newEnumerate */
    5662             :     nullptr,               /* resolve */
    5663             :     nullptr,               /* mayResolve */
    5664             :     nullptr,               /* finalize */
    5665             :     _constructor, /* call */
    5666             :     nullptr,               /* hasInstance */
    5667             :     _constructor, /* construct */
    5668             :     nullptr,               /* trace */
    5669             : };
    5670             : 
    5671             : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
    5672             :   {
    5673             :     "Function",
    5674             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
    5675             :     &sInterfaceObjectClassOps,
    5676             :     JS_NULL_CLASS_SPEC,
    5677             :     JS_NULL_CLASS_EXT,
    5678             :     &sInterfaceObjectClassObjectOps
    5679             :   },
    5680             :   eInterface,
    5681             :   true,
    5682             :   prototypes::id::HTMLInputElement,
    5683             :   PrototypeTraits<prototypes::id::HTMLInputElement>::Depth,
    5684             :   sNativePropertyHooks,
    5685             :   "function HTMLInputElement() {\n    [native code]\n}",
    5686             :   HTMLElementBinding::GetConstructorObject
    5687             : };
    5688             : 
    5689             : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
    5690             :   {
    5691             :     "HTMLInputElementPrototype",
    5692             :     JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
    5693             :     JS_NULL_CLASS_OPS,
    5694             :     JS_NULL_CLASS_SPEC,
    5695             :     JS_NULL_CLASS_EXT,
    5696             :     JS_NULL_OBJECT_OPS
    5697             :   },
    5698             :   eInterfacePrototype,
    5699             :   false,
    5700             :   prototypes::id::HTMLInputElement,
    5701             :   PrototypeTraits<prototypes::id::HTMLInputElement>::Depth,
    5702             :   sNativePropertyHooks,
    5703             :   "[object HTMLInputElementPrototype]",
    5704             :   HTMLElementBinding::GetProtoObject
    5705             : };
    5706             : 
    5707             : JSObject*
    5708           0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
    5709             : {
    5710           0 :   return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
    5711             : }
    5712             : 
    5713             : static const js::ClassOps sClassOps = {
    5714             :   _addProperty, /* addProperty */
    5715             :   nullptr,               /* delProperty */
    5716             :   nullptr,               /* getProperty */
    5717             :   nullptr,               /* setProperty */
    5718             :   nullptr,               /* enumerate */
    5719             :   nullptr, /* newEnumerate */
    5720             :   nullptr, /* resolve */
    5721             :   nullptr, /* mayResolve */
    5722             :   _finalize, /* finalize */
    5723             :   nullptr, /* call */
    5724             :   nullptr,               /* hasInstance */
    5725             :   nullptr,               /* construct */
    5726             :   nullptr, /* trace */
    5727             : };
    5728             : 
    5729             : static const js::ClassExtension sClassExtension = {
    5730             :   nullptr, /* weakmapKeyDelegateOp */
    5731             :   _objectMoved /* objectMovedOp */
    5732             : };
    5733             : 
    5734             : static const DOMJSClass sClass = {
    5735             :   { "HTMLInputElement",
    5736             :     JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(2),
    5737             :     &sClassOps,
    5738             :     JS_NULL_CLASS_SPEC,
    5739             :     &sClassExtension,
    5740             :     JS_NULL_OBJECT_OPS
    5741             :   },
    5742             :   { prototypes::id::EventTarget, prototypes::id::Node, prototypes::id::Element, prototypes::id::HTMLElement, prototypes::id::HTMLInputElement, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
    5743             :   IsBaseOf<nsISupports, mozilla::dom::HTMLInputElement >::value,
    5744             :   sNativePropertyHooks,
    5745             :   FindAssociatedGlobalForNative<mozilla::dom::HTMLInputElement>::Get,
    5746             :   GetProtoObjectHandle,
    5747             :   GetCCParticipant<mozilla::dom::HTMLInputElement>::Get()
    5748             : };
    5749             : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
    5750             :               "Must have the right minimal number of reserved slots.");
    5751             : static_assert(2 >= 2,
    5752             :               "Must have enough reserved slots.");
    5753             : 
    5754             : const JSClass*
    5755           0 : GetJSClass()
    5756             : {
    5757           0 :   return sClass.ToJSClass();
    5758             : }
    5759             : 
    5760             : bool
    5761           2 : Wrap(JSContext* aCx, mozilla::dom::HTMLInputElement* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
    5762             : {
    5763             :   MOZ_ASSERT(static_cast<mozilla::dom::HTMLInputElement*>(aObject) ==
    5764             :              reinterpret_cast<mozilla::dom::HTMLInputElement*>(aObject),
    5765             :              "Multiple inheritance for mozilla::dom::HTMLInputElement is broken.");
    5766             :   MOZ_ASSERT(static_cast<nsGenericHTMLElement*>(aObject) ==
    5767             :              reinterpret_cast<nsGenericHTMLElement*>(aObject),
    5768             :              "Multiple inheritance for nsGenericHTMLElement is broken.");
    5769             :   MOZ_ASSERT(static_cast<mozilla::dom::Element*>(aObject) ==
    5770             :              reinterpret_cast<mozilla::dom::Element*>(aObject),
    5771             :              "Multiple inheritance for mozilla::dom::Element is broken.");
    5772             :   MOZ_ASSERT(static_cast<nsINode*>(aObject) ==
    5773             :              reinterpret_cast<nsINode*>(aObject),
    5774             :              "Multiple inheritance for nsINode is broken.");
    5775             :   MOZ_ASSERT(static_cast<mozilla::dom::EventTarget*>(aObject) ==
    5776             :              reinterpret_cast<mozilla::dom::EventTarget*>(aObject),
    5777             :              "Multiple inheritance for mozilla::dom::EventTarget is broken.");
    5778           2 :   MOZ_ASSERT(ToSupportsIsCorrect(aObject));
    5779           2 :   MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
    5780           2 :   MOZ_ASSERT(!aCache->GetWrapper(),
    5781             :              "You should probably not be using Wrap() directly; use "
    5782             :              "GetOrCreateDOMReflector instead");
    5783             : 
    5784           2 :   MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
    5785             :              "nsISupports must be on our primary inheritance chain");
    5786             : 
    5787           4 :   JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
    5788           2 :   if (!global) {
    5789           0 :     return false;
    5790             :   }
    5791           2 :   MOZ_ASSERT(JS_IsGlobalObject(global));
    5792           2 :   MOZ_ASSERT(JS::ObjectIsNotGray(global));
    5793             : 
    5794             :   // That might have ended up wrapping us already, due to the wonders
    5795             :   // of XBL.  Check for that, and bail out as needed.
    5796           2 :   aReflector.set(aCache->GetWrapper());
    5797           2 :   if (aReflector) {
    5798             : #ifdef DEBUG
    5799           0 :     binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
    5800             : #endif // DEBUG
    5801           0 :     return true;
    5802             :   }
    5803             : 
    5804           4 :   JSAutoCompartment ac(aCx, global);
    5805           2 :   JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
    5806           2 :   if (!canonicalProto) {
    5807           0 :     return false;
    5808             :   }
    5809           4 :   JS::Rooted<JSObject*> proto(aCx);
    5810           2 :   if (aGivenProto) {
    5811           0 :     proto = aGivenProto;
    5812             :     // Unfortunately, while aGivenProto was in the compartment of aCx
    5813             :     // coming in, we changed compartments to that of "parent" so may need
    5814             :     // to wrap the proto here.
    5815           0 :     if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
    5816           0 :       if (!JS_WrapObject(aCx, &proto)) {
    5817           0 :         return false;
    5818             :       }
    5819             :     }
    5820             :   } else {
    5821           2 :     proto = canonicalProto;
    5822             :   }
    5823             : 
    5824           4 :   BindingJSObjectCreator<mozilla::dom::HTMLInputElement> creator(aCx);
    5825           2 :   creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
    5826           2 :   if (!aReflector) {
    5827           0 :     return false;
    5828             :   }
    5829             : 
    5830           2 :   aCache->SetWrapper(aReflector);
    5831           2 :   creator.InitializationSucceeded();
    5832             : 
    5833           2 :   MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
    5834             :              aCache->GetWrapperPreserveColor() == aReflector);
    5835             :   // If proto != canonicalProto, we have to preserve our wrapper;
    5836             :   // otherwise we won't be able to properly recreate it later, since
    5837             :   // we won't know what proto to use.  Note that we don't check
    5838             :   // aGivenProto here, since it's entirely possible (and even
    5839             :   // somewhat common) to have a non-null aGivenProto which is the
    5840             :   // same as canonicalProto.
    5841           2 :   if (proto != canonicalProto) {
    5842           0 :     PreserveWrapper(aObject);
    5843             :   }
    5844             : 
    5845           2 :   return true;
    5846             : }
    5847             : 
    5848             : // This may allocate too many slots, because we only really need
    5849             : // slots for our non-interface-typed members that we cache.  But
    5850             : // allocating slots only for those would make the slot index
    5851             : // computations much more complicated, so let's do this the simple
    5852             : // way for now.
    5853             : DEFINE_XRAY_EXPANDO_CLASS(static, sXrayExpandoObjectClass, 1);
    5854             : 
    5855             : const NativePropertyHooks sNativePropertyHooks[] = { {
    5856             :   nullptr,
    5857             :   nullptr,
    5858             :   nullptr,
    5859             :   { sNativeProperties.Upcast(), sChromeOnlyNativeProperties.Upcast() },
    5860             :   prototypes::id::HTMLInputElement,
    5861             :   constructors::id::HTMLInputElement,
    5862             :   HTMLElementBinding::sNativePropertyHooks,
    5863             :   &sXrayExpandoObjectClass
    5864             : } };
    5865             : 
    5866             : void
    5867           0 : ClearCachedWebkitEntriesValue(mozilla::dom::HTMLInputElement* aObject)
    5868             : {
    5869             :   JSObject* obj;
    5870           0 :   obj = aObject->GetWrapper();
    5871           0 :   if (!obj) {
    5872           0 :     return;
    5873             :   }
    5874           0 :   js::SetReservedSlot(obj, (DOM_INSTANCE_RESERVED_SLOTS + 0), JS::UndefinedValue());
    5875           0 :   xpc::ClearXrayExpandoSlots(obj, (xpc::JSSLOT_EXPANDO_COUNT + 0));
    5876             : }
    5877             : 
    5878             : void
    5879           1 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
    5880             : {
    5881           1 :   JS::Handle<JSObject*> parentProto(HTMLElementBinding::GetProtoObjectHandle(aCx));
    5882           1 :   if (!parentProto) {
    5883           0 :     return;
    5884             :   }
    5885             : 
    5886           1 :   JS::Handle<JSObject*> constructorProto(HTMLElementBinding::GetConstructorObjectHandle(aCx));
    5887           1 :   if (!constructorProto) {
    5888           0 :     return;
    5889             :   }
    5890             : 
    5891             :   static bool sIdsInited = false;
    5892           1 :   if (!sIdsInited && NS_IsMainThread()) {
    5893           1 :     if (!InitIds(aCx, sNativeProperties.Upcast())) {
    5894           0 :       return;
    5895             :     }
    5896           1 :     if (!InitIds(aCx, sChromeOnlyNativeProperties.Upcast())) {
    5897           0 :       return;
    5898             :     }
    5899           1 :     sIdsInited = true;
    5900             :   }
    5901             : 
    5902             :   static bool sPrefCachesInited = false;
    5903           1 :   if (!sPrefCachesInited && NS_IsMainThread()) {
    5904           1 :     sPrefCachesInited = true;
    5905           1 :     Preferences::AddBoolVarCache(&sMethods[2].disablers->enabled, "dom.input.dirpicker");
    5906           1 :     Preferences::AddBoolVarCache(&sMethods[3].disablers->enabled, "dom.forms.datetime");
    5907           1 :     Preferences::AddBoolVarCache(&sChromeMethods[1].disablers->enabled, "dom.forms.datetime");
    5908           1 :     Preferences::AddBoolVarCache(&sAttributes[1].disablers->enabled, "dom.forms.inputmode");
    5909           1 :     Preferences::AddBoolVarCache(&sAttributes[5].disablers->enabled, "dom.input.dirpicker");
    5910           1 :     Preferences::AddBoolVarCache(&sAttributes[6].disablers->enabled, "dom.webkitBlink.filesystem.enabled");
    5911           1 :     Preferences::AddBoolVarCache(&sAttributes[7].disablers->enabled, "dom.webkitBlink.dirPicker.enabled");
    5912             :   }
    5913             : 
    5914           1 :   JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::HTMLInputElement);
    5915           1 :   JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::HTMLInputElement);
    5916           2 :   dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
    5917             :                               &sPrototypeClass.mBase, protoCache,
    5918             :                               constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
    5919             :                               interfaceCache,
    5920             :                               sNativeProperties.Upcast(),
    5921           1 :                               nsContentUtils::ThreadsafeIsSystemCaller(aCx) ? sChromeOnlyNativeProperties.Upcast() : nullptr,
    5922             :                               "HTMLInputElement", aDefineOnGlobal,
    5923             :                               nullptr,
    5924           1 :                               false);
    5925             : }
    5926             : 
    5927             : JS::Handle<JSObject*>
    5928           2 : GetProtoObjectHandle(JSContext* aCx)
    5929             : {
    5930             :   /* Get the interface prototype object for this class.  This will create the
    5931             :      object as needed. */
    5932           2 :   bool aDefineOnGlobal = true;
    5933             : 
    5934             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
    5935           2 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
    5936           2 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
    5937           0 :     return nullptr;
    5938             :   }
    5939             : 
    5940             :   /* Check to see whether the interface objects are already installed */
    5941           2 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
    5942           2 :   if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::HTMLInputElement)) {
    5943           2 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
    5944           1 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
    5945             :   }
    5946             : 
    5947             :   /*
    5948             :    * The object might _still_ be null, but that's OK.
    5949             :    *
    5950             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
    5951             :    * traced by TraceProtoAndIfaceCache() and its contents are never
    5952             :    * changed after they have been set.
    5953             :    *
    5954             :    * Calling address() avoids the read read barrier that does gray
    5955             :    * unmarking, but it's not possible for the object to be gray here.
    5956             :    */
    5957             : 
    5958           2 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::HTMLInputElement);
    5959           2 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
    5960           2 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
    5961             : }
    5962             : 
    5963             : JS::Handle<JSObject*>
    5964           0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
    5965             : {
    5966             :   /* Get the interface object for this class.  This will create the object as
    5967             :      needed. */
    5968             : 
    5969             :   /* Make sure our global is sane.  Hopefully we can remove this sometime */
    5970           0 :   JSObject* global = JS::CurrentGlobalOrNull(aCx);
    5971           0 :   if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
    5972           0 :     return nullptr;
    5973             :   }
    5974             : 
    5975             :   /* Check to see whether the interface objects are already installed */
    5976           0 :   ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
    5977           0 :   if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::HTMLInputElement)) {
    5978           0 :     JS::Rooted<JSObject*> rootedGlobal(aCx, global);
    5979           0 :     CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
    5980             :   }
    5981             : 
    5982             :   /*
    5983             :    * The object might _still_ be null, but that's OK.
    5984             :    *
    5985             :    * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
    5986             :    * traced by TraceProtoAndIfaceCache() and its contents are never
    5987             :    * changed after they have been set.
    5988             :    *
    5989             :    * Calling address() avoids the read read barrier that does gray
    5990             :    * unmarking, but it's not possible for the object to be gray here.
    5991             :    */
    5992             : 
    5993           0 :   const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::HTMLInputElement);
    5994           0 :   MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
    5995           0 :   return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
    5996             : }
    5997             : 
    5998             : JSObject*
    5999           0 : GetConstructorObject(JSContext* aCx)
    6000             : {
    6001           0 :   return GetConstructorObjectHandle(aCx);
    6002             : }
    6003             : 
    6004             : } // namespace HTMLInputElementBinding
    6005             : 
    6006             : 
    6007             : 
    6008             : } // namespace dom
    6009             : } // namespace mozilla

Generated by: LCOV version 1.13